From 3018fea9d9840875ce00bf7b213ea00722c0e56d Mon Sep 17 00:00:00 2001 From: oxmc Date: Wed, 28 Dec 2022 23:11:36 -0800 Subject: [PATCH] Upload base files from development machine --- .gitignore | 104 + LICENSE | 674 + ad-inventory.json | 10 + ad.js | 152 + bundle-config/css-dev.info | 7 + bundle-config/css-prod.info | 8 + bundle-config/js-dev.info | 8 + bundle-config/js-prod.info | 9 + bundle-config/videojs-dev.info | 2 + bundle-config/videojs-prod.info | 2 + bundle-dev.js | 25 + bundle-prod.js | 25 + bundle.sh | 10 + css/bundle-header.info | 5 + css/videojs-ads.css | 1 + css/videojs-bundle-dev.min.css | 2 + css/videojs-bundle.min.css | 2 + css/videojs-errors.css | 2 + css/videojs-overlay.css | 62 + css/videojs-replay.css | 1 + css/videojs-share.css | 7 + css/videojs-vr.min.css | 1 + css/videojs-watermark.css | 7 + hooverhigh-videojs-player-dev.min.js | 21179 +++++++++++++++++++++++++ hooverhigh-videojs-player.min.js | 265 + js/bundle-header.info | 5 + js/header.info | 5 + js/videojs-bundle-dev.min.js | 21143 ++++++++++++++++++++++++ js/videojs-bundle.min.js | 225 + js/videojs-contrib-ads.min.js | 2 + js/videojs-errors.min.js | 2 + js/videojs-hotkeys.min.js | 2 + js/videojs-overlay.min.js | 2 + js/videojs-replay.min.js | 7 + js/videojs-share.min.js | 7 + js/videojs-vr.min.js | 176 + js/videojs-watermark.min.js | 7 + js/videojs-youtube.js | 801 + js/videojs-youtube.min.js | 1 + js/videojs.min.js | 29 + package-lock.json | 2275 +++ package.json | 31 + player-init-plugin-v2.js | 34 + player-init-plugin.js | 34 + player-init.js | 86 + player.js | 273 + 46 files changed, 47717 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 ad-inventory.json create mode 100644 ad.js create mode 100644 bundle-config/css-dev.info create mode 100644 bundle-config/css-prod.info create mode 100644 bundle-config/js-dev.info create mode 100644 bundle-config/js-prod.info create mode 100644 bundle-config/videojs-dev.info create mode 100644 bundle-config/videojs-prod.info create mode 100644 bundle-dev.js create mode 100644 bundle-prod.js create mode 100644 bundle.sh create mode 100644 css/bundle-header.info create mode 100644 css/videojs-ads.css create mode 100644 css/videojs-bundle-dev.min.css create mode 100644 css/videojs-bundle.min.css create mode 100644 css/videojs-errors.css create mode 100644 css/videojs-overlay.css create mode 100644 css/videojs-replay.css create mode 100644 css/videojs-share.css create mode 100644 css/videojs-vr.min.css create mode 100644 css/videojs-watermark.css create mode 100644 hooverhigh-videojs-player-dev.min.js create mode 100644 hooverhigh-videojs-player.min.js create mode 100644 js/bundle-header.info create mode 100644 js/header.info create mode 100644 js/videojs-bundle-dev.min.js create mode 100644 js/videojs-bundle.min.js create mode 100644 js/videojs-contrib-ads.min.js create mode 100644 js/videojs-errors.min.js create mode 100644 js/videojs-hotkeys.min.js create mode 100644 js/videojs-overlay.min.js create mode 100644 js/videojs-replay.min.js create mode 100644 js/videojs-share.min.js create mode 100644 js/videojs-vr.min.js create mode 100644 js/videojs-watermark.min.js create mode 100644 js/videojs-youtube.js create mode 100644 js/videojs-youtube.min.js create mode 100644 js/videojs.min.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 player-init-plugin-v2.js create mode 100644 player-init-plugin.js create mode 100644 player-init.js create mode 100644 player.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6704566 --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/ad-inventory.json b/ad-inventory.json new file mode 100644 index 0000000..23792e1 --- /dev/null +++ b/ad-inventory.json @@ -0,0 +1,10 @@ +[ + { + "src": "https://cdn.hooverhigh.ml/videos/cat_doing_funny_dance.mp4", + "type": "video/mp4" + }, + { + "src": "https://cdn.hooverhigh.ml/videos/protogen_spinning.mp4", + "type": "video/mp4" + } +] \ No newline at end of file diff --git a/ad.js b/ad.js new file mode 100644 index 0000000..1fb821f --- /dev/null +++ b/ad.js @@ -0,0 +1,152 @@ +/* + * Example ad plugin using the videojs-ads plugin. + * + * For each content video, this plugin plays one preroll and one midroll. + * Ad content is chosen randomly from the URLs listed in inventory.json. + */ +(function(window, document, vjs, undefined) { +"use strict"; + + var registerPlugin = vjs.registerPlugin || vjs.plugin; + + /* + * Register the ad plugin. + * To initialize for a player, call player.exampleAds(). + * + * @param {mixed} options Hash of obtions for the exampleAds plugin. + */ + registerPlugin('exampleAds', function(options){ + + var + + player = this, + + // example plugin state, may have any of these properties: + // - inventory - hypothetical ad inventory, list of URLs to ads + // - lastTime - the last time observed during content playback + // - adPlaying - whether a linear ad is currently playing + // - prerollPlayed - whether we've played a preroll + // - midrollPlayed - whether we've played a midroll + // - postrollPlayed - whether we've played a postroll + state = {}, + + // just like any other video.js plugin, ad plugins can + // accept initialization options + adServerUrl = (options && options.adServerUrl) || "https://hooverhigh.ml/videojs-plugins/ad-inventory.json", + midrollPoint = (options && options.midrollPoint) || 15, + playPreroll = options && options.playPreroll !== undefined ? options.playPreroll : true, + playMidroll = options && options.playMidroll !== undefined ? options.playMidroll : true, + playPostroll = options && options.playPostroll !== undefined ? options.playPostroll : true, + + // asynchronous method for requesting ad inventory + requestAds = function() { + + // reset plugin state + state = {}; + + // fetch ad inventory + // the 'src' parameter is ignored by the example inventory.json flat file, + // but this shows how you might send player information along to the ad server. + var xhr = new XMLHttpRequest(); + xhr.open("GET", adServerUrl + "?src=" + encodeURIComponent(player.currentSrc())); + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + try { + state.inventory = JSON.parse(xhr.responseText); + player.trigger('adsready'); + } catch (err) { + throw new Error('Couldn\'t parse inventory response as JSON'); + } + } + }; + xhr.send(null); + + }, + + // play an ad, given an opportunity + playAd = function() { + + // short-circuit if we don't have any ad inventory to play + if (!state.inventory || state.inventory.length === 0) { + videojs.log('No inventory to play.'); + return; + } + + // tell ads plugin we're ready to play our ad + player.ads.startLinearAdMode(); + state.adPlaying = true; + + // tell videojs to load the ad + var media = state.inventory[Math.floor(Math.random() * state.inventory.length)]; + player.src(media); + player.trigger('ads-ad-started'); + + // when it's finished + player.one('adended', function() { + player.trigger('ads-ad-ended'); + // play your linear ad content, then when it's finished ... + player.ads.endLinearAdMode(); + state.adPlaying = false; + }); + + }; + + // initialize the ads plugin, passing in any relevant options + player.ads(options); + + // request ads right away + requestAds(); + + player.on('adsready', function() { + if (!playPreroll) { + player.trigger('nopreroll'); + } + }); + + // request ad inventory whenever the player gets content to play + player.on('contentchanged', function() { + requestAds(); + }); + + player.on('readyforpostroll', function() { + if (!state.postrollPlayed && playPostroll) { + state.postrollPlayed = true; + playAd(); + } else { + player.trigger('nopostroll'); + } + }); + + // play an ad the first time there's a preroll opportunity + player.on('readyforpreroll', function() { + if (!state.prerollPlayed && playPreroll) { + state.prerollPlayed = true; + playAd(); + } + }); + + // watch for time to pass 15 seconds, then play an ad + // if we haven't played a midroll already + player.on('timeupdate', function(event) { + + if (state.midrollPlayed) { + return; + } + + var currentTime = player.currentTime(), opportunity; + + if ('lastTime' in state) { + opportunity = currentTime > midrollPoint && state.lastTime < midrollPoint; + } + + state.lastTime = currentTime; + if (opportunity && playMidroll) { + state.midrollPlayed = true; + playAd(); + } + + }); + + }); + +})(window, document, videojs); \ No newline at end of file diff --git a/bundle-config/css-dev.info b/bundle-config/css-dev.info new file mode 100644 index 0000000..40f57ab --- /dev/null +++ b/bundle-config/css-dev.info @@ -0,0 +1,7 @@ +// requirecss ../css/videojs-errors.css +// requirecss ../css/videojs-ads.css +// requirecss ../css/videojs-overlay.css +// requirecss ../css/videojs-replay.css +// requirecss ../css/videojs-share.css +// requirecss ../css/videojs-vr.min.css +// requirecss ../css/videojs-watermark.css \ No newline at end of file diff --git a/bundle-config/css-prod.info b/bundle-config/css-prod.info new file mode 100644 index 0000000..7a00c4e --- /dev/null +++ b/bundle-config/css-prod.info @@ -0,0 +1,8 @@ +// requirecss ../css/bundle-header.info +// requirecss ../css/videojs-errors.css +// requirecss ../css/videojs-ads.css +// requirecss ../css/videojs-overlay.css +// requirecss ../css/videojs-replay.css +// requirecss ../css/videojs-share.css +// requirecss ../css/videojs-vr.min.css +// requirecss ../css/videojs-watermark.css \ No newline at end of file diff --git a/bundle-config/js-dev.info b/bundle-config/js-dev.info new file mode 100644 index 0000000..ab76959 --- /dev/null +++ b/bundle-config/js-dev.info @@ -0,0 +1,8 @@ +// requirejs ../js/videojs-errors.min.js +// requirejs ../js/videojs-hotkeys.min.js +// requirejs ../js/videojs-contrib-ads.min.js +// requirejs ../js/videojs-overlay.min.js +// requirejs ../js/videojs-share.min.js +// requirejs ../js/videojs-watermark.min.js +// requirejs ../js/videojs-vr.min.js +// requirejs ../js/videojs-youtube.min.js \ No newline at end of file diff --git a/bundle-config/js-prod.info b/bundle-config/js-prod.info new file mode 100644 index 0000000..fa3027f --- /dev/null +++ b/bundle-config/js-prod.info @@ -0,0 +1,9 @@ +// requirejs ../js/header.info +// requirejs ../js/videojs-errors.min.js +// requirejs ../js/videojs-hotkeys.min.js +// requirejs ../js/videojs-contrib-ads.min.js +// requirejs ../js/videojs-overlay.min.js +// requirejs ../js/videojs-share.min.js +// requirejs ../js/videojs-watermark.min.js +// requirejs ../js/videojs-vr.min.js +// requirejs ../js/videojs-youtube.min.js \ No newline at end of file diff --git a/bundle-config/videojs-dev.info b/bundle-config/videojs-dev.info new file mode 100644 index 0000000..8e4330e --- /dev/null +++ b/bundle-config/videojs-dev.info @@ -0,0 +1,2 @@ +// requirejs ../js/videojs-bundle.min.js +// requirejs ../player-init-plugin-v2.js \ No newline at end of file diff --git a/bundle-config/videojs-prod.info b/bundle-config/videojs-prod.info new file mode 100644 index 0000000..8e4330e --- /dev/null +++ b/bundle-config/videojs-prod.info @@ -0,0 +1,2 @@ +// requirejs ../js/videojs-bundle.min.js +// requirejs ../player-init-plugin-v2.js \ No newline at end of file diff --git a/bundle-dev.js b/bundle-dev.js new file mode 100644 index 0000000..a1207ec --- /dev/null +++ b/bundle-dev.js @@ -0,0 +1,25 @@ +const bundle = require('bundle-js-css'); + +//Bundle CSS: +bundle.css({ + entry : './bundle-config/css-dev.info', + dest : './css/videojs-bundle-dev.min.css', + print : false, + disablebeautify : false +}); + +//Bundle all viedo-js plugins: +bundle.js({ + entry : './bundle-config/js-dev.info', + dest : './js/videojs-bundle-dev.min.js', + print : false, + disablebeautify : false +}); + +//Bundle videojs and player-init into 1 script: +bundle.js({ + entry : './bundle-config/videojs-dev.info', + dest : './hooverhigh-videojs-player-dev.min.js', + print : false, + disablebeautify : false +}); \ No newline at end of file diff --git a/bundle-prod.js b/bundle-prod.js new file mode 100644 index 0000000..b25e920 --- /dev/null +++ b/bundle-prod.js @@ -0,0 +1,25 @@ +const bundle = require('bundle-js-css'); + +//Bundle CSS: +bundle.css({ + entry : './bundle-config/css-prod.info', + dest : './css/videojs-bundle.min.css', + print : false, + disablebeautify : false +}); + +//Bundle all viedo-js plugins: +bundle.js({ + entry : './bundle-config/js-prod.info', + dest : './js/videojs-bundle.min.js', + print : false, + disablebeautify : true +}); + +//Bundle videojs and player-init into 1 script: +bundle.js({ + entry : './bundle-config/videojs-prod.info', + dest : './hooverhigh-videojs-player.min.js', + print : false, + disablebeautify : true +}); \ No newline at end of file diff --git a/bundle.sh b/bundle.sh new file mode 100644 index 0000000..622d3b7 --- /dev/null +++ b/bundle.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +echo "Loading nodejs" +#Enable NVM/NODEJS/NPM +export NVM_DIR=/usr/local/nvm +source /opt/nvm/nvm.sh +cd /hosting/sites/hooverhigh/videojs-plugins +echo "In directory: $(pwd)" +#Start server +node bundle-$1.js diff --git a/css/bundle-header.info b/css/bundle-header.info new file mode 100644 index 0000000..0393393 --- /dev/null +++ b/css/bundle-header.info @@ -0,0 +1,5 @@ +/** + * This css file includes a bundled version of videojs css and videojs plugins css designed for hooverhigh + * HooverHighVideoPlayer 2 + * Copyright oxmc. + */ \ No newline at end of file diff --git a/css/videojs-ads.css b/css/videojs-ads.css new file mode 100644 index 0000000..34675bf --- /dev/null +++ b/css/videojs-ads.css @@ -0,0 +1 @@ +.vjs-ad-playing.vjs-ad-playing .vjs-progress-control{pointer-events:none}.vjs-ad-playing.vjs-ad-playing .vjs-play-progress{background-color:#ffe400}.vjs-ad-loading .vjs-loading-spinner{display:block;visibility:visible}.vjs-ad-playing .vjs-captions-button{display:none}.vjs-ad-playing .vjs-audio-button{display:none}.vjs-ad-loading .vjs-loading-spinner:before,.vjs-ad-loading .vjs-loading-spinner:after{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-ad-loading .vjs-loading-spinner:before{border-top-color:#fff}.vjs-ad-loading .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:0.44s;animation-delay:0.44s}.vjs-ad-loading .vjs-big-play-button,.vjs-ad-loading .vjs-poster,.vjs-ad-content-resuming .vjs-big-play-button,.vjs-ad-content-resuming .vjs-poster{display:none} \ No newline at end of file diff --git a/css/videojs-bundle-dev.min.css b/css/videojs-bundle-dev.min.css new file mode 100644 index 0000000..042b8b0 --- /dev/null +++ b/css/videojs-bundle-dev.min.css @@ -0,0 +1,2 @@ +/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ +.vjs-error-display{color:#fff;display:none;font-family:Helvetica,Arial,sans serif;font-size:16px;line-height:1.428}.vjs-error .vjs-error-display{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:14px}.vjs-errors-dialog{text-align:left;border:1px #999 solid;overflow:hidden;position:absolute;top:2%;bottom:2%;left:5%;right:5%;padding-left:1%;padding-right:1%;background:rgba(24,24,24,.8)}.vjs-errors-details{margin-top:15px}.vjs-errors-message{border:1px #999 solid;background-color:#2c2c2c;overflow:auto;margin-top:15px;padding:15px}.vjs-errors-ok-button-container{display:block;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-ok-button,.vjs-errors-timeout-button-container button{display:block;height:36px;background-color:#000;border:1px #999 solid;border-radius:5px;color:#999;font-size:14px;cursor:pointer}.vjs-errors-ok-button{margin:0 auto;width:80px}.vjs-errors-ok-button:hover,.vjs-errors-timeout-button-container button:hover{border:1px #fff solid;color:#ccc}.vjs-errors-timeout-button-container{display:flex;flex-direction:row;justify-content:center;gap:10px;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-timeout-button-container button{width:120px}.vjs-errors-content-container{overflow:auto;position:absolute;padding-bottom:15px;top:0;left:15px;right:15px;bottom:61px}.vjs-errors-headline{font-size:14px;font-weight:700;padding-right:3em}.vjs-errors-dialog .vjs-control.vjs-close-button{width:3em;height:3em;top:0}.vjs-errors-flashmessage{float:right;font-size:9px;font-style:italic}.vjs-xs.vjs-error-display{font-size:14px;background-color:#000}.vjs-xs.vjs-error-display .vjs-errors-details,.vjs-xs.vjs-error-display .vjs-errors-message{display:none}.vjs-xs .vjs-errors-content-container{top:0}.vjs-xs .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-xs .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}.vjs-xs.vjs-errors-flashmessage{display:none}@media (max-width:600px),(max-height:250px){.vjs-error-display{font-size:14px;background-color:#000}.vjs-error-display .vjs-errors-details,.vjs-error-display .vjs-errors-message,.vjs-errors-flashmessage{display:none}.vjs-error-display .vjs-errors-content-container{top:15px}.vjs-error-display .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-error-display .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}}.vjs-ad-playing.vjs-ad-playing .vjs-progress-control{pointer-events:none}.vjs-ad-playing.vjs-ad-playing .vjs-play-progress{background-color:#ffe400}.vjs-ad-loading .vjs-loading-spinner{display:block;visibility:visible}.vjs-ad-content-resuming .vjs-big-play-button,.vjs-ad-content-resuming .vjs-poster,.vjs-ad-loading .vjs-big-play-button,.vjs-ad-loading .vjs-poster,.vjs-ad-playing .vjs-audio-button,.vjs-ad-playing .vjs-captions-button{display:none}.vjs-ad-loading .vjs-loading-spinner:after,.vjs-ad-loading .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-ad-loading .vjs-loading-spinner:before{border-top-color:#fff}.vjs-ad-loading .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}.video-js .vjs-overlay{color:#fff;position:absolute;text-align:center}.video-js .vjs-overlay-no-background{max-width:33%}.video-js .vjs-overlay-background{background-color:#646464;background-color:rgba(255,255,255,.4);border-radius:3px;padding:10px;width:33%}.video-js .vjs-overlay-top-left{top:5px;left:5px}.video-js .vjs-overlay-top{left:50%;margin-left:-16.5%;top:5px}.video-js .vjs-overlay-top-right{right:5px;top:5px}.video-js .vjs-overlay-right{right:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-bottom-right{bottom:3.5em;right:5px}.video-js .vjs-overlay-bottom{bottom:3.5em;left:50%;margin-left:-16.5%}.video-js .vjs-overlay-bottom-left{bottom:3.5em;left:5px}.video-js .vjs-overlay-center,.video-js .vjs-overlay-left{left:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-center{left:50%;margin-left:-16.5%}.video-js .vjs-no-flex .vjs-overlay-center,.video-js .vjs-no-flex .vjs-overlay-left,.video-js .vjs-no-flex .vjs-overlay-right{margin-top:-15px}.video-js.vjs-replay .vjs-play-control:before{content:""}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-modal-dialog-content{display:flex;align-items:center;padding:0;background-image:linear-gradient(to bottom,rgba(0,0,0,.77),rgba(0,0,0,.75))}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{position:absolute;right:0;top:5px;width:30px;height:30px;color:#fff;cursor:pointer;opacity:.9;transition:opacity .25s ease-out}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:before{content:"×";font-size:20px;line-height:15px}.video-js .vjs-share__btn:hover span,.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:hover{opacity:1}.video-js .vjs-share{display:flex;flex-direction:column;justify-content:space-around;align-items:center;width:100%;height:100%;max-height:400px}.video-js .vjs-share__bottom,.video-js .vjs-share__middle,.video-js .vjs-share__top{display:flex}.video-js .vjs-share__middle,.video-js .vjs-share__top{flex-direction:column;justify-content:space-between}.video-js .vjs-share__middle{padding:0 25px}.video-js .vjs-share__title{align-self:center;font-size:22px;color:#fff}.video-js .vjs-share__subtitle{width:100%;margin:0 auto 12px;font-size:16px;color:#fff;opacity:.7}.video-js .vjs-share__short-link,.video-js .vjs-share__short-link-wrapper{display:block;width:100%;border:0;color:rgba(255,255,255,.65);background-color:#363636;outline:0}.video-js .vjs-share__short-link-wrapper{position:relative;height:40px;margin:0 auto 15px;overflow:hidden;flex-shrink:0}.video-js .vjs-share__short-link{height:100%;padding:0 40px 0 15px}.video-js .vjs-share__btn{position:absolute;right:0;bottom:0;height:40px;width:40px;display:flex;align-items:center;padding:0 11px;border:0;color:#fff;background-color:#2e2e2e;background-size:18px 19px;background-position:center;background-repeat:no-repeat;cursor:pointer;outline:0;transition:width .3s ease-out,padding .3s ease-out}.video-js .vjs-share__btn svg{flex-shrink:0}.video-js .vjs-share__btn span{position:relative;padding-left:10px;opacity:0;transition:opacity .3s ease-out}.video-js .vjs-share__btn:hover{justify-content:center;width:100%;padding:0 40px;background-image:none}.video-js .vjs-share__socials{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;transition:width .3s ease-out,height .3s ease-out}.video-js .vjs-share__social{display:flex;justify-content:center;align-items:center;flex-shrink:0;width:32px;height:32px;margin-right:6px;margin-bottom:6px;cursor:pointer;font-size:8px;transition:transform .3s ease-out,filter .2s ease-out;border:0;outline:0}.video-js .vjs-share__social:hover{filter:brightness(115%)}.video-js .vjs-share__social svg{overflow:visible;max-height:24px}.video-js .vjs-share__social_vk{background-color:#5d7294}.video-js .vjs-share__social_ok{background-color:#ed7c20}.video-js .vjs-share__social_email,.video-js .vjs-share__social_mail{background-color:#134785}.video-js .vjs-share__social_tw{background-color:#76aaeb}.video-js .vjs-share__social_reddit{background-color:#ff4500}.video-js .vjs-share__social_fbFeed{background-color:#475995}.video-js .vjs-share__social_messenger{background-color:#0084ff}.video-js .vjs-share__social_gp{background-color:#d53f35}.video-js .vjs-share__social_linkedin{background-color:#0077b5}.video-js .vjs-share__social_viber{background-color:#766db5}.video-js .vjs-share__social_telegram{background-color:#4bb0e2}.video-js .vjs-share__social_whatsapp{background-color:#78c870}.video-js .vjs-share__bottom{justify-content:center}@media (max-height:220px){.video-js .vjs-share .hidden-xs{display:none}}@media (max-height:350px){.video-js .vjs-share .hidden-sm{display:none}}@media (min-height:400px){.video-js .vjs-share__title{margin-bottom:15px}.video-js .vjs-share__short-link-wrapper{margin-bottom:30px}}@media (min-width:320px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:5px;top:10px}}@media (min-width:660px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:20px;top:20px}.video-js .vjs-share__social{width:40px;height:40px}}.video-js .vjs-big-vr-play-button{width:100px;height:100px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360' viewBox='0 0 360 360'%3E%3Cpath fill='%23FFF' d='M334.883 275.78l-6.374-36.198-6.375-36.2-28.16 23.62-28.164 23.62 25.837 9.41C266.247 296.544 224 320.5 176.25 320.5c-77.47 0-140.5-63.03-140.5-140.5 0-77.472 63.03-140.5 140.5-140.5 53.428 0 99.98 29.978 123.733 73.993l13.304-6.923C287.025 57.76 235.45 24.5 176.25 24.5c-85.743 0-155.5 69.757-155.5 155.5 0 85.742 69.757 155.5 155.5 155.5 54.253 0 102.09-27.94 129.922-70.177l28.71 10.457z'/%3E%3Cpath fill='%23FFF' d='M314.492 175.167c-12.98 0-23.54-10.56-23.54-23.54s10.56-23.54 23.54-23.54c12.98 0 23.54 10.56 23.54 23.54s-10.56 23.54-23.54 23.54zm0-38.08c-8.018 0-14.54 6.522-14.54 14.54s6.522 14.54 14.54 14.54c8.017 0 14.54-6.522 14.54-14.54s-6.523-14.54-14.54-14.54z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M88.76 173.102h9.395c4.74-.042 8.495-1.27 11.268-3.682 2.77-2.412 4.157-5.903 4.157-10.474 0-4.4-1.153-7.817-3.46-10.25-2.307-2.434-5.83-3.65-10.568-3.65-4.147 0-7.554 1.195-10.22 3.585-2.666 2.392-4 5.514-4 9.364H69.908c0-4.74 1.26-9.055 3.776-12.95 2.518-3.892 6.03-6.928 10.537-9.108 4.508-2.18 9.554-3.27 15.14-3.27 9.225 0 16.472 2.318 21.74 6.952 5.27 4.634 7.903 11.077 7.903 19.33 0 4.147-1.323 8.05-3.967 11.71-2.646 3.66-6.062 6.422-10.252 8.284 5.078 1.736 8.94 4.465 11.584 8.19s3.968 8.166 3.968 13.33c0 8.294-2.847 14.895-8.538 19.804s-13.17 7.363-22.438 7.363c-8.887 0-16.166-2.37-21.836-7.11-5.67-4.74-8.506-11.045-8.506-18.916h15.425c0 4.062 1.365 7.363 4.094 9.902 2.73 2.54 6.4 3.81 11.014 3.81 4.782 0 8.55-1.27 11.3-3.81s4.126-6.22 4.126-11.045c0-4.865-1.44-8.61-4.316-11.235-2.878-2.623-7.152-3.936-12.822-3.936H88.76V173.1zM187.598 133.493v12.76h-1.904c-8.633.126-15.53 2.497-20.693 7.108-5.162 4.614-8.23 11.152-9.203 19.615 4.95-5.205 11.277-7.808 18.98-7.808 8.166 0 14.608 2.878 19.328 8.633 4.718 5.755 7.077 13.182 7.077 22.28 0 9.395-2.76 17.002-8.284 22.82-5.52 5.818-12.77 8.73-21.74 8.73-9.226 0-16.705-3.407-22.44-10.222-5.733-6.812-8.6-15.742-8.6-26.787v-5.267c0-16.208 3.945-28.903 11.84-38.086 7.89-9.182 19.242-13.774 34.054-13.774h1.586zM171.03 177.61c-3.386 0-6.485.95-9.3 2.855-2.814 1.904-4.877 4.443-6.188 7.617v4.697c0 6.854 1.438 12.304 4.316 16.345 2.877 4.04 6.602 6.062 11.172 6.062s8.188-1.715 10.854-5.143 4-7.934 4-13.52-1.355-10.135-4.063-13.648c-2.708-3.51-6.304-5.267-10.79-5.267zM271.136 187.447c0 13.29-2.486 23.307-7.46 30.057s-12.535 10.125-22.69 10.125c-9.988 0-17.51-3.292-22.566-9.872-5.058-6.58-7.65-16.323-7.776-29.23V172.53c0-13.287 2.485-23.252 7.458-29.896 4.973-6.643 12.558-9.966 22.757-9.966 10.112 0 17.655 3.237 22.63 9.712 4.97 6.475 7.52 16.166 7.647 29.072v15.995zm-15.425-17.265c0-8.674-1.185-15.033-3.554-19.075-2.37-4.04-6.137-6.062-11.3-6.062-5.035 0-8.738 1.915-11.107 5.745-2.37 3.83-3.62 9.807-3.746 17.932v20.948c0 8.633 1.206 15.064 3.618 19.297s6.2 6.348 11.362 6.348c4.95 0 8.61-1.957 10.98-5.87 2.37-3.915 3.62-10.04 3.746-18.378v-20.885z'/%3E%3C/g%3E%3C/svg%3E");background-size:contain;background-color:rgba(0,0,0,.5)}.video-js .vjs-big-vr-play-button .vjs-icon-placeholder{display:none}:hover.video-js .vjs-big-vr-play-button{-webkit-transition:border-color .4s,outline .4s,background-color .4s;-moz-transition:border-color .4s,outline .4s,background-color .4s;-ms-transition:border-color .4s,outline .4s,background-color .4s;-o-transition:border-color .4s,outline .4s,background-color .4s;transition:border-color .4s,outline .4s,background-color .4s}.video-js .vjs-big-vr-play-button::before{content:""}.video-js canvas{cursor:move}.video-js .vjs-button-vr .vjs-icon-placeholder{height:30px;width:30px;display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI0ZGRkZGRiI+CiAgICA8cGF0aCBkPSJNMjAuNzQgNkgzLjIxQzIuNTUgNiAyIDYuNTcgMiA3LjI4djEwLjQ0YzAgLjcuNTUgMS4yOCAxLjIzIDEuMjhoNC43OWMuNTIgMCAuOTYtLjMzIDEuMTQtLjc5bDEuNC0zLjQ4Yy4yMy0uNTkuNzktMS4wMSAxLjQ0LTEuMDFzMS4yMS40MiAxLjQ1IDEuMDFsMS4zOSAzLjQ4Yy4xOS40Ni42My43OSAxLjExLjc5aDQuNzljLjcxIDAgMS4yNi0uNTcgMS4yNi0xLjI4VjcuMjhjMC0uNy0uNTUtMS4yOC0xLjI2LTEuMjh6TTcuNSAxNC42MmMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTMgMS4xOCAwIDIuMTIuOTYgMi4xMiAyLjEzcy0uOTUgMi4xMi0yLjEyIDIuMTJ6bTkgMGMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTNzMi4xMi45NiAyLjEyIDIuMTMtLjk1IDIuMTItMi4xMiAyLjEyeiIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+Cjwvc3ZnPgo=)no-repeat left center}.video-js.vjs-watermark{display:block}.video-js .vjs-watermark-content{opacity:.99;position:absolute;padding:5px;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js .vjs-watermark-top-right{right:0;top:0}.video-js .vjs-watermark-top-left{left:0;top:0}.video-js .vjs-watermark-bottom-right{right:0;bottom:30px}.video-js .vjs-watermark-bottom-left{left:0;bottom:30px}.video-js.vjs-user-inactive.vjs-playing .vjs-watermark-fade{opacity:0} \ No newline at end of file diff --git a/css/videojs-bundle.min.css b/css/videojs-bundle.min.css new file mode 100644 index 0000000..042b8b0 --- /dev/null +++ b/css/videojs-bundle.min.css @@ -0,0 +1,2 @@ +/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ +.vjs-error-display{color:#fff;display:none;font-family:Helvetica,Arial,sans serif;font-size:16px;line-height:1.428}.vjs-error .vjs-error-display{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:14px}.vjs-errors-dialog{text-align:left;border:1px #999 solid;overflow:hidden;position:absolute;top:2%;bottom:2%;left:5%;right:5%;padding-left:1%;padding-right:1%;background:rgba(24,24,24,.8)}.vjs-errors-details{margin-top:15px}.vjs-errors-message{border:1px #999 solid;background-color:#2c2c2c;overflow:auto;margin-top:15px;padding:15px}.vjs-errors-ok-button-container{display:block;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-ok-button,.vjs-errors-timeout-button-container button{display:block;height:36px;background-color:#000;border:1px #999 solid;border-radius:5px;color:#999;font-size:14px;cursor:pointer}.vjs-errors-ok-button{margin:0 auto;width:80px}.vjs-errors-ok-button:hover,.vjs-errors-timeout-button-container button:hover{border:1px #fff solid;color:#ccc}.vjs-errors-timeout-button-container{display:flex;flex-direction:row;justify-content:center;gap:10px;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-timeout-button-container button{width:120px}.vjs-errors-content-container{overflow:auto;position:absolute;padding-bottom:15px;top:0;left:15px;right:15px;bottom:61px}.vjs-errors-headline{font-size:14px;font-weight:700;padding-right:3em}.vjs-errors-dialog .vjs-control.vjs-close-button{width:3em;height:3em;top:0}.vjs-errors-flashmessage{float:right;font-size:9px;font-style:italic}.vjs-xs.vjs-error-display{font-size:14px;background-color:#000}.vjs-xs.vjs-error-display .vjs-errors-details,.vjs-xs.vjs-error-display .vjs-errors-message{display:none}.vjs-xs .vjs-errors-content-container{top:0}.vjs-xs .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-xs .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}.vjs-xs.vjs-errors-flashmessage{display:none}@media (max-width:600px),(max-height:250px){.vjs-error-display{font-size:14px;background-color:#000}.vjs-error-display .vjs-errors-details,.vjs-error-display .vjs-errors-message,.vjs-errors-flashmessage{display:none}.vjs-error-display .vjs-errors-content-container{top:15px}.vjs-error-display .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-error-display .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}}.vjs-ad-playing.vjs-ad-playing .vjs-progress-control{pointer-events:none}.vjs-ad-playing.vjs-ad-playing .vjs-play-progress{background-color:#ffe400}.vjs-ad-loading .vjs-loading-spinner{display:block;visibility:visible}.vjs-ad-content-resuming .vjs-big-play-button,.vjs-ad-content-resuming .vjs-poster,.vjs-ad-loading .vjs-big-play-button,.vjs-ad-loading .vjs-poster,.vjs-ad-playing .vjs-audio-button,.vjs-ad-playing .vjs-captions-button{display:none}.vjs-ad-loading .vjs-loading-spinner:after,.vjs-ad-loading .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-ad-loading .vjs-loading-spinner:before{border-top-color:#fff}.vjs-ad-loading .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}.video-js .vjs-overlay{color:#fff;position:absolute;text-align:center}.video-js .vjs-overlay-no-background{max-width:33%}.video-js .vjs-overlay-background{background-color:#646464;background-color:rgba(255,255,255,.4);border-radius:3px;padding:10px;width:33%}.video-js .vjs-overlay-top-left{top:5px;left:5px}.video-js .vjs-overlay-top{left:50%;margin-left:-16.5%;top:5px}.video-js .vjs-overlay-top-right{right:5px;top:5px}.video-js .vjs-overlay-right{right:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-bottom-right{bottom:3.5em;right:5px}.video-js .vjs-overlay-bottom{bottom:3.5em;left:50%;margin-left:-16.5%}.video-js .vjs-overlay-bottom-left{bottom:3.5em;left:5px}.video-js .vjs-overlay-center,.video-js .vjs-overlay-left{left:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-center{left:50%;margin-left:-16.5%}.video-js .vjs-no-flex .vjs-overlay-center,.video-js .vjs-no-flex .vjs-overlay-left,.video-js .vjs-no-flex .vjs-overlay-right{margin-top:-15px}.video-js.vjs-replay .vjs-play-control:before{content:""}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-modal-dialog-content{display:flex;align-items:center;padding:0;background-image:linear-gradient(to bottom,rgba(0,0,0,.77),rgba(0,0,0,.75))}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{position:absolute;right:0;top:5px;width:30px;height:30px;color:#fff;cursor:pointer;opacity:.9;transition:opacity .25s ease-out}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:before{content:"×";font-size:20px;line-height:15px}.video-js .vjs-share__btn:hover span,.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:hover{opacity:1}.video-js .vjs-share{display:flex;flex-direction:column;justify-content:space-around;align-items:center;width:100%;height:100%;max-height:400px}.video-js .vjs-share__bottom,.video-js .vjs-share__middle,.video-js .vjs-share__top{display:flex}.video-js .vjs-share__middle,.video-js .vjs-share__top{flex-direction:column;justify-content:space-between}.video-js .vjs-share__middle{padding:0 25px}.video-js .vjs-share__title{align-self:center;font-size:22px;color:#fff}.video-js .vjs-share__subtitle{width:100%;margin:0 auto 12px;font-size:16px;color:#fff;opacity:.7}.video-js .vjs-share__short-link,.video-js .vjs-share__short-link-wrapper{display:block;width:100%;border:0;color:rgba(255,255,255,.65);background-color:#363636;outline:0}.video-js .vjs-share__short-link-wrapper{position:relative;height:40px;margin:0 auto 15px;overflow:hidden;flex-shrink:0}.video-js .vjs-share__short-link{height:100%;padding:0 40px 0 15px}.video-js .vjs-share__btn{position:absolute;right:0;bottom:0;height:40px;width:40px;display:flex;align-items:center;padding:0 11px;border:0;color:#fff;background-color:#2e2e2e;background-size:18px 19px;background-position:center;background-repeat:no-repeat;cursor:pointer;outline:0;transition:width .3s ease-out,padding .3s ease-out}.video-js .vjs-share__btn svg{flex-shrink:0}.video-js .vjs-share__btn span{position:relative;padding-left:10px;opacity:0;transition:opacity .3s ease-out}.video-js .vjs-share__btn:hover{justify-content:center;width:100%;padding:0 40px;background-image:none}.video-js .vjs-share__socials{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;transition:width .3s ease-out,height .3s ease-out}.video-js .vjs-share__social{display:flex;justify-content:center;align-items:center;flex-shrink:0;width:32px;height:32px;margin-right:6px;margin-bottom:6px;cursor:pointer;font-size:8px;transition:transform .3s ease-out,filter .2s ease-out;border:0;outline:0}.video-js .vjs-share__social:hover{filter:brightness(115%)}.video-js .vjs-share__social svg{overflow:visible;max-height:24px}.video-js .vjs-share__social_vk{background-color:#5d7294}.video-js .vjs-share__social_ok{background-color:#ed7c20}.video-js .vjs-share__social_email,.video-js .vjs-share__social_mail{background-color:#134785}.video-js .vjs-share__social_tw{background-color:#76aaeb}.video-js .vjs-share__social_reddit{background-color:#ff4500}.video-js .vjs-share__social_fbFeed{background-color:#475995}.video-js .vjs-share__social_messenger{background-color:#0084ff}.video-js .vjs-share__social_gp{background-color:#d53f35}.video-js .vjs-share__social_linkedin{background-color:#0077b5}.video-js .vjs-share__social_viber{background-color:#766db5}.video-js .vjs-share__social_telegram{background-color:#4bb0e2}.video-js .vjs-share__social_whatsapp{background-color:#78c870}.video-js .vjs-share__bottom{justify-content:center}@media (max-height:220px){.video-js .vjs-share .hidden-xs{display:none}}@media (max-height:350px){.video-js .vjs-share .hidden-sm{display:none}}@media (min-height:400px){.video-js .vjs-share__title{margin-bottom:15px}.video-js .vjs-share__short-link-wrapper{margin-bottom:30px}}@media (min-width:320px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:5px;top:10px}}@media (min-width:660px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:20px;top:20px}.video-js .vjs-share__social{width:40px;height:40px}}.video-js .vjs-big-vr-play-button{width:100px;height:100px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360' viewBox='0 0 360 360'%3E%3Cpath fill='%23FFF' d='M334.883 275.78l-6.374-36.198-6.375-36.2-28.16 23.62-28.164 23.62 25.837 9.41C266.247 296.544 224 320.5 176.25 320.5c-77.47 0-140.5-63.03-140.5-140.5 0-77.472 63.03-140.5 140.5-140.5 53.428 0 99.98 29.978 123.733 73.993l13.304-6.923C287.025 57.76 235.45 24.5 176.25 24.5c-85.743 0-155.5 69.757-155.5 155.5 0 85.742 69.757 155.5 155.5 155.5 54.253 0 102.09-27.94 129.922-70.177l28.71 10.457z'/%3E%3Cpath fill='%23FFF' d='M314.492 175.167c-12.98 0-23.54-10.56-23.54-23.54s10.56-23.54 23.54-23.54c12.98 0 23.54 10.56 23.54 23.54s-10.56 23.54-23.54 23.54zm0-38.08c-8.018 0-14.54 6.522-14.54 14.54s6.522 14.54 14.54 14.54c8.017 0 14.54-6.522 14.54-14.54s-6.523-14.54-14.54-14.54z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M88.76 173.102h9.395c4.74-.042 8.495-1.27 11.268-3.682 2.77-2.412 4.157-5.903 4.157-10.474 0-4.4-1.153-7.817-3.46-10.25-2.307-2.434-5.83-3.65-10.568-3.65-4.147 0-7.554 1.195-10.22 3.585-2.666 2.392-4 5.514-4 9.364H69.908c0-4.74 1.26-9.055 3.776-12.95 2.518-3.892 6.03-6.928 10.537-9.108 4.508-2.18 9.554-3.27 15.14-3.27 9.225 0 16.472 2.318 21.74 6.952 5.27 4.634 7.903 11.077 7.903 19.33 0 4.147-1.323 8.05-3.967 11.71-2.646 3.66-6.062 6.422-10.252 8.284 5.078 1.736 8.94 4.465 11.584 8.19s3.968 8.166 3.968 13.33c0 8.294-2.847 14.895-8.538 19.804s-13.17 7.363-22.438 7.363c-8.887 0-16.166-2.37-21.836-7.11-5.67-4.74-8.506-11.045-8.506-18.916h15.425c0 4.062 1.365 7.363 4.094 9.902 2.73 2.54 6.4 3.81 11.014 3.81 4.782 0 8.55-1.27 11.3-3.81s4.126-6.22 4.126-11.045c0-4.865-1.44-8.61-4.316-11.235-2.878-2.623-7.152-3.936-12.822-3.936H88.76V173.1zM187.598 133.493v12.76h-1.904c-8.633.126-15.53 2.497-20.693 7.108-5.162 4.614-8.23 11.152-9.203 19.615 4.95-5.205 11.277-7.808 18.98-7.808 8.166 0 14.608 2.878 19.328 8.633 4.718 5.755 7.077 13.182 7.077 22.28 0 9.395-2.76 17.002-8.284 22.82-5.52 5.818-12.77 8.73-21.74 8.73-9.226 0-16.705-3.407-22.44-10.222-5.733-6.812-8.6-15.742-8.6-26.787v-5.267c0-16.208 3.945-28.903 11.84-38.086 7.89-9.182 19.242-13.774 34.054-13.774h1.586zM171.03 177.61c-3.386 0-6.485.95-9.3 2.855-2.814 1.904-4.877 4.443-6.188 7.617v4.697c0 6.854 1.438 12.304 4.316 16.345 2.877 4.04 6.602 6.062 11.172 6.062s8.188-1.715 10.854-5.143 4-7.934 4-13.52-1.355-10.135-4.063-13.648c-2.708-3.51-6.304-5.267-10.79-5.267zM271.136 187.447c0 13.29-2.486 23.307-7.46 30.057s-12.535 10.125-22.69 10.125c-9.988 0-17.51-3.292-22.566-9.872-5.058-6.58-7.65-16.323-7.776-29.23V172.53c0-13.287 2.485-23.252 7.458-29.896 4.973-6.643 12.558-9.966 22.757-9.966 10.112 0 17.655 3.237 22.63 9.712 4.97 6.475 7.52 16.166 7.647 29.072v15.995zm-15.425-17.265c0-8.674-1.185-15.033-3.554-19.075-2.37-4.04-6.137-6.062-11.3-6.062-5.035 0-8.738 1.915-11.107 5.745-2.37 3.83-3.62 9.807-3.746 17.932v20.948c0 8.633 1.206 15.064 3.618 19.297s6.2 6.348 11.362 6.348c4.95 0 8.61-1.957 10.98-5.87 2.37-3.915 3.62-10.04 3.746-18.378v-20.885z'/%3E%3C/g%3E%3C/svg%3E");background-size:contain;background-color:rgba(0,0,0,.5)}.video-js .vjs-big-vr-play-button .vjs-icon-placeholder{display:none}:hover.video-js .vjs-big-vr-play-button{-webkit-transition:border-color .4s,outline .4s,background-color .4s;-moz-transition:border-color .4s,outline .4s,background-color .4s;-ms-transition:border-color .4s,outline .4s,background-color .4s;-o-transition:border-color .4s,outline .4s,background-color .4s;transition:border-color .4s,outline .4s,background-color .4s}.video-js .vjs-big-vr-play-button::before{content:""}.video-js canvas{cursor:move}.video-js .vjs-button-vr .vjs-icon-placeholder{height:30px;width:30px;display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI0ZGRkZGRiI+CiAgICA8cGF0aCBkPSJNMjAuNzQgNkgzLjIxQzIuNTUgNiAyIDYuNTcgMiA3LjI4djEwLjQ0YzAgLjcuNTUgMS4yOCAxLjIzIDEuMjhoNC43OWMuNTIgMCAuOTYtLjMzIDEuMTQtLjc5bDEuNC0zLjQ4Yy4yMy0uNTkuNzktMS4wMSAxLjQ0LTEuMDFzMS4yMS40MiAxLjQ1IDEuMDFsMS4zOSAzLjQ4Yy4xOS40Ni42My43OSAxLjExLjc5aDQuNzljLjcxIDAgMS4yNi0uNTcgMS4yNi0xLjI4VjcuMjhjMC0uNy0uNTUtMS4yOC0xLjI2LTEuMjh6TTcuNSAxNC42MmMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTMgMS4xOCAwIDIuMTIuOTYgMi4xMiAyLjEzcy0uOTUgMi4xMi0yLjEyIDIuMTJ6bTkgMGMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTNzMi4xMi45NiAyLjEyIDIuMTMtLjk1IDIuMTItMi4xMiAyLjEyeiIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+Cjwvc3ZnPgo=)no-repeat left center}.video-js.vjs-watermark{display:block}.video-js .vjs-watermark-content{opacity:.99;position:absolute;padding:5px;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js .vjs-watermark-top-right{right:0;top:0}.video-js .vjs-watermark-top-left{left:0;top:0}.video-js .vjs-watermark-bottom-right{right:0;bottom:30px}.video-js .vjs-watermark-bottom-left{left:0;bottom:30px}.video-js.vjs-user-inactive.vjs-playing .vjs-watermark-fade{opacity:0} \ No newline at end of file diff --git a/css/videojs-errors.css b/css/videojs-errors.css new file mode 100644 index 0000000..d8f5592 --- /dev/null +++ b/css/videojs-errors.css @@ -0,0 +1,2 @@ +/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ +.vjs-error-display{color:#fff;display:none;font-family:Helvetica,Arial,sans serif;font-size:16px;line-height:1.428}.vjs-error .vjs-error-display{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:14px}.vjs-errors-dialog{text-align:left;border:1px #999 solid;overflow:hidden;position:absolute;top:2%;bottom:2%;left:5%;right:5%;padding-left:1%;padding-right:1%;background:rgba(24,24,24,.8)}.vjs-errors-details{margin-top:15px}.vjs-errors-message{border:1px #999 solid;background-color:#2c2c2c;overflow:auto;margin-top:15px;padding:15px}.vjs-errors-ok-button-container{display:block;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-ok-button,.vjs-errors-timeout-button-container button{display:block;height:36px;background-color:#000;border:1px #999 solid;border-radius:5px;color:#999;font-size:14px;cursor:pointer}.vjs-errors-ok-button{margin:0 auto;width:80px}.vjs-errors-ok-button:hover,.vjs-errors-timeout-button-container button:hover{border:1px #fff solid;color:#ccc}.vjs-errors-timeout-button-container{display:flex;flex-direction:row;justify-content:center;gap:10px;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-timeout-button-container button{width:120px}.vjs-errors-content-container{overflow:auto;position:absolute;padding-bottom:15px;top:0;left:15px;right:15px;bottom:61px}.vjs-errors-headline{font-size:14px;font-weight:700;padding-right:3em}.vjs-errors-dialog .vjs-control.vjs-close-button{width:3em;height:3em;top:0}.vjs-errors-flashmessage{float:right;font-size:9px;font-style:italic}.vjs-xs.vjs-error-display{font-size:14px;background-color:#000}.vjs-xs.vjs-error-display .vjs-errors-details,.vjs-xs.vjs-error-display .vjs-errors-message{display:none}.vjs-xs .vjs-errors-content-container{top:0}.vjs-xs .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-xs .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}.vjs-xs.vjs-errors-flashmessage{display:none}@media (max-width:600px),(max-height:250px){.vjs-error-display{font-size:14px;background-color:#000}.vjs-error-display .vjs-errors-details,.vjs-error-display .vjs-errors-message,.vjs-errors-flashmessage{display:none}.vjs-error-display .vjs-errors-content-container{top:15px}.vjs-error-display .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-error-display .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}} \ No newline at end of file diff --git a/css/videojs-overlay.css b/css/videojs-overlay.css new file mode 100644 index 0000000..a7a134d --- /dev/null +++ b/css/videojs-overlay.css @@ -0,0 +1,62 @@ +.video-js .vjs-overlay { + color: #fff; + position: absolute; + text-align: center; +} +.video-js .vjs-overlay-no-background { + max-width: 33%; +} +.video-js .vjs-overlay-background { + background-color: #646464; + background-color: rgba(255, 255, 255, 0.4); + border-radius: 3px; + padding: 10px; + width: 33%; +} +.video-js .vjs-overlay-top-left { + top: 5px; + left: 5px; +} +.video-js .vjs-overlay-top { + left: 50%; + margin-left: -16.5%; + top: 5px; +} +.video-js .vjs-overlay-top-right { + right: 5px; + top: 5px; +} +.video-js .vjs-overlay-right { + right: 5px; + top: 50%; + transform: translateY(-50%); +} +.video-js .vjs-overlay-bottom-right { + bottom: 3.5em; + right: 5px; +} +.video-js .vjs-overlay-bottom { + bottom: 3.5em; + left: 50%; + margin-left: -16.5%; +} +.video-js .vjs-overlay-bottom-left { + bottom: 3.5em; + left: 5px; +} +.video-js .vjs-overlay-left { + left: 5px; + top: 50%; + transform: translateY(-50%); +} +.video-js .vjs-overlay-center { + left: 50%; + margin-left: -16.5%; + top: 50%; + transform: translateY(-50%); +} +.video-js .vjs-no-flex .vjs-overlay-left, +.video-js .vjs-no-flex .vjs-overlay-center, +.video-js .vjs-no-flex .vjs-overlay-right { + margin-top: -15px; +} \ No newline at end of file diff --git a/css/videojs-replay.css b/css/videojs-replay.css new file mode 100644 index 0000000..ee93444 --- /dev/null +++ b/css/videojs-replay.css @@ -0,0 +1 @@ +.video-js.vjs-replay .vjs-play-control:before{content:""} \ No newline at end of file diff --git a/css/videojs-share.css b/css/videojs-share.css new file mode 100644 index 0000000..3926974 --- /dev/null +++ b/css/videojs-share.css @@ -0,0 +1,7 @@ +/** + * videojs-share + * @version 3.2.1 + * @copyright 2019 Mikhail Khazov + * @license MIT + */ +.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-modal-dialog-content{display:flex;align-items:center;padding:0;background-image:linear-gradient(to bottom, rgba(0,0,0,0.77), rgba(0,0,0,0.75))}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{position:absolute;right:0;top:5px;width:30px;height:30px;color:#fff;cursor:pointer;opacity:0.9;transition:opacity 0.25s ease-out}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:before{content:'×';font-size:20px;line-height:15px}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:hover{opacity:1}.video-js .vjs-share{display:flex;flex-direction:column;justify-content:space-around;align-items:center;width:100%;height:100%;max-height:400px}.video-js .vjs-share__top,.video-js .vjs-share__middle,.video-js .vjs-share__bottom{display:flex}.video-js .vjs-share__top,.video-js .vjs-share__middle{flex-direction:column;justify-content:space-between}.video-js .vjs-share__middle{padding:0 25px}.video-js .vjs-share__title{align-self:center;font-size:22px;color:#fff}.video-js .vjs-share__subtitle{width:100%;margin:0 auto 12px;font-size:16px;color:#fff;opacity:0.7}.video-js .vjs-share__short-link-wrapper{position:relative;display:block;width:100%;height:40px;margin:0 auto;margin-bottom:15px;border:0;color:rgba(255,255,255,0.65);background-color:#363636;outline:none;overflow:hidden;flex-shrink:0}.video-js .vjs-share__short-link{display:block;width:100%;height:100%;padding:0 40px 0 15px;border:0;color:rgba(255,255,255,0.65);background-color:#363636;outline:none}.video-js .vjs-share__btn{position:absolute;right:0;bottom:0;height:40px;width:40px;display:flex;align-items:center;padding:0 11px;border:0;color:#fff;background-color:#2e2e2e;background-size:18px 19px;background-position:center;background-repeat:no-repeat;cursor:pointer;outline:none;transition:width 0.3s ease-out, padding 0.3s ease-out}.video-js .vjs-share__btn svg{flex-shrink:0}.video-js .vjs-share__btn span{position:relative;padding-left:10px;opacity:0;transition:opacity 0.3s ease-out}.video-js .vjs-share__btn:hover{justify-content:center;width:100%;padding:0 40px;background-image:none}.video-js .vjs-share__btn:hover span{opacity:1}.video-js .vjs-share__socials{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;transition:width 0.3s ease-out, height 0.3s ease-out}.video-js .vjs-share__social{display:flex;justify-content:center;align-items:center;flex-shrink:0;width:32px;height:32px;margin-right:6px;margin-bottom:6px;cursor:pointer;font-size:8px;transition:transform 0.3s ease-out, filter 0.2s ease-out;border:none;outline:none}.video-js .vjs-share__social:hover{filter:brightness(115%)}.video-js .vjs-share__social svg{overflow:visible;max-height:24px}.video-js .vjs-share__social_vk{background-color:#5d7294}.video-js .vjs-share__social_ok{background-color:#ed7c20}.video-js .vjs-share__social_mail,.video-js .vjs-share__social_email{background-color:#134785}.video-js .vjs-share__social_tw{background-color:#76aaeb}.video-js .vjs-share__social_reddit{background-color:#ff4500}.video-js .vjs-share__social_fbFeed{background-color:#475995}.video-js .vjs-share__social_messenger{background-color:#0084ff}.video-js .vjs-share__social_gp{background-color:#d53f35}.video-js .vjs-share__social_linkedin{background-color:#0077b5}.video-js .vjs-share__social_viber{background-color:#766db5}.video-js .vjs-share__social_telegram{background-color:#4bb0e2}.video-js .vjs-share__social_whatsapp{background-color:#78c870}.video-js .vjs-share__bottom{justify-content:center}@media (max-height: 220px){.video-js .vjs-share .hidden-xs{display:none}}@media (max-height: 350px){.video-js .vjs-share .hidden-sm{display:none}}@media (min-height: 400px){.video-js .vjs-share__title{margin-bottom:15px}.video-js .vjs-share__short-link-wrapper{margin-bottom:30px}}@media (min-width: 320px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:5px;top:10px}}@media (min-width: 660px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:20px;top:20px}.video-js .vjs-share__social{width:40px;height:40px}} \ No newline at end of file diff --git a/css/videojs-vr.min.css b/css/videojs-vr.min.css new file mode 100644 index 0000000..f1203e9 --- /dev/null +++ b/css/videojs-vr.min.css @@ -0,0 +1 @@ +.video-js .vjs-big-vr-play-button{width:100px;height:100px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360' viewBox='0 0 360 360'%3E%3Cpath fill='%23FFF' d='M334.883 275.78l-6.374-36.198-6.375-36.2-28.16 23.62-28.164 23.62 25.837 9.41C266.247 296.544 224 320.5 176.25 320.5c-77.47 0-140.5-63.03-140.5-140.5 0-77.472 63.03-140.5 140.5-140.5 53.428 0 99.98 29.978 123.733 73.993l13.304-6.923C287.025 57.76 235.45 24.5 176.25 24.5c-85.743 0-155.5 69.757-155.5 155.5 0 85.742 69.757 155.5 155.5 155.5 54.253 0 102.09-27.94 129.922-70.177l28.71 10.457z'/%3E%3Cpath fill='%23FFF' d='M314.492 175.167c-12.98 0-23.54-10.56-23.54-23.54s10.56-23.54 23.54-23.54c12.98 0 23.54 10.56 23.54 23.54s-10.56 23.54-23.54 23.54zm0-38.08c-8.018 0-14.54 6.522-14.54 14.54s6.522 14.54 14.54 14.54c8.017 0 14.54-6.522 14.54-14.54s-6.523-14.54-14.54-14.54z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M88.76 173.102h9.395c4.74-.042 8.495-1.27 11.268-3.682 2.77-2.412 4.157-5.903 4.157-10.474 0-4.4-1.153-7.817-3.46-10.25-2.307-2.434-5.83-3.65-10.568-3.65-4.147 0-7.554 1.195-10.22 3.585-2.666 2.392-4 5.514-4 9.364H69.908c0-4.74 1.26-9.055 3.776-12.95 2.518-3.892 6.03-6.928 10.537-9.108 4.508-2.18 9.554-3.27 15.14-3.27 9.225 0 16.472 2.318 21.74 6.952 5.27 4.634 7.903 11.077 7.903 19.33 0 4.147-1.323 8.05-3.967 11.71-2.646 3.66-6.062 6.422-10.252 8.284 5.078 1.736 8.94 4.465 11.584 8.19s3.968 8.166 3.968 13.33c0 8.294-2.847 14.895-8.538 19.804s-13.17 7.363-22.438 7.363c-8.887 0-16.166-2.37-21.836-7.11-5.67-4.74-8.506-11.045-8.506-18.916h15.425c0 4.062 1.365 7.363 4.094 9.902 2.73 2.54 6.4 3.81 11.014 3.81 4.782 0 8.55-1.27 11.3-3.81s4.126-6.22 4.126-11.045c0-4.865-1.44-8.61-4.316-11.235-2.878-2.623-7.152-3.936-12.822-3.936H88.76V173.1zM187.598 133.493v12.76h-1.904c-8.633.126-15.53 2.497-20.693 7.108-5.162 4.614-8.23 11.152-9.203 19.615 4.95-5.205 11.277-7.808 18.98-7.808 8.166 0 14.608 2.878 19.328 8.633 4.718 5.755 7.077 13.182 7.077 22.28 0 9.395-2.76 17.002-8.284 22.82-5.52 5.818-12.77 8.73-21.74 8.73-9.226 0-16.705-3.407-22.44-10.222-5.733-6.812-8.6-15.742-8.6-26.787v-5.267c0-16.208 3.945-28.903 11.84-38.086 7.89-9.182 19.242-13.774 34.054-13.774h1.586zM171.03 177.61c-3.386 0-6.485.95-9.3 2.855-2.814 1.904-4.877 4.443-6.188 7.617v4.697c0 6.854 1.438 12.304 4.316 16.345 2.877 4.04 6.602 6.062 11.172 6.062s8.188-1.715 10.854-5.143 4-7.934 4-13.52-1.355-10.135-4.063-13.648c-2.708-3.51-6.304-5.267-10.79-5.267zM271.136 187.447c0 13.29-2.486 23.307-7.46 30.057s-12.535 10.125-22.69 10.125c-9.988 0-17.51-3.292-22.566-9.872-5.058-6.58-7.65-16.323-7.776-29.23V172.53c0-13.287 2.485-23.252 7.458-29.896 4.973-6.643 12.558-9.966 22.757-9.966 10.112 0 17.655 3.237 22.63 9.712 4.97 6.475 7.52 16.166 7.647 29.072v15.995zm-15.425-17.265c0-8.674-1.185-15.033-3.554-19.075-2.37-4.04-6.137-6.062-11.3-6.062-5.035 0-8.738 1.915-11.107 5.745-2.37 3.83-3.62 9.807-3.746 17.932v20.948c0 8.633 1.206 15.064 3.618 19.297s6.2 6.348 11.362 6.348c4.95 0 8.61-1.957 10.98-5.87 2.37-3.915 3.62-10.04 3.746-18.378v-20.885z'/%3E%3C/g%3E%3C/svg%3E");background-size:contain;background-color:rgba(0,0,0,0.5)}.video-js .vjs-big-vr-play-button .vjs-icon-placeholder{display:none}:hover.video-js .vjs-big-vr-play-button{-webkit-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;-moz-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;-ms-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;-o-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;transition:border-color 0.4s,outline 0.4s,background-color 0.4s}.video-js .vjs-big-vr-play-button::before{content:''}.video-js canvas{cursor:move}.video-js .vjs-button-vr .vjs-icon-placeholder{height:30px;width:30px;display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI0ZGRkZGRiI+CiAgICA8cGF0aCBkPSJNMjAuNzQgNkgzLjIxQzIuNTUgNiAyIDYuNTcgMiA3LjI4djEwLjQ0YzAgLjcuNTUgMS4yOCAxLjIzIDEuMjhoNC43OWMuNTIgMCAuOTYtLjMzIDEuMTQtLjc5bDEuNC0zLjQ4Yy4yMy0uNTkuNzktMS4wMSAxLjQ0LTEuMDFzMS4yMS40MiAxLjQ1IDEuMDFsMS4zOSAzLjQ4Yy4xOS40Ni42My43OSAxLjExLjc5aDQuNzljLjcxIDAgMS4yNi0uNTcgMS4yNi0xLjI4VjcuMjhjMC0uNy0uNTUtMS4yOC0xLjI2LTEuMjh6TTcuNSAxNC42MmMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTMgMS4xOCAwIDIuMTIuOTYgMi4xMiAyLjEzcy0uOTUgMi4xMi0yLjEyIDIuMTJ6bTkgMGMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTNzMi4xMi45NiAyLjEyIDIuMTMtLjk1IDIuMTItMi4xMiAyLjEyeiIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+Cjwvc3ZnPgo=) no-repeat left center} \ No newline at end of file diff --git a/css/videojs-watermark.css b/css/videojs-watermark.css new file mode 100644 index 0000000..70f66e4 --- /dev/null +++ b/css/videojs-watermark.css @@ -0,0 +1,7 @@ +/** + * videojs-watermark + * @version 2.0.0 + * @copyright 2017 Brooks Lyrette + * @license Apache-2.0 + */ +.video-js.vjs-watermark{display:block}.video-js .vjs-watermark-content{opacity:0.99;position:absolute;padding:5px;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js .vjs-watermark-top-right{right:0;top:0}.video-js .vjs-watermark-top-left{left:0;top:0}.video-js .vjs-watermark-bottom-right{right:0;bottom:30px}.video-js .vjs-watermark-bottom-left{left:0;bottom:30px}.video-js.vjs-user-inactive.vjs-playing .vjs-watermark-fade{opacity:0} diff --git a/hooverhigh-videojs-player-dev.min.js b/hooverhigh-videojs-player-dev.min.js new file mode 100644 index 0000000..ca742f6 --- /dev/null +++ b/hooverhigh-videojs-player-dev.min.js @@ -0,0 +1,21179 @@ +/** + * This script includes a bundle of videojs plugins designed for hooverhigh + * HooverHighVideoPlayer 2 + * Copyright oxmc. + */ +/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ +! function(e, o) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = o(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], o) : (e = "undefined" != typeof globalThis ? globalThis : e || self).videojsErrors = o(e.videojs) +}(this, (function(e) { + "use strict"; + + function o(e) { + return e && "object" == typeof e && "default" in e ? e : { + default: e + } + } + var t = o(e), + i = "6.0.0"; + const n = t.default.getComponent("Flash"), + r = !t.default.browser.IS_IPHONE, + s = t.default.registerPlugin || t.default.plugin, + d = { + header: "", + code: "", + message: "", + timeout: 45e3, + backgroundTimeout: 3e5, + dismiss: r, + errors: { + 1: { + type: "MEDIA_ERR_ABORTED", + headline: "The video download was cancelled" + }, + 2: { + type: "MEDIA_ERR_NETWORK", + headline: "The video connection was lost, please confirm you are connected to the internet" + }, + 3: { + type: "MEDIA_ERR_DECODE", + headline: "The video is bad or in a format that cannot be played on your browser" + }, + 4: { + type: "MEDIA_ERR_SRC_NOT_SUPPORTED", + headline: "This video is either unavailable or not supported in this browser" + }, + 5: { + type: "MEDIA_ERR_ENCRYPTED", + headline: "The video you are trying to watch is encrypted and we do not know how to decrypt it" + }, + unknown: { + type: "MEDIA_ERR_UNKNOWN", + headline: "An unanticipated problem was encountered, check back soon and try again" + }, + "-1": { + type: "PLAYER_ERR_NO_SRC", + headline: "No video has been loaded" + }, + "-2": { + type: "PLAYER_ERR_TIMEOUT", + headline: "It looks like you're having playback issues. Reloading the video may help." + }, + PLAYER_ERR_DOMAIN_RESTRICTED: { + headline: "This video is restricted from playing on your current domain" + }, + PLAYER_ERR_IP_RESTRICTED: { + headline: "This video is restricted at your current IP address" + }, + PLAYER_ERR_GEO_RESTRICTED: { + headline: "This video is restricted from playing in your current geographic region" + }, + FLASHLS_ERR_CROSS_DOMAIN: { + headline: "The video could not be loaded: crossdomain access denied." + } + } + }, + a = function(e, o) { + let r, s, l; + const c = [], + u = function(e) { + o.errors = t.default.mergeOptions(o.errors, e), Object.keys(o.errors).forEach((e => { + const t = o.errors[e]; + t.type || (t.type = e) + })) + }; + u(); + const f = function() { + e.error() && -2 === e.error().code && e.error(null), e.clearTimeout(s), e.clearTimeout(r), l && (l = !1, e.removeClass("vjs-waiting")); + const t = [1 / 0, -1], + i = (e, o) => -1 !== e.indexOf(o); + "hidden" === document.visibilityState && (e.muted() || i(t, o.backgroundTimeout)) || "visible" === document.visibilityState && i(t, o.timeout) || (s = e.setTimeout((function() { + e.error() || e.paused() || e.ended() || (l = !0, e.addClass("vjs-waiting")) + }), 1e3), r = e.setTimeout((function() { + e.error() || e.paused() || e.ended() || e.error({ + code: -2, + type: "PLAYER_ERR_TIMEOUT" + }) + }), "hidden" === document.visibilityState ? o.backgroundTimeout : o.timeout)) + }, + h = function() { + let o; + for (; c.length;) o = c.shift(), e.off(o[0], o[1]); + e.clearTimeout(r), e.clearTimeout(s) + }, + p = function() { + let o = 0; + h(), f(), + function(o, t) { + const i = function() { + if (!e.error()) { + const o = e.$(".vjs-tech"); + if (o && "application/x-shockwave-flash" === o.type && !o.vjs_getProperty) return void e.error({ + code: -2, + type: "PLAYER_ERR_TIMEOUT" + }); + if (e.paused()) return f(); + if (e.ended()) return f() + } + t.call(this) + }; + e.on(o, i), c.push([o, i]) + }(["timeupdate", "adtimeupdate"], (function() { + const t = e.currentTime(); + t !== o && (o = t, f()) + })), e.off(document, "visibilitychange", p), e.on(document, "visibilitychange", p) + }, + m = function() { + e.currentSrc() || e.error({ + code: -1, + type: "PLAYER_ERR_NO_SRC" + }) + }, + v = function() { + let i = "", + r = e.error(); + const s = document.createElement("div"); + let d = ""; + if (!r) return; + if (e.off(document, "visibilitychange", p), r = t.default.mergeOptions(r, o.errors[r.code || r.type || 0]), r.message && (i = `
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`), 4 === r.code && n && !n.isSupported()) { + i += `${e.localize("If you are using an older browser please try upgrading or installing Flash.")}` + } + const a = e.getChild("errorDisplay"); + s.className = "vjs-errors-dialog"; + const l = `
${this.localize("Error Code")}: ${r.type||r.code}
`, + c = -2 === r.code; + d = `
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`; + const u = a.closeable(!("dismiss" in r) || r.dismiss); + if (c) { + d += `
\n \n \n
`, s.innerHTML = d, a.fillWith(s), a.getChild("closeButton").hide(); + const o = a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"), + t = a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child"); + e.on(o, "click", (function() { + const o = e.currentSource(); + e.reset(), e.src(o) + })), e.on(t, "click", (function() { + a.close() + })), a.one("modalclose", (() => { + e.off(o), e.off(t) + })) + } else if (u) { + d += `
\n \n
`, s.innerHTML = d, a.fillWith(s), a.contentEl().firstChild.appendChild(a.getChild("closeButton").el()); + const o = a.el().querySelector(".vjs-errors-ok-button"); + e.on(o, "click", (function() { + a.close() + })) + } else s.innerHTML = d, a.fillWith(s); + (e.currentWidth() <= 600 || e.currentHeight() <= 250) && a.addClass("vjs-xs"), a.one("modalclose", (() => e.error(null))) + }, + y = function() { + h(), e.removeClass("vjs-errors"), e.off("play", p), e.off(document, "visibilitychange", p), e.off("play", m), e.off("dispose", y), e.off(["aderror", "error"], v) + }, + R = function(o) { + y(), a(e, t.default.mergeOptions(d, o)) + }; + R.extend = e => u(e), R.getAll = () => t.default.mergeOptions(o.errors), R.timeout = function(t) { + if (void 0 === t) return o.timeout; + t !== o.timeout && (o.timeout = t, e.paused() || p()) + }, R.backgroundTimeout = function(t) { + if (void 0 === t) return o.backgroundTimeout; + t !== o.backgroundTimeout && (o.backgroundTimeout = t, e.paused() || p()) + }, R.disableProgress = () => {}, e.on("play", p), e.on("play", m), e.on("dispose", y), e.on(["aderror", "contenterror", "error"], v), e.ready((() => { + e.addClass("vjs-errors") + })), e.paused() || p(), R.VERSION = i, e.errors = R + }, + l = function(e) { + a(this, t.default.mergeOptions(d, e)) + }; + return ["extend", "getAll"].forEach((e => { + l[e] = function() { + t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`) + } + })), l.VERSION = i, s("errors", l), l +})); +/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ +! function(e, t) { + if ("undefined" != typeof window && window.videojs) t(window.videojs); + else if ("function" == typeof define && define.amd) define("videojs-hotkeys", ["video.js"], function(e) { + return t(e.default || e) + }); + else if ("undefined" != typeof module && module.exports) { + var n = require("video.js"); + module.exports = t(n.default || n) + } +}(0, function(x) { + "use strict"; + "undefined" != typeof window && (window.videojs_hotkeys = { + version: "0.2.28" + }); + (x.registerPlugin || x.plugin)("hotkeys", function(m) { + var f = this, + y = f.el(), + v = document, + e = { + volumeStep: .1, + seekStep: 5, + enableMute: !0, + enableVolumeScroll: !0, + enableHoverScroll: !1, + enableFullscreen: !0, + enableNumbers: !0, + enableJogStyle: !1, + alwaysCaptureHotkeys: !1, + captureDocumentHotkeys: !1, + documentHotkeysFocusElementFilter: function() { + return !1 + }, + enableModifiersForNumbers: !0, + enableInactiveFocus: !0, + skipInitialFocus: !1, + playPauseKey: function(e) { + return 32 === e.which || 179 === e.which + }, + rewindKey: function(e) { + return 37 === e.which || 177 === e.which + }, + forwardKey: function(e) { + return 39 === e.which || 176 === e.which + }, + volumeUpKey: function(e) { + return 38 === e.which + }, + volumeDownKey: function(e) { + return 40 === e.which + }, + muteKey: function(e) { + return 77 === e.which + }, + fullscreenKey: function(e) { + return 70 === e.which + }, + customKeys: {} + }, + t = x.mergeOptions || x.util.mergeOptions, + d = (m = t(e, m || {})).volumeStep, + n = m.seekStep, + p = m.enableMute, + o = m.enableVolumeScroll, + r = m.enableHoverScroll, + b = m.enableFullscreen, + h = m.enableNumbers, + w = m.enableJogStyle, + k = m.alwaysCaptureHotkeys, + S = m.captureDocumentHotkeys, + K = m.documentHotkeysFocusElementFilter, + F = m.enableModifiersForNumbers, + u = m.enableInactiveFocus, + l = m.skipInitialFocus, + i = x.VERSION; + y.hasAttribute("tabIndex") || y.setAttribute("tabIndex", "-1"), y.style.outline = "none", !k && f.autoplay() || l || f.one("play", function() { + y.focus() + }), u && f.on("userinactive", function() { + var n = function() { + clearTimeout(e) + }, + e = setTimeout(function() { + f.off("useractive", n); + var e = v.activeElement, + t = y.querySelector(".vjs-control-bar"); + e && e.parentElement == t && y.focus() + }, 10); + f.one("useractive", n) + }), f.on("play", function() { + var e = y.querySelector(".iframeblocker"); + e && "" === e.style.display && (e.style.display = "block", e.style.bottom = "39px") + }); + var c = function(e) { + var t, n, o = e.which, + r = e.preventDefault.bind(e), + u = f.duration(); + if (f.controls()) { + var l = v.activeElement; + if (k || S && K(l) || l == y || l == y.querySelector(".vjs-tech") || l == y.querySelector(".vjs-control-bar") || l == y.querySelector(".iframeblocker")) switch (j(e, f)) { + case 1: + r(), (k || S) && e.stopPropagation(), f.paused() ? E(f.play()) : f.pause(); + break; + case 2: + t = !f.paused(), r(), t && f.pause(), (n = f.currentTime() - T(e)) <= 0 && (n = 0), f.currentTime(n), t && E(f.play()); + break; + case 3: + t = !f.paused(), r(), t && f.pause(), u <= (n = f.currentTime() + T(e)) && (n = t ? u - .001 : u), f.currentTime(n), t && E(f.play()); + break; + case 5: + r(), w ? (n = f.currentTime() - 1, f.currentTime() <= 1 && (n = 0), f.currentTime(n)) : f.volume(f.volume() - d); + break; + case 4: + r(), w ? (u <= (n = f.currentTime() + 1) && (n = u), f.currentTime(n)) : f.volume(f.volume() + d); + break; + case 6: + p && f.muted(!f.muted()); + break; + case 7: + b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()); + break; + default: + if ((47 < o && o < 59 || 95 < o && o < 106) && (F || !(e.metaKey || e.ctrlKey || e.altKey)) && h) { + var i = 48; + 95 < o && (i = 96); + var c = o - i; + r(), f.currentTime(f.duration() * c * .1) + } + for (var a in m.customKeys) { + var s = m.customKeys[a]; + s && s.key && s.handler && s.key(e) && (r(), s.handler(f, m, e)) + } + } + } + }, + a = !1, + s = y.querySelector(".vjs-volume-menu-button") || y.querySelector(".vjs-volume-panel"); + null != s && (s.onmouseover = function() { + a = !0 + }, s.onmouseout = function() { + a = !1 + }); + var q = function(e) { + if (r) var t = 0; + else t = v.activeElement; + if (f.controls() && (k || t == y || t == y.querySelector(".vjs-tech") || t == y.querySelector(".iframeblocker") || t == y.querySelector(".vjs-control-bar") || a) && o) { + e = window.event || e; + var n = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail)); + e.preventDefault(), 1 == n ? f.volume(f.volume() + d) : -1 == n && f.volume(f.volume() - d) + } + }, + j = function(e, t) { + return m.playPauseKey(e, t) ? 1 : m.rewindKey(e, t) ? 2 : m.forwardKey(e, t) ? 3 : m.volumeUpKey(e, t) ? 4 : m.volumeDownKey(e, t) ? 5 : m.muteKey(e, t) ? 6 : m.fullscreenKey(e, t) ? 7 : void 0 + }; + + function T(e) { + return "function" == typeof n ? n(e) : n + } + + function E(e) { + null != e && "function" == typeof e.then && e.then(null, function(e) {}) + } + if (S) { + var g = function(e) { + c(e) + }; + document.addEventListener("keydown", g), this.dispose = function() { + document.removeEventListener("keydown", g) + } + } else f.on("keydown", c); + return f.on("dblclick", function(e) { + if (null != i && i <= "7.1.0" && f.controls()) { + var t = e.relatedTarget || e.toElement || v.activeElement; + t != y && t != y.querySelector(".vjs-tech") && t != y.querySelector(".iframeblocker") || b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()) + } + }), f.on("mousewheel", q), f.on("DOMMouseScroll", q), this + }) +}); +/*! @name videojs-contrib-ads @version 6.9.0 @license Apache-2.0 */ +! function(e, t) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("video.js"), require("global/window"), require("global/document")) : "function" == typeof define && define.amd ? define(["video.js", "global/window", "global/document"], t) : (e = e || self).videojsContribAds = t(e.videojs, e.window, e.document) +}(this, function(e, t, n) { + "use strict"; + e = e && e.hasOwnProperty("default") ? e.default : e, t = t && t.hasOwnProperty("default") ? t.default : t, n = n && n.hasOwnProperty("default") ? n.default : n; + var a = "6.9.0"; + var o = function(e, t) { + t.isImmediatePropagationStopped = function() { + return !0 + }, t.cancelBubble = !0, t.isPropagationStopped = function() { + return !0 + } + }, + r = function(e, t, n) { + o(0, n), e.trigger({ + type: t + n.type, + originalEvent: n + }) + }, + i = function(e, t) { + e.ads.isInAdMode() && (e.ads.isContentResuming() ? e.ads._contentEnding && r(e, "content", t) : r(e, "ad", t)) + }, + s = function(e, t) { + e.ads.isInAdMode() ? e.ads.isContentResuming() ? (o(0, t), e.trigger("resumeended")) : r(e, "ad", t) : e.ads._contentHasEnded || e.ads.stitchedAds() || (r(e, "content", t), e.trigger("readyforpostroll")) + }, + d = function(e, t) { + if (!("loadstart" === t.type && !e.ads._hasThereBeenALoadStartDuringPlayerLife || "loadeddata" === t.type && !e.ads._hasThereBeenALoadedData || "loadedmetadata" === t.type && !e.ads._hasThereBeenALoadedMetaData)) + if (e.ads.inAdBreak()) r(e, "ad", t); + else { + if (e.currentSrc() !== e.ads.contentSrc) return; + r(e, "content", t) + } + }, + l = function(e, t) { + e.ads.inAdBreak() ? r(e, "ad", t) : e.ads.isContentResuming() && r(e, "content", t) + }; + + function u(e) { + "playing" === e.type ? i(this, e) : "ended" === e.type ? s(this, e) : "loadstart" === e.type || "loadeddata" === e.type || "loadedmetadata" === e.type ? d(this, e) : "play" === e.type ? l(this, e) : this.ads.isInAdMode() && (this.ads.isContentResuming() ? r(this, "content", e) : r(this, "ad", e)) + } + var c = {}, + f = function() { + ! function(n) { + if (e.dom.isInFrame() && "function" != typeof t.__tcfapi) { + for (var a, o = t, r = {}; o;) { + try { + if (o.frames.__tcfapiLocator) { + a = o; + break + } + } catch (e) {} + if (o === t.top) break; + o = o.parent + } + if (!a) return; + t.__tcfapi = function(e, t, n, o) { + var i = Math.random() + "", + s = { + __tcfapiCall: { + command: e, + parameter: o, + version: t, + callId: i + } + }; + r[i] = n, a.postMessage(s, "*") + }, t.addEventListener("message", function(e) { + var t = {}; + try { + t = "string" == typeof e.data ? JSON.parse(e.data) : e.data + } catch (e) {} + var n = t.__tcfapiReturn; + n && "function" == typeof r[n.callId] && (r[n.callId](n.returnValue, n.success), r[n.callId] = null) + }, !1) + } + }(), "function" == typeof t.__tcfapi && t.__tcfapi("addEventListener", 2, function(e, t) { + t && (c = e) + }) + }, + h = function(e, t) { + return t ? encodeURIComponent(e) : e + }, + p = function(e, t, n) { + if (e && e[n]) + for (var a = e[n], o = Object.keys(a), r = 0; r < o.length; r++) { + t["{mediainfo." + n + "." + o[r] + "}"] = a[o[r]] + } + }; + var g = { + processMetadataTracks: function(e, t) { + for (var n = e.textTracks(), a = function(n) { + "metadata" === n.kind && (e.ads.cueTextTracks.setMetadataTrackMode(n), t(e, n)) + }, o = 0; o < n.length; o++) a(n[o]); + n.addEventListener("addtrack", function(e) { + a(e.track) + }) + }, + setMetadataTrackMode: function(e) {}, + getSupportedAdCue: function(e, t) { + return t + }, + isSupportedAdCue: function(e, t) { + return !0 + }, + getCueId: function(e, t) { + return t.id + } + }, + y = function(e, t) { + return void 0 !== t && e.ads.includedCues[t] + }, + v = function(e, t) { + void 0 !== t && "" !== t && (e.ads.includedCues[t] = !0) + }; + + function m() { + !1 !== this.ads._shouldBlockPlay && (this.paused() || (this.ads.debug("Playback was canceled by cancelContentPlay"), this.pause()), this.ads._cancelledPlay = !0) + } + g.processAdTrack = function(t, n, a, o) { + t.ads.includedCues = {}; + for (var r = 0; r < n.length; r++) { + var i = n[r], + s = this.getSupportedAdCue(t, i); + if (!this.isSupportedAdCue(t, i)) return void e.log.warn("Skipping as this is not a supported ad cue.", i); + var d = this.getCueId(t, i), + l = i.startTime; + if (y(t, d)) return void e.log("Skipping ad already seen with ID " + d); + o && o(t, s, d, l), a(t, s, d, l), v(t, d) + } + }; + var A = {}, + S = e; + A.isMiddlewareMediatorSupported = function() { + return !S.browser.IS_IOS && !S.browser.IS_ANDROID && !!(S.use && S.middleware && S.middleware.TERMINATOR) + }, A.playMiddleware = function(t) { + return { + setSource: function(e, t) { + t(null, e) + }, + callPlay: function() { + if (t.ads && !0 === t.ads._shouldBlockPlay) return t.ads.debug("Using playMiddleware to block content playback"), t.ads._playBlocked = !0, S.middleware.TERMINATOR + }, + play: function(n, a) { + t.ads && t.ads._playBlocked && n ? (t.ads.debug("Play call to Tech was terminated."), t.trigger("play"), t.addClass("vjs-has-started"), t.ads._playBlocked = !1) : a && a.catch && a.catch(function(n) { + "NotAllowedError" !== n.name || e.browser.IS_SAFARI || t.trigger("pause") + }) + } + } + }, A.testHook = function(e) { + S = e + }; + var _ = A.playMiddleware, + P = A.isMiddlewareMediatorSupported, + b = function() { + if (e.getPlugin) return Boolean(e.getPlugin("ads")); + var t = e.getComponent("Player"); + return Boolean(t && t.prototype.ads) + }; + var k = function() { + function e() {} + return e.getState = function(t) { + if (t) return e.states_ && e.states_[t] ? e.states_[t] : void 0 + }, e.registerState = function(t, n) { + if ("string" != typeof t || !t) throw new Error('Illegal state name, "' + t + '"; must be a non-empty string.'); + return e.states_ || (e.states_ = {}), e.states_[t] = n, n + }, e + }(), + C = function() { + function t(e) { + this.player = e + } + t._getName = function() { + return "Anonymous State" + }; + var n = t.prototype; + return n.transitionTo = function(e) { + var t = this.player; + this.cleanup(t); + var n = new e(t); + t.ads._state = n, t.ads.debug(this.constructor._getName() + " -> " + n.constructor._getName()); + for (var a = arguments.length, o = new Array(a > 1 ? a - 1 : 0), r = 1; r < a; r++) o[r - 1] = arguments[r]; + n.init.apply(n, [t].concat(o)) + }, n.init = function() {}, n.cleanup = function() {}, n.onPlay = function() {}, n.onPlaying = function() {}, n.onEnded = function() {}, n.onAdEnded = function() {}, n.onAdsReady = function() { + e.log.warn("Unexpected adsready event") + }, n.onAdsError = function() {}, n.onAdsCanceled = function() {}, n.onAdTimeout = function() {}, n.onAdStarted = function() {}, n.onContentChanged = function() {}, n.onContentResumed = function() {}, n.onReadyForPostroll = function() { + e.log.warn("Unexpected readyforpostroll event") + }, n.onNoPreroll = function() {}, n.onNoPostroll = function() {}, n.startLinearAdMode = function() { + e.log.warn("Unexpected startLinearAdMode invocation (State via " + this.constructor._getName() + ")") + }, n.endLinearAdMode = function() { + e.log.warn("Unexpected endLinearAdMode invocation (State via " + this.constructor._getName() + ")") + }, n.skipLinearAdMode = function() { + e.log.warn("Unexpected skipLinearAdMode invocation (State via " + this.constructor._getName() + ")") + }, n.isAdState = function() { + throw new Error("isAdState unimplemented for " + this.constructor._getName()) + }, n.isWaitingForAdBreak = function() { + return !1 + }, n.isContentResuming = function() { + return !1 + }, n.inAdBreak = function() { + return !1 + }, n.handleEvent = function(e) { + var t = this.player; + "play" === e ? this.onPlay(t) : "adsready" === e ? this.onAdsReady(t) : "adserror" === e ? this.onAdsError(t) : "adscanceled" === e ? this.onAdsCanceled(t) : "adtimeout" === e ? this.onAdTimeout(t) : "ads-ad-started" === e ? this.onAdStarted(t) : "contentchanged" === e ? this.onContentChanged(t) : "contentresumed" === e ? this.onContentResumed(t) : "readyforpostroll" === e ? this.onReadyForPostroll(t) : "playing" === e ? this.onPlaying(t) : "ended" === e ? this.onEnded(t) : "nopreroll" === e ? this.onNoPreroll(t) : "nopostroll" === e ? this.onNoPostroll(t) : "adended" === e && this.onAdEnded(t) + }, t + }(); + + function T(e, t) { + e.prototype = Object.create(t.prototype), e.prototype.constructor = e, e.__proto__ = t + } + k.registerState("State", C); + var w = function(e) { + function t(t) { + var n; + return (n = e.call(this, t) || this).contentResuming = !1, n.waitingForAdBreak = !1, n + } + T(t, e); + var n = t.prototype; + return n.isAdState = function() { + return !0 + }, n.onPlaying = function() { + var e = k.getState("ContentPlayback"); + this.contentResuming && this.transitionTo(e) + }, n.onContentResumed = function() { + var e = k.getState("ContentPlayback"); + this.contentResuming && this.transitionTo(e) + }, n.isWaitingForAdBreak = function() { + return this.waitingForAdBreak + }, n.isContentResuming = function() { + return this.contentResuming + }, n.inAdBreak = function() { + return !0 === this.player.ads._inLinearAdMode + }, t + }(C); + k.registerState("AdState", w); + var R = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e); + var n = t.prototype; + return n.isAdState = function() { + return !1 + }, n.onContentChanged = function(e) { + var t = k.getState("BeforePreroll"), + n = k.getState("Preroll"); + e.ads.debug("Received contentchanged event (ContentState)"), e.paused() ? this.transitionTo(t) : (this.transitionTo(n, !1), e.pause(), e.ads._pausedOnContentupdate = !0) + }, t + }(C); + k.registerState("ContentState", R); + var L, B = function(t) { + function n() { + return t.apply(this, arguments) || this + } + T(n, t), n._getName = function() { + return "AdsDone" + }; + var a = n.prototype; + return a.init = function(e) { + e.ads._contentHasEnded = !0, e.trigger("ended") + }, a.startLinearAdMode = function() { + e.log.warn("Unexpected startLinearAdMode invocation (AdsDone)") + }, n + }(k.getState("ContentState")); + k.registerState("AdsDone", B); + var M = { + start: function(t) { + t.ads.debug("Starting ad break"), t.ads._inLinearAdMode = !0, t.trigger("adstart"), t.ads.shouldTakeSnapshots() && (t.ads.snapshot = function(t) { + var n; + n = e.browser.IS_IOS && t.ads.isLive(t) && t.seekable().length > 0 ? t.currentTime() - t.seekable().end(0) : t.currentTime(); + var a = t.$(".vjs-tech"), + o = t.textTracks ? t.textTracks() : [], + r = [], + i = { + ended: t.ended(), + currentSrc: t.currentSrc(), + sources: t.currentSources(), + src: t.tech_.src(), + currentTime: n, + type: t.currentType() + }; + a && (i.style = a.getAttribute("style")); + for (var s = 0; s < o.length; s++) { + var d = o[s]; + r.push({ + track: d, + mode: d.mode + }), d.mode = "disabled" + } + return i.suppressedTracks = r, i + }(t)), t.ads.shouldPlayContentBehindAd(t) && (t.ads.preAdVolume_ = t.volume(), t.volume(0)), t.addClass("vjs-ad-playing"), t.hasClass("vjs-live") && t.removeClass("vjs-live"), t.ads.removeNativePoster() + }, + end: function(t, n) { + t.ads.debug("Ending ad break"), void 0 === n && (n = function() {}), t.ads.adType = null, t.ads._inLinearAdMode = !1, t.trigger("adend"), t.removeClass("vjs-ad-playing"), t.ads.isLive(t) && t.addClass("vjs-live"), t.ads.shouldTakeSnapshots() ? function(t, n) { + var a = t.ads.snapshot; + if (void 0 === n && (n = function() {}), !0 === t.ads.disableNextSnapshotRestore) return t.ads.disableNextSnapshotRestore = !1, delete t.ads.snapshot, void n(); + var o, r = t.$(".vjs-tech"), + i = 20, + s = a.suppressedTracks, + d = function() { + for (var e = 0; e < s.length; e++)(o = s[e]).track.mode = o.mode + }, + l = function() { + var n; + if (e.browser.IS_IOS && t.ads.isLive(t)) { + if (a.currentTime < 0 && (n = t.seekable().length > 0 ? t.seekable().end(0) + a.currentTime : t.currentTime(), t.currentTime(n)), t.paused()) { + var o = t.play(); + o && o.catch && o.catch(function(t) { + e.log.warn("Play promise rejected in IOS snapshot resume", t) + }) + } + } else if (a.ended) t.currentTime(t.duration()); + else { + t.currentTime(a.currentTime); + var r = t.play(); + r && r.catch && r.catch(function(t) { + e.log.warn("Play promise rejected in snapshot resume", t) + }) + } + t.ads.shouldRemoveAutoplay_ && (t.autoplay(!1), t.ads.shouldRemoveAutoplay_ = !1) + }, + u = function n() { + if (t.off("contentcanplay", n), L && t.clearTimeout(L), (r = t.el().querySelector(".vjs-tech")).readyState > 1) return l(); + if (void 0 === r.seekable) return l(); + if (r.seekable.length > 0) return l(); + if (i--) t.setTimeout(n, 50); + else try { + l() + } catch (t) { + e.log.warn("Failed to resume the content after an advertisement", t) + } + }; + if ("style" in a && r.setAttribute("style", a.style || ""), t.ads.videoElementRecycled()) t.one("resumeended", function() { + delete t.ads.snapshot, n() + }), t.one("contentloadedmetadata", d), e.browser.IS_IOS && !t.autoplay() && (t.autoplay(!0), t.ads.shouldRemoveAutoplay_ = !0), t.src(a.sources), t.one("contentcanplay", u), L = t.setTimeout(u, 2e3); + else { + if (d(), !t.ended()) { + var c = t.play(); + c && c.catch && c.catch(function(t) { + e.log.warn("Play promise rejected in snapshot restore", t) + }) + } + delete t.ads.snapshot, n() + } + }(t, n) : (t.volume(t.ads.preAdVolume_), n()) + } + }, + j = function(t) { + function n() { + return t.apply(this, arguments) || this + } + T(n, t), n._getName = function() { + return "Preroll" + }; + var a = n.prototype; + return a.init = function(e, t, n) { + if (this.waitingForAdBreak = !0, e.addClass("vjs-ad-loading"), n || e.ads.nopreroll_) return this.resumeAfterNoPreroll(e); + var a = e.ads.settings.timeout; + "number" == typeof e.ads.settings.prerollTimeout && (a = e.ads.settings.prerollTimeout), this._timeout = e.setTimeout(function() { + e.trigger("adtimeout") + }, a), t ? this.handleAdsReady() : this.adsReady = !1 + }, a.onAdsReady = function(t) { + t.ads.inAdBreak() ? e.log.warn("Unexpected adsready event (Preroll)") : (t.ads.debug("Received adsready event (Preroll)"), this.handleAdsReady()) + }, a.handleAdsReady = function() { + this.adsReady = !0, this.readyForPreroll() + }, a.afterLoadStart = function(e) { + var t = this.player; + t.ads._hasThereBeenALoadStartDuringPlayerLife ? e() : (t.ads.debug("Waiting for loadstart..."), t.one("loadstart", function() { + t.ads.debug("Received loadstart event"), e() + })) + }, a.noPreroll = function() { + var e = this; + this.afterLoadStart(function() { + e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"), e.resumeAfterNoPreroll(e.player) + }) + }, a.readyForPreroll = function() { + var e = this.player; + this.afterLoadStart(function() { + e.ads.debug("Triggered readyforpreroll event (Preroll)"), e.trigger("readyforpreroll") + }) + }, a.onAdsCanceled = function(e) { + var t = this; + e.ads.debug("adscanceled (Preroll)"), this.afterLoadStart(function() { + t.resumeAfterNoPreroll(e) + }) + }, a.onAdsError = function(t) { + var n = this; + e.log("adserror (Preroll)"), this.inAdBreak() ? t.ads.endLinearAdMode() : this.afterLoadStart(function() { + n.resumeAfterNoPreroll(t) + }) + }, a.startLinearAdMode = function() { + var t = this.player; + !this.adsReady || t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Preroll)") : (this.clearTimeout(t), t.ads.adType = "preroll", this.waitingForAdBreak = !1, M.start(t), t.ads._shouldBlockPlay = !1) + }, a.onAdStarted = function(e) { + e.removeClass("vjs-ad-loading") + }, a.endLinearAdMode = function() { + var e = this.player; + this.inAdBreak() && (e.removeClass("vjs-ad-loading"), e.addClass("vjs-ad-content-resuming"), this.contentResuming = !0, M.end(e)) + }, a.skipLinearAdMode = function() { + var t = this, + n = this.player; + n.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : this.afterLoadStart(function() { + n.trigger("adskip"), n.ads.debug("skipLinearAdMode (Preroll)"), t.resumeAfterNoPreroll(n) + }) + }, a.onAdTimeout = function(e) { + var t = this; + this.afterLoadStart(function() { + e.ads.debug("adtimeout (Preroll)"), t.resumeAfterNoPreroll(e) + }) + }, a.onNoPreroll = function(t) { + t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected nopreroll event (Preroll)") : this.noPreroll() + }, a.resumeAfterNoPreroll = function(e) { + if (this.contentResuming = !0, e.ads._shouldBlockPlay = !1, this.cleanupPartial(e), e.ads._playRequested || e.ads._pausedOnContentupdate) + if (e.paused()) { + e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)"); + var t = e.play(); + t && t.then && t.then(null, function(e) {}) + } else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"), e.trigger("play"), e.trigger("playing") + }, a.cleanup = function(t) { + t.ads._hasThereBeenALoadStartDuringPlayerLife || e.log.warn("Leaving Preroll state before loadstart event can cause issues."), this.cleanupPartial(t) + }, a.cleanupPartial = function(e) { + e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming"), this.clearTimeout(e) + }, a.clearTimeout = function(e) { + e.clearTimeout(this._timeout), this._timeout = null + }, n + }(k.getState("AdState")); + k.registerState("Preroll", j); + var I = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "BeforePreroll" + }; + var n = t.prototype; + return n.init = function(e) { + this.adsReady = !1, this.shouldResumeToContent = !1, e.ads._shouldBlockPlay = !e.ads.settings.allowVjsAutoplay || !e.autoplay() + }, n.onAdsReady = function(e) { + e.ads.debug("Received adsready event (BeforePreroll)"), this.adsReady = !0 + }, n.onPlay = function(e) { + var t = k.getState("Preroll"); + e.ads.debug("Received play event (BeforePreroll)"), this.transitionTo(t, this.adsReady, this.shouldResumeToContent) + }, n.onAdsCanceled = function(e) { + e.ads.debug("adscanceled (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.onAdsError = function() { + this.player.ads.debug("adserror (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.onNoPreroll = function() { + this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.skipLinearAdMode = function() { + var e = this.player; + e.trigger("adskip"), e.ads.debug("skipLinearAdMode (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.onContentChanged = function() { + this.init(this.player) + }, t + }(k.getState("ContentState")); + k.registerState("BeforePreroll", I); + var N = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "Midroll" + }; + var n = t.prototype; + return n.init = function(e) { + e.ads.adType = "midroll", M.start(e), e.addClass("vjs-ad-loading") + }, n.onAdStarted = function(e) { + e.removeClass("vjs-ad-loading") + }, n.endLinearAdMode = function() { + var e = this.player; + this.inAdBreak() && (this.contentResuming = !0, e.addClass("vjs-ad-content-resuming"), e.removeClass("vjs-ad-loading"), M.end(e)) + }, n.onAdsError = function(e) { + this.inAdBreak() && e.ads.endLinearAdMode() + }, n.cleanup = function(e) { + e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming") + }, t + }(k.getState("AdState")); + k.registerState("Midroll", N); + var E = function(t) { + function n() { + return t.apply(this, arguments) || this + } + T(n, t), n._getName = function() { + return "Postroll" + }; + var a = n.prototype; + return a.init = function(e) { + if (this.waitingForAdBreak = !0, e.ads._contentEnding = !0, e.ads.nopostroll_) { + this.resumeContent(e); + var t = k.getState("AdsDone"); + this.transitionTo(t) + } else { + e.addClass("vjs-ad-loading"); + var n = e.ads.settings.timeout; + "number" == typeof e.ads.settings.postrollTimeout && (n = e.ads.settings.postrollTimeout), this._postrollTimeout = e.setTimeout(function() { + e.trigger("adtimeout") + }, n) + } + }, a.startLinearAdMode = function() { + var t = this.player; + t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Postroll)") : (t.ads.adType = "postroll", t.clearTimeout(this._postrollTimeout), this.waitingForAdBreak = !1, M.start(t)) + }, a.onAdStarted = function(e) { + e.removeClass("vjs-ad-loading") + }, a.endLinearAdMode = function() { + var e = this, + t = this.player, + n = k.getState("AdsDone"); + this.inAdBreak() && (t.removeClass("vjs-ad-loading"), this.resumeContent(t), M.end(t, function() { + e.transitionTo(n) + })) + }, a.skipLinearAdMode = function() { + var t = this.player; + t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : (t.ads.debug("Postroll abort (skipLinearAdMode)"), t.trigger("adskip"), this.abort(t)) + }, a.onAdTimeout = function(e) { + e.ads.debug("Postroll abort (adtimeout)"), this.abort(e) + }, a.onAdsError = function(e) { + e.ads.debug("Postroll abort (adserror)"), e.ads.inAdBreak() ? e.ads.endLinearAdMode() : this.abort(e) + }, a.onContentChanged = function(e) { + if (this.isContentResuming()) { + var t = k.getState("BeforePreroll"); + this.transitionTo(t) + } else if (!this.inAdBreak()) { + var n = k.getState("Preroll"); + this.transitionTo(n) + } + }, a.onNoPostroll = function(t) { + this.isContentResuming() || this.inAdBreak() ? e.log.warn("Unexpected nopostroll event (Postroll)") : this.abort(t) + }, a.resumeContent = function(e) { + this.contentResuming = !0, e.addClass("vjs-ad-content-resuming") + }, a.abort = function(e) { + var t = k.getState("AdsDone"); + this.resumeContent(e), e.removeClass("vjs-ad-loading"), this.transitionTo(t) + }, a.cleanup = function(e) { + e.removeClass("vjs-ad-content-resuming"), e.clearTimeout(this._postrollTimeout), e.ads._contentEnding = !1 + }, n + }(k.getState("AdState")); + k.registerState("Postroll", E); + var x = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "ContentPlayback" + }; + var n = t.prototype; + return n.init = function(e) { + e.ads._shouldBlockPlay = !1 + }, n.onAdsReady = function(e) { + e.ads.debug("Received adsready event (ContentPlayback)"), e.ads.nopreroll_ || (e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"), e.trigger("readyforpreroll")) + }, n.onReadyForPostroll = function(e) { + var t = k.getState("Postroll"); + e.ads.debug("Received readyforpostroll event"), this.transitionTo(t) + }, n.startLinearAdMode = function() { + var e = k.getState("Midroll"); + this.transitionTo(e) + }, t + }(k.getState("ContentState")); + k.registerState("ContentPlayback", x); + var D = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "StitchedContentPlayback" + }; + var n = t.prototype; + return n.init = function() { + this.player.ads._shouldBlockPlay = !1 + }, n.onContentChanged = function() { + this.player.ads.debug("Received contentchanged event (" + this.constructor._getName() + ")") + }, n.startLinearAdMode = function() { + var e = k.getState("StitchedAdRoll"); + this.transitionTo(e) + }, t + }(k.getState("ContentState")); + k.registerState("StitchedContentPlayback", D); + var O = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "StitchedAdRoll" + }; + var n = t.prototype; + return n.init = function() { + this.waitingForAdBreak = !1, this.contentResuming = !1, this.player.ads.adType = "stitched", M.start(this.player) + }, n.onPlaying = function() {}, n.onContentResumed = function() {}, n.onAdEnded = function() { + this.endLinearAdMode(), this.player.trigger("ended") + }, n.endLinearAdMode = function() { + var e = k.getState("StitchedContentPlayback"); + M.end(this.player), this.transitionTo(e) + }, t + }(k.getState("AdState")); + k.registerState("StitchedAdRoll", O); + var F = A.isMiddlewareMediatorSupported, + U = e.getTech("Html5").Events, + V = { + timeout: 5e3, + prerollTimeout: void 0, + postrollTimeout: void 0, + debug: !1, + stitchedAds: !1, + contentIsLive: void 0, + liveCuePoints: !0, + allowVjsAutoplay: e.options.normalizeAutoplay || !1 + }, + q = function(o) { + var r = this, + i = e.mergeOptions(V, o), + s = []; + U.concat(["firstplay", "loadedalldata"]).forEach(function(e) { + -1 === s.indexOf(e) && s.push(e) + }), r.on(s, u), F() || function(t, n) { + n && e.log("Using cancelContentPlay to block content playback"), t.on("play", m) + }(r, i.debug), r.setTimeout(function() { + r.ads._hasThereBeenALoadStartDuringPlayerLife || "" === r.src() || e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html") + }, 5e3), r.on("ended", function() { + r.hasClass("vjs-has-started") || r.addClass("vjs-has-started") + }), r.on("contenttimeupdate", function() { + r.removeClass("vjs-waiting") + }), r.on(["addurationchange", "adcanplay"], function() { + if (!r.ads.settings.stitchedAds && !r.hasStarted() && (!r.ads.snapshot || r.currentSrc() !== r.ads.snapshot.currentSrc) && r.ads.inAdBreak()) { + var t = r.play(); + t && t.catch && t.catch(function(t) { + e.log.warn("Play promise rejected when playing ad", t) + }) + } + }), r.on("nopreroll", function() { + r.ads.debug("Received nopreroll event"), r.ads.nopreroll_ = !0 + }), r.on("nopostroll", function() { + r.ads.debug("Received nopostroll event"), r.ads.nopostroll_ = !0 + }), r.on("playing", function() { + r.ads._cancelledPlay = !1, r.ads._pausedOnContentupdate = !1 + }), r.on("play", function() { + r.ads._playRequested = !0 + }), r.one("loadstart", function() { + r.ads._hasThereBeenALoadStartDuringPlayerLife = !0 + }), r.on("loadeddata", function() { + r.ads._hasThereBeenALoadedData = !0 + }), r.on("loadedmetadata", function() { + r.ads._hasThereBeenALoadedMetaData = !0 + }), r.ads = function(t) { + return { + disableNextSnapshotRestore: !1, + _contentEnding: !1, + _contentHasEnded: !1, + _hasThereBeenALoadStartDuringPlayerLife: !1, + _hasThereBeenALoadedData: !1, + _hasThereBeenALoadedMetaData: !1, + _inLinearAdMode: !1, + _shouldBlockPlay: !1, + _playBlocked: !1, + _playRequested: !1, + adType: null, + VERSION: a, + reset: function() { + t.ads.disableNextSnapshotRestore = !1, t.ads._contentEnding = !1, t.ads._contentHasEnded = !1, t.ads.snapshot = null, t.ads.adType = null, t.ads._hasThereBeenALoadedData = !1, t.ads._hasThereBeenALoadedMetaData = !1, t.ads._cancelledPlay = !1, t.ads._shouldBlockPlay = !1, t.ads._playBlocked = !1, t.ads.nopreroll_ = !1, t.ads.nopostroll_ = !1, t.ads._playRequested = !1 + }, + startLinearAdMode: function() { + t.ads._state.startLinearAdMode() + }, + endLinearAdMode: function() { + t.ads._state.endLinearAdMode() + }, + skipLinearAdMode: function() { + t.ads._state.skipLinearAdMode() + }, + stitchedAds: function(t) { + return void 0 !== t && (e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."), this.settings.stitchedAds = !!t), this.settings.stitchedAds + }, + videoElementRecycled: function() { + if (t.ads.shouldPlayContentBehindAd(t)) return !1; + if (!this.snapshot) throw new Error("You cannot use videoElementRecycled while there is no snapshot."); + var e = t.tech_.src() !== this.snapshot.src, + n = t.currentSrc() !== this.snapshot.currentSrc; + return e || n + }, + isLive: function(n) { + return void 0 === n && (n = t), "boolean" == typeof n.ads.settings.contentIsLive ? n.ads.settings.contentIsLive : n.duration() === 1 / 0 || "8" === e.browser.IOS_VERSION && 0 === n.duration() + }, + shouldPlayContentBehindAd: function(n) { + if (void 0 === n && (n = t), n) return !!n.ads.settings.liveCuePoints && !e.browser.IS_IOS && !e.browser.IS_ANDROID && n.duration() === 1 / 0; + throw new Error("shouldPlayContentBehindAd requires a player as a param") + }, + shouldTakeSnapshots: function(e) { + return void 0 === e && (e = t), !this.shouldPlayContentBehindAd(e) && !this.stitchedAds() + }, + isInAdMode: function() { + return this._state.isAdState() + }, + isWaitingForAdBreak: function() { + return this._state.isWaitingForAdBreak() + }, + isContentResuming: function() { + return this._state.isContentResuming() + }, + isAdPlaying: function() { + return this._state.inAdBreak() + }, + inAdBreak: function() { + return this._state.inAdBreak() + }, + removeNativePoster: function() { + var e = t.$(".vjs-tech"); + e && e.removeAttribute("poster") + }, + debug: function() { + if (this.settings.debug) { + for (var t = arguments.length, n = new Array(t), a = 0; a < t; a++) n[a] = arguments[a]; + 1 === n.length && "string" == typeof n[0] ? e.log("ADS: " + n[0]) : e.log.apply(e, ["ADS:"].concat(n)) + } + } + } + }(r), r.ads.settings = i, i.stitchedAds = !!i.stitchedAds, i.stitchedAds ? r.ads._state = new(k.getState("StitchedContentPlayback"))(r) : r.ads._state = new(k.getState("BeforePreroll"))(r), r.ads._state.init(r), r.ads.cueTextTracks = g, r.ads.adMacroReplacement = function(a, o, r) { + var i = this, + s = {}; + a = a.replace(/{([^}=]+)=([^}]+)}/g, function(e, t, n) { + return s["{" + t + "}"] = n, "{" + t + "}" + }), void 0 === o && (o = !1); + var d = {}; + for (var l in void 0 !== r && (d = r), d["{player.id}"] = this.options_["data-player"] || this.id_, d["{player.height}"] = this.currentHeight(), d["{player.width}"] = this.currentWidth(), d["{mediainfo.id}"] = this.mediainfo ? this.mediainfo.id : "", d["{mediainfo.name}"] = this.mediainfo ? this.mediainfo.name : "", d["{mediainfo.duration}"] = this.mediainfo ? this.mediainfo.duration : "", d["{player.duration}"] = this.duration(), d["{player.pageUrl}"] = e.dom.isInFrame() ? n.referrer : t.location.href, d["{playlistinfo.id}"] = this.playlistinfo ? this.playlistinfo.id : "", d["{playlistinfo.name}"] = this.playlistinfo ? this.playlistinfo.name : "", d["{timestamp}"] = (new Date).getTime(), d["{document.referrer}"] = n.referrer, d["{window.location.href}"] = t.location.href, d["{random}"] = Math.floor(1e12 * Math.random()), ["description", "tags", "reference_id", "ad_keys"].forEach(function(e) { + i.mediainfo && i.mediainfo[e] ? d["{mediainfo." + e + "}"] = i.mediainfo[e] : s["{mediainfo." + e + "}"] ? d["{mediainfo." + e + "}"] = s["{mediainfo." + e + "}"] : d["{mediainfo." + e + "}"] = "" + }), p(this.mediainfo, d, "custom_fields"), p(this.mediainfo, d, "customFields"), Object.keys(c).forEach(function(e) { + d["{tcf." + e + "}"] = c[e] + }), d["{tcf.gdprAppliesInt}"] = c.gdprApplies ? 1 : 0, d) a = a.split(l).join(h(d[l], o)); + for (var u in a = a.replace(/{pageVariable\.([^}]+)}/g, function(n, a) { + for (var r, i = t, d = a.split("."), l = 0; l < d.length; l++) l === d.length - 1 ? r = i[d[l]] : i = i[d[l]]; + var u = typeof r; + return null === r ? "null" : void 0 === r ? s["{pageVariable." + a + "}"] ? s["{pageVariable." + a + "}"] : (e.log.warn('Page variable "' + a + '" not found'), "") : "string" !== u && "number" !== u && "boolean" !== u ? (e.log.warn('Page variable "' + a + '" is not a supported type'), "") : h(String(r), o) + }), s) a = a.replace(u, s[u]); + return a + }.bind(r), + function(e) { + e.ads.contentSrc = e.currentSrc(), e.ads._seenInitialLoadstart = !1, e.on("loadstart", function() { + if (!e.ads.inAdBreak()) { + var t = e.currentSrc(); + t !== e.ads.contentSrc && (e.ads._seenInitialLoadstart && e.trigger({ + type: "contentchanged" + }), e.trigger({ + type: "contentupdate", + oldValue: e.ads.contentSrc, + newValue: t + }), e.ads.contentSrc = t), e.ads._seenInitialLoadstart = !0 + } + }) + }(r), r.on("contentchanged", r.ads.reset); + var d = function() { + var t = r.textTracks(); + if (!r.ads.shouldPlayContentBehindAd(r) && r.ads.inAdBreak() && r.tech_.featuresNativeTextTracks && e.browser.IS_IOS && !Array.isArray(r.textTracks())) + for (var n = 0; n < t.length; n++) { + var a = t[n]; + "showing" === a.mode && (a.mode = "disabled") + } + }; + r.ready(function() { + r.textTracks().addEventListener("change", d) + }), r.on(["play", "playing", "ended", "adsready", "adscanceled", "adskip", "adserror", "adtimeout", "adended", "ads-ad-started", "contentchanged", "dispose", "contentresumed", "readyforpostroll", "nopreroll", "nopostroll"], function(e) { + r.ads._state.handleEvent(e.type) + }), r.on("dispose", function() { + r.ads.reset(), r.textTracks().removeEventListener("change", d) + }), f(), r.ads.listenToTcf = f + }; + return q.VERSION = a, + function(t) { + !b(e) && ((e.registerPlugin || e.plugin)("ads", t), P() && !e.usingContribAdsMiddleware_ && (e.use("*", _), e.usingContribAdsMiddleware_ = !0, e.log.debug("Play middleware has been registered with videojs"))) + }(q), q +}); +/*! @name @viostream/videojs-overlay @version v2.1.6-f.97-master @license Apache-2.0 */ +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).videojsOverlay = e(t.videojs) +}(this, (function(t) { + "use strict"; + + function e(t) { + return t && "object" == typeof t && "default" in t ? t : { + default: t + } + } + var n = e(t); + + function i(t, e, n) { + return t(n = { + path: e, + exports: {}, + require: function(t, e) { + return function() { + throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs") + }(null == e && n.path) + } + }, n.exports), n.exports + } + var o = i((function(t) { + t.exports = function(t) { + if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return t + }, t.exports.default = t.exports, t.exports.__esModule = !0 + })), + r = i((function(t) { + function e(n, i) { + return t.exports = e = Object.setPrototypeOf || function(t, e) { + return t.__proto__ = e, t + }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) + } + t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 + })), + s = i((function(t) { + t.exports = function(t, e) { + t.prototype = Object.create(e.prototype), t.prototype.constructor = t, r(t, e) + }, t.exports.default = t.exports, t.exports.__esModule = !0 + })), + a = { + align: "top-left", + class: "", + content: "This overlay will show up while the video is playing", + debug: !1, + showBackground: !0, + attachToControlBar: !1, + overlays: [{ + start: "playing", + end: "paused" + }] + }, + h = n.default.getComponent("Component"), + d = n.default.dom || n.default, + l = n.default.registerPlugin || n.default.plugin, + u = function(t) { + return "number" == typeof t && t == t + }, + p = function(t) { + return "string" == typeof t && /^\S+$/.test(t) + }, + c = function(t) { + function e(n, i) { + var r; + return (r = t.call(this, n, i) || this).isVisible = !0, ["start", "end"].forEach((function(t) { + var e = r.options_[t]; + if (u(e)) r[t + "Event_"] = "timeupdate"; + else if (p(e)) r[t + "Event_"] = e; + else if ("start" === t) throw new Error('invalid "start" option; expected number or string') + })), ["endListener_", "rewindListener_", "startListener_"].forEach((function(t) { + r[t] = function(n) { + return e.prototype[t].call(o(r), n) + } + })), "timeupdate" === r.startEvent_ && r.on(n, "timeupdate", r.rewindListener_), r.debug('created, listening to "' + r.startEvent_ + '" for "start" and "' + (r.endEvent_ || "nothing") + '" for "end"'), r.hide(), r + } + s(e, t); + var i = e.prototype; + return i.createEl = function() { + var t = this.options_, + e = t.content, + n = t.showBackground ? "vjs-overlay-background" : "vjs-overlay-no-background", + i = d.createEl("div", { + className: "\n vjs-overlay\n vjs-overlay-" + t.align + "\n " + t.class + "\n " + n + "\n vjs-hidden\n " + }); + return "string" == typeof e ? i.innerHTML = e : e instanceof window.DocumentFragment ? i.appendChild(e) : d.appendContent(i, e), i + }, i.debug = function() { + if (this.options_.debug) { + for (var t = n.default.log, e = t, i = arguments.length, o = new Array(i), r = 0; r < i; r++) o[r] = arguments[r]; + t.hasOwnProperty(o[0]) && "function" == typeof t[o[0]] && (e = t[o.shift()]), e.apply(void 0, ["overlay#" + this.id() + ": "].concat(o)) + } + }, i.hide = function() { + if (!1 !== this.isVisible) return t.prototype.hide.call(this), this.isVisible = !1, this.debug("hidden"), this.debug('bound `startListener_` to "' + this.startEvent_ + '"'), u(this.options_.end) && (this.player().paused() || this.player().trigger("hide-overlay", { + id: this.options_.cta_id, + align: this.options_.align + })), this.endEvent_ && (this.debug('unbound `endListener_` from "' + this.endEvent_ + '"'), this.off(this.player(), this.endEvent_, this.endListener_)), this.on(this.player(), this.startEvent_, this.startListener_), this + }, i.shouldHide_ = function(t, e) { + var n = this.options_.end; + return u(n) ? t >= n : n === e + }, i.show = function() { + return t.prototype.show.call(this), this.isVisible = !0, this.off(this.player(), this.startEvent_, this.startListener_), this.debug("shown"), this.debug('unbound `startListener_` from "' + this.startEvent_ + '"'), u(this.options_.start) && (this.player().paused() && 0 !== this.options_.start || this.player().trigger("show-overlay", { + id: this.options_.cta_id, + align: this.options_.align + })), this.endEvent_ && (this.debug('bound `endListener_` to "' + this.endEvent_ + '"'), this.on(this.player(), this.endEvent_, this.endListener_)), this + }, i.shouldShow_ = function(t, e) { + var n = this.options_.start, + i = this.options_.end; + return u(n) ? u(i) ? t >= n && t < i : this.hasShownSinceSeek_ ? Math.floor(t) === n : (this.hasShownSinceSeek_ = !0, t >= n) : n === e + }, i.startListener_ = function(t) { + var e = this.player().currentTime(); + this.shouldShow_(e, t.type) && this.show() + }, i.endListener_ = function(t) { + var e = this.player().currentTime(); + this.shouldHide_(e, t.type) && this.hide() + }, i.rewindListener_ = function(t) { + var e = this.player().currentTime(), + n = this.previousTime_, + i = this.options_.start, + o = this.options_.end; + e < n && (this.debug("rewind detected"), u(o) && !this.shouldShow_(e) ? (this.debug("hiding; " + o + " is an integer and overlay should not show at this time"), this.hasShownSinceSeek_ = !1, this.hide()) : p(o) && e < i && (this.debug("hiding; show point (" + i + ") is before now (" + e + ") and end point (" + o + ") is an event"), this.hasShownSinceSeek_ = !1, this.hide())), this.previousTime_ = e + }, e + }(h); + n.default.registerComponent("Overlay", c); + var f = function(t) { + var e = this, + i = n.default.mergeOptions(a, t); + Array.isArray(this.overlays_) && this.overlays_.forEach((function(t) { + e.removeChild(t), e.controlBar && e.controlBar.removeChild(t), t.dispose() + })); + var o = i.overlays; + delete i.overlays, this.overlays_ = o.map((function(t) { + var o = n.default.mergeOptions(i, t), + r = "string" == typeof o.attachToControlBar || !0 === o.attachToControlBar; + if (!e.controls() || !e.controlBar) return e.addChild("overlay", o); + if (r && -1 !== o.align.indexOf("bottom")) { + var s = e.controlBar.children()[0]; + if (void 0 !== e.controlBar.getChild(o.attachToControlBar) && (s = e.controlBar.getChild(o.attachToControlBar)), s) { + var a = e.controlBar.children().indexOf(s); + return e.controlBar.addChild("overlay", o, a) + } + } + var h = e.addChild("overlay", o); + return e.el().insertBefore(h.el(), e.controlBar.el()), h + })) + }; + return f.VERSION = "v2.1.6-f.97-master", l("overlay", f), f +})); +/** + * videojs-share + * @version 3.2.1 + * @copyright 2019 Mikhail Khazov + * @license MIT + */ +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : t.videojsShare = e(t.videojs) +}(this, function(t) { + "use strict"; + + function e(t, e) { + return e = { + exports: {} + }, t(e, e.exports), e.exports + } + + function n(t) { + var e; + if ("SELECT" === t.nodeName) t.focus(), e = t.value; + else if ("INPUT" === t.nodeName || "TEXTAREA" === t.nodeName) { + var n = t.hasAttribute("readonly"); + n || t.setAttribute("readonly", ""), t.select(), t.setSelectionRange(0, t.value.length), n || t.removeAttribute("readonly"), e = t.value + } else { + t.hasAttribute("contenteditable") && t.focus(); + var i = window.getSelection(), + o = document.createRange(); + o.selectNodeContents(t), i.removeAllRanges(), i.addRange(o), e = i.toString() + } + return e + } + + function i() {} + + function o(t, e) { + for (; t && t.nodeType !== G;) { + if ("function" == typeof t.matches && t.matches(e)) return t; + t = t.parentNode + } + } + + function r(t, e, n, i, o) { + var r = l.apply(this, arguments); + return t.addEventListener(n, r, o), { + destroy: function() { + t.removeEventListener(n, r, o) + } + } + } + + function a(t, e, n, i, o) { + return "function" == typeof t.addEventListener ? r.apply(null, arguments) : "function" == typeof n ? r.bind(null, document).apply(null, arguments) : ("string" == typeof t && (t = document.querySelectorAll(t)), Array.prototype.map.call(t, function(t) { + return r(t, e, n, i, o) + })) + } + + function l(t, e, n, i) { + return function(n) { + n.delegateTarget = K(n.target, e), n.delegateTarget && i.call(t, n) + } + } + + function s(t, e, n) { + if (!t && !e && !n) throw new Error("Missing required arguments"); + if (!X.string(e)) throw new TypeError("Second argument must be a String"); + if (!X.fn(n)) throw new TypeError("Third argument must be a Function"); + if (X.node(t)) return c(t, e, n); + if (X.nodeList(t)) return u(t, e, n); + if (X.string(t)) return h(t, e, n); + throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList") + } + + function c(t, e, n) { + return t.addEventListener(e, n), { + destroy: function() { + t.removeEventListener(e, n) + } + } + } + + function u(t, e, n) { + return Array.prototype.forEach.call(t, function(t) { + t.addEventListener(e, n) + }), { + destroy: function() { + Array.prototype.forEach.call(t, function(t) { + t.removeEventListener(e, n) + }) + } + } + } + + function h(t, e, n) { + return Q(document.body, t, e, n) + } + + function d(t) { + return Object.keys(t).filter(function(e) { + return void 0 !== t[e] && "" !== t[e] + }).map(function(e) { + return encodeURIComponent(e) + "=" + encodeURIComponent(t[e]) + }).join("&") + } + + function f() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.fbAppId, + n = t.url, + i = t.redirectUri; + if (!e) throw new Error("fbAppId is not defined"); + var o = d({ + app_id: e, + display: "popup", + redirect_uri: i, + link: n + }); + return window.open("https://www.facebook.com/dialog/feed?" + o, "_blank", tt) + } + + function p() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.fbAppId, + n = t.url, + i = t.hashtag, + o = t.redirectUri; + if (!e) throw new Error("fbAppId is not defined"); + var r = d({ + app_id: e, + display: "popup", + redirect_uri: o, + href: n, + hashtag: i + }); + return window.open("https://www.facebook.com/dialog/share?" + r, "_blank", tt) + } + + function v() { + var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url; + if (!t) throw new Error("url is not defined"); + var e = d({ + kid_directed_site: "0", + sdk: "joey", + u: t, + display: "popup", + ref: "plugin", + src: "share_button" + }); + return window.open("https://www.facebook.com/sharer/sharer.php?" + e, "_blank", tt) + } + + function g() { + var t = d({ + url: (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url + }); + return window.open("https://plus.google.com/share?" + t, "_blank", tt) + } + + function w() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + share_url: t.url, + title: t.title, + description: t.description, + imageurl: t.image + }); + return window.open("http://connect.mail.ru/share?" + e, "_blank", tt) + } + + function m() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.title, + i = t.description, + o = (n || "") + "\r\n" + (i || "") + "\r\n" + (e || ""), + r = "mailto:?body=" + encodeURIComponent(o); + return window.location.assign(r) + } + + function y() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + "st.cmd": "addShare", + "st._surl": t.url, + title: t.title + }); + return window.open("https://ok.ru/dk?" + e, "_blank", tt) + } + + function b() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + url: t.url, + text: t.title + }); + return window.open("https://t.me/share/url?" + e, "_blank", tt) + } + + function k() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.title, + n = t.url, + i = t.hashtags, + o = d({ + text: e, + url: n, + hashtags: (void 0 === i ? [] : i).join(",") + }); + return window.open("https://twitter.com/intent/tweet?" + o, "_blank", tt) + } + + function _() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + url: t.url, + title: t.title + }); + return window.open("https://www.reddit.com/submit?" + e, "_blank", tt) + } + + function C() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.description, + n = d({ + url: t.url, + description: e, + media: t.media + }); + return window.open("https://pinterest.com/pin/create/button/?" + n, "_blank", tt) + } + + function x() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.title, + i = t.caption, + o = t.tags, + r = void 0 === o ? [] : o, + a = t.posttype, + l = void 0 === a ? "link" : a, + s = d({ + canonicalUrl: e, + title: n, + caption: i, + tags: r.join(","), + posttype: l + }); + return window.open("https://www.tumblr.com/widgets/share/tool?" + s, "_blank", tt) + } + + function E() { + return !!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/) + } + + function S(t) { + return E() ? window.open(t) : window.location.assign(t) + } + + function j() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.title; + if (!e && !n) throw new Error("url and title not specified"); + return S("viber://forward?" + d({ + text: [n, e].filter(function(t) { + return t + }).join(" ") + })) + } + + function F() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.image, + i = t.isVkParse, + o = t.description, + r = t.title; + o && o.length > et && (o = o.substr(0, et) + "..."), r && r.length > et && (r = r.substr(0, et) + "..."); + return "https://vk.com/share.php?" + d(i ? { + url: e + } : { + url: e, + title: r, + description: o, + image: n, + noparse: !0 + }) + } + + function A() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return window.open(F(t), "_blank", tt) + } + + function T() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.phone, + n = d({ + text: [t.title, t.url].filter(function(t) { + return t + }).join(" "), + phone: e + }); + return window.open("https://api.whatsapp.com/send?" + n, "_blank", tt) + } + + function z() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.title, + n = t.url, + i = d({ + title: e, + summary: t.description, + url: n + }); + return window.open("https://www.linkedin.com/shareArticle?mini=true&" + i, "_blank", tt) + } + + function M() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.fbAppId, + n = t.url; + if (!e) throw new Error("fbAppId is not defined"); + var i = d({ + app_id: e, + link: n + }); + return window.location.assign("fb-messenger://share?" + i) + } + + function O() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.title, + n = t.url; + if (!n) throw new Error("url is not defined"); + var i = encodeURIComponent("" + n); + return e && (i = "" + encodeURIComponent(e + " ") + i), window.open("https://line.me/R/msg/text/?" + i, "_blank", tt) + } + + function L() { + return "ontouchstart" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 + } + + function V() { + return /Android/.test(window.navigator.userAgent) || /iP(hone|ad|od)/i.test(window.navigator.userAgent) + } + + function H() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; + return !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1] ? V() ? t : t.filter(function(t) { + return !it.includes(t) + }) : t + } + t = t && t.hasOwnProperty("default") ? t.default : t; + var I = function() { + return "undefined" == typeof window ? "" : window.location.href + }(), + P = { + mobileVerification: !0, + title: "Video", + url: I, + socials: ["fbFeed", "tw", "reddit", "gp", "messenger", "linkedin", "vk", "ok", "mail", "email", "telegram", "whatsapp", "viber"], + embedCode: function() { + return "" + }(), + redirectUri: function() { + return I + "#close_window" + }() + }, + R = function(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + }, + U = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + N = function(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + }, + B = function(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + }, + q = function(t) { + function e(n, i) { + R(this, e); + var o = B(this, t.call(this, n, i)); + return o.addClass("vjs-menu-button"), o.addClass("vjs-share-control"), o.addClass("vjs-icon-share"), o.controlText(n.localize("Share")), o + } + return N(e, t), e.prototype.handleClick = function() { + this.player().getChild("ShareOverlay").open() + }, e + }(t.getComponent("Button")), + D = ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self && self, n), + Y = e(function(t, e) { + ! function(e, n) { + n(t, D) + }(0, function(t, e) { + function n(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + var i = function(t) { + return t && t.__esModule ? t : { + default: t + } + }(e), + o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { + return typeof t + } : function(t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, + r = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + a = function() { + function t(e) { + n(this, t), this.resolveOptions(e), this.initSelection() + } + return r(t, [{ + key: "resolveOptions", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.action = t.action, this.container = t.container, this.emitter = t.emitter, this.target = t.target, this.text = t.text, this.trigger = t.trigger, this.selectedText = "" + } + }, { + key: "initSelection", + value: function() { + this.text ? this.selectFake() : this.target && this.selectTarget() + } + }, { + key: "selectFake", + value: function() { + var t = this, + e = "rtl" == document.documentElement.getAttribute("dir"); + this.removeFake(), this.fakeHandlerCallback = function() { + return t.removeFake() + }, this.fakeHandler = this.container.addEventListener("click", this.fakeHandlerCallback) || !0, this.fakeElem = document.createElement("textarea"), this.fakeElem.style.fontSize = "12pt", this.fakeElem.style.border = "0", this.fakeElem.style.padding = "0", this.fakeElem.style.margin = "0", this.fakeElem.style.position = "absolute", this.fakeElem.style[e ? "right" : "left"] = "-9999px"; + var n = window.pageYOffset || document.documentElement.scrollTop; + this.fakeElem.style.top = n + "px", this.fakeElem.setAttribute("readonly", ""), this.fakeElem.value = this.text, this.container.appendChild(this.fakeElem), this.selectedText = (0, i.default)(this.fakeElem), this.copyText() + } + }, { + key: "removeFake", + value: function() { + this.fakeHandler && (this.container.removeEventListener("click", this.fakeHandlerCallback), this.fakeHandler = null, this.fakeHandlerCallback = null), this.fakeElem && (this.container.removeChild(this.fakeElem), this.fakeElem = null) + } + }, { + key: "selectTarget", + value: function() { + this.selectedText = (0, i.default)(this.target), this.copyText() + } + }, { + key: "copyText", + value: function() { + var t = void 0; + try { + t = document.execCommand(this.action) + } catch (e) { + t = !1 + } + this.handleResult(t) + } + }, { + key: "handleResult", + value: function(t) { + this.emitter.emit(t ? "success" : "error", { + action: this.action, + text: this.selectedText, + trigger: this.trigger, + clearSelection: this.clearSelection.bind(this) + }) + } + }, { + key: "clearSelection", + value: function() { + this.trigger && this.trigger.focus(), window.getSelection().removeAllRanges() + } + }, { + key: "destroy", + value: function() { + this.removeFake() + } + }, { + key: "action", + set: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "copy"; + if (this._action = t, "copy" !== this._action && "cut" !== this._action) throw new Error('Invalid "action" value, use either "copy" or "cut"') + }, + get: function() { + return this._action + } + }, { + key: "target", + set: function(t) { + if (void 0 !== t) { + if (!t || "object" !== (void 0 === t ? "undefined" : o(t)) || 1 !== t.nodeType) throw new Error('Invalid "target" value, use a valid Element'); + if ("copy" === this.action && t.hasAttribute("disabled")) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); + if ("cut" === this.action && (t.hasAttribute("readonly") || t.hasAttribute("disabled"))) throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); + this._target = t + } + }, + get: function() { + return this._target + } + }]), t + }(); + t.exports = a + }) + }); + i.prototype = { + on: function(t, e, n) { + var i = this.e || (this.e = {}); + return (i[t] || (i[t] = [])).push({ + fn: e, + ctx: n + }), this + }, + once: function(t, e, n) { + function i() { + o.off(t, i), e.apply(n, arguments) + } + var o = this; + return i._ = e, this.on(t, i, n) + }, + emit: function(t) { + var e = [].slice.call(arguments, 1), + n = ((this.e || (this.e = {}))[t] || []).slice(), + i = 0, + o = n.length; + for (i; i < o; i++) n[i].fn.apply(n[i].ctx, e); + return this + }, + off: function(t, e) { + var n = this.e || (this.e = {}), + i = n[t], + o = []; + if (i && e) + for (var r = 0, a = i.length; r < a; r++) i[r].fn !== e && i[r].fn._ !== e && o.push(i[r]); + return o.length ? n[t] = o : delete n[t], this + } + }; + var W = i, + X = e(function(t, e) { + e.node = function(t) { + return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType + }, e.nodeList = function(t) { + var n = Object.prototype.toString.call(t); + return void 0 !== t && ("[object NodeList]" === n || "[object HTMLCollection]" === n) && "length" in t && (0 === t.length || e.node(t[0])) + }, e.string = function(t) { + return "string" == typeof t || t instanceof String + }, e.fn = function(t) { + return "[object Function]" === Object.prototype.toString.call(t) + } + }), + G = 9; + if ("undefined" != typeof Element && !Element.prototype.matches) { + var J = Element.prototype; + J.matches = J.matchesSelector || J.mozMatchesSelector || J.msMatchesSelector || J.oMatchesSelector || J.webkitMatchesSelector + } + var K = o, + Q = a, + Z = s, + $ = function(t) { + return t && t.__esModule ? t.default : t + }(e(function(t, e) { + ! function(e, n) { + n(t, Y, W, Z) + }(0, function(t, e, n, i) { + function o(t) { + return t && t.__esModule ? t : { + default: t + } + } + + function r(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + + function a(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + } + + function l(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + } + + function s(t, e) { + var n = "data-clipboard-" + t; + if (e.hasAttribute(n)) return e.getAttribute(n) + } + var c = o(e), + u = o(n), + h = o(i), + d = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { + return typeof t + } : function(t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, + f = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + p = function(t) { + function e(t, n) { + r(this, e); + var i = a(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); + return i.resolveOptions(n), i.listenClick(t), i + } + return l(e, t), f(e, [{ + key: "resolveOptions", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, this.text = "function" == typeof t.text ? t.text : this.defaultText, this.container = "object" === d(t.container) ? t.container : document.body + } + }, { + key: "listenClick", + value: function(t) { + var e = this; + this.listener = (0, h.default)(t, "click", function(t) { + return e.onClick(t) + }) + } + }, { + key: "onClick", + value: function(t) { + var e = t.delegateTarget || t.currentTarget; + this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new c.default({ + action: this.action(e), + target: this.target(e), + text: this.text(e), + container: this.container, + trigger: e, + emitter: this + }) + } + }, { + key: "defaultAction", + value: function(t) { + return s("action", t) + } + }, { + key: "defaultTarget", + value: function(t) { + var e = s("target", t); + if (e) return document.querySelector(e) + } + }, { + key: "defaultText", + value: function(t) { + return s("text", t) + } + }, { + key: "destroy", + value: function() { + this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) + } + }], [{ + key: "isSupported", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], + e = "string" == typeof t ? [t] : t, + n = !!document.queryCommandSupported; + return e.forEach(function(t) { + n = n && !!document.queryCommandSupported(t) + }), n + } + }]), e + }(u.default); + t.exports = p + }) + })), + tt = "scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0", + et = 80, + nt = (Object.freeze || Object)({ + fbFeed: f, + fbShare: p, + fbButton: v, + gp: g, + mail: w, + email: m, + ok: y, + telegram: b, + tw: k, + reddit: _, + pinterest: C, + tumblr: x, + viber: j, + getVkUrl: F, + vk: A, + whatsapp: T, + linkedin: z, + messenger: M, + line: O + }), + it = ["whatsapp", "viber", "messenger"], + ot = { + fbFeed: '\n \n\n', + tw: '\n \n\n', + reddit: '\n \n\n', + gp: '\n \n\n', + messenger: '\n \n \n\n', + linkedin: '\n \n\n', + vk: '\n \n\n', + ok: '\n \n\n', + mail: '\n \n\n', + email: '\n \n\n', + telegram: '\n \n\n', + whatsapp: '\n \n\n', + viber: '\n \n\n' + }, + rt = function() { + function t(e, n) { + R(this, t), this.player = e, this.options = n, this.socials = H(n.socials, n.mobileVerification), this.copyBtnTextClass = "vjs-share__btn-text", this.socialBtnClass = "vjs-share__social", this._createContent(), this._initToggle(), this._initClipboard(), this._initSharing() + } + return t.prototype.getContent = function() { + return this.content + }, t.prototype._createContent = function() { + var t = '\n \n \n \n ' + this.player.localize("Copy") + "\n ", + e = document.createElement("div"), + n = ""; + this.options.embedCode && (n = '\n \n "), e.innerHTML = '
\n \n\n
\n \n \n\n " + n + '\n
\n\n
\n
\n ' + this._getSocialItems().join("") + "\n
\n
\n
", this.content = e.firstChild + }, t.prototype._initClipboard = function() { + var t = this; + new $(".vjs-share__btn", { + target: function(t) { + return t.previousElementSibling + } + }).on("success", function(e) { + var n = e.trigger.querySelector("." + t.copyBtnTextClass), + i = function() { + n.innerText = t.player.localize("Copy"), e.clearSelection() + }; + n.innerText = t.player.localize("Copied"), L() ? setTimeout(i, 1e3) : n.parentElement.addEventListener("mouseleave", function() { + setTimeout(i, 300) + }) + }) + }, t.prototype._initSharing = function() { + var t = this, + e = this.content.querySelectorAll("." + this.socialBtnClass); + Array.from(e).forEach(function(e) { + e.addEventListener("click", function(e) { + var n = e.currentTarget.getAttribute("data-social"), + i = nt[n]; + "function" == typeof i && i(t.socialOptions) + }) + }) + }, t.prototype._initToggle = function() { + var t = this.content.querySelector(".vjs-share__socials"); + this.socials.length > 10 || window.innerWidth <= 180 && this.socials.length > 6 ? t.style.height = "calc((2em + 5px) * 2)" : t.classList.add("horizontal") + }, t.prototype._getSocialItems = function() { + var t = []; + return this.socials.forEach(function(e) { + ot[e] && t.push('\n \n ") + }), t + }, U(t, [{ + key: "socialOptions", + get: function() { + var t = this.options; + return { + url: t.url, + title: t.title, + description: t.description, + image: t.image, + fbAppId: t.fbAppId, + isVkParse: t.isVkParse, + redirectUri: t.redirectUri + } + } + }]), t + }(), + at = function(t) { + function e(n, i) { + R(this, e); + var o = B(this, t.call(this, n, i)); + return o.playerClassName = "vjs-videojs-share_open", o + } + return N(e, t), e.prototype.open = function() { + var e = this.player(); + e.addClass(this.playerClassName), t.prototype.open.call(this), e.trigger("sharing:opened") + }, e.prototype.close = function() { + var e = this.player(); + e.removeClass(this.playerClassName), t.prototype.close.call(this), e.trigger("sharing:closed") + }, e + }(t.getComponent("ModalDialog")), + lt = function(t) { + function e(n, i) { + R(this, e); + var o = B(this, t.call(this, n, i)); + return o.player = n, o.options = i, o + } + return N(e, t), e.prototype._createModal = function() { + var t = new rt(this.player, this.options).getContent(); + this.modal = new at(this.player, { + content: t, + temporary: !0 + }), this.el = this.modal.contentEl(), this.player.addChild(this.modal) + }, e.prototype.open = function() { + this._createModal(), this.modal.open() + }, e + }(t.getComponent("Component")), + st = function(e) { + function n(i, o) { + R(this, n); + var r = B(this, e.call(this, i)); + return r.options = t.mergeOptions(P, o), r.player.ready(function() { + r.player.addClass("vjs-share"), i.addClass("vjs-videojs-share"), i.getChild("controlBar").addChild("ShareButton", o), i.addChild("ShareOverlay", o) + }), r + } + return N(n, e), n + }(t.getPlugin("plugin")); + return st.defaultState = {}, st.VERSION = "3.2.1", t.registerComponent("ShareButton", q), t.registerComponent("ShareOverlay", lt), t.registerPlugin("share", st), st +}); +/** + * videojs-watermark + * @version 2.0.0 + * @copyright 2017 Brooks Lyrette + * @license Apache-2.0 + */ +! function(e) { + if ("object" == typeof exports && "undefined" != typeof module) module.exports = e(); + else if ("function" == typeof define && define.amd) define([], e); + else { + var n; + n = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, n.videojsWatermark = e() + } +}(function() { + return function e(n, t, i) { + function o(d, a) { + if (!t[d]) { + if (!n[d]) { + var f = "function" == typeof require && require; + if (!a && f) return f(d, !0); + if (r) return r(d, !0); + var u = new Error("Cannot find module '" + d + "'"); + throw u.code = "MODULE_NOT_FOUND", u + } + var l = t[d] = { + exports: {} + }; + n[d][0].call(l.exports, function(e) { + var t = n[d][1][e]; + return o(t || e) + }, l, l.exports, e, n, t, i) + } + return t[d].exports + } + for (var r = "function" == typeof require && require, d = 0; d < i.length; d++) o(i[d]); + return o + }({ + 1: [function(e, n, t) { + (function(e) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }); + var i = "undefined" != typeof window ? window.videojs : void 0 !== e ? e.videojs : null, + o = function(e) { + return e && e.__esModule ? e : { + default: e + } + }(i), + r = { + position: "top-right", + fadeTime: 3e3, + url: void 0, + image: void 0 + }, + d = function(e, n) { + var t = e.el(), + i = document.createElement("div"), + o = document.createElement("img"); + if (i.classList.add("vjs-watermark-content"), i.classList.add("vjs-watermark-" + n.position), o.src = n.image, n.url) { + var r = document.createElement("a"); + r.href = n.url, r.onclick = function(t) { + t.preventDefault(), e.pause(), window.open(n.url) + }, r.appendChild(o), i.appendChild(r) + } else i.appendChild(o); + t.appendChild(i) + }, + a = function(e) { + setTimeout(function() { + return document.getElementsByClassName("vjs-watermark-content")[0].classList.add("vjs-watermark-fade") + }, e.fadeTime) + }, + f = function(e, n) { + e.addClass("vjs-watermark"), n.image && (d(e, n), null !== n.fadeTime && e.on("play", function() { + return a(n) + })) + }, + u = function(e) { + var n = this; + this.ready(function() { + f(n, o.default.mergeOptions(r, e)) + }) + }; + o.default.registerPlugin("watermark", u), u.VERSION = "2.0.0", t.default = u, n.exports = t.default + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}) + }, {}] + }, {}, [1])(1) +}); +/*! @name videojs-vr @version 1.10.1 @license MIT */ +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("global/window"), require("global/document"), require("video.js")) : "function" == typeof define && define.amd ? define(["global/window", "global/document", "video.js"], e) : (t = t || self).videojsVr = e(t.window, t.document, t.videojs) +}(this, (function(t, e, n) { + "use strict"; + t = t && t.hasOwnProperty("default") ? t.default : t, e = e && e.hasOwnProperty("default") ? e.default : e, n = n && n.hasOwnProperty("default") ? n.default : n; + var i = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; + + function r(t) { + return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t + } + + function o(t, e) { + return t(e = { + exports: {} + }, e.exports), e.exports + } + var s = r(o((function(t) { + t.exports = function(t) { + if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return t + }, t.exports.default = t.exports, t.exports.__esModule = !0 + }))), + a = o((function(t) { + function e(n, i) { + return t.exports = e = Object.setPrototypeOf || function(t, e) { + return t.__proto__ = e, t + }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) + } + t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 + })); + r(a); + var l = r(o((function(t) { + t.exports = function(t, e) { + t.prototype = Object.create(e.prototype), t.prototype.constructor = t, a(t, e) + }, t.exports.default = t.exports, t.exports.__esModule = !0 + }))), + c = r(o((function(t, e) { + /** + * @license + * webvr-polyfill + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * cardboard-vr-display + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * webvr-polyfill-dpdb + * Copyright (c) 2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * wglu-preserve-state + * Copyright (c) 2016, Brandon Jones. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + /** + * @license + * nosleep.js + * Copyright (c) 2017, Rich Tibbett + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + t.exports = function() { + var t, e = "undefined" != typeof window ? window : void 0 !== i ? i : "undefined" != typeof self ? self : {}, + n = function() { + return /Android/i.test(navigator.userAgent) || /iPhone|iPad|iPod/i.test(navigator.userAgent) + }, + r = function(t, e) { + for (var n = 0, i = t.length; n < i; n++) e[n] = t[n] + }, + o = function(t, e) { + for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); + return t + }, + s = (t = function(t, e) { + return t(e = { + exports: {} + }, e.exports), e.exports + }((function(t, n) { + /** + * @license + * cardboard-vr-display + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * gl-preserve-state + * Copyright (c) 2016, Brandon Jones. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + /** + * @license + * webvr-polyfill-dpdb + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * nosleep.js + * Copyright (c) 2017, Rich Tibbett + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + t.exports = function() { + var t, n, i, r = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + o = function(t, e) { + if (Array.isArray(t)) return t; + if (Symbol.iterator in Object(t)) return function(t, e) { + var n = [], + i = !0, + r = !1, + o = void 0; + try { + for (var s, a = t[Symbol.iterator](); !(i = (s = a.next()).done) && (n.push(s.value), !e || n.length !== e); i = !0); + } catch (t) { + r = !0, o = t + } finally { + try { + !i && a.return && a.return() + } finally { + if (r) throw o + } + } + return n + }(t, e); + throw new TypeError("Invalid attempt to destructure non-iterable instance") + }, + s = function(t, e, n) { + return t + (e - t) * n + }, + a = function() { + var t = /iPad|iPhone|iPod/.test(navigator.platform); + return function() { + return t + } + }(), + l = function() { + var t = -1 !== navigator.userAgent.indexOf("Version") && -1 !== navigator.userAgent.indexOf("Android") && -1 !== navigator.userAgent.indexOf("Chrome"); + return function() { + return t + } + }(), + c = function() { + var t = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + return function() { + return t + } + }(), + h = function() { + var t = -1 !== navigator.userAgent.indexOf("Firefox") && -1 !== navigator.userAgent.indexOf("Android"); + return function() { + return t + } + }(), + u = (n = navigator.userAgent.match(/.*Chrome\/([0-9]+)/), i = n ? parseInt(n[1], 10) : null, function() { + return i + }), + d = function() { + var t; + return t = a() && c() && -1 !== navigator.userAgent.indexOf("13_4"), + function() { + return t + } + }(), + p = function() { + var t = !1; + if (65 === u()) { + var e = navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/); + if (e) { + var n = e[1].split("."), + i = o(n, 4), + r = (i[0], i[1], i[2]), + s = i[3]; + t = 3325 === parseInt(r, 10) && parseInt(s, 10) < 148 + } + } + return function() { + return t + } + }(), + f = function() { + var t = -1 !== navigator.userAgent.indexOf("R7 Build"); + return function() { + return t + } + }(), + m = function() { + var t = 90 == window.orientation || -90 == window.orientation; + return f() ? !t : t + }, + g = function() { + return Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio + }, + v = function() { + return Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio + }, + y = function() { + if (document.exitFullscreen) document.exitFullscreen(); + else if (document.webkitExitFullscreen) document.webkitExitFullscreen(); + else if (document.mozCancelFullScreen) document.mozCancelFullScreen(); + else { + if (!document.msExitFullscreen) return !1; + document.msExitFullscreen() + } + return !0 + }, + A = function(t, e, n, i) { + var r = t.createShader(t.VERTEX_SHADER); + t.shaderSource(r, e), t.compileShader(r); + var o = t.createShader(t.FRAGMENT_SHADER); + t.shaderSource(o, n), t.compileShader(o); + var s = t.createProgram(); + for (var a in t.attachShader(s, r), t.attachShader(s, o), i) t.bindAttribLocation(s, i[a], a); + return t.linkProgram(s), t.deleteShader(r), t.deleteShader(o), s + }, + x = function(t, e) { + for (var n = {}, i = t.getProgramParameter(e, t.ACTIVE_UNIFORMS), r = "", o = 0; o < i; o++) n[r = t.getActiveUniform(e, o).name.replace("[0]", "")] = t.getUniformLocation(e, r); + return n + }, + _ = function() { + var t, e = !1; + return t = navigator.userAgent || navigator.vendor || window.opera, (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0, 4))) && (e = !0), e + }, + b = function(t, e) { + for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); + return t + }, + w = function(t) { + if (a()) { + var e = t.style.width, + n = t.style.height; + t.style.width = parseInt(e) + 1 + "px", t.style.height = parseInt(n) + "px", setTimeout((function() { + t.style.width = e, t.style.height = n + }), 100) + } + window.canvas = t + }, + M = function() { + var t = Math.PI / 180, + e = .25 * Math.PI, + n = new Float32Array([0, 0, 0, 1]), + i = new Float32Array([0, 0, 0]); + + function r(r, o, s, a, l, c) { + ! function(n, i, r, o) { + var s = Math.tan(i ? i.upDegrees * t : e), + a = Math.tan(i ? i.downDegrees * t : e), + l = Math.tan(i ? i.leftDegrees * t : e), + c = Math.tan(i ? i.rightDegrees * t : e), + h = 2 / (l + c), + u = 2 / (s + a); + n[0] = h, n[1] = 0, n[2] = 0, n[3] = 0, n[4] = 0, n[5] = u, n[6] = 0, n[7] = 0, n[8] = -(l - c) * h * .5, n[9] = (s - a) * u * .5, n[10] = o / (r - o), n[11] = -1, n[12] = 0, n[13] = 0, n[14] = o * r / (r - o), n[15] = 0 + }(r, a || null, c.depthNear, c.depthFar); + var h, u, d, p, f, m, g, v, y, A, x, _, b, w, M, E, S, T, L, R = s.orientation || n, + C = s.position || i; + h = o, d = C, p = (u = R)[0], f = u[1], m = u[2], g = u[3], x = p * (v = p + p), _ = p * (y = f + f), b = p * (A = m + m), w = f * y, M = f * A, E = m * A, S = g * v, T = g * y, L = g * A, h[0] = 1 - (w + E), h[1] = _ + L, h[2] = b - T, h[3] = 0, h[4] = _ - L, h[5] = 1 - (x + E), h[6] = M + S, h[7] = 0, h[8] = b + T, h[9] = M - S, h[10] = 1 - (x + w), h[11] = 0, h[12] = d[0], h[13] = d[1], h[14] = d[2], h[15] = 1, l && function(t, e, n) { + var i, r, o, s, a, l, c, h, u, d, p, f, m = n[0], + g = n[1], + v = n[2]; + e === t ? (t[12] = e[0] * m + e[4] * g + e[8] * v + e[12], t[13] = e[1] * m + e[5] * g + e[9] * v + e[13], t[14] = e[2] * m + e[6] * g + e[10] * v + e[14], t[15] = e[3] * m + e[7] * g + e[11] * v + e[15]) : (i = e[0], r = e[1], o = e[2], s = e[3], a = e[4], l = e[5], c = e[6], h = e[7], u = e[8], d = e[9], p = e[10], f = e[11], t[0] = i, t[1] = r, t[2] = o, t[3] = s, t[4] = a, t[5] = l, t[6] = c, t[7] = h, t[8] = u, t[9] = d, t[10] = p, t[11] = f, t[12] = i * m + a * g + u * v + e[12], t[13] = r * m + l * g + d * v + e[13], t[14] = o * m + c * g + p * v + e[14], t[15] = s * m + h * g + f * v + e[15]) + }(o, o, l), + function(t, e) { + var n = e[0], + i = e[1], + r = e[2], + o = e[3], + s = e[4], + a = e[5], + l = e[6], + c = e[7], + h = e[8], + u = e[9], + d = e[10], + p = e[11], + f = e[12], + m = e[13], + g = e[14], + v = e[15], + y = n * a - i * s, + A = n * l - r * s, + x = n * c - o * s, + _ = i * l - r * a, + b = i * c - o * a, + w = r * c - o * l, + M = h * m - u * f, + E = h * g - d * f, + S = h * v - p * f, + T = u * g - d * m, + L = u * v - p * m, + R = d * v - p * g, + C = y * R - A * L + x * T + _ * S - b * E + w * M; + C && (C = 1 / C, t[0] = (a * R - l * L + c * T) * C, t[1] = (r * L - i * R - o * T) * C, t[2] = (m * w - g * b + v * _) * C, t[3] = (d * b - u * w - p * _) * C, t[4] = (l * S - s * R - c * E) * C, t[5] = (n * R - r * S + o * E) * C, t[6] = (g * x - f * w - v * A) * C, t[7] = (h * w - d * x + p * A) * C, t[8] = (s * L - a * S + c * M) * C, t[9] = (i * S - n * L - o * M) * C, t[10] = (f * b - m * x + v * y) * C, t[11] = (u * x - h * b - p * y) * C, t[12] = (a * E - s * T - l * M) * C, t[13] = (n * T - i * E + r * M) * C, t[14] = (m * A - f * _ - g * y) * C, t[15] = (h * _ - u * A + d * y) * C) + }(o, o) + } + return function(t, e, n) { + return !(!t || !e || (t.pose = e, t.timestamp = e.timestamp, r(t.leftProjectionMatrix, t.leftViewMatrix, e, n._getFieldOfView("left"), n._getEyeOffset("left"), n), r(t.rightProjectionMatrix, t.rightViewMatrix, e, n._getFieldOfView("right"), n._getEyeOffset("right"), n), 0)) + } + }(), + E = function(t) { + var e, n = t.indexOf("://"); + e = -1 !== n ? n + 3 : 0; + var i = t.indexOf("/", e); + return -1 === i && (i = t.length), t.substring(0, i) + }, + S = (t = {}, function(e, n) { + void 0 === t[e] && (console.warn("webvr-polyfill: " + n), t[e] = !0) + }), + T = function(t, e) { + S(t, t + " has been deprecated. This may not work on native WebVR displays. " + (e ? "Please use " + e + " instead." : "")) + }, + L = function(t, e, n) { + if (e) { + for (var i = [], r = null, o = 0; o < e.length; ++o) switch (s = e[o]) { + case t.TEXTURE_BINDING_2D: + case t.TEXTURE_BINDING_CUBE_MAP: + if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) { + console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"), i.push(null, null); + break + } + r || (r = t.getParameter(t.ACTIVE_TEXTURE)), t.activeTexture(l), i.push(t.getParameter(s), null); + break; + case t.ACTIVE_TEXTURE: + r = t.getParameter(t.ACTIVE_TEXTURE), i.push(null); + break; + default: + i.push(t.getParameter(s)) + } + for (n(t), o = 0; o < e.length; ++o) { + var s = e[o], + a = i[o]; + switch (s) { + case t.ACTIVE_TEXTURE: + break; + case t.ARRAY_BUFFER_BINDING: + t.bindBuffer(t.ARRAY_BUFFER, a); + break; + case t.COLOR_CLEAR_VALUE: + t.clearColor(a[0], a[1], a[2], a[3]); + break; + case t.COLOR_WRITEMASK: + t.colorMask(a[0], a[1], a[2], a[3]); + break; + case t.CURRENT_PROGRAM: + t.useProgram(a); + break; + case t.ELEMENT_ARRAY_BUFFER_BINDING: + t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, a); + break; + case t.FRAMEBUFFER_BINDING: + t.bindFramebuffer(t.FRAMEBUFFER, a); + break; + case t.RENDERBUFFER_BINDING: + t.bindRenderbuffer(t.RENDERBUFFER, a); + break; + case t.TEXTURE_BINDING_2D: + if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; + t.activeTexture(l), t.bindTexture(t.TEXTURE_2D, a); + break; + case t.TEXTURE_BINDING_CUBE_MAP: + var l; + if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; + t.activeTexture(l), t.bindTexture(t.TEXTURE_CUBE_MAP, a); + break; + case t.VIEWPORT: + t.viewport(a[0], a[1], a[2], a[3]); + break; + case t.BLEND: + case t.CULL_FACE: + case t.DEPTH_TEST: + case t.SCISSOR_TEST: + case t.STENCIL_TEST: + a ? t.enable(s) : t.disable(s); + break; + default: + console.log("No GL restore behavior for 0x" + s.toString(16)) + } + r && t.activeTexture(r) + } + } else n(t) + }, + R = ["attribute vec2 position;", "attribute vec3 texCoord;", "varying vec2 vTexCoord;", "uniform vec4 viewportOffsetScale[2];", "void main() {", " vec4 viewport = viewportOffsetScale[int(texCoord.z)];", " vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;", " gl_Position = vec4( position, 1.0, 1.0 );", "}"].join("\n"), + C = ["precision mediump float;", "uniform sampler2D diffuse;", "varying vec2 vTexCoord;", "void main() {", " gl_FragColor = texture2D(diffuse, vTexCoord);", "}"].join("\n"); + + function P(t, e, n, i) { + this.gl = t, this.cardboardUI = e, this.bufferScale = n, this.dirtySubmitFrameBindings = i, this.ctxAttribs = t.getContextAttributes(), this.instanceExt = t.getExtension("ANGLE_instanced_arrays"), this.meshWidth = 20, this.meshHeight = 20, this.bufferWidth = t.drawingBufferWidth, this.bufferHeight = t.drawingBufferHeight, this.realBindFramebuffer = t.bindFramebuffer, this.realEnable = t.enable, this.realDisable = t.disable, this.realColorMask = t.colorMask, this.realClearColor = t.clearColor, this.realViewport = t.viewport, a() || (this.realCanvasWidth = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "width"), this.realCanvasHeight = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "height")), this.isPatched = !1, this.lastBoundFramebuffer = null, this.cullFace = !1, this.depthTest = !1, this.blend = !1, this.scissorTest = !1, this.stencilTest = !1, this.viewport = [0, 0, 0, 0], this.colorMask = [!0, !0, !0, !0], this.clearColor = [0, 0, 0, 0], this.attribs = { + position: 0, + texCoord: 1 + }, this.program = A(t, R, C, this.attribs), this.uniforms = x(t, this.program), this.viewportOffsetScale = new Float32Array(8), this.setTextureBounds(), this.vertexBuffer = t.createBuffer(), this.indexBuffer = t.createBuffer(), this.indexCount = 0, this.renderTarget = t.createTexture(), this.framebuffer = t.createFramebuffer(), this.depthStencilBuffer = null, this.depthBuffer = null, this.stencilBuffer = null, this.ctxAttribs.depth && this.ctxAttribs.stencil ? this.depthStencilBuffer = t.createRenderbuffer() : this.ctxAttribs.depth ? this.depthBuffer = t.createRenderbuffer() : this.ctxAttribs.stencil && (this.stencilBuffer = t.createRenderbuffer()), this.patch(), this.onResize() + } + P.prototype.destroy = function() { + var t = this.gl; + this.unpatch(), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer), t.deleteBuffer(this.indexBuffer), t.deleteTexture(this.renderTarget), t.deleteFramebuffer(this.framebuffer), this.depthStencilBuffer && t.deleteRenderbuffer(this.depthStencilBuffer), this.depthBuffer && t.deleteRenderbuffer(this.depthBuffer), this.stencilBuffer && t.deleteRenderbuffer(this.stencilBuffer), this.cardboardUI && this.cardboardUI.destroy() + }, P.prototype.onResize = function() { + var t = this.gl, + e = this, + n = [t.RENDERBUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0]; + L(t, n, (function(t) { + e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.framebuffer), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.texImage2D(t.TEXTURE_2D, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, e.bufferWidth, e.bufferHeight, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, t.UNSIGNED_BYTE, null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, e.renderTarget, 0), e.ctxAttribs.depth && e.ctxAttribs.stencil ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthStencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_STENCIL, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_STENCIL_ATTACHMENT, t.RENDERBUFFER, e.depthStencilBuffer)) : e.ctxAttribs.depth ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_COMPONENT16, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_ATTACHMENT, t.RENDERBUFFER, e.depthBuffer)) : e.ctxAttribs.stencil && (t.bindRenderbuffer(t.RENDERBUFFER, e.stencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.STENCIL_INDEX8, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.STENCIL_ATTACHMENT, t.RENDERBUFFER, e.stencilBuffer)), !t.checkFramebufferStatus(t.FRAMEBUFFER) === t.FRAMEBUFFER_COMPLETE && console.error("Framebuffer incomplete!"), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), e.realClearColor.apply(t, e.clearColor) + })), this.cardboardUI && this.cardboardUI.onResize() + }, P.prototype.patch = function() { + if (!this.isPatched) { + var t = this, + e = this.gl.canvas, + n = this.gl; + a() || (e.width = g() * this.bufferScale, e.height = v() * this.bufferScale, Object.defineProperty(e, "width", { + configurable: !0, + enumerable: !0, + get: function() { + return t.bufferWidth + }, + set: function(n) { + t.bufferWidth = n, t.realCanvasWidth.set.call(e, n), t.onResize() + } + }), Object.defineProperty(e, "height", { + configurable: !0, + enumerable: !0, + get: function() { + return t.bufferHeight + }, + set: function(n) { + t.bufferHeight = n, t.realCanvasHeight.set.call(e, n), t.onResize() + } + })), this.lastBoundFramebuffer = n.getParameter(n.FRAMEBUFFER_BINDING), null == this.lastBoundFramebuffer && (this.lastBoundFramebuffer = this.framebuffer, this.gl.bindFramebuffer(n.FRAMEBUFFER, this.framebuffer)), this.gl.bindFramebuffer = function(e, i) { + t.lastBoundFramebuffer = i || t.framebuffer, t.realBindFramebuffer.call(n, e, t.lastBoundFramebuffer) + }, this.cullFace = n.getParameter(n.CULL_FACE), this.depthTest = n.getParameter(n.DEPTH_TEST), this.blend = n.getParameter(n.BLEND), this.scissorTest = n.getParameter(n.SCISSOR_TEST), this.stencilTest = n.getParameter(n.STENCIL_TEST), n.enable = function(e) { + switch (e) { + case n.CULL_FACE: + t.cullFace = !0; + break; + case n.DEPTH_TEST: + t.depthTest = !0; + break; + case n.BLEND: + t.blend = !0; + break; + case n.SCISSOR_TEST: + t.scissorTest = !0; + break; + case n.STENCIL_TEST: + t.stencilTest = !0 + } + t.realEnable.call(n, e) + }, n.disable = function(e) { + switch (e) { + case n.CULL_FACE: + t.cullFace = !1; + break; + case n.DEPTH_TEST: + t.depthTest = !1; + break; + case n.BLEND: + t.blend = !1; + break; + case n.SCISSOR_TEST: + t.scissorTest = !1; + break; + case n.STENCIL_TEST: + t.stencilTest = !1 + } + t.realDisable.call(n, e) + }, this.colorMask = n.getParameter(n.COLOR_WRITEMASK), n.colorMask = function(e, i, r, o) { + t.colorMask[0] = e, t.colorMask[1] = i, t.colorMask[2] = r, t.colorMask[3] = o, t.realColorMask.call(n, e, i, r, o) + }, this.clearColor = n.getParameter(n.COLOR_CLEAR_VALUE), n.clearColor = function(e, i, r, o) { + t.clearColor[0] = e, t.clearColor[1] = i, t.clearColor[2] = r, t.clearColor[3] = o, t.realClearColor.call(n, e, i, r, o) + }, this.viewport = n.getParameter(n.VIEWPORT), n.viewport = function(e, i, r, o) { + t.viewport[0] = e, t.viewport[1] = i, t.viewport[2] = r, t.viewport[3] = o, t.realViewport.call(n, e, i, r, o) + }, this.isPatched = !0, w(e) + } + }, P.prototype.unpatch = function() { + if (this.isPatched) { + var t = this.gl, + e = this.gl.canvas; + a() || (Object.defineProperty(e, "width", this.realCanvasWidth), Object.defineProperty(e, "height", this.realCanvasHeight)), e.width = this.bufferWidth, e.height = this.bufferHeight, t.bindFramebuffer = this.realBindFramebuffer, t.enable = this.realEnable, t.disable = this.realDisable, t.colorMask = this.realColorMask, t.clearColor = this.realClearColor, t.viewport = this.realViewport, this.lastBoundFramebuffer == this.framebuffer && t.bindFramebuffer(t.FRAMEBUFFER, null), this.isPatched = !1, setTimeout((function() { + w(e) + }), 1) + } + }, P.prototype.setTextureBounds = function(t, e) { + t || (t = [0, 0, .5, 1]), e || (e = [.5, 0, .5, 1]), this.viewportOffsetScale[0] = t[0], this.viewportOffsetScale[1] = t[1], this.viewportOffsetScale[2] = t[2], this.viewportOffsetScale[3] = t[3], this.viewportOffsetScale[4] = e[0], this.viewportOffsetScale[5] = e[1], this.viewportOffsetScale[6] = e[2], this.viewportOffsetScale[7] = e[3] + }, P.prototype.submitFrame = function() { + var t = this.gl, + e = this, + n = []; + if (this.dirtySubmitFrameBindings || n.push(t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING, t.ELEMENT_ARRAY_BUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0), L(t, n, (function(t) { + e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null); + var n = 0, + i = 0; + e.instanceExt && (n = t.getVertexAttrib(e.attribs.position, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE), i = t.getVertexAttrib(e.attribs.texCoord, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)), e.cullFace && e.realDisable.call(t, t.CULL_FACE), e.depthTest && e.realDisable.call(t, t.DEPTH_TEST), e.blend && e.realDisable.call(t, t.BLEND), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realDisable.call(t, t.STENCIL_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), (e.ctxAttribs.alpha || a()) && (e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT)), t.useProgram(e.program), t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e.indexBuffer), t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.enableVertexAttribArray(e.attribs.position), t.enableVertexAttribArray(e.attribs.texCoord), t.vertexAttribPointer(e.attribs.position, 2, t.FLOAT, !1, 20, 0), t.vertexAttribPointer(e.attribs.texCoord, 3, t.FLOAT, !1, 20, 8), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, 0), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, 0)), t.activeTexture(t.TEXTURE0), t.uniform1i(e.uniforms.diffuse, 0), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.uniform4fv(e.uniforms.viewportOffsetScale, e.viewportOffsetScale), t.drawElements(t.TRIANGLES, e.indexCount, t.UNSIGNED_SHORT, 0), e.cardboardUI && e.cardboardUI.renderNoState(), e.realBindFramebuffer.call(e.gl, t.FRAMEBUFFER, e.framebuffer), e.ctxAttribs.preserveDrawingBuffer || (e.realClearColor.call(t, 0, 0, 0, 0), t.clear(t.COLOR_BUFFER_BIT)), e.dirtySubmitFrameBindings || e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.cullFace && e.realEnable.call(t, t.CULL_FACE), e.depthTest && e.realEnable.call(t, t.DEPTH_TEST), e.blend && e.realEnable.call(t, t.BLEND), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realEnable.call(t, t.STENCIL_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), !e.ctxAttribs.alpha && e.ctxAttribs.preserveDrawingBuffer || e.realClearColor.apply(t, e.clearColor), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, n), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, i)) + })), a()) { + var i = t.canvas; + i.width == e.bufferWidth && i.height == e.bufferHeight || (e.bufferWidth = i.width, e.bufferHeight = i.height, e.onResize()) + } + }, P.prototype.updateDeviceInfo = function(t) { + var e = this.gl, + n = this, + i = [e.ARRAY_BUFFER_BINDING, e.ELEMENT_ARRAY_BUFFER_BINDING]; + L(e, i, (function(e) { + var i = n.computeMeshVertices_(n.meshWidth, n.meshHeight, t); + if (e.bindBuffer(e.ARRAY_BUFFER, n.vertexBuffer), e.bufferData(e.ARRAY_BUFFER, i, e.STATIC_DRAW), !n.indexCount) { + var r = n.computeMeshIndices_(n.meshWidth, n.meshHeight); + e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, n.indexBuffer), e.bufferData(e.ELEMENT_ARRAY_BUFFER, r, e.STATIC_DRAW), n.indexCount = r.length + } + })) + }, P.prototype.computeMeshVertices_ = function(t, e, n) { + for (var i = new Float32Array(2 * t * e * 5), r = n.getLeftEyeVisibleTanAngles(), o = n.getLeftEyeNoLensTanAngles(), a = n.getLeftEyeVisibleScreenRect(o), l = 0, c = 0; c < 2; c++) { + for (var h = 0; h < e; h++) + for (var u = 0; u < t; u++, l++) { + var d = u / (t - 1), + p = h / (e - 1), + f = d, + m = p, + g = s(r[0], r[2], d), + v = s(r[3], r[1], p), + y = Math.sqrt(g * g + v * v), + A = n.distortion.distortInverse(y), + x = v * A / y; + d = (g * A / y - o[0]) / (o[2] - o[0]), p = (x - o[3]) / (o[1] - o[3]), d = 2 * (a.x + d * a.width - .5), p = 2 * (a.y + p * a.height - .5), i[5 * l + 0] = d, i[5 * l + 1] = p, i[5 * l + 2] = f, i[5 * l + 3] = m, i[5 * l + 4] = c + } + var _ = r[2] - r[0]; + r[0] = -(_ + r[0]), r[2] = _ - r[2], _ = o[2] - o[0], o[0] = -(_ + o[0]), o[2] = _ - o[2], a.x = 1 - (a.x + a.width) + } + return i + }, P.prototype.computeMeshIndices_ = function(t, e) { + for (var n = new Uint16Array(2 * (t - 1) * (e - 1) * 6), i = t / 2, r = e / 2, o = 0, s = 0, a = 0; a < 2; a++) + for (var l = 0; l < e; l++) + for (var c = 0; c < t; c++, o++) 0 != c && 0 != l && (c <= i == l <= r ? (n[s++] = o, n[s++] = o - t - 1, n[s++] = o - t, n[s++] = o - t - 1, n[s++] = o, n[s++] = o - 1) : (n[s++] = o - 1, n[s++] = o - t, n[s++] = o, n[s++] = o - t, n[s++] = o - 1, n[s++] = o - t - 1)); + return n + }, P.prototype.getOwnPropertyDescriptor_ = function(t, e) { + var n = Object.getOwnPropertyDescriptor(t, e); + return void 0 !== n.get && void 0 !== n.set || (n.configurable = !0, n.enumerable = !0, n.get = function() { + return this.getAttribute(e) + }, n.set = function(t) { + this.setAttribute(e, t) + }), n + }; + var D = ["attribute vec2 position;", "uniform mat4 projectionMat;", "void main() {", " gl_Position = projectionMat * vec4( position, -1.0, 1.0 );", "}"].join("\n"), + I = ["precision mediump float;", "uniform vec4 color;", "void main() {", " gl_FragColor = color;", "}"].join("\n"), + O = Math.PI / 180; + + function N(t) { + this.gl = t, this.attribs = { + position: 0 + }, this.program = A(t, D, I, this.attribs), this.uniforms = x(t, this.program), this.vertexBuffer = t.createBuffer(), this.gearOffset = 0, this.gearVertexCount = 0, this.arrowOffset = 0, this.arrowVertexCount = 0, this.projMat = new Float32Array(16), this.listener = null, this.onResize() + } + + function B(t) { + this.coefficients = t + } + N.prototype.destroy = function() { + var t = this.gl; + this.listener && t.canvas.removeEventListener("click", this.listener, !1), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer) + }, N.prototype.listen = function(t, e) { + var n = this.gl.canvas; + this.listener = function(i) { + var r = n.clientWidth / 2; + i.clientX > r - 42 && i.clientX < r + 42 && i.clientY > n.clientHeight - 42 ? t(i) : i.clientX < 42 && i.clientY < 42 && e(i) + }, n.addEventListener("click", this.listener, !1) + }, N.prototype.onResize = function() { + var t = this.gl, + e = this, + n = [t.ARRAY_BUFFER_BINDING]; + L(t, n, (function(t) { + var n = [], + i = t.drawingBufferWidth / 2, + r = Math.max(screen.width, screen.height) * window.devicePixelRatio, + o = t.drawingBufferWidth / r * window.devicePixelRatio, + s = 4 * o / 2, + a = 42 * o, + l = 28 * o / 2, + c = 14 * o; + + function h(t, e) { + var r = (90 - t) * O, + o = Math.cos(r), + s = Math.sin(r); + n.push(.3125 * o * l + i, .3125 * s * l + l), n.push(e * o * l + i, e * s * l + l) + } + n.push(i - s, a), n.push(i - s, t.drawingBufferHeight), n.push(i + s, a), n.push(i + s, t.drawingBufferHeight), e.gearOffset = n.length / 2; + for (var u = 0; u <= 6; u++) { + var d = 60 * u; + h(d, 1), h(d + 12, 1), h(d + 20, .75), h(d + 40, .75), h(d + 48, 1) + } + + function p(e, i) { + n.push(c + e, t.drawingBufferHeight - c - i) + } + e.gearVertexCount = n.length / 2 - e.gearOffset, e.arrowOffset = n.length / 2; + var f = s / Math.sin(45 * O); + p(0, l), p(l, 0), p(l + f, f), p(f, l + f), p(f, l - f), p(0, l), p(l, 2 * l), p(l + f, 2 * l - f), p(f, l - f), p(0, l), p(f, l - s), p(28 * o, l - s), p(f, l + s), p(28 * o, l + s), e.arrowVertexCount = n.length / 2 - e.arrowOffset, t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.bufferData(t.ARRAY_BUFFER, new Float32Array(n), t.STATIC_DRAW) + })) + }, N.prototype.render = function() { + var t = this.gl, + e = this, + n = [t.CULL_FACE, t.DEPTH_TEST, t.BLEND, t.SCISSOR_TEST, t.STENCIL_TEST, t.COLOR_WRITEMASK, t.VIEWPORT, t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING]; + L(t, n, (function(t) { + t.disable(t.CULL_FACE), t.disable(t.DEPTH_TEST), t.disable(t.BLEND), t.disable(t.SCISSOR_TEST), t.disable(t.STENCIL_TEST), t.colorMask(!0, !0, !0, !0), t.viewport(0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.renderNoState() + })) + }, N.prototype.renderNoState = function() { + var t, e, n, i, r, o, s, a, l, c, h = this.gl; + h.useProgram(this.program), h.bindBuffer(h.ARRAY_BUFFER, this.vertexBuffer), h.enableVertexAttribArray(this.attribs.position), h.vertexAttribPointer(this.attribs.position, 2, h.FLOAT, !1, 8, 0), h.uniform4f(this.uniforms.color, 1, 1, 1, 1), t = this.projMat, e = 0, n = h.drawingBufferWidth, i = 0, r = h.drawingBufferHeight, a = 1 / (e - n), l = 1 / (i - r), c = 1 / ((o = .1) - (s = 1024)), t[0] = -2 * a, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = -2 * l, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 2 * c, t[11] = 0, t[12] = (e + n) * a, t[13] = (r + i) * l, t[14] = (s + o) * c, t[15] = 1, h.uniformMatrix4fv(this.uniforms.projectionMat, !1, this.projMat), h.drawArrays(h.TRIANGLE_STRIP, 0, 4), h.drawArrays(h.TRIANGLE_STRIP, this.gearOffset, this.gearVertexCount), h.drawArrays(h.TRIANGLE_STRIP, this.arrowOffset, this.arrowVertexCount) + }, B.prototype.distortInverse = function(t) { + for (var e = 0, n = 1, i = t - this.distort(e); Math.abs(n - e) > 1e-4;) { + var r = t - this.distort(n), + o = n - r * ((n - e) / (r - i)); + e = n, n = o, i = r + } + return n + }, B.prototype.distort = function(t) { + for (var e = t * t, n = 0, i = 0; i < this.coefficients.length; i++) n = e * (n + this.coefficients[i]); + return (n + 1) * t + }; + var F = Math.PI / 180, + z = 180 / Math.PI, + U = function(t, e, n) { + this.x = t || 0, this.y = e || 0, this.z = n || 0 + }; + U.prototype = { + constructor: U, + set: function(t, e, n) { + return this.x = t, this.y = e, this.z = n, this + }, + copy: function(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + }, + normalize: function() { + var t = this.length(); + if (0 !== t) { + var e = 1 / t; + this.multiplyScalar(e) + } else this.x = 0, this.y = 0, this.z = 0; + return this + }, + multiplyScalar: function(t) { + this.x *= t, this.y *= t, this.z *= t + }, + applyQuaternion: function(t) { + var e = this.x, + n = this.y, + i = this.z, + r = t.x, + o = t.y, + s = t.z, + a = t.w, + l = a * e + o * i - s * n, + c = a * n + s * e - r * i, + h = a * i + r * n - o * e, + u = -r * e - o * n - s * i; + return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this + }, + dot: function(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + }, + crossVectors: function(t, e) { + var n = t.x, + i = t.y, + r = t.z, + o = e.x, + s = e.y, + a = e.z; + return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this + } + }; + var H, G, V = function(t, e, n, i) { + this.x = t || 0, this.y = e || 0, this.z = n || 0, this.w = void 0 !== i ? i : 1 + }; + + function k(t) { + this.width = t.width || g(), this.height = t.height || v(), this.widthMeters = t.widthMeters, this.heightMeters = t.heightMeters, this.bevelMeters = t.bevelMeters + } + V.prototype = { + constructor: V, + set: function(t, e, n, i) { + return this.x = t, this.y = e, this.z = n, this.w = i, this + }, + copy: function(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this.w = t.w, this + }, + setFromEulerXYZ: function(t, e, n) { + var i = Math.cos(t / 2), + r = Math.cos(e / 2), + o = Math.cos(n / 2), + s = Math.sin(t / 2), + a = Math.sin(e / 2), + l = Math.sin(n / 2); + return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l + s * a * o, this.w = i * r * o - s * a * l, this + }, + setFromEulerYXZ: function(t, e, n) { + var i = Math.cos(t / 2), + r = Math.cos(e / 2), + o = Math.cos(n / 2), + s = Math.sin(t / 2), + a = Math.sin(e / 2), + l = Math.sin(n / 2); + return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l - s * a * o, this.w = i * r * o + s * a * l, this + }, + setFromAxisAngle: function(t, e) { + var n = e / 2, + i = Math.sin(n); + return this.x = t.x * i, this.y = t.y * i, this.z = t.z * i, this.w = Math.cos(n), this + }, + multiply: function(t) { + return this.multiplyQuaternions(this, t) + }, + multiplyQuaternions: function(t, e) { + var n = t.x, + i = t.y, + r = t.z, + o = t.w, + s = e.x, + a = e.y, + l = e.z, + c = e.w; + return this.x = n * c + o * s + i * l - r * a, this.y = i * c + o * a + r * s - n * l, this.z = r * c + o * l + n * a - i * s, this.w = o * c - n * s - i * a - r * l, this + }, + inverse: function() { + return this.x *= -1, this.y *= -1, this.z *= -1, this.normalize(), this + }, + normalize: function() { + var t = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); + return 0 === t ? (this.x = 0, this.y = 0, this.z = 0, this.w = 1) : (t = 1 / t, this.x = this.x * t, this.y = this.y * t, this.z = this.z * t, this.w = this.w * t), this + }, + slerp: function(t, e) { + if (0 === e) return this; + if (1 === e) return this.copy(t); + var n = this.x, + i = this.y, + r = this.z, + o = this.w, + s = o * t.w + n * t.x + i * t.y + r * t.z; + if (s < 0 ? (this.w = -t.w, this.x = -t.x, this.y = -t.y, this.z = -t.z, s = -s) : this.copy(t), s >= 1) return this.w = o, this.x = n, this.y = i, this.z = r, this; + var a = Math.acos(s), + l = Math.sqrt(1 - s * s); + if (Math.abs(l) < .001) return this.w = .5 * (o + this.w), this.x = .5 * (n + this.x), this.y = .5 * (i + this.y), this.z = .5 * (r + this.z), this; + var c = Math.sin((1 - e) * a) / l, + h = Math.sin(e * a) / l; + return this.w = o * c + this.w * h, this.x = n * c + this.x * h, this.y = i * c + this.y * h, this.z = r * c + this.z * h, this + }, + setFromUnitVectors: function(t, e) { + return void 0 === H && (H = new U), (G = t.dot(e) + 1) < 1e-6 ? (G = 0, Math.abs(t.x) > Math.abs(t.z) ? H.set(-t.y, t.x, 0) : H.set(0, -t.z, t.y)) : H.crossVectors(t, e), this.x = H.x, this.y = H.y, this.z = H.z, this.w = G, this.normalize(), this + } + }; + var W = new k({ + widthMeters: .11, + heightMeters: .062, + bevelMeters: .004 + }), + j = new k({ + widthMeters: .1038, + heightMeters: .0584, + bevelMeters: .004 + }), + X = { + CardboardV1: new Y({ + id: "CardboardV1", + label: "Cardboard I/O 2014", + fov: 40, + interLensDistance: .06, + baselineLensDistance: .035, + screenLensDistance: .042, + distortionCoefficients: [.441, .156], + inverseCoefficients: [-.4410035, .42756155, -.4804439, .5460139, -.58821183, .5733938, -.48303202, .33299083, -.17573841, .0651772, -.01488963, .001559834] + }), + CardboardV2: new Y({ + id: "CardboardV2", + label: "Cardboard I/O 2015", + fov: 60, + interLensDistance: .064, + baselineLensDistance: .035, + screenLensDistance: .039, + distortionCoefficients: [.34, .55], + inverseCoefficients: [-.33836704, -.18162185, .862655, -1.2462051, 1.0560602, -.58208317, .21609078, -.05444823, .009177956, -.0009904169, 6183535e-11, -16981803e-13] + }) + }; + + function q(t, e) { + this.viewer = X.CardboardV2, this.updateDeviceParams(t), this.distortion = new B(this.viewer.distortionCoefficients); + for (var n = 0; n < e.length; n++) { + var i = e[n]; + X[i.id] = new Y(i) + } + } + + function Y(t) { + this.id = t.id, this.label = t.label, this.fov = t.fov, this.interLensDistance = t.interLensDistance, this.baselineLensDistance = t.baselineLensDistance, this.screenLensDistance = t.screenLensDistance, this.distortionCoefficients = t.distortionCoefficients, this.inverseCoefficients = t.inverseCoefficients + } + q.prototype.updateDeviceParams = function(t) { + this.device = this.determineDevice_(t) || this.device + }, q.prototype.getDevice = function() { + return this.device + }, q.prototype.setViewer = function(t) { + this.viewer = t, this.distortion = new B(this.viewer.distortionCoefficients) + }, q.prototype.determineDevice_ = function(t) { + if (!t) return a() ? (console.warn("Using fallback iOS device measurements."), j) : (console.warn("Using fallback Android device measurements."), W); + var e = .0254 / t.xdpi, + n = .0254 / t.ydpi; + return new k({ + widthMeters: e * g(), + heightMeters: n * v(), + bevelMeters: .001 * t.bevelMm + }) + }, q.prototype.getDistortedFieldOfViewLeftEye = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = t.screenLensDistance, + r = (e.widthMeters - t.interLensDistance) / 2, + o = t.interLensDistance / 2, + s = t.baselineLensDistance - e.bevelMeters, + a = e.heightMeters - s, + l = z * Math.atan(n.distort(r / i)), + c = z * Math.atan(n.distort(o / i)), + h = z * Math.atan(n.distort(s / i)), + u = z * Math.atan(n.distort(a / i)); + return { + leftDegrees: Math.min(l, t.fov), + rightDegrees: Math.min(c, t.fov), + downDegrees: Math.min(h, t.fov), + upDegrees: Math.min(u, t.fov) + } + }, q.prototype.getLeftEyeVisibleTanAngles = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = Math.tan(-F * t.fov), + r = Math.tan(F * t.fov), + o = Math.tan(F * t.fov), + s = Math.tan(-F * t.fov), + a = e.widthMeters / 4, + l = e.heightMeters / 2, + c = t.baselineLensDistance - e.bevelMeters - l, + h = t.interLensDistance / 2 - a, + u = -c, + d = t.screenLensDistance, + p = n.distort((h - a) / d), + f = n.distort((u + l) / d), + m = n.distort((h + a) / d), + g = n.distort((u - l) / d), + v = new Float32Array(4); + return v[0] = Math.max(i, p), v[1] = Math.min(r, f), v[2] = Math.min(o, m), v[3] = Math.max(s, g), v + }, q.prototype.getLeftEyeNoLensTanAngles = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = new Float32Array(4), + r = n.distortInverse(Math.tan(-F * t.fov)), + o = n.distortInverse(Math.tan(F * t.fov)), + s = n.distortInverse(Math.tan(F * t.fov)), + a = n.distortInverse(Math.tan(-F * t.fov)), + l = e.widthMeters / 4, + c = e.heightMeters / 2, + h = t.baselineLensDistance - e.bevelMeters - c, + u = t.interLensDistance / 2 - l, + d = -h, + p = t.screenLensDistance, + f = (u - l) / p, + m = (d + c) / p, + g = (u + l) / p, + v = (d - c) / p; + return i[0] = Math.max(r, f), i[1] = Math.min(o, m), i[2] = Math.min(s, g), i[3] = Math.max(a, v), i + }, q.prototype.getLeftEyeVisibleScreenRect = function(t) { + var e = this.viewer, + n = this.device, + i = e.screenLensDistance, + r = (n.widthMeters - e.interLensDistance) / 2, + o = e.baselineLensDistance - n.bevelMeters, + s = (t[0] * i + r) / n.widthMeters, + a = (t[1] * i + o) / n.heightMeters, + l = (t[2] * i + r) / n.widthMeters, + c = (t[3] * i + o) / n.heightMeters; + return { + x: s, + y: c, + width: l - s, + height: a - c + } + }, q.prototype.getFieldOfViewLeftEye = function(t) { + return t ? this.getUndistortedFieldOfViewLeftEye() : this.getDistortedFieldOfViewLeftEye() + }, q.prototype.getFieldOfViewRightEye = function(t) { + var e = this.getFieldOfViewLeftEye(t); + return { + leftDegrees: e.rightDegrees, + rightDegrees: e.leftDegrees, + upDegrees: e.upDegrees, + downDegrees: e.downDegrees + } + }, q.prototype.getUndistortedFieldOfViewLeftEye = function() { + var t = this.getUndistortedParams_(); + return { + leftDegrees: z * Math.atan(t.outerDist), + rightDegrees: z * Math.atan(t.innerDist), + downDegrees: z * Math.atan(t.bottomDist), + upDegrees: z * Math.atan(t.topDist) + } + }, q.prototype.getUndistortedViewportLeftEye = function() { + var t = this.getUndistortedParams_(), + e = this.viewer, + n = this.device, + i = e.screenLensDistance, + r = n.widthMeters / i, + o = n.heightMeters / i, + s = n.width / r, + a = n.height / o, + l = Math.round((t.eyePosX - t.outerDist) * s), + c = Math.round((t.eyePosY - t.bottomDist) * a); + return { + x: l, + y: c, + width: Math.round((t.eyePosX + t.innerDist) * s) - l, + height: Math.round((t.eyePosY + t.topDist) * a) - c + } + }, q.prototype.getUndistortedParams_ = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = t.screenLensDistance, + r = t.interLensDistance / 2 / i, + o = e.widthMeters / i, + s = e.heightMeters / i, + a = o / 2 - r, + l = (t.baselineLensDistance - e.bevelMeters) / i, + c = t.fov, + h = n.distortInverse(Math.tan(F * c)), + u = Math.min(a, h), + d = Math.min(r, h), + p = Math.min(l, h); + return { + outerDist: u, + innerDist: d, + topDist: Math.min(s - l, h), + bottomDist: p, + eyePosX: a, + eyePosY: l + } + }, q.Viewers = X; + var Q = { + format: 1, + last_updated: "2019-11-09T17:36:14Z", + devices: [{ + type: "android", + rules: [{ + mdmh: "asus/*/Nexus 7/*" + }, { + ua: "Nexus 7" + }], + dpi: [320.8, 323], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "asus/*/ASUS_X00PD/*" + }, { + ua: "ASUS_X00PD" + }], + dpi: 245, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "asus/*/ASUS_X008D/*" + }, { + ua: "ASUS_X008D" + }], + dpi: 282, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "asus/*/ASUS_Z00AD/*" + }, { + ua: "ASUS_Z00AD" + }], + dpi: [403, 404.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 2 XL/*" + }, { + ua: "Pixel 2 XL" + }], + dpi: 537.9, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 3 XL/*" + }, { + ua: "Pixel 3 XL" + }], + dpi: [558.5, 553.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel XL/*" + }, { + ua: "Pixel XL" + }], + dpi: [537.9, 533], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 3/*" + }, { + ua: "Pixel 3" + }], + dpi: 442.4, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 2/*" + }, { + ua: "Pixel 2" + }], + dpi: 441, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel/*" + }, { + ua: "Pixel" + }], + dpi: [432.6, 436.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC6435LVW/*" + }, { + ua: "HTC6435LVW" + }], + dpi: [449.7, 443.3], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One XL/*" + }, { + ua: "HTC One XL" + }], + dpi: [315.3, 314.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "htc/*/Nexus 9/*" + }, { + ua: "Nexus 9" + }], + dpi: 289, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One M9/*" + }, { + ua: "HTC One M9" + }], + dpi: [442.5, 443.3], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One_M8/*" + }, { + ua: "HTC One_M8" + }], + dpi: [449.7, 447.4], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One/*" + }, { + ua: "HTC One" + }], + dpi: 472.8, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/Nexus 6P/*" + }, { + ua: "Nexus 6P" + }], + dpi: [515.1, 518], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/BLN-L24/*" + }, { + ua: "HONORBLN-L24" + }], + dpi: 480, + bw: 4, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/BKL-L09/*" + }, { + ua: "BKL-L09" + }], + dpi: 403, + bw: 3.47, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LENOVO/*/Lenovo PB2-690Y/*" + }, { + ua: "Lenovo PB2-690Y" + }], + dpi: [457.2, 454.713], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/Nexus 5X/*" + }, { + ua: "Nexus 5X" + }], + dpi: [422, 419.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LGMS345/*" + }, { + ua: "LGMS345" + }], + dpi: [221.7, 219.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LG-D800/*" + }, { + ua: "LG-D800" + }], + dpi: [422, 424.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LG-D850/*" + }, { + ua: "LG-D850" + }], + dpi: [537.9, 541.9], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/VS985 4G/*" + }, { + ua: "VS985 4G" + }], + dpi: [537.9, 535.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/Nexus 5/*" + }, { + ua: "Nexus 5 B" + }], + dpi: [442.4, 444.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/Nexus 4/*" + }, { + ua: "Nexus 4" + }], + dpi: [319.8, 318.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LG-P769/*" + }, { + ua: "LG-P769" + }], + dpi: [240.6, 247.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LGMS323/*" + }, { + ua: "LGMS323" + }], + dpi: [206.6, 204.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LGLS996/*" + }, { + ua: "LGLS996" + }], + dpi: [403.4, 401.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Micromax/*/4560MMX/*" + }, { + ua: "4560MMX" + }], + dpi: [240, 219.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Micromax/*/A250/*" + }, { + ua: "Micromax A250" + }], + dpi: [480, 446.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Micromax/*/Micromax AQ4501/*" + }, { + ua: "Micromax AQ4501" + }], + dpi: 240, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/G5/*" + }, { + ua: "Moto G (5) Plus" + }], + dpi: [403.4, 403], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/DROID RAZR/*" + }, { + ua: "DROID RAZR" + }], + dpi: [368.1, 256.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT830C/*" + }, { + ua: "XT830C" + }], + dpi: [254, 255.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1021/*" + }, { + ua: "XT1021" + }], + dpi: [254, 256.7], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1023/*" + }, { + ua: "XT1023" + }], + dpi: [254, 256.7], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1028/*" + }, { + ua: "XT1028" + }], + dpi: [326.6, 327.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1034/*" + }, { + ua: "XT1034" + }], + dpi: [326.6, 328.4], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1053/*" + }, { + ua: "XT1053" + }], + dpi: [315.3, 316.1], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1562/*" + }, { + ua: "XT1562" + }], + dpi: [403.4, 402.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/Nexus 6/*" + }, { + ua: "Nexus 6 B" + }], + dpi: [494.3, 489.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1063/*" + }, { + ua: "XT1063" + }], + dpi: [295, 296.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1064/*" + }, { + ua: "XT1064" + }], + dpi: [295, 295.6], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1092/*" + }, { + ua: "XT1092" + }], + dpi: [422, 424.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1095/*" + }, { + ua: "XT1095" + }], + dpi: [422, 423.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/G4/*" + }, { + ua: "Moto G (4)" + }], + dpi: 401, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/A0001/*" + }, { + ua: "A0001" + }], + dpi: [403.4, 401], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE E1001/*" + }, { + ua: "ONE E1001" + }], + dpi: [442.4, 441.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE E1003/*" + }, { + ua: "ONE E1003" + }], + dpi: [442.4, 441.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE E1005/*" + }, { + ua: "ONE E1005" + }], + dpi: [442.4, 441.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A2001/*" + }, { + ua: "ONE A2001" + }], + dpi: [391.9, 405.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A2003/*" + }, { + ua: "ONE A2003" + }], + dpi: [391.9, 405.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A2005/*" + }, { + ua: "ONE A2005" + }], + dpi: [391.9, 405.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A3000/*" + }, { + ua: "ONEPLUS A3000" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A3003/*" + }, { + ua: "ONEPLUS A3003" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A3010/*" + }, { + ua: "ONEPLUS A3010" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A5000/*" + }, { + ua: "ONEPLUS A5000 " + }], + dpi: [403.411, 399.737], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A5010/*" + }, { + ua: "ONEPLUS A5010" + }], + dpi: [403, 400], + bw: 2, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6000/*" + }, { + ua: "ONEPLUS A6000" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6003/*" + }, { + ua: "ONEPLUS A6003" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6010/*" + }, { + ua: "ONEPLUS A6010" + }], + dpi: 401, + bw: 2, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6013/*" + }, { + ua: "ONEPLUS A6013" + }], + dpi: 401, + bw: 2, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OPPO/*/X909/*" + }, { + ua: "X909" + }], + dpi: [442.4, 444.1], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9082/*" + }, { + ua: "GT-I9082" + }], + dpi: [184.7, 185.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G360P/*" + }, { + ua: "SM-G360P" + }], + dpi: [196.7, 205.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/Nexus S/*" + }, { + ua: "Nexus S" + }], + dpi: [234.5, 229.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9300/*" + }, { + ua: "GT-I9300" + }], + dpi: [304.8, 303.9], + bw: 5, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-T230NU/*" + }, { + ua: "SM-T230NU" + }], + dpi: 216, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SGH-T399/*" + }, { + ua: "SGH-T399" + }], + dpi: [217.7, 231.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SGH-M919/*" + }, { + ua: "SGH-M919" + }], + dpi: [440.8, 437.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N9005/*" + }, { + ua: "SM-N9005" + }], + dpi: [386.4, 387], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SAMSUNG-SM-N900A/*" + }, { + ua: "SAMSUNG-SM-N900A" + }], + dpi: [386.4, 387.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9500/*" + }, { + ua: "GT-I9500" + }], + dpi: [442.5, 443.3], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9505/*" + }, { + ua: "GT-I9505" + }], + dpi: 439.4, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G900F/*" + }, { + ua: "SM-G900F" + }], + dpi: [415.6, 431.6], + bw: 5, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G900M/*" + }, { + ua: "SM-G900M" + }], + dpi: [415.6, 431.6], + bw: 5, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G800F/*" + }, { + ua: "SM-G800F" + }], + dpi: 326.8, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G906S/*" + }, { + ua: "SM-G906S" + }], + dpi: [562.7, 572.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9300/*" + }, { + ua: "GT-I9300" + }], + dpi: [306.7, 304.8], + bw: 5, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-T535/*" + }, { + ua: "SM-T535" + }], + dpi: [142.6, 136.4], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N920C/*" + }, { + ua: "SM-N920C" + }], + dpi: [515.1, 518.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N920P/*" + }, { + ua: "SM-N920P" + }], + dpi: [386.3655, 390.144], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N920W8/*" + }, { + ua: "SM-N920W8" + }], + dpi: [515.1, 518.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9300I/*" + }, { + ua: "GT-I9300I" + }], + dpi: [304.8, 305.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9195/*" + }, { + ua: "GT-I9195" + }], + dpi: [249.4, 256.7], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SPH-L520/*" + }, { + ua: "SPH-L520" + }], + dpi: [249.4, 255.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SAMSUNG-SGH-I717/*" + }, { + ua: "SAMSUNG-SGH-I717" + }], + dpi: 285.8, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SPH-D710/*" + }, { + ua: "SPH-D710" + }], + dpi: [217.7, 204.2], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-N7100/*" + }, { + ua: "GT-N7100" + }], + dpi: 265.1, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SCH-I605/*" + }, { + ua: "SCH-I605" + }], + dpi: 265.1, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/Galaxy Nexus/*" + }, { + ua: "Galaxy Nexus" + }], + dpi: [315.3, 314.2], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N910H/*" + }, { + ua: "SM-N910H" + }], + dpi: [515.1, 518], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N910C/*" + }, { + ua: "SM-N910C" + }], + dpi: [515.2, 520.2], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G130M/*" + }, { + ua: "SM-G130M" + }], + dpi: [165.9, 164.8], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G928I/*" + }, { + ua: "SM-G928I" + }], + dpi: [515.1, 518.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G920F/*" + }, { + ua: "SM-G920F" + }], + dpi: 580.6, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G920P/*" + }, { + ua: "SM-G920P" + }], + dpi: [522.5, 577], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G925F/*" + }, { + ua: "SM-G925F" + }], + dpi: 580.6, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G925V/*" + }, { + ua: "SM-G925V" + }], + dpi: [522.5, 576.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G930F/*" + }, { + ua: "SM-G930F" + }], + dpi: 576.6, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G935F/*" + }, { + ua: "SM-G935F" + }], + dpi: 533, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G950F/*" + }, { + ua: "SM-G950F" + }], + dpi: [562.707, 565.293], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G955U/*" + }, { + ua: "SM-G955U" + }], + dpi: [522.514, 525.762], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G955F/*" + }, { + ua: "SM-G955F" + }], + dpi: [522.514, 525.762], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960F/*" + }, { + ua: "SM-G960F" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G9600/*" + }, { + ua: "SM-G9600" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960T/*" + }, { + ua: "SM-G960T" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960N/*" + }, { + ua: "SM-G960N" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960U/*" + }, { + ua: "SM-G960U" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G9608/*" + }, { + ua: "SM-G9608" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960FD/*" + }, { + ua: "SM-G960FD" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960W/*" + }, { + ua: "SM-G960W" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G965F/*" + }, { + ua: "SM-G965F" + }], + dpi: 529, + bw: 2, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/C6903/*" + }, { + ua: "C6903" + }], + dpi: [442.5, 443.3], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/D6653/*" + }, { + ua: "D6653" + }], + dpi: [428.6, 427.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/E6653/*" + }, { + ua: "E6653" + }], + dpi: [428.6, 425.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/E6853/*" + }, { + ua: "E6853" + }], + dpi: [403.4, 401.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/SGP321/*" + }, { + ua: "SGP321" + }], + dpi: [224.7, 224.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "TCT/*/ALCATEL ONE TOUCH Fierce/*" + }, { + ua: "ALCATEL ONE TOUCH Fierce" + }], + dpi: [240, 247.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "THL/*/thl 5000/*" + }, { + ua: "thl 5000" + }], + dpi: [480, 443.3], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Fly/*/IQ4412/*" + }, { + ua: "IQ4412" + }], + dpi: 307.9, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "ZTE/*/ZTE Blade L2/*" + }, { + ua: "ZTE Blade L2" + }], + dpi: 240, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "BENEVE/*/VR518/*" + }, { + ua: "VR518" + }], + dpi: 480, + bw: 3, + ac: 500 + }, { + type: "ios", + rules: [{ + res: [640, 960] + }], + dpi: [325.1, 328.4], + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [640, 1136] + }], + dpi: [317.1, 320.2], + bw: 3, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [750, 1334] + }], + dpi: 326.4, + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [1242, 2208] + }], + dpi: [453.6, 458.4], + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [1125, 2001] + }], + dpi: [410.9, 415.4], + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [1125, 2436] + }], + dpi: 458, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/EML-L29/*" + }, { + ua: "EML-L29" + }], + dpi: 428, + bw: 3.45, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Nokia/*/Nokia 7.1/*" + }, { + ua: "Nokia 7.1" + }], + dpi: [432, 431.9], + bw: 3, + ac: 500 + }, { + type: "ios", + rules: [{ + res: [1242, 2688] + }], + dpi: 458, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G570M/*" + }, { + ua: "SM-G570M" + }], + dpi: 320, + bw: 3.684, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G970F/*" + }, { + ua: "SM-G970F" + }], + dpi: 438, + bw: 2.281, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G973F/*" + }, { + ua: "SM-G973F" + }], + dpi: 550, + bw: 2.002, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G975F/*" + }, { + ua: "SM-G975F" + }], + dpi: 522, + bw: 2.054, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G977F/*" + }, { + ua: "SM-G977F" + }], + dpi: 505, + bw: 2.334, + ac: 500 + }, { + type: "ios", + rules: [{ + res: [828, 1792] + }], + dpi: 326, + bw: 5, + ac: 500 + }] + }; + + function Z(t, e) { + if (this.dpdb = Q, this.recalculateDeviceParams_(), t) { + this.onDeviceParamsUpdated = e; + var n = new XMLHttpRequest, + i = this; + n.open("GET", t, !0), n.addEventListener("load", (function() { + i.loading = !1, n.status >= 200 && n.status <= 299 ? (i.dpdb = JSON.parse(n.response), i.recalculateDeviceParams_()) : console.error("Error loading online DPDB!") + })), n.send() + } + } + + function J(t) { + this.xdpi = t.xdpi, this.ydpi = t.ydpi, this.bevelMm = t.bevelMm + } + + function K(t, e) { + this.set(t, e) + } + + function $(t, e) { + this.kFilter = t, this.isDebug = e, this.currentAccelMeasurement = new K, this.currentGyroMeasurement = new K, this.previousGyroMeasurement = new K, a() ? this.filterQ = new V(-1, 0, 0, 1) : this.filterQ = new V(1, 0, 0, 1), this.previousFilterQ = new V, this.previousFilterQ.copy(this.filterQ), this.accelQ = new V, this.isOrientationInitialized = !1, this.estimatedGravity = new U, this.measuredGravity = new U, this.gyroIntegralQ = new V + } + + function tt(t, e) { + this.predictionTimeS = t, this.isDebug = e, this.previousQ = new V, this.previousTimestampS = null, this.deltaQ = new V, this.outQ = new V + } + + function et(t, e, n, i) { + this.yawOnly = n, this.accelerometer = new U, this.gyroscope = new U, this.filter = new $(t, i), this.posePredictor = new tt(e, i), this.isFirefoxAndroid = h(), this.isIOS = a(); + var r = u(); + this.isDeviceMotionInRadians = !this.isIOS && r && r < 66, this.isWithoutDeviceMotion = p() || d(), this.filterToWorldQ = new V, a() ? this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), Math.PI / 2) : this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), this.inverseWorldToScreenQ = new V, this.worldToScreenQ = new V, this.originalPoseAdjustQ = new V, this.originalPoseAdjustQ.setFromAxisAngle(new U(0, 0, 1), -window.orientation * Math.PI / 180), this.setScreenTransform_(), m() && this.filterToWorldQ.multiply(this.inverseWorldToScreenQ), this.resetQ = new V, this.orientationOut_ = new Float32Array(4), this.start() + } + Z.prototype.getDeviceParams = function() { + return this.deviceParams + }, Z.prototype.recalculateDeviceParams_ = function() { + var t = this.calcDeviceParams_(); + t ? (this.deviceParams = t, this.onDeviceParamsUpdated && this.onDeviceParamsUpdated(this.deviceParams)) : console.error("Failed to recalculate device parameters.") + }, Z.prototype.calcDeviceParams_ = function() { + var t = this.dpdb; + if (!t) return console.error("DPDB not available."), null; + if (1 != t.format) return console.error("DPDB has unexpected format version."), null; + if (!t.devices || !t.devices.length) return console.error("DPDB does not have a devices section."), null; + var e = navigator.userAgent || navigator.vendor || window.opera, + n = g(), + i = v(); + if (!t.devices) return console.error("DPDB has no devices section."), null; + for (var r = 0; r < t.devices.length; r++) { + var o = t.devices[r]; + if (o.rules) + if ("ios" == o.type || "android" == o.type) { + if (a() == ("ios" == o.type)) { + for (var s = !1, l = 0; l < o.rules.length; l++) { + var c = o.rules[l]; + if (this.ruleMatches_(c, e, n, i)) { + s = !0; + break + } + } + if (s) return new J({ + xdpi: o.dpi[0] || o.dpi, + ydpi: o.dpi[1] || o.dpi, + bevelMm: o.bw + }) + } + } else console.warn("Device[" + r + "] has invalid type."); + else console.warn("Device[" + r + "] has no rules section.") + } + return console.warn("No DPDB device match."), null + }, Z.prototype.ruleMatches_ = function(t, e, n, i) { + if (!t.ua && !t.res) return !1; + if (t.ua && "SM" === t.ua.substring(0, 2) && (t.ua = t.ua.substring(0, 7)), t.ua && e.indexOf(t.ua) < 0) return !1; + if (t.res) { + if (!t.res[0] || !t.res[1]) return !1; + var r = t.res[0], + o = t.res[1]; + if (Math.min(n, i) != Math.min(r, o) || Math.max(n, i) != Math.max(r, o)) return !1 + } + return !0 + }, K.prototype.set = function(t, e) { + this.sample = t, this.timestampS = e + }, K.prototype.copy = function(t) { + this.set(t.sample, t.timestampS) + }, $.prototype.addAccelMeasurement = function(t, e) { + this.currentAccelMeasurement.set(t, e) + }, $.prototype.addGyroMeasurement = function(t, e) { + this.currentGyroMeasurement.set(t, e); + var n, i = e - this.previousGyroMeasurement.timestampS; + n = i, isNaN(n) || n <= .001 || n > 1 || this.run_(), this.previousGyroMeasurement.copy(this.currentGyroMeasurement) + }, $.prototype.run_ = function() { + if (!this.isOrientationInitialized) return this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample), this.previousFilterQ.copy(this.accelQ), void(this.isOrientationInitialized = !0); + var t = this.currentGyroMeasurement.timestampS - this.previousGyroMeasurement.timestampS, + e = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, t); + this.gyroIntegralQ.multiply(e), this.filterQ.copy(this.previousFilterQ), this.filterQ.multiply(e); + var n = new V; + n.copy(this.filterQ), n.inverse(), this.estimatedGravity.set(0, 0, -1), this.estimatedGravity.applyQuaternion(n), this.estimatedGravity.normalize(), this.measuredGravity.copy(this.currentAccelMeasurement.sample), this.measuredGravity.normalize(); + var i, r = new V; + r.setFromUnitVectors(this.estimatedGravity, this.measuredGravity), r.inverse(), this.isDebug && console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)", z * ((i = r).w > 1 ? (console.warn("getQuaternionAngle: w > 1"), 0) : 2 * Math.acos(i.w)), this.estimatedGravity.x.toFixed(1), this.estimatedGravity.y.toFixed(1), this.estimatedGravity.z.toFixed(1), this.measuredGravity.x.toFixed(1), this.measuredGravity.y.toFixed(1), this.measuredGravity.z.toFixed(1)); + var o = new V; + o.copy(this.filterQ), o.multiply(r), this.filterQ.slerp(o, 1 - this.kFilter), this.previousFilterQ.copy(this.filterQ) + }, $.prototype.getOrientation = function() { + return this.filterQ + }, $.prototype.accelToQuaternion_ = function(t) { + var e = new U; + e.copy(t), e.normalize(); + var n = new V; + return n.setFromUnitVectors(new U(0, 0, -1), e), n.inverse(), n + }, $.prototype.gyroToQuaternionDelta_ = function(t, e) { + var n = new V, + i = new U; + return i.copy(t), i.normalize(), n.setFromAxisAngle(i, t.length() * e), n + }, tt.prototype.getPrediction = function(t, e, n) { + if (!this.previousTimestampS) return this.previousQ.copy(t), this.previousTimestampS = n, t; + var i = new U; + i.copy(e), i.normalize(); + var r = e.length(); + if (r < 20 * F) return this.isDebug && console.log("Moving slowly, at %s deg/s: no prediction", (z * r).toFixed(1)), this.outQ.copy(t), this.previousQ.copy(t), this.outQ; + var o = r * this.predictionTimeS; + return this.deltaQ.setFromAxisAngle(i, o), this.outQ.copy(this.previousQ), this.outQ.multiply(this.deltaQ), this.previousQ.copy(t), this.previousTimestampS = n, this.outQ + }, et.prototype.getPosition = function() { + return null + }, et.prototype.getOrientation = function() { + var t = void 0; + if (this.isWithoutDeviceMotion && this._deviceOrientationQ) return this.deviceOrientationFixQ = this.deviceOrientationFixQ || (n = (new V).setFromAxisAngle(new U(0, 0, -1), 0), i = new V, -90 === window.orientation ? i.setFromAxisAngle(new U(0, 1, 0), Math.PI / -2) : i.setFromAxisAngle(new U(0, 1, 0), Math.PI / 2), n.multiply(i)), this.deviceOrientationFilterToWorldQ = this.deviceOrientationFilterToWorldQ || ((e = new V).setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), e), t = this._deviceOrientationQ, (r = new V).copy(t), r.multiply(this.deviceOrientationFilterToWorldQ), r.multiply(this.resetQ), r.multiply(this.worldToScreenQ), r.multiplyQuaternions(this.deviceOrientationFixQ, r), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_; + var e, n, i, r, o = this.filter.getOrientation(); + return t = this.posePredictor.getPrediction(o, this.gyroscope, this.previousTimestampS), (r = new V).copy(this.filterToWorldQ), r.multiply(this.resetQ), r.multiply(t), r.multiply(this.worldToScreenQ), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_ + }, et.prototype.resetPose = function() { + this.resetQ.copy(this.filter.getOrientation()), this.resetQ.x = 0, this.resetQ.y = 0, this.resetQ.z *= -1, this.resetQ.normalize(), m() && this.resetQ.multiply(this.inverseWorldToScreenQ), this.resetQ.multiply(this.originalPoseAdjustQ) + }, et.prototype.onDeviceOrientation_ = function(t) { + this._deviceOrientationQ = this._deviceOrientationQ || new V; + var e = t.alpha, + n = t.beta, + i = t.gamma; + e = (e || 0) * Math.PI / 180, n = (n || 0) * Math.PI / 180, i = (i || 0) * Math.PI / 180, this._deviceOrientationQ.setFromEulerYXZ(n, e, -i) + }, et.prototype.onDeviceMotion_ = function(t) { + this.updateDeviceMotion_(t) + }, et.prototype.updateDeviceMotion_ = function(t) { + var e = t.accelerationIncludingGravity, + n = t.rotationRate, + i = t.timeStamp / 1e3, + r = i - this.previousTimestampS; + return r < 0 ? (S("fusion-pose-sensor:invalid:non-monotonic", "Invalid timestamps detected: non-monotonic timestamp from devicemotion"), void(this.previousTimestampS = i)) : r <= .001 || r > 1 ? (S("fusion-pose-sensor:invalid:outside-threshold", "Invalid timestamps detected: Timestamp from devicemotion outside expected range."), void(this.previousTimestampS = i)) : (this.accelerometer.set(-e.x, -e.y, -e.z), n && (f() ? this.gyroscope.set(-n.beta, n.alpha, n.gamma) : this.gyroscope.set(n.alpha, n.beta, n.gamma), this.isDeviceMotionInRadians || this.gyroscope.multiplyScalar(Math.PI / 180), this.filter.addGyroMeasurement(this.gyroscope, i)), this.filter.addAccelMeasurement(this.accelerometer, i), void(this.previousTimestampS = i)) + }, et.prototype.onOrientationChange_ = function(t) { + this.setScreenTransform_() + }, et.prototype.onMessage_ = function(t) { + var e = t.data; + e && e.type && "devicemotion" === e.type.toLowerCase() && this.updateDeviceMotion_(e.deviceMotionEvent) + }, et.prototype.setScreenTransform_ = function() { + switch (this.worldToScreenQ.set(0, 0, 0, 1), window.orientation) { + case 0: + break; + case 90: + this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), -Math.PI / 2); + break; + case -90: + this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), Math.PI / 2) + } + this.inverseWorldToScreenQ.copy(this.worldToScreenQ), this.inverseWorldToScreenQ.inverse() + }, et.prototype.start = function() { + var t, e, n; + this.onDeviceMotionCallback_ = this.onDeviceMotion_.bind(this), this.onOrientationChangeCallback_ = this.onOrientationChange_.bind(this), this.onMessageCallback_ = this.onMessage_.bind(this), this.onDeviceOrientationCallback_ = this.onDeviceOrientation_.bind(this), a() && (t = window.self !== window.top, e = E(document.referrer), n = E(window.location.href), t && e !== n) && window.addEventListener("message", this.onMessageCallback_), window.addEventListener("orientationchange", this.onOrientationChangeCallback_), this.isWithoutDeviceMotion ? window.addEventListener("deviceorientation", this.onDeviceOrientationCallback_) : window.addEventListener("devicemotion", this.onDeviceMotionCallback_) + }, et.prototype.stop = function() { + window.removeEventListener("devicemotion", this.onDeviceMotionCallback_), window.removeEventListener("deviceorientation", this.onDeviceOrientationCallback_), window.removeEventListener("orientationchange", this.onOrientationChangeCallback_), window.removeEventListener("message", this.onMessageCallback_) + }; + var nt = new U(1, 0, 0), + it = new U(0, 0, 1), + rt = new V; + rt.setFromAxisAngle(nt, -Math.PI / 2), rt.multiply((new V).setFromAxisAngle(it, Math.PI / 2)); + var ot = function() { + function t(e) { + ! function(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + }(this, t), this.config = e, this.sensor = null, this.fusionSensor = null, this._out = new Float32Array(4), this.api = null, this.errors = [], this._sensorQ = new V, this._outQ = new V, this._onSensorRead = this._onSensorRead.bind(this), this._onSensorError = this._onSensorError.bind(this), this.init() + } + return r(t, [{ + key: "init", + value: function() { + var t = null; + try { + (t = new RelativeOrientationSensor({ + frequency: 60, + referenceFrame: "screen" + })).addEventListener("error", this._onSensorError) + } catch (t) { + this.errors.push(t), "SecurityError" === t.name ? (console.error("Cannot construct sensors due to the Feature Policy"), console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'), this.useDeviceMotion()) : "ReferenceError" === t.name ? this.useDeviceMotion() : console.error(t) + } + t && (this.api = "sensor", this.sensor = t, this.sensor.addEventListener("reading", this._onSensorRead), this.sensor.start()) + } + }, { + key: "useDeviceMotion", + value: function() { + this.api = "devicemotion", this.fusionSensor = new et(this.config.K_FILTER, this.config.PREDICTION_TIME_S, this.config.YAW_ONLY, this.config.DEBUG), this.sensor && (this.sensor.removeEventListener("reading", this._onSensorRead), this.sensor.removeEventListener("error", this._onSensorError), this.sensor = null) + } + }, { + key: "getOrientation", + value: function() { + if (this.fusionSensor) return this.fusionSensor.getOrientation(); + if (!this.sensor || !this.sensor.quaternion) return this._out[0] = this._out[1] = this._out[2] = 0, this._out[3] = 1, this._out; + var t = this.sensor.quaternion; + this._sensorQ.set(t[0], t[1], t[2], t[3]); + var e = this._outQ; + return e.copy(rt), e.multiply(this._sensorQ), this.config.YAW_ONLY && (e.x = e.z = 0, e.normalize()), this._out[0] = e.x, this._out[1] = e.y, this._out[2] = e.z, this._out[3] = e.w, this._out + } + }, { + key: "_onSensorError", + value: function(t) { + this.errors.push(t.error), "NotAllowedError" === t.error.name ? console.error("Permission to access sensor was denied") : "NotReadableError" === t.error.name ? console.error("Sensor could not be read") : console.error(t.error), this.useDeviceMotion() + } + }, { + key: "_onSensorRead", + value: function() {} + }]), t + }(); + + function st() { + this.loadIcon_(); + var t = document.createElement("div"); + (o = t.style).position = "fixed", o.top = 0, o.right = 0, o.bottom = 0, o.left = 0, o.backgroundColor = "gray", o.fontFamily = "sans-serif", o.zIndex = 1e6; + var e = document.createElement("img"); + e.src = this.icon, (o = e.style).marginLeft = "25%", o.marginTop = "25%", o.width = "50%", t.appendChild(e); + var n = document.createElement("div"); + (o = n.style).textAlign = "center", o.fontSize = "16px", o.lineHeight = "24px", o.margin = "24px 25%", o.width = "50%", n.innerHTML = "Place your phone into your Cardboard viewer.", t.appendChild(n); + var i = document.createElement("div"); + (o = i.style).backgroundColor = "#CFD8DC", o.position = "fixed", o.bottom = 0, o.width = "100%", o.height = "48px", o.padding = "14px 24px", o.boxSizing = "border-box", o.color = "#656A6B", t.appendChild(i); + var r = document.createElement("div"); + r.style.float = "left", r.innerHTML = "No Cardboard viewer?"; + var o, s = document.createElement("a"); + s.href = "https://www.google.com/get/cardboard/get-cardboard/", s.innerHTML = "get one", s.target = "_blank", (o = s.style).float = "right", o.fontWeight = 600, o.textTransform = "uppercase", o.borderLeft = "1px solid gray", o.paddingLeft = "24px", o.textDecoration = "none", o.color = "#656A6B", i.appendChild(r), i.appendChild(s), this.overlay = t, this.text = n, this.hide() + } + + function at(t) { + try { + this.selectedKey = localStorage.getItem("WEBVR_CARDBOARD_VIEWER") + } catch (t) { + console.error("Failed to load viewer profile: %s", t) + } + this.selectedKey || (this.selectedKey = t || "CardboardV1"), this.dialog = this.createDialog_(q.Viewers), this.root = null, this.onChangeCallbacks_ = [] + } + st.prototype.show = function(t) { + t || this.overlay.parentElement ? t && (this.overlay.parentElement && this.overlay.parentElement != t && this.overlay.parentElement.removeChild(this.overlay), t.appendChild(this.overlay)) : document.body.appendChild(this.overlay), this.overlay.style.display = "block"; + var e = this.overlay.querySelector("img").style; + m() ? (e.width = "20%", e.marginLeft = "40%", e.marginTop = "3%") : (e.width = "50%", e.marginLeft = "25%", e.marginTop = "25%") + }, st.prototype.hide = function() { + this.overlay.style.display = "none" + }, st.prototype.showTemporarily = function(t, e) { + this.show(e), this.timer = setTimeout(this.hide.bind(this), t) + }, st.prototype.disableShowTemporarily = function() { + clearTimeout(this.timer) + }, st.prototype.update = function() { + this.disableShowTemporarily(), !m() && _() ? this.show() : this.hide() + }, st.prototype.loadIcon_ = function() { + this.icon = "data:image/svg+xml," + encodeURIComponent("") + }, at.prototype.show = function(t) { + this.root = t, t.appendChild(this.dialog), this.dialog.querySelector("#" + this.selectedKey).checked = !0, this.dialog.style.display = "block" + }, at.prototype.hide = function() { + this.root && this.root.contains(this.dialog) && this.root.removeChild(this.dialog), this.dialog.style.display = "none" + }, at.prototype.getCurrentViewer = function() { + return q.Viewers[this.selectedKey] + }, at.prototype.getSelectedKey_ = function() { + var t = this.dialog.querySelector("input[name=field]:checked"); + return t ? t.id : null + }, at.prototype.onChange = function(t) { + this.onChangeCallbacks_.push(t) + }, at.prototype.fireOnChange_ = function(t) { + for (var e = 0; e < this.onChangeCallbacks_.length; e++) this.onChangeCallbacks_[e](t) + }, at.prototype.onSave_ = function() { + if (this.selectedKey = this.getSelectedKey_(), this.selectedKey && q.Viewers[this.selectedKey]) { + this.fireOnChange_(q.Viewers[this.selectedKey]); + try { + localStorage.setItem("WEBVR_CARDBOARD_VIEWER", this.selectedKey) + } catch (t) { + console.error("Failed to save viewer profile: %s", t) + } + this.hide() + } else console.error("ViewerSelector.onSave_: this should never happen!") + }, at.prototype.createDialog_ = function(t) { + var e = document.createElement("div"); + e.classList.add("webvr-polyfill-viewer-selector"), e.style.display = "none"; + var n = document.createElement("div"); + (r = n.style).position = "fixed", r.left = 0, r.top = 0, r.width = "100%", r.height = "100%", r.background = "rgba(0, 0, 0, 0.3)", n.addEventListener("click", this.hide.bind(this)); + var i = document.createElement("div"), + r = i.style; + for (var o in r.boxSizing = "border-box", r.position = "fixed", r.top = "24px", r.left = "50%", r.marginLeft = "-140px", r.width = "280px", r.padding = "24px", r.overflow = "hidden", r.background = "#fafafa", r.fontFamily = "'Roboto', sans-serif", r.boxShadow = "0px 5px 20px #666", i.appendChild(this.createH1_("Select your viewer")), t) i.appendChild(this.createChoice_(o, t[o].label)); + return i.appendChild(this.createButton_("Save", this.onSave_.bind(this))), e.appendChild(n), e.appendChild(i), e + }, at.prototype.createH1_ = function(t) { + var e = document.createElement("h1"), + n = e.style; + return n.color = "black", n.fontSize = "20px", n.fontWeight = "bold", n.marginTop = 0, n.marginBottom = "24px", e.innerHTML = t, e + }, at.prototype.createChoice_ = function(t, e) { + var n = document.createElement("div"); + n.style.marginTop = "8px", n.style.color = "black"; + var i = document.createElement("input"); + i.style.fontSize = "30px", i.setAttribute("id", t), i.setAttribute("type", "radio"), i.setAttribute("value", t), i.setAttribute("name", "field"); + var r = document.createElement("label"); + return r.style.marginLeft = "4px", r.setAttribute("for", t), r.innerHTML = e, n.appendChild(i), n.appendChild(r), n + }, at.prototype.createButton_ = function(t, e) { + var n = document.createElement("button"); + n.innerHTML = t; + var i = n.style; + return i.float = "right", i.textTransform = "uppercase", i.color = "#1094f7", i.fontSize = "14px", i.letterSpacing = 0, i.border = 0, i.background = "none", i.marginTop = "16px", n.addEventListener("click", e), n + }, "undefined" != typeof window ? window : void 0 !== e || "undefined" != typeof self && self; + var lt, ct = (lt = function(t, e) { + return t(e = { + exports: {} + }, e.exports), e.exports + }((function(t, e) { + ! function(e, n) { + t.exports = n() + }(0, (function() { + return function(t) { + var e = {}; + + function n(i) { + if (e[i]) return e[i].exports; + var r = e[i] = { + i: i, + l: !1, + exports: {} + }; + return t[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports + } + return n.m = t, n.c = e, n.d = function(t, e, i) { + n.o(t, e) || Object.defineProperty(t, e, { + configurable: !1, + enumerable: !0, + get: i + }) + }, n.n = function(t) { + var e = t && t.__esModule ? function() { + return t.default + } : function() { + return t + }; + return n.d(e, "a", e), e + }, n.o = function(t, e) { + return Object.prototype.hasOwnProperty.call(t, e) + }, n.p = "", n(n.s = 0) + }([function(t, e, n) { + var i = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + r = n(1), + o = "undefined" != typeof navigator && parseFloat(("" + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) < 10 && !window.MSStream, + s = function() { + function t() { + ! function(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + }(this, t), o ? this.noSleepTimer = null : (this.noSleepVideo = document.createElement("video"), this.noSleepVideo.setAttribute("playsinline", ""), this.noSleepVideo.setAttribute("src", r), this.noSleepVideo.addEventListener("timeupdate", function(t) { + this.noSleepVideo.currentTime > .5 && (this.noSleepVideo.currentTime = Math.random()) + }.bind(this))) + } + return i(t, [{ + key: "enable", + value: function() { + o ? (this.disable(), this.noSleepTimer = window.setInterval((function() { + window.location.href = "/", window.setTimeout(window.stop, 0) + }), 15e3)) : this.noSleepVideo.play() + } + }, { + key: "disable", + value: function() { + o ? this.noSleepTimer && (window.clearInterval(this.noSleepTimer), this.noSleepTimer = null) : this.noSleepVideo.pause() + } + }]), t + }(); + t.exports = s + }, function(t, e, n) { + t.exports = "data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA=" + }]) + })) + }))) && lt.__esModule && Object.prototype.hasOwnProperty.call(lt, "default") ? lt.default : lt, + ht = 1e3, + ut = [0, 0, .5, 1], + dt = [.5, 0, .5, 1], + pt = window.requestAnimationFrame, + ft = window.cancelAnimationFrame; + + function mt(t) { + Object.defineProperties(this, { + hasPosition: { + writable: !1, + enumerable: !0, + value: t.hasPosition + }, + hasExternalDisplay: { + writable: !1, + enumerable: !0, + value: t.hasExternalDisplay + }, + canPresent: { + writable: !1, + enumerable: !0, + value: t.canPresent + }, + maxLayers: { + writable: !1, + enumerable: !0, + value: t.maxLayers + }, + hasOrientation: { + enumerable: !0, + get: function() { + return T("VRDisplayCapabilities.prototype.hasOrientation", "VRDisplay.prototype.getFrameData"), t.hasOrientation + } + } + }) + } + + function gt(t) { + var e = !("wakelock" in (t = t || {})) || t.wakelock; + this.isPolyfilled = !0, this.displayId = ht++, this.displayName = "", this.depthNear = .01, this.depthFar = 1e4, this.isPresenting = !1, Object.defineProperty(this, "isConnected", { + get: function() { + return T("VRDisplay.prototype.isConnected", "VRDisplayCapabilities.prototype.hasExternalDisplay"), !1 + } + }), this.capabilities = new mt({ + hasPosition: !1, + hasOrientation: !1, + hasExternalDisplay: !1, + canPresent: !1, + maxLayers: 1 + }), this.stageParameters = null, this.waitingForPresent_ = !1, this.layer_ = null, this.originalParent_ = null, this.fullscreenElement_ = null, this.fullscreenWrapper_ = null, this.fullscreenElementCachedStyle_ = null, this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null, e && _() && (this.wakelock_ = new ct) + } + gt.prototype.getFrameData = function(t) { + return M(t, this._getPose(), this) + }, gt.prototype.getPose = function() { + return T("VRDisplay.prototype.getPose", "VRDisplay.prototype.getFrameData"), this._getPose() + }, gt.prototype.resetPose = function() { + return T("VRDisplay.prototype.resetPose"), this._resetPose() + }, gt.prototype.getImmediatePose = function() { + return T("VRDisplay.prototype.getImmediatePose", "VRDisplay.prototype.getFrameData"), this._getPose() + }, gt.prototype.requestAnimationFrame = function(t) { + return pt(t) + }, gt.prototype.cancelAnimationFrame = function(t) { + return ft(t) + }, gt.prototype.wrapForFullscreen = function(t) { + if (a()) return t; + if (!this.fullscreenWrapper_) { + this.fullscreenWrapper_ = document.createElement("div"); + var e = ["height: " + Math.min(screen.height, screen.width) + "px !important", "top: 0 !important", "left: 0 !important", "right: 0 !important", "border: 0", "margin: 0", "padding: 0", "z-index: 999999 !important", "position: fixed"]; + this.fullscreenWrapper_.setAttribute("style", e.join("; ") + ";"), this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper") + } + if (this.fullscreenElement_ == t) return this.fullscreenWrapper_; + if (this.fullscreenElement_ && (this.originalParent_ ? this.originalParent_.appendChild(this.fullscreenElement_) : this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)), this.fullscreenElement_ = t, this.originalParent_ = t.parentElement, this.originalParent_ || document.body.appendChild(t), !this.fullscreenWrapper_.parentElement) { + var n = this.fullscreenElement_.parentElement; + n.insertBefore(this.fullscreenWrapper_, this.fullscreenElement_), n.removeChild(this.fullscreenElement_) + } + this.fullscreenWrapper_.insertBefore(this.fullscreenElement_, this.fullscreenWrapper_.firstChild), this.fullscreenElementCachedStyle_ = this.fullscreenElement_.getAttribute("style"); + var i = this; + return function() { + if (i.fullscreenElement_) { + var t = ["position: absolute", "top: 0", "left: 0", "width: " + Math.max(screen.width, screen.height) + "px", "height: " + Math.min(screen.height, screen.width) + "px", "border: 0", "margin: 0", "padding: 0"]; + i.fullscreenElement_.setAttribute("style", t.join("; ") + ";") + } + }(), this.fullscreenWrapper_ + }, gt.prototype.removeFullscreenWrapper = function() { + if (this.fullscreenElement_) { + var t = this.fullscreenElement_; + this.fullscreenElementCachedStyle_ ? t.setAttribute("style", this.fullscreenElementCachedStyle_) : t.removeAttribute("style"), this.fullscreenElement_ = null, this.fullscreenElementCachedStyle_ = null; + var e = this.fullscreenWrapper_.parentElement; + return this.fullscreenWrapper_.removeChild(t), this.originalParent_ === e ? e.insertBefore(t, this.fullscreenWrapper_) : this.originalParent_ && this.originalParent_.appendChild(t), e.removeChild(this.fullscreenWrapper_), t + } + }, gt.prototype.requestPresent = function(t) { + var e = this.isPresenting, + n = this; + return t instanceof Array || (T("VRDisplay.prototype.requestPresent with non-array argument", "an array of VRLayers as the first argument"), t = [t]), new Promise((function(i, r) { + if (n.capabilities.canPresent) + if (0 == t.length || t.length > n.capabilities.maxLayers) r(new Error("Invalid number of layers.")); + else { + var o = t[0]; + if (o.source) { + var s = o.leftBounds || ut, + c = o.rightBounds || dt; + if (e) { + var h = n.layer_; + h.source !== o.source && (h.source = o.source); + for (var u = 0; u < 4; u++) h.leftBounds[u] = s[u], h.rightBounds[u] = c[u]; + return n.wrapForFullscreen(n.layer_.source), n.updatePresent_(), void i() + } + if (n.layer_ = { + predistorted: o.predistorted, + source: o.source, + leftBounds: s.slice(0), + rightBounds: c.slice(0) + }, n.waitingForPresent_ = !1, n.layer_ && n.layer_.source) { + var d = n.wrapForFullscreen(n.layer_.source); + n.addFullscreenListeners_(d, (function() { + var t = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement; + n.isPresenting = d === t, n.isPresenting ? (screen.orientation && screen.orientation.lock && screen.orientation.lock("landscape-primary").catch((function(t) { + console.error("screen.orientation.lock() failed due to", t.message) + })), n.waitingForPresent_ = !1, n.beginPresent_(), i()) : (screen.orientation && screen.orientation.unlock && screen.orientation.unlock(), n.removeFullscreenWrapper(), n.disableWakeLock(), n.endPresent_(), n.removeFullscreenListeners_()), n.fireVRDisplayPresentChange_() + }), (function() { + n.waitingForPresent_ && (n.removeFullscreenWrapper(), n.removeFullscreenListeners_(), n.disableWakeLock(), n.waitingForPresent_ = !1, n.isPresenting = !1, r(new Error("Unable to present."))) + })), + function(t) { + if (l()) return !1; + if (t.requestFullscreen) t.requestFullscreen(); + else if (t.webkitRequestFullscreen) t.webkitRequestFullscreen(); + else if (t.mozRequestFullScreen) t.mozRequestFullScreen(); + else { + if (!t.msRequestFullscreen) return !1; + t.msRequestFullscreen() + } + return !0 + }(d) ? (n.enableWakeLock(), n.waitingForPresent_ = !0) : (a() || l()) && (n.enableWakeLock(), n.isPresenting = !0, n.beginPresent_(), n.fireVRDisplayPresentChange_(), i()) + } + n.waitingForPresent_ || a() || (y(), r(new Error("Unable to present."))) + } else i() + } + else r(new Error("VRDisplay is not capable of presenting.")) + })) + }, gt.prototype.exitPresent = function() { + var t = this.isPresenting, + e = this; + return this.isPresenting = !1, this.layer_ = null, this.disableWakeLock(), new Promise((function(n, i) { + t ? (!y() && a() && (e.endPresent_(), e.fireVRDisplayPresentChange_()), l() && (e.removeFullscreenWrapper(), e.removeFullscreenListeners_(), e.endPresent_(), e.fireVRDisplayPresentChange_()), n()) : i(new Error("Was not presenting to VRDisplay.")) + })) + }, gt.prototype.getLayers = function() { + return this.layer_ ? [this.layer_] : [] + }, gt.prototype.fireVRDisplayPresentChange_ = function() { + var t = new CustomEvent("vrdisplaypresentchange", { + detail: { + display: this + } + }); + window.dispatchEvent(t) + }, gt.prototype.fireVRDisplayConnect_ = function() { + var t = new CustomEvent("vrdisplayconnect", { + detail: { + display: this + } + }); + window.dispatchEvent(t) + }, gt.prototype.addFullscreenListeners_ = function(t, e, n) { + this.removeFullscreenListeners_(), this.fullscreenEventTarget_ = t, this.fullscreenChangeHandler_ = e, this.fullscreenErrorHandler_ = n, e && (document.fullscreenEnabled ? t.addEventListener("fullscreenchange", e, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenchange", e, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenchange", e, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenchange", e, !1)), n && (document.fullscreenEnabled ? t.addEventListener("fullscreenerror", n, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenerror", n, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenerror", n, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenerror", n, !1)) + }, gt.prototype.removeFullscreenListeners_ = function() { + if (this.fullscreenEventTarget_) { + var t = this.fullscreenEventTarget_; + if (this.fullscreenChangeHandler_) { + var e = this.fullscreenChangeHandler_; + t.removeEventListener("fullscreenchange", e, !1), t.removeEventListener("webkitfullscreenchange", e, !1), document.removeEventListener("mozfullscreenchange", e, !1), t.removeEventListener("msfullscreenchange", e, !1) + } + if (this.fullscreenErrorHandler_) { + var n = this.fullscreenErrorHandler_; + t.removeEventListener("fullscreenerror", n, !1), t.removeEventListener("webkitfullscreenerror", n, !1), document.removeEventListener("mozfullscreenerror", n, !1), t.removeEventListener("msfullscreenerror", n, !1) + } + this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null + } + }, gt.prototype.enableWakeLock = function() { + this.wakelock_ && this.wakelock_.enable() + }, gt.prototype.disableWakeLock = function() { + this.wakelock_ && this.wakelock_.disable() + }, gt.prototype.beginPresent_ = function() {}, gt.prototype.endPresent_ = function() {}, gt.prototype.submitFrame = function(t) {}, gt.prototype.getEyeParameters = function(t) { + return null + }; + var vt = { + ADDITIONAL_VIEWERS: [], + DEFAULT_VIEWER: "", + MOBILE_WAKE_LOCK: !0, + DEBUG: !1, + DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", + K_FILTER: .98, + PREDICTION_TIME_S: .04, + CARDBOARD_UI_DISABLED: !1, + ROTATE_INSTRUCTIONS_DISABLED: !1, + YAW_ONLY: !1, + BUFFER_SCALE: .5, + DIRTY_SUBMIT_FRAME_BINDINGS: !1 + }, + yt = "left", + At = "right"; + + function xt(t) { + var e = b({}, vt); + t = b(e, t || {}), gt.call(this, { + wakelock: t.MOBILE_WAKE_LOCK + }), this.config = t, this.displayName = "Cardboard VRDisplay", this.capabilities = new mt({ + hasPosition: !1, + hasOrientation: !0, + hasExternalDisplay: !1, + canPresent: !0, + maxLayers: 1 + }), this.stageParameters = null, this.bufferScale_ = this.config.BUFFER_SCALE, this.poseSensor_ = new ot(this.config), this.distorter_ = null, this.cardboardUI_ = null, this.dpdb_ = new Z(this.config.DPDB_URL, this.onDeviceParamsUpdated_.bind(this)), this.deviceInfo_ = new q(this.dpdb_.getDeviceParams(), t.ADDITIONAL_VIEWERS), this.viewerSelector_ = new at(t.DEFAULT_VIEWER), this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)), this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()), this.config.ROTATE_INSTRUCTIONS_DISABLED || (this.rotateInstructions_ = new st), a() && window.addEventListener("resize", this.onResize_.bind(this)) + } + return xt.prototype = Object.create(gt.prototype), xt.prototype._getPose = function() { + return { + position: null, + orientation: this.poseSensor_.getOrientation(), + linearVelocity: null, + linearAcceleration: null, + angularVelocity: null, + angularAcceleration: null + } + }, xt.prototype._resetPose = function() { + this.poseSensor_.resetPose && this.poseSensor_.resetPose() + }, xt.prototype._getFieldOfView = function(t) { + var e; + if (t == yt) e = this.deviceInfo_.getFieldOfViewLeftEye(); + else { + if (t != At) return console.error("Invalid eye provided: %s", t), null; + e = this.deviceInfo_.getFieldOfViewRightEye() + } + return e + }, xt.prototype._getEyeOffset = function(t) { + var e; + if (t == yt) e = [.5 * -this.deviceInfo_.viewer.interLensDistance, 0, 0]; + else { + if (t != At) return console.error("Invalid eye provided: %s", t), null; + e = [.5 * this.deviceInfo_.viewer.interLensDistance, 0, 0] + } + return e + }, xt.prototype.getEyeParameters = function(t) { + var e = this._getEyeOffset(t), + n = this._getFieldOfView(t), + i = { + offset: e, + renderWidth: .5 * this.deviceInfo_.device.width * this.bufferScale_, + renderHeight: this.deviceInfo_.device.height * this.bufferScale_ + }; + return Object.defineProperty(i, "fieldOfView", { + enumerable: !0, + get: function() { + return T("VRFieldOfView", "VRFrameData's projection matrices"), n + } + }), i + }, xt.prototype.onDeviceParamsUpdated_ = function(t) { + this.config.DEBUG && console.log("DPDB reported that device params were updated."), this.deviceInfo_.updateDeviceParams(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_) + }, xt.prototype.updateBounds_ = function() { + this.layer_ && this.distorter_ && (this.layer_.leftBounds || this.layer_.rightBounds) && this.distorter_.setTextureBounds(this.layer_.leftBounds, this.layer_.rightBounds) + }, xt.prototype.beginPresent_ = function() { + var t = this.layer_.source.getContext("webgl"); + t || (t = this.layer_.source.getContext("experimental-webgl")), t || (t = this.layer_.source.getContext("webgl2")), t && (this.layer_.predistorted ? this.config.CARDBOARD_UI_DISABLED || (t.canvas.width = g() * this.bufferScale_, t.canvas.height = v() * this.bufferScale_, this.cardboardUI_ = new N(t)) : (this.config.CARDBOARD_UI_DISABLED || (this.cardboardUI_ = new N(t)), this.distorter_ = new P(t, this.cardboardUI_, this.config.BUFFER_SCALE, this.config.DIRTY_SUBMIT_FRAME_BINDINGS), this.distorter_.updateDeviceInfo(this.deviceInfo_)), this.cardboardUI_ && this.cardboardUI_.listen(function(t) { + this.viewerSelector_.show(this.layer_.source.parentElement), t.stopPropagation(), t.preventDefault() + }.bind(this), function(t) { + this.exitPresent(), t.stopPropagation(), t.preventDefault() + }.bind(this)), this.rotateInstructions_ && (m() && _() ? this.rotateInstructions_.showTemporarily(3e3, this.layer_.source.parentElement) : this.rotateInstructions_.update()), this.orientationHandler = this.onOrientationChange_.bind(this), window.addEventListener("orientationchange", this.orientationHandler), this.vrdisplaypresentchangeHandler = this.updateBounds_.bind(this), window.addEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler), this.fireVRDisplayDeviceParamsChange_()) + }, xt.prototype.endPresent_ = function() { + this.distorter_ && (this.distorter_.destroy(), this.distorter_ = null), this.cardboardUI_ && (this.cardboardUI_.destroy(), this.cardboardUI_ = null), this.rotateInstructions_ && this.rotateInstructions_.hide(), this.viewerSelector_.hide(), window.removeEventListener("orientationchange", this.orientationHandler), window.removeEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler) + }, xt.prototype.updatePresent_ = function() { + this.endPresent_(), this.beginPresent_() + }, xt.prototype.submitFrame = function(t) { + if (this.distorter_) this.updateBounds_(), this.distorter_.submitFrame(); + else if (this.cardboardUI_ && this.layer_) { + var e = this.layer_.source.getContext("webgl"); + e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")); + var n = e.canvas; + n.width == this.lastWidth && n.height == this.lastHeight || this.cardboardUI_.onResize(), this.lastWidth = n.width, this.lastHeight = n.height, this.cardboardUI_.render() + } + }, xt.prototype.onOrientationChange_ = function(t) { + this.viewerSelector_.hide(), this.rotateInstructions_ && this.rotateInstructions_.update(), this.onResize_() + }, xt.prototype.onResize_ = function(t) { + if (this.layer_) { + var e = this.layer_.source.getContext("webgl"); + e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")), e.canvas.setAttribute("style", ["position: absolute", "top: 0", "left: 0", "width: 100vw", "height: 100vh", "border: 0", "margin: 0", "padding: 0px", "box-sizing: content-box"].join("; ") + ";"), w(e.canvas) + } + }, xt.prototype.onViewerChanged_ = function(t) { + this.deviceInfo_.setViewer(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_), this.fireVRDisplayDeviceParamsChange_() + }, xt.prototype.fireVRDisplayDeviceParamsChange_ = function() { + var t = new CustomEvent("vrdisplaydeviceparamschange", { + detail: { + vrdisplay: this, + deviceInfo: this.deviceInfo_ + } + }); + window.dispatchEvent(t) + }, xt.VRFrameData = function() { + this.leftProjectionMatrix = new Float32Array(16), this.leftViewMatrix = new Float32Array(16), this.rightProjectionMatrix = new Float32Array(16), this.rightViewMatrix = new Float32Array(16), this.pose = null + }, xt.VRDisplay = gt, xt + }() + }))) && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t, + a = { + ADDITIONAL_VIEWERS: [], + DEFAULT_VIEWER: "", + PROVIDE_MOBILE_VRDISPLAY: !0, + MOBILE_WAKE_LOCK: !0, + DEBUG: !1, + DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", + K_FILTER: .98, + PREDICTION_TIME_S: .04, + CARDBOARD_UI_DISABLED: !1, + ROTATE_INSTRUCTIONS_DISABLED: !1, + YAW_ONLY: !1, + BUFFER_SCALE: .5, + DIRTY_SUBMIT_FRAME_BINDINGS: !1 + }; + + function l(t) { + this.config = o(o({}, a), t), this.polyfillDisplays = [], this.enabled = !1, this.hasNative = "getVRDisplays" in navigator, this.native = {}, this.native.getVRDisplays = navigator.getVRDisplays, this.native.VRFrameData = window.VRFrameData, this.native.VRDisplay = window.VRDisplay, (!this.hasNative || this.config.PROVIDE_MOBILE_VRDISPLAY && n()) && (this.enable(), this.getVRDisplays().then((function(t) { + t && t[0] && t[0].fireVRDisplayConnect_ && t[0].fireVRDisplayConnect_() + }))) + } + l.prototype.getPolyfillDisplays = function() { + if (this._polyfillDisplaysPopulated) return this.polyfillDisplays; + if (n()) { + var t = new s({ + ADDITIONAL_VIEWERS: this.config.ADDITIONAL_VIEWERS, + DEFAULT_VIEWER: this.config.DEFAULT_VIEWER, + MOBILE_WAKE_LOCK: this.config.MOBILE_WAKE_LOCK, + DEBUG: this.config.DEBUG, + DPDB_URL: this.config.DPDB_URL, + CARDBOARD_UI_DISABLED: this.config.CARDBOARD_UI_DISABLED, + K_FILTER: this.config.K_FILTER, + PREDICTION_TIME_S: this.config.PREDICTION_TIME_S, + ROTATE_INSTRUCTIONS_DISABLED: this.config.ROTATE_INSTRUCTIONS_DISABLED, + YAW_ONLY: this.config.YAW_ONLY, + BUFFER_SCALE: this.config.BUFFER_SCALE, + DIRTY_SUBMIT_FRAME_BINDINGS: this.config.DIRTY_SUBMIT_FRAME_BINDINGS + }); + this.polyfillDisplays.push(t) + } + return this._polyfillDisplaysPopulated = !0, this.polyfillDisplays + }, l.prototype.enable = function() { + if (this.enabled = !0, this.hasNative && this.native.VRFrameData) { + var t = this.native.VRFrameData, + e = new this.native.VRFrameData, + n = this.native.VRDisplay.prototype.getFrameData; + window.VRDisplay.prototype.getFrameData = function(i) { + i instanceof t ? n.call(this, i) : (n.call(this, e), i.pose = e.pose, r(e.leftProjectionMatrix, i.leftProjectionMatrix), r(e.rightProjectionMatrix, i.rightProjectionMatrix), r(e.leftViewMatrix, i.leftViewMatrix), r(e.rightViewMatrix, i.rightViewMatrix)) + } + } + navigator.getVRDisplays = this.getVRDisplays.bind(this), window.VRDisplay = s.VRDisplay, window.VRFrameData = s.VRFrameData + }, l.prototype.getVRDisplays = function() { + var t = this; + return this.config, this.hasNative ? this.native.getVRDisplays.call(navigator).then((function(e) { + return e.length > 0 ? e : t.getPolyfillDisplays() + })) : Promise.resolve(this.getPolyfillDisplays()) + }, l.version = "0.10.12", l.VRFrameData = s.VRFrameData, l.VRDisplay = s.VRDisplay; + var c = Object.freeze({ + default: l + }), + h = c && l || c; + return void 0 !== e && e.window && (e.document || (e.document = e.window.document), e.navigator || (e.navigator = e.window.navigator)), h + }() + }))); + const h = 0, + u = 1, + d = 2; + + function p() {} + Object.assign(p.prototype, { + addEventListener: function(t, e) { + void 0 === this._listeners && (this._listeners = {}); + const n = this._listeners; + void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e) + }, + hasEventListener: function(t, e) { + if (void 0 === this._listeners) return !1; + const n = this._listeners; + return void 0 !== n[t] && -1 !== n[t].indexOf(e) + }, + removeEventListener: function(t, e) { + if (void 0 === this._listeners) return; + const n = this._listeners[t]; + if (void 0 !== n) { + const t = n.indexOf(e); - 1 !== t && n.splice(t, 1) + } + }, + dispatchEvent: function(t) { + if (void 0 === this._listeners) return; + const e = this._listeners[t.type]; + if (void 0 !== e) { + t.target = this; + const n = e.slice(0); + for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t) + } + } + }); + const f = []; + for (let t = 0; t < 256; t++) f[t] = (t < 16 ? "0" : "") + t.toString(16); + let m = 1234567; + const g = { + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + generateUUID: function() { + const t = 4294967295 * Math.random() | 0, + e = 4294967295 * Math.random() | 0, + n = 4294967295 * Math.random() | 0, + i = 4294967295 * Math.random() | 0; + return (f[255 & t] + f[t >> 8 & 255] + f[t >> 16 & 255] + f[t >> 24 & 255] + "-" + f[255 & e] + f[e >> 8 & 255] + "-" + f[e >> 16 & 15 | 64] + f[e >> 24 & 255] + "-" + f[63 & n | 128] + f[n >> 8 & 255] + "-" + f[n >> 16 & 255] + f[n >> 24 & 255] + f[255 & i] + f[i >> 8 & 255] + f[i >> 16 & 255] + f[i >> 24 & 255]).toUpperCase() + }, + clamp: function(t, e, n) { + return Math.max(e, Math.min(n, t)) + }, + euclideanModulo: function(t, e) { + return (t % e + e) % e + }, + mapLinear: function(t, e, n, i, r) { + return i + (t - e) * (r - i) / (n - e) + }, + lerp: function(t, e, n) { + return (1 - n) * t + n * e + }, + damp: function(t, e, n, i) { + return g.lerp(t, e, 1 - Math.exp(-n * i)) + }, + pingpong: function(t, e = 1) { + return e - Math.abs(g.euclideanModulo(t, 2 * e) - e) + }, + smoothstep: function(t, e, n) { + return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * (3 - 2 * t) + }, + smootherstep: function(t, e, n) { + return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10) + }, + randInt: function(t, e) { + return t + Math.floor(Math.random() * (e - t + 1)) + }, + randFloat: function(t, e) { + return t + Math.random() * (e - t) + }, + randFloatSpread: function(t) { + return t * (.5 - Math.random()) + }, + seededRandom: function(t) { + return void 0 !== t && (m = t % 2147483647), m = 16807 * m % 2147483647, (m - 1) / 2147483646 + }, + degToRad: function(t) { + return t * g.DEG2RAD + }, + radToDeg: function(t) { + return t * g.RAD2DEG + }, + isPowerOfTwo: function(t) { + return 0 == (t & t - 1) && 0 !== t + }, + ceilPowerOfTwo: function(t) { + return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2)) + }, + floorPowerOfTwo: function(t) { + return Math.pow(2, Math.floor(Math.log(t) / Math.LN2)) + }, + setQuaternionFromProperEuler: function(t, e, n, i, r) { + const o = Math.cos, + s = Math.sin, + a = o(n / 2), + l = s(n / 2), + c = o((e + i) / 2), + h = s((e + i) / 2), + u = o((e - i) / 2), + d = s((e - i) / 2), + p = o((i - e) / 2), + f = s((i - e) / 2); + switch (r) { + case "XYX": + t.set(a * h, l * u, l * d, a * c); + break; + case "YZY": + t.set(l * d, a * h, l * u, a * c); + break; + case "ZXZ": + t.set(l * u, l * d, a * h, a * c); + break; + case "XZX": + t.set(a * h, l * f, l * p, a * c); + break; + case "YXY": + t.set(l * p, a * h, l * f, a * c); + break; + case "ZYZ": + t.set(l * f, l * p, a * h, a * c); + break; + default: + console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r) + } + } + }; + class v { + constructor(t = 0, e = 0) { + Object.defineProperty(this, "isVector2", { + value: !0 + }), this.x = t, this.y = e + } + get width() { + return this.x + } + set width(t) { + this.x = t + } + get height() { + return this.y + } + set height(t) { + this.y = t + } + set(t, e) { + return this.x = t, this.y = e, this + } + setScalar(t) { + return this.x = t, this.y = t, this + } + setX(t) { + return this.x = t, this + } + setY(t) { + return this.y = t, this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw new Error("index is out of range: " + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + t) + } + } + clone() { + return new this.constructor(this.x, this.y) + } + copy(t) { + return this.x = t.x, this.y = t.y, this + } + add(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this) + } + addScalar(t) { + return this.x += t, this.y += t, this + } + addVectors(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this + } + addScaledVector(t, e) { + return this.x += t.x * e, this.y += t.y * e, this + } + sub(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this) + } + subScalar(t) { + return this.x -= t, this.y -= t, this + } + subVectors(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this + } + multiply(t) { + return this.x *= t.x, this.y *= t.y, this + } + multiplyScalar(t) { + return this.x *= t, this.y *= t, this + } + divide(t) { + return this.x /= t.x, this.y /= t.y, this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = t.elements; + return this.x = i[0] * e + i[3] * n + i[6], this.y = i[1] * e + i[4] * n + i[7], this + } + min(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this + } + max(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this + } + clamp(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this + } + clampScalar(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this + } + roundToZero() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this + } + dot(t) { + return this.x * t.x + this.y * t.y + } + cross(t) { + return this.x * t.y - this.y * t.x + } + lengthSq() { + return this.x * this.x + this.y * this.y + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + angle() { + return Math.atan2(-this.y, -this.x) + Math.PI + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)) + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y; + return e * e + n * n + } + manhattanDistanceTo(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this + } + lerpVectors(t, e, n) { + return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this + } + equals(t) { + return t.x === this.x && t.y === this.y + } + fromArray(t, e = 0) { + return this.x = t[e], this.y = t[e + 1], this + } + toArray(t = [], e = 0) { + return t[e] = this.x, t[e + 1] = this.y, t + } + fromBufferAttribute(t, e, n) { + return void 0 !== n && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this + } + rotateAround(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = this.x - t.x, + o = this.y - t.y; + return this.x = r * n - o * i + t.x, this.y = r * i + o * n + t.y, this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this + } + } + class y { + constructor() { + Object.defineProperty(this, "isMatrix3", { + value: !0 + }), this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.") + } + set(t, e, n, i, r, o, s, a, l) { + const c = this.elements; + return c[0] = t, c[1] = i, c[2] = s, c[3] = e, c[4] = r, c[5] = a, c[6] = n, c[7] = o, c[8] = l, this + } + identity() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this + } + clone() { + return (new this.constructor).fromArray(this.elements) + } + copy(t) { + const e = this.elements, + n = t.elements; + return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], this + } + extractBasis(t, e, n) { + return t.setFromMatrix3Column(this, 0), e.setFromMatrix3Column(this, 1), n.setFromMatrix3Column(this, 2), this + } + setFromMatrix4(t) { + const e = t.elements; + return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this + } + multiply(t) { + return this.multiplyMatrices(this, t) + } + premultiply(t) { + return this.multiplyMatrices(t, this) + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + o = n[0], + s = n[3], + a = n[6], + l = n[1], + c = n[4], + h = n[7], + u = n[2], + d = n[5], + p = n[8], + f = i[0], + m = i[3], + g = i[6], + v = i[1], + y = i[4], + A = i[7], + x = i[2], + _ = i[5], + b = i[8]; + return r[0] = o * f + s * v + a * x, r[3] = o * m + s * y + a * _, r[6] = o * g + s * A + a * b, r[1] = l * f + c * v + h * x, r[4] = l * m + c * y + h * _, r[7] = l * g + c * A + h * b, r[2] = u * f + d * v + p * x, r[5] = u * m + d * y + p * _, r[8] = u * g + d * A + p * b, this + } + multiplyScalar(t) { + const e = this.elements; + return e[0] *= t, e[3] *= t, e[6] *= t, e[1] *= t, e[4] *= t, e[7] *= t, e[2] *= t, e[5] *= t, e[8] *= t, this + } + determinant() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + o = t[4], + s = t[5], + a = t[6], + l = t[7], + c = t[8]; + return e * o * c - e * s * l - n * r * c + n * s * a + i * r * l - i * o * a + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + o = t[4], + s = t[5], + a = t[6], + l = t[7], + c = t[8], + h = c * o - s * l, + u = s * a - c * r, + d = l * r - o * a, + p = e * h + n * u + i * d; + if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const f = 1 / p; + return t[0] = h * f, t[1] = (i * l - c * n) * f, t[2] = (s * n - i * o) * f, t[3] = u * f, t[4] = (c * e - i * a) * f, t[5] = (i * r - s * e) * f, t[6] = d * f, t[7] = (n * a - l * e) * f, t[8] = (o * e - n * r) * f, this + } + transpose() { + let t; + const e = this.elements; + return t = e[1], e[1] = e[3], e[3] = t, t = e[2], e[2] = e[6], e[6] = t, t = e[5], e[5] = e[7], e[7] = t, this + } + getNormalMatrix(t) { + return this.setFromMatrix4(t).copy(this).invert().transpose() + } + transposeIntoArray(t) { + const e = this.elements; + return t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[7] = e[5], t[8] = e[8], this + } + setUvTransform(t, e, n, i, r, o, s) { + const a = Math.cos(r), + l = Math.sin(r); + return this.set(n * a, n * l, -n * (a * o + l * s) + o + t, -i * l, i * a, -i * (-l * o + a * s) + s + e, 0, 0, 1), this + } + scale(t, e) { + const n = this.elements; + return n[0] *= t, n[3] *= t, n[6] *= t, n[1] *= e, n[4] *= e, n[7] *= e, this + } + rotate(t) { + const e = Math.cos(t), + n = Math.sin(t), + i = this.elements, + r = i[0], + o = i[3], + s = i[6], + a = i[1], + l = i[4], + c = i[7]; + return i[0] = e * r + n * a, i[3] = e * o + n * l, i[6] = e * s + n * c, i[1] = -n * r + e * a, i[4] = -n * o + e * l, i[7] = -n * s + e * c, this + } + translate(t, e) { + const n = this.elements; + return n[0] += t * n[2], n[3] += t * n[5], n[6] += t * n[8], n[1] += e * n[2], n[4] += e * n[5], n[7] += e * n[8], this + } + equals(t) { + const e = this.elements, + n = t.elements; + for (let t = 0; t < 9; t++) + if (e[t] !== n[t]) return !1; + return !0 + } + fromArray(t, e = 0) { + for (let n = 0; n < 9; n++) this.elements[n] = t[n + e]; + return this + } + toArray(t = [], e = 0) { + const n = this.elements; + return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t + } + } + let A; + const x = { + getDataURL: function(t) { + if (/^data:/i.test(t.src)) return t.src; + if ("undefined" == typeof HTMLCanvasElement) return t.src; + let e; + if (t instanceof HTMLCanvasElement) e = t; + else { + void 0 === A && (A = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), A.width = t.width, A.height = t.height; + const n = A.getContext("2d"); + t instanceof ImageData ? n.putImageData(t, 0, 0) : n.drawImage(t, 0, 0, t.width, t.height), e = A + } + return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png") + } + }; + let _ = 0; + + function b(t = b.DEFAULT_IMAGE, e = b.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, o = 1008, s = 1023, a = 1009, l = 1, c = 3e3) { + Object.defineProperty(this, "id", { + value: _++ + }), this.uuid = g.generateUUID(), this.name = "", this.image = t, this.mipmaps = [], this.mapping = e, this.wrapS = n, this.wrapT = i, this.magFilter = r, this.minFilter = o, this.anisotropy = l, this.format = s, this.internalFormat = null, this.type = a, this.offset = new v(0, 0), this.repeat = new v(1, 1), this.center = new v(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new y, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.encoding = c, this.version = 0, this.onUpdate = null + } + + function w(t) { + return "undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap ? x.getDataURL(t) : t.data ? { + data: Array.prototype.slice.call(t.data), + width: t.width, + height: t.height, + type: t.data.constructor.name + } : (console.warn("THREE.Texture: Unable to serialize Texture."), {}) + } + b.DEFAULT_IMAGE = void 0, b.DEFAULT_MAPPING = 300, b.prototype = Object.assign(Object.create(p.prototype), { + constructor: b, + isTexture: !0, + updateMatrix: function() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.name = t.name, this.image = t.image, this.mipmaps = t.mipmaps.slice(0), this.mapping = t.mapping, this.wrapS = t.wrapS, this.wrapT = t.wrapT, this.magFilter = t.magFilter, this.minFilter = t.minFilter, this.anisotropy = t.anisotropy, this.format = t.format, this.internalFormat = t.internalFormat, this.type = t.type, this.offset.copy(t.offset), this.repeat.copy(t.repeat), this.center.copy(t.center), this.rotation = t.rotation, this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrix.copy(t.matrix), this.generateMipmaps = t.generateMipmaps, this.premultiplyAlpha = t.premultiplyAlpha, this.flipY = t.flipY, this.unpackAlignment = t.unpackAlignment, this.encoding = t.encoding, this + }, + toJSON: function(t) { + const e = void 0 === t || "string" == typeof t; + if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid]; + const n = { + metadata: { + version: 4.5, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + mapping: this.mapping, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + type: this.type, + encoding: this.encoding, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + if (void 0 !== this.image) { + const i = this.image; + if (void 0 === i.uuid && (i.uuid = g.generateUUID()), !e && void 0 === t.images[i.uuid]) { + let e; + if (Array.isArray(i)) { + e = []; + for (let t = 0, n = i.length; t < n; t++) i[t].isDataTexture ? e.push(w(i[t].image)) : e.push(w(i[t])) + } else e = w(i); + t.images[i.uuid] = { + uuid: i.uuid, + url: e + } + } + n.image = i.uuid + } + return e || (t.textures[this.uuid] = n), n + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + }, + transformUv: function(t) { + if (300 !== this.mapping) return t; + if (t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1) switch (this.wrapS) { + case 1e3: + t.x = t.x - Math.floor(t.x); + break; + case 1001: + t.x = t.x < 0 ? 0 : 1; + break; + case 1002: + 1 === Math.abs(Math.floor(t.x) % 2) ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x) + } + if (t.y < 0 || t.y > 1) switch (this.wrapT) { + case 1e3: + t.y = t.y - Math.floor(t.y); + break; + case 1001: + t.y = t.y < 0 ? 0 : 1; + break; + case 1002: + 1 === Math.abs(Math.floor(t.y) % 2) ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y) + } + return this.flipY && (t.y = 1 - t.y), t + } + }), Object.defineProperty(b.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }); + class M { + constructor(t = 0, e = 0, n = 0, i = 1) { + Object.defineProperty(this, "isVector4", { + value: !0 + }), this.x = t, this.y = e, this.z = n, this.w = i + } + get width() { + return this.z + } + set width(t) { + this.z = t + } + get height() { + return this.w + } + set height(t) { + this.w = t + } + set(t, e, n, i) { + return this.x = t, this.y = e, this.z = n, this.w = i, this + } + setScalar(t) { + return this.x = t, this.y = t, this.z = t, this.w = t, this + } + setX(t) { + return this.x = t, this + } + setY(t) { + return this.y = t, this + } + setZ(t) { + return this.z = t, this + } + setW(t) { + return this.w = t, this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + case 3: + this.w = e; + break; + default: + throw new Error("index is out of range: " + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + t) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w) + } + copy(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this.w = void 0 !== t.w ? t.w : 1, this + } + add(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this) + } + addScalar(t) { + return this.x += t, this.y += t, this.z += t, this.w += t, this + } + addVectors(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this.w = t.w + e.w, this + } + addScaledVector(t, e) { + return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this.w += t.w * e, this + } + sub(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this) + } + subScalar(t) { + return this.x -= t, this.y -= t, this.z -= t, this.w -= t, this + } + subVectors(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this.w = t.w - e.w, this + } + multiply(t) { + return this.x *= t.x, this.y *= t.y, this.z *= t.z, this.w *= t.w, this + } + multiplyScalar(t) { + return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = this.w, + o = t.elements; + return this.x = o[0] * e + o[4] * n + o[8] * i + o[12] * r, this.y = o[1] * e + o[5] * n + o[9] * i + o[13] * r, this.z = o[2] * e + o[6] * n + o[10] * i + o[14] * r, this.w = o[3] * e + o[7] * n + o[11] * i + o[15] * r, this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + setAxisAngleFromQuaternion(t) { + this.w = 2 * Math.acos(t.w); + const e = Math.sqrt(1 - t.w * t.w); + return e < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = t.x / e, this.y = t.y / e, this.z = t.z / e), this + } + setAxisAngleFromRotationMatrix(t) { + let e, n, i, r; + const o = t.elements, + s = o[0], + a = o[4], + l = o[8], + c = o[1], + h = o[5], + u = o[9], + d = o[2], + p = o[6], + f = o[10]; + if (Math.abs(a - c) < .01 && Math.abs(l - d) < .01 && Math.abs(u - p) < .01) { + if (Math.abs(a + c) < .1 && Math.abs(l + d) < .1 && Math.abs(u + p) < .1 && Math.abs(s + h + f - 3) < .1) return this.set(1, 0, 0, 0), this; + e = Math.PI; + const t = (s + 1) / 2, + o = (h + 1) / 2, + m = (f + 1) / 2, + g = (a + c) / 4, + v = (l + d) / 4, + y = (u + p) / 4; + return t > o && t > m ? t < .01 ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(t), i = g / n, r = v / n) : o > m ? o < .01 ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = g / i, r = y / i) : m < .01 ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(m), n = v / r, i = y / r), this.set(n, i, r, e), this + } + let m = Math.sqrt((p - u) * (p - u) + (l - d) * (l - d) + (c - a) * (c - a)); + return Math.abs(m) < .001 && (m = 1), this.x = (p - u) / m, this.y = (l - d) / m, this.z = (c - a) / m, this.w = Math.acos((s + h + f - 1) / 2), this + } + min(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this.w = Math.min(this.w, t.w), this + } + max(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this.w = Math.max(this.w, t.w), this + } + clamp(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this.w = Math.max(t.w, Math.min(e.w, this.w)), this + } + clampScalar(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this.w = Math.max(t, Math.min(e, this.w)), this + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this + } + roundToZero() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this.w += (t.w - this.w) * e, this + } + lerpVectors(t, e, n) { + return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this.w = t.w + (e.w - t.w) * n, this + } + equals(t) { + return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w + } + fromArray(t, e = 0) { + return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this.w = t[e + 3], this + } + toArray(t = [], e = 0) { + return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t[e + 3] = this.w, t + } + fromBufferAttribute(t, e, n) { + return void 0 !== n && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this.w = t.getW(e), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this.w = Math.random(), this + } + } + class E extends p { + constructor(t, e, n) { + super(), Object.defineProperty(this, "isWebGLRenderTarget", { + value: !0 + }), this.width = t, this.height = e, this.scissor = new M(0, 0, t, e), this.scissorTest = !1, this.viewport = new M(0, 0, t, e), n = n || {}, this.texture = new b(void 0, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.encoding), this.texture.image = {}, this.texture.image.width = t, this.texture.image.height = e, this.texture.generateMipmaps = void 0 !== n.generateMipmaps && n.generateMipmaps, this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer, this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer, this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null + } + setSize(t, e) { + this.width === t && this.height === e || (this.width = t, this.height = e, this.texture.image.width = t, this.texture.image.height = e, this.dispose()), this.viewport.set(0, 0, t, e), this.scissor.set(0, 0, t, e) + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.width = t.width, this.height = t.height, this.viewport.copy(t.viewport), this.texture = t.texture.clone(), this.depthBuffer = t.depthBuffer, this.stencilBuffer = t.stencilBuffer, this.depthTexture = t.depthTexture, this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + } + class S { + constructor(t = 0, e = 0, n = 0, i = 1) { + Object.defineProperty(this, "isQuaternion", { + value: !0 + }), this._x = t, this._y = e, this._z = n, this._w = i + } + static slerp(t, e, n, i) { + return n.copy(t).slerp(e, i) + } + static slerpFlat(t, e, n, i, r, o, s) { + let a = n[i + 0], + l = n[i + 1], + c = n[i + 2], + h = n[i + 3]; + const u = r[o + 0], + d = r[o + 1], + p = r[o + 2], + f = r[o + 3]; + if (h !== f || a !== u || l !== d || c !== p) { + let t = 1 - s; + const e = a * u + l * d + c * p + h * f, + n = e >= 0 ? 1 : -1, + i = 1 - e * e; + if (i > Number.EPSILON) { + const r = Math.sqrt(i), + o = Math.atan2(r, e * n); + t = Math.sin(t * o) / r, s = Math.sin(s * o) / r + } + const r = s * n; + if (a = a * t + u * r, l = l * t + d * r, c = c * t + p * r, h = h * t + f * r, t === 1 - s) { + const t = 1 / Math.sqrt(a * a + l * l + c * c + h * h); + a *= t, l *= t, c *= t, h *= t + } + } + t[e] = a, t[e + 1] = l, t[e + 2] = c, t[e + 3] = h + } + static multiplyQuaternionsFlat(t, e, n, i, r, o) { + const s = n[i], + a = n[i + 1], + l = n[i + 2], + c = n[i + 3], + h = r[o], + u = r[o + 1], + d = r[o + 2], + p = r[o + 3]; + return t[e] = s * p + c * h + a * d - l * u, t[e + 1] = a * p + c * u + l * h - s * d, t[e + 2] = l * p + c * d + s * u - a * h, t[e + 3] = c * p - s * h - a * u - l * d, t + } + get x() { + return this._x + } + set x(t) { + this._x = t, this._onChangeCallback() + } + get y() { + return this._y + } + set y(t) { + this._y = t, this._onChangeCallback() + } + get z() { + return this._z + } + set z(t) { + this._z = t, this._onChangeCallback() + } + get w() { + return this._w + } + set w(t) { + this._w = t, this._onChangeCallback() + } + set(t, e, n, i) { + return this._x = t, this._y = e, this._z = n, this._w = i, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w) + } + copy(t) { + return this._x = t.x, this._y = t.y, this._z = t.z, this._w = t.w, this._onChangeCallback(), this + } + setFromEuler(t, e) { + if (!t || !t.isEuler) throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); + const n = t._x, + i = t._y, + r = t._z, + o = t._order, + s = Math.cos, + a = Math.sin, + l = s(n / 2), + c = s(i / 2), + h = s(r / 2), + u = a(n / 2), + d = a(i / 2), + p = a(r / 2); + switch (o) { + case "XYZ": + this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; + break; + case "YXZ": + this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; + break; + case "ZXY": + this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; + break; + case "ZYX": + this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; + break; + case "YZX": + this._x = u * c * h + l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h - u * d * p; + break; + case "XZY": + this._x = u * c * h - l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h + u * d * p; + break; + default: + console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + o) + } + return !1 !== e && this._onChangeCallback(), this + } + setFromAxisAngle(t, e) { + const n = e / 2, + i = Math.sin(n); + return this._x = t.x * i, this._y = t.y * i, this._z = t.z * i, this._w = Math.cos(n), this._onChangeCallback(), this + } + setFromRotationMatrix(t) { + const e = t.elements, + n = e[0], + i = e[4], + r = e[8], + o = e[1], + s = e[5], + a = e[9], + l = e[2], + c = e[6], + h = e[10], + u = n + s + h; + if (u > 0) { + const t = .5 / Math.sqrt(u + 1); + this._w = .25 / t, this._x = (c - a) * t, this._y = (r - l) * t, this._z = (o - i) * t + } else if (n > s && n > h) { + const t = 2 * Math.sqrt(1 + n - s - h); + this._w = (c - a) / t, this._x = .25 * t, this._y = (i + o) / t, this._z = (r + l) / t + } else if (s > h) { + const t = 2 * Math.sqrt(1 + s - n - h); + this._w = (r - l) / t, this._x = (i + o) / t, this._y = .25 * t, this._z = (a + c) / t + } else { + const t = 2 * Math.sqrt(1 + h - n - s); + this._w = (o - i) / t, this._x = (r + l) / t, this._y = (a + c) / t, this._z = .25 * t + } + return this._onChangeCallback(), this + } + setFromUnitVectors(t, e) { + let n = t.dot(e) + 1; + return n < 1e-6 ? (n = 0, Math.abs(t.x) > Math.abs(t.z) ? (this._x = -t.y, this._y = t.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -t.z, this._z = t.y, this._w = n)) : (this._x = t.y * e.z - t.z * e.y, this._y = t.z * e.x - t.x * e.z, this._z = t.x * e.y - t.y * e.x, this._w = n), this.normalize() + } + angleTo(t) { + return 2 * Math.acos(Math.abs(g.clamp(this.dot(t), -1, 1))) + } + rotateTowards(t, e) { + const n = this.angleTo(t); + if (0 === n) return this; + const i = Math.min(1, e / n); + return this.slerp(t, i), this + } + identity() { + return this.set(0, 0, 0, 1) + } + invert() { + return this.conjugate() + } + conjugate() { + return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this + } + dot(t) { + return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + } + length() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + } + normalize() { + let t = this.length(); + return 0 === t ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (t = 1 / t, this._x = this._x * t, this._y = this._y * t, this._z = this._z * t, this._w = this._w * t), this._onChangeCallback(), this + } + multiply(t, e) { + return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(t, e)) : this.multiplyQuaternions(this, t) + } + premultiply(t) { + return this.multiplyQuaternions(t, this) + } + multiplyQuaternions(t, e) { + const n = t._x, + i = t._y, + r = t._z, + o = t._w, + s = e._x, + a = e._y, + l = e._z, + c = e._w; + return this._x = n * c + o * s + i * l - r * a, this._y = i * c + o * a + r * s - n * l, this._z = r * c + o * l + n * a - i * s, this._w = o * c - n * s - i * a - r * l, this._onChangeCallback(), this + } + slerp(t, e) { + if (0 === e) return this; + if (1 === e) return this.copy(t); + const n = this._x, + i = this._y, + r = this._z, + o = this._w; + let s = o * t._w + n * t._x + i * t._y + r * t._z; + if (s < 0 ? (this._w = -t._w, this._x = -t._x, this._y = -t._y, this._z = -t._z, s = -s) : this.copy(t), s >= 1) return this._w = o, this._x = n, this._y = i, this._z = r, this; + const a = 1 - s * s; + if (a <= Number.EPSILON) { + const t = 1 - e; + return this._w = t * o + e * this._w, this._x = t * n + e * this._x, this._y = t * i + e * this._y, this._z = t * r + e * this._z, this.normalize(), this._onChangeCallback(), this + } + const l = Math.sqrt(a), + c = Math.atan2(l, s), + h = Math.sin((1 - e) * c) / l, + u = Math.sin(e * c) / l; + return this._w = o * h + this._w * u, this._x = n * h + this._x * u, this._y = i * h + this._y * u, this._z = r * h + this._z * u, this._onChangeCallback(), this + } + equals(t) { + return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w + } + fromArray(t, e = 0) { + return this._x = t[e], this._y = t[e + 1], this._z = t[e + 2], this._w = t[e + 3], this._onChangeCallback(), this + } + toArray(t = [], e = 0) { + return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._w, t + } + fromBufferAttribute(t, e) { + return this._x = t.getX(e), this._y = t.getY(e), this._z = t.getZ(e), this._w = t.getW(e), this + } + _onChange(t) { + return this._onChangeCallback = t, this + } + _onChangeCallback() {} + } + class T { + constructor(t = 0, e = 0, n = 0) { + Object.defineProperty(this, "isVector3", { + value: !0 + }), this.x = t, this.y = e, this.z = n + } + set(t, e, n) { + return void 0 === n && (n = this.z), this.x = t, this.y = e, this.z = n, this + } + setScalar(t) { + return this.x = t, this.y = t, this.z = t, this + } + setX(t) { + return this.x = t, this + } + setY(t) { + return this.y = t, this + } + setZ(t) { + return this.z = t, this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw new Error("index is out of range: " + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + t) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z) + } + copy(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this + } + add(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this) + } + addScalar(t) { + return this.x += t, this.y += t, this.z += t, this + } + addVectors(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this + } + addScaledVector(t, e) { + return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this + } + sub(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this) + } + subScalar(t) { + return this.x -= t, this.y -= t, this.z -= t, this + } + subVectors(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this + } + multiply(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(t, e)) : (this.x *= t.x, this.y *= t.y, this.z *= t.z, this) + } + multiplyScalar(t) { + return this.x *= t, this.y *= t, this.z *= t, this + } + multiplyVectors(t, e) { + return this.x = t.x * e.x, this.y = t.y * e.y, this.z = t.z * e.z, this + } + applyEuler(t) { + return t && t.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), this.applyQuaternion(R.setFromEuler(t)) + } + applyAxisAngle(t, e) { + return this.applyQuaternion(R.setFromAxisAngle(t, e)) + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return this.x = r[0] * e + r[3] * n + r[6] * i, this.y = r[1] * e + r[4] * n + r[7] * i, this.z = r[2] * e + r[5] * n + r[8] * i, this + } + applyNormalMatrix(t) { + return this.applyMatrix3(t).normalize() + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements, + o = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]); + return this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * o, this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * o, this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * o, this + } + applyQuaternion(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.x, + o = t.y, + s = t.z, + a = t.w, + l = a * e + o * i - s * n, + c = a * n + s * e - r * i, + h = a * i + r * n - o * e, + u = -r * e - o * n - s * i; + return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this + } + project(t) { + return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix) + } + unproject(t) { + return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld) + } + transformDirection(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return this.x = r[0] * e + r[4] * n + r[8] * i, this.y = r[1] * e + r[5] * n + r[9] * i, this.z = r[2] * e + r[6] * n + r[10] * i, this.normalize() + } + divide(t) { + return this.x /= t.x, this.y /= t.y, this.z /= t.z, this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + min(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this + } + max(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this + } + clamp(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this + } + clampScalar(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this + } + roundToZero() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this + } + lerpVectors(t, e, n) { + return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this + } + cross(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(t, e)) : this.crossVectors(this, t) + } + crossVectors(t, e) { + const n = t.x, + i = t.y, + r = t.z, + o = e.x, + s = e.y, + a = e.z; + return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this + } + projectOnVector(t) { + const e = t.lengthSq(); + if (0 === e) return this.set(0, 0, 0); + const n = t.dot(this) / e; + return this.copy(t).multiplyScalar(n) + } + projectOnPlane(t) { + return L.copy(this).projectOnVector(t), this.sub(L) + } + reflect(t) { + return this.sub(L.copy(t).multiplyScalar(2 * this.dot(t))) + } + angleTo(t) { + const e = Math.sqrt(this.lengthSq() * t.lengthSq()); + if (0 === e) return Math.PI / 2; + const n = this.dot(t) / e; + return Math.acos(g.clamp(n, -1, 1)) + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)) + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y, + i = this.z - t.z; + return e * e + n * n + i * i + } + manhattanDistanceTo(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z) + } + setFromSpherical(t) { + return this.setFromSphericalCoords(t.radius, t.phi, t.theta) + } + setFromSphericalCoords(t, e, n) { + const i = Math.sin(e) * t; + return this.x = i * Math.sin(n), this.y = Math.cos(e) * t, this.z = i * Math.cos(n), this + } + setFromCylindrical(t) { + return this.setFromCylindricalCoords(t.radius, t.theta, t.y) + } + setFromCylindricalCoords(t, e, n) { + return this.x = t * Math.sin(e), this.y = n, this.z = t * Math.cos(e), this + } + setFromMatrixPosition(t) { + const e = t.elements; + return this.x = e[12], this.y = e[13], this.z = e[14], this + } + setFromMatrixScale(t) { + const e = this.setFromMatrixColumn(t, 0).length(), + n = this.setFromMatrixColumn(t, 1).length(), + i = this.setFromMatrixColumn(t, 2).length(); + return this.x = e, this.y = n, this.z = i, this + } + setFromMatrixColumn(t, e) { + return this.fromArray(t.elements, 4 * e) + } + setFromMatrix3Column(t, e) { + return this.fromArray(t.elements, 3 * e) + } + equals(t) { + return t.x === this.x && t.y === this.y && t.z === this.z + } + fromArray(t, e = 0) { + return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this + } + toArray(t = [], e = 0) { + return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t + } + fromBufferAttribute(t, e, n) { + return void 0 !== n && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this + } + } + const L = new T, + R = new S; + class C { + constructor(t, e) { + Object.defineProperty(this, "isBox3", { + value: !0 + }), this.min = void 0 !== t ? t : new T(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new T(-1 / 0, -1 / 0, -1 / 0) + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this + } + setFromArray(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + o = -1 / 0, + s = -1 / 0; + for (let a = 0, l = t.length; a < l; a += 3) { + const l = t[a], + c = t[a + 1], + h = t[a + 2]; + l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) + } + return this.min.set(e, n, i), this.max.set(r, o, s), this + } + setFromBufferAttribute(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + o = -1 / 0, + s = -1 / 0; + for (let a = 0, l = t.count; a < l; a++) { + const l = t.getX(a), + c = t.getY(a), + h = t.getZ(a); + l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) + } + return this.min.set(e, n, i), this.max.set(r, o, s), this + } + setFromPoints(t) { + this.makeEmpty(); + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this + } + setFromCenterAndSize(t, e) { + const n = I.copy(e).multiplyScalar(.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + } + setFromObject(t) { + return this.makeEmpty(), this.expandByObject(t) + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + } + makeEmpty() { + return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z + } + getCenter(t) { + return void 0 === t && (console.warn("THREE.Box3: .getCenter() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) + } + getSize(t) { + return void 0 === t && (console.warn("THREE.Box3: .getSize() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min) + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + } + expandByObject(t) { + t.updateWorldMatrix(!1, !1); + const e = t.geometry; + void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), O.copy(e.boundingBox), O.applyMatrix4(t.matrixWorld), this.union(O)); + const n = t.children; + for (let t = 0, e = n.length; t < e; t++) this.expandByObject(n[t]); + return this + } + containsPoint(t) { + return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y || t.z < this.min.z || t.z > this.max.z) + } + containsBox(t) { + return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y && this.min.z <= t.min.z && t.max.z <= this.max.z + } + getParameter(t, e) { + return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), e = new T), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y), (t.z - this.min.z) / (this.max.z - this.min.z)) + } + intersectsBox(t) { + return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y || t.max.z < this.min.z || t.min.z > this.max.z) + } + intersectsSphere(t) { + return this.clampPoint(t.center, I), I.distanceToSquared(t.center) <= t.radius * t.radius + } + intersectsPlane(t) { + let e, n; + return t.normal.x > 0 ? (e = t.normal.x * this.min.x, n = t.normal.x * this.max.x) : (e = t.normal.x * this.max.x, n = t.normal.x * this.min.x), t.normal.y > 0 ? (e += t.normal.y * this.min.y, n += t.normal.y * this.max.y) : (e += t.normal.y * this.max.y, n += t.normal.y * this.min.y), t.normal.z > 0 ? (e += t.normal.z * this.min.z, n += t.normal.z * this.max.z) : (e += t.normal.z * this.max.z, n += t.normal.z * this.min.z), e <= -t.constant && n >= -t.constant + } + intersectsTriangle(t) { + if (this.isEmpty()) return !1; + this.getCenter(G), V.subVectors(this.max, G), N.subVectors(t.a, G), B.subVectors(t.b, G), F.subVectors(t.c, G), z.subVectors(B, N), U.subVectors(F, B), H.subVectors(N, F); + let e = [0, -z.z, z.y, 0, -U.z, U.y, 0, -H.z, H.y, z.z, 0, -z.x, U.z, 0, -U.x, H.z, 0, -H.x, -z.y, z.x, 0, -U.y, U.x, 0, -H.y, H.x, 0]; + return !!P(e, N, B, F, V) && (e = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!P(e, N, B, F, V) && (k.crossVectors(z, U), e = [k.x, k.y, k.z], P(e, N, B, F, V))) + } + clampPoint(t, e) { + return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), e = new T), e.copy(t).clamp(this.min, this.max) + } + distanceToPoint(t) { + return I.copy(t).clamp(this.min, this.max).sub(t).length() + } + getBoundingSphere(t) { + return void 0 === t && console.error("THREE.Box3: .getBoundingSphere() target is now required"), this.getCenter(t.center), t.radius = .5 * this.getSize(I).length(), t + } + intersect(t) { + return this.min.max(t.min), this.max.min(t.max), this.isEmpty() && this.makeEmpty(), this + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this + } + applyMatrix4(t) { + return this.isEmpty() || (D[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), D[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), D[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), D[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), D[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), D[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), D[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), D[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.setFromPoints(D)), this + } + translate(t) { + return this.min.add(t), this.max.add(t), this + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + } + + function P(t, e, n, i, r) { + for (let o = 0, s = t.length - 3; o <= s; o += 3) { + W.fromArray(t, o); + const s = r.x * Math.abs(W.x) + r.y * Math.abs(W.y) + r.z * Math.abs(W.z), + a = e.dot(W), + l = n.dot(W), + c = i.dot(W); + if (Math.max(-Math.max(a, l, c), Math.min(a, l, c)) > s) return !1 + } + return !0 + } + const D = [new T, new T, new T, new T, new T, new T, new T, new T], + I = new T, + O = new C, + N = new T, + B = new T, + F = new T, + z = new T, + U = new T, + H = new T, + G = new T, + V = new T, + k = new T, + W = new T, + j = new C; + class X { + constructor(t, e) { + this.center = void 0 !== t ? t : new T, this.radius = void 0 !== e ? e : -1 + } + set(t, e) { + return this.center.copy(t), this.radius = e, this + } + setFromPoints(t, e) { + const n = this.center; + void 0 !== e ? n.copy(e) : j.setFromPoints(t).getCenter(n); + let i = 0; + for (let e = 0, r = t.length; e < r; e++) i = Math.max(i, n.distanceToSquared(t[e])); + return this.radius = Math.sqrt(i), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.center.copy(t.center), this.radius = t.radius, this + } + isEmpty() { + return this.radius < 0 + } + makeEmpty() { + return this.center.set(0, 0, 0), this.radius = -1, this + } + containsPoint(t) { + return t.distanceToSquared(this.center) <= this.radius * this.radius + } + distanceToPoint(t) { + return t.distanceTo(this.center) - this.radius + } + intersectsSphere(t) { + const e = this.radius + t.radius; + return t.center.distanceToSquared(this.center) <= e * e + } + intersectsBox(t) { + return t.intersectsSphere(this) + } + intersectsPlane(t) { + return Math.abs(t.distanceToPoint(this.center)) <= this.radius + } + clampPoint(t, e) { + const n = this.center.distanceToSquared(t); + return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), e = new T), e.copy(t), n > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), e + } + getBoundingBox(t) { + return void 0 === t && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), t = new C), this.isEmpty() ? (t.makeEmpty(), t) : (t.set(this.center, this.center), t.expandByScalar(this.radius), t) + } + applyMatrix4(t) { + return this.center.applyMatrix4(t), this.radius = this.radius * t.getMaxScaleOnAxis(), this + } + translate(t) { + return this.center.add(t), this + } + equals(t) { + return t.center.equals(this.center) && t.radius === this.radius + } + } + const q = new T, + Y = new T, + Q = new T, + Z = new T, + J = new T, + K = new T, + $ = new T; + class tt { + constructor(t, e) { + this.origin = void 0 !== t ? t : new T, this.direction = void 0 !== e ? e : new T(0, 0, -1) + } + set(t, e) { + return this.origin.copy(t), this.direction.copy(e), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.origin.copy(t.origin), this.direction.copy(t.direction), this + } + at(t, e) { + return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), e = new T), e.copy(this.direction).multiplyScalar(t).add(this.origin) + } + lookAt(t) { + return this.direction.copy(t).sub(this.origin).normalize(), this + } + recast(t) { + return this.origin.copy(this.at(t, q)), this + } + closestPointToPoint(t, e) { + void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), e = new T), e.subVectors(t, this.origin); + const n = e.dot(this.direction); + return n < 0 ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(n).add(this.origin) + } + distanceToPoint(t) { + return Math.sqrt(this.distanceSqToPoint(t)) + } + distanceSqToPoint(t) { + const e = q.subVectors(t, this.origin).dot(this.direction); + return e < 0 ? this.origin.distanceToSquared(t) : (q.copy(this.direction).multiplyScalar(e).add(this.origin), q.distanceToSquared(t)) + } + distanceSqToSegment(t, e, n, i) { + Y.copy(t).add(e).multiplyScalar(.5), Q.copy(e).sub(t).normalize(), Z.copy(this.origin).sub(Y); + const r = .5 * t.distanceTo(e), + o = -this.direction.dot(Q), + s = Z.dot(this.direction), + a = -Z.dot(Q), + l = Z.lengthSq(), + c = Math.abs(1 - o * o); + let h, u, d, p; + if (c > 0) + if (h = o * a - s, u = o * s - a, p = r * c, h >= 0) + if (u >= -p) + if (u <= p) { + const t = 1 / c; + h *= t, u *= t, d = h * (h + o * u + 2 * s) + u * (o * h + u + 2 * a) + l + } else u = r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; + else u = -r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; + else u <= -p ? (h = Math.max(0, -(-o * r + s)), u = h > 0 ? -r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l) : u <= p ? (h = 0, u = Math.min(Math.max(-r, -a), r), d = u * (u + 2 * a) + l) : (h = Math.max(0, -(o * r + s)), u = h > 0 ? r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l); + else u = o > 0 ? -r : r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; + return n && n.copy(this.direction).multiplyScalar(h).add(this.origin), i && i.copy(Q).multiplyScalar(u).add(Y), d + } + intersectSphere(t, e) { + q.subVectors(t.center, this.origin); + const n = q.dot(this.direction), + i = q.dot(q) - n * n, + r = t.radius * t.radius; + if (i > r) return null; + const o = Math.sqrt(r - i), + s = n - o, + a = n + o; + return s < 0 && a < 0 ? null : s < 0 ? this.at(a, e) : this.at(s, e) + } + intersectsSphere(t) { + return this.distanceSqToPoint(t.center) <= t.radius * t.radius + } + distanceToPlane(t) { + const e = t.normal.dot(this.direction); + if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null; + const n = -(this.origin.dot(t.normal) + t.constant) / e; + return n >= 0 ? n : null + } + intersectPlane(t, e) { + const n = this.distanceToPlane(t); + return null === n ? null : this.at(n, e) + } + intersectsPlane(t) { + const e = t.distanceToPoint(this.origin); + if (0 === e) return !0; + return t.normal.dot(this.direction) * e < 0 + } + intersectBox(t, e) { + let n, i, r, o, s, a; + const l = 1 / this.direction.x, + c = 1 / this.direction.y, + h = 1 / this.direction.z, + u = this.origin; + return l >= 0 ? (n = (t.min.x - u.x) * l, i = (t.max.x - u.x) * l) : (n = (t.max.x - u.x) * l, i = (t.min.x - u.x) * l), c >= 0 ? (r = (t.min.y - u.y) * c, o = (t.max.y - u.y) * c) : (r = (t.max.y - u.y) * c, o = (t.min.y - u.y) * c), n > o || r > i ? null : ((r > n || n != n) && (n = r), (o < i || i != i) && (i = o), h >= 0 ? (s = (t.min.z - u.z) * h, a = (t.max.z - u.z) * h) : (s = (t.max.z - u.z) * h, a = (t.min.z - u.z) * h), n > a || s > i ? null : ((s > n || n != n) && (n = s), (a < i || i != i) && (i = a), i < 0 ? null : this.at(n >= 0 ? n : i, e))) + } + intersectsBox(t) { + return null !== this.intersectBox(t, q) + } + intersectTriangle(t, e, n, i, r) { + J.subVectors(e, t), K.subVectors(n, t), $.crossVectors(J, K); + let o, s = this.direction.dot($); + if (s > 0) { + if (i) return null; + o = 1 + } else { + if (!(s < 0)) return null; + o = -1, s = -s + } + Z.subVectors(this.origin, t); + const a = o * this.direction.dot(K.crossVectors(Z, K)); + if (a < 0) return null; + const l = o * this.direction.dot(J.cross(Z)); + if (l < 0) return null; + if (a + l > s) return null; + const c = -o * Z.dot($); + return c < 0 ? null : this.at(c / s, r) + } + applyMatrix4(t) { + return this.origin.applyMatrix4(t), this.direction.transformDirection(t), this + } + equals(t) { + return t.origin.equals(this.origin) && t.direction.equals(this.direction) + } + } + class et { + constructor() { + Object.defineProperty(this, "isMatrix4", { + value: !0 + }), this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.") + } + set(t, e, n, i, r, o, s, a, l, c, h, u, d, p, f, m) { + const g = this.elements; + return g[0] = t, g[4] = e, g[8] = n, g[12] = i, g[1] = r, g[5] = o, g[9] = s, g[13] = a, g[2] = l, g[6] = c, g[10] = h, g[14] = u, g[3] = d, g[7] = p, g[11] = f, g[15] = m, this + } + identity() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + clone() { + return (new et).fromArray(this.elements) + } + copy(t) { + const e = this.elements, + n = t.elements; + return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], e[9] = n[9], e[10] = n[10], e[11] = n[11], e[12] = n[12], e[13] = n[13], e[14] = n[14], e[15] = n[15], this + } + copyPosition(t) { + const e = this.elements, + n = t.elements; + return e[12] = n[12], e[13] = n[13], e[14] = n[14], this + } + setFromMatrix3(t) { + const e = t.elements; + return this.set(e[0], e[3], e[6], 0, e[1], e[4], e[7], 0, e[2], e[5], e[8], 0, 0, 0, 0, 1), this + } + extractBasis(t, e, n) { + return t.setFromMatrixColumn(this, 0), e.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this + } + makeBasis(t, e, n) { + return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1), this + } + extractRotation(t) { + const e = this.elements, + n = t.elements, + i = 1 / nt.setFromMatrixColumn(t, 0).length(), + r = 1 / nt.setFromMatrixColumn(t, 1).length(), + o = 1 / nt.setFromMatrixColumn(t, 2).length(); + return e[0] = n[0] * i, e[1] = n[1] * i, e[2] = n[2] * i, e[3] = 0, e[4] = n[4] * r, e[5] = n[5] * r, e[6] = n[6] * r, e[7] = 0, e[8] = n[8] * o, e[9] = n[9] * o, e[10] = n[10] * o, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this + } + makeRotationFromEuler(t) { + t && t.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); + const e = this.elements, + n = t.x, + i = t.y, + r = t.z, + o = Math.cos(n), + s = Math.sin(n), + a = Math.cos(i), + l = Math.sin(i), + c = Math.cos(r), + h = Math.sin(r); + if ("XYZ" === t.order) { + const t = o * c, + n = o * h, + i = s * c, + r = s * h; + e[0] = a * c, e[4] = -a * h, e[8] = l, e[1] = n + i * l, e[5] = t - r * l, e[9] = -s * a, e[2] = r - t * l, e[6] = i + n * l, e[10] = o * a + } else if ("YXZ" === t.order) { + const t = a * c, + n = a * h, + i = l * c, + r = l * h; + e[0] = t + r * s, e[4] = i * s - n, e[8] = o * l, e[1] = o * h, e[5] = o * c, e[9] = -s, e[2] = n * s - i, e[6] = r + t * s, e[10] = o * a + } else if ("ZXY" === t.order) { + const t = a * c, + n = a * h, + i = l * c, + r = l * h; + e[0] = t - r * s, e[4] = -o * h, e[8] = i + n * s, e[1] = n + i * s, e[5] = o * c, e[9] = r - t * s, e[2] = -o * l, e[6] = s, e[10] = o * a + } else if ("ZYX" === t.order) { + const t = o * c, + n = o * h, + i = s * c, + r = s * h; + e[0] = a * c, e[4] = i * l - n, e[8] = t * l + r, e[1] = a * h, e[5] = r * l + t, e[9] = n * l - i, e[2] = -l, e[6] = s * a, e[10] = o * a + } else if ("YZX" === t.order) { + const t = o * a, + n = o * l, + i = s * a, + r = s * l; + e[0] = a * c, e[4] = r - t * h, e[8] = i * h + n, e[1] = h, e[5] = o * c, e[9] = -s * c, e[2] = -l * c, e[6] = n * h + i, e[10] = t - r * h + } else if ("XZY" === t.order) { + const t = o * a, + n = o * l, + i = s * a, + r = s * l; + e[0] = a * c, e[4] = -h, e[8] = l * c, e[1] = t * h + r, e[5] = o * c, e[9] = n * h - i, e[2] = i * h - n, e[6] = s * c, e[10] = r * h + t + } + return e[3] = 0, e[7] = 0, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this + } + makeRotationFromQuaternion(t) { + return this.compose(rt, t, ot) + } + lookAt(t, e, n) { + const i = this.elements; + return lt.subVectors(t, e), 0 === lt.lengthSq() && (lt.z = 1), lt.normalize(), st.crossVectors(n, lt), 0 === st.lengthSq() && (1 === Math.abs(n.z) ? lt.x += 1e-4 : lt.z += 1e-4, lt.normalize(), st.crossVectors(n, lt)), st.normalize(), at.crossVectors(lt, st), i[0] = st.x, i[4] = at.x, i[8] = lt.x, i[1] = st.y, i[5] = at.y, i[9] = lt.y, i[2] = st.z, i[6] = at.z, i[10] = lt.z, this + } + multiply(t, e) { + return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(t, e)) : this.multiplyMatrices(this, t) + } + premultiply(t) { + return this.multiplyMatrices(t, this) + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + o = n[0], + s = n[4], + a = n[8], + l = n[12], + c = n[1], + h = n[5], + u = n[9], + d = n[13], + p = n[2], + f = n[6], + m = n[10], + g = n[14], + v = n[3], + y = n[7], + A = n[11], + x = n[15], + _ = i[0], + b = i[4], + w = i[8], + M = i[12], + E = i[1], + S = i[5], + T = i[9], + L = i[13], + R = i[2], + C = i[6], + P = i[10], + D = i[14], + I = i[3], + O = i[7], + N = i[11], + B = i[15]; + return r[0] = o * _ + s * E + a * R + l * I, r[4] = o * b + s * S + a * C + l * O, r[8] = o * w + s * T + a * P + l * N, r[12] = o * M + s * L + a * D + l * B, r[1] = c * _ + h * E + u * R + d * I, r[5] = c * b + h * S + u * C + d * O, r[9] = c * w + h * T + u * P + d * N, r[13] = c * M + h * L + u * D + d * B, r[2] = p * _ + f * E + m * R + g * I, r[6] = p * b + f * S + m * C + g * O, r[10] = p * w + f * T + m * P + g * N, r[14] = p * M + f * L + m * D + g * B, r[3] = v * _ + y * E + A * R + x * I, r[7] = v * b + y * S + A * C + x * O, r[11] = v * w + y * T + A * P + x * N, r[15] = v * M + y * L + A * D + x * B, this + } + multiplyScalar(t) { + const e = this.elements; + return e[0] *= t, e[4] *= t, e[8] *= t, e[12] *= t, e[1] *= t, e[5] *= t, e[9] *= t, e[13] *= t, e[2] *= t, e[6] *= t, e[10] *= t, e[14] *= t, e[3] *= t, e[7] *= t, e[11] *= t, e[15] *= t, this + } + determinant() { + const t = this.elements, + e = t[0], + n = t[4], + i = t[8], + r = t[12], + o = t[1], + s = t[5], + a = t[9], + l = t[13], + c = t[2], + h = t[6], + u = t[10], + d = t[14]; + return t[3] * (+r * a * h - i * l * h - r * s * u + n * l * u + i * s * d - n * a * d) + t[7] * (+e * a * d - e * l * u + r * o * u - i * o * d + i * l * c - r * a * c) + t[11] * (+e * l * h - e * s * d - r * o * h + n * o * d + r * s * c - n * l * c) + t[15] * (-i * s * c - e * a * h + e * s * u + i * o * h - n * o * u + n * a * c) + } + transpose() { + const t = this.elements; + let e; + return e = t[1], t[1] = t[4], t[4] = e, e = t[2], t[2] = t[8], t[8] = e, e = t[6], t[6] = t[9], t[9] = e, e = t[3], t[3] = t[12], t[12] = e, e = t[7], t[7] = t[13], t[13] = e, e = t[11], t[11] = t[14], t[14] = e, this + } + setPosition(t, e, n) { + const i = this.elements; + return t.isVector3 ? (i[12] = t.x, i[13] = t.y, i[14] = t.z) : (i[12] = t, i[13] = e, i[14] = n), this + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + o = t[4], + s = t[5], + a = t[6], + l = t[7], + c = t[8], + h = t[9], + u = t[10], + d = t[11], + p = t[12], + f = t[13], + m = t[14], + g = t[15], + v = h * m * l - f * u * l + f * a * d - s * m * d - h * a * g + s * u * g, + y = p * u * l - c * m * l - p * a * d + o * m * d + c * a * g - o * u * g, + A = c * f * l - p * h * l + p * s * d - o * f * d - c * s * g + o * h * g, + x = p * h * a - c * f * a - p * s * u + o * f * u + c * s * m - o * h * m, + _ = e * v + n * y + i * A + r * x; + if (0 === _) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const b = 1 / _; + return t[0] = v * b, t[1] = (f * u * r - h * m * r - f * i * d + n * m * d + h * i * g - n * u * g) * b, t[2] = (s * m * r - f * a * r + f * i * l - n * m * l - s * i * g + n * a * g) * b, t[3] = (h * a * r - s * u * r - h * i * l + n * u * l + s * i * d - n * a * d) * b, t[4] = y * b, t[5] = (c * m * r - p * u * r + p * i * d - e * m * d - c * i * g + e * u * g) * b, t[6] = (p * a * r - o * m * r - p * i * l + e * m * l + o * i * g - e * a * g) * b, t[7] = (o * u * r - c * a * r + c * i * l - e * u * l - o * i * d + e * a * d) * b, t[8] = A * b, t[9] = (p * h * r - c * f * r - p * n * d + e * f * d + c * n * g - e * h * g) * b, t[10] = (o * f * r - p * s * r + p * n * l - e * f * l - o * n * g + e * s * g) * b, t[11] = (c * s * r - o * h * r - c * n * l + e * h * l + o * n * d - e * s * d) * b, t[12] = x * b, t[13] = (c * f * i - p * h * i + p * n * u - e * f * u - c * n * m + e * h * m) * b, t[14] = (p * s * i - o * f * i - p * n * a + e * f * a + o * n * m - e * s * m) * b, t[15] = (o * h * i - c * s * i + c * n * a - e * h * a - o * n * u + e * s * u) * b, this + } + scale(t) { + const e = this.elements, + n = t.x, + i = t.y, + r = t.z; + return e[0] *= n, e[4] *= i, e[8] *= r, e[1] *= n, e[5] *= i, e[9] *= r, e[2] *= n, e[6] *= i, e[10] *= r, e[3] *= n, e[7] *= i, e[11] *= r, this + } + getMaxScaleOnAxis() { + const t = this.elements, + e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2], + n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6], + i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10]; + return Math.sqrt(Math.max(e, n, i)) + } + makeTranslation(t, e, n) { + return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this + } + makeRotationX(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this + } + makeRotationY(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this + } + makeRotationZ(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + makeRotationAxis(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = 1 - n, + o = t.x, + s = t.y, + a = t.z, + l = r * o, + c = r * s; + return this.set(l * o + n, l * s - i * a, l * a + i * s, 0, l * s + i * a, c * s + n, c * a - i * o, 0, l * a - i * s, c * a + i * o, r * a * a + n, 0, 0, 0, 0, 1), this + } + makeScale(t, e, n) { + return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this + } + makeShear(t, e, n) { + return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this + } + compose(t, e, n) { + const i = this.elements, + r = e._x, + o = e._y, + s = e._z, + a = e._w, + l = r + r, + c = o + o, + h = s + s, + u = r * l, + d = r * c, + p = r * h, + f = o * c, + m = o * h, + g = s * h, + v = a * l, + y = a * c, + A = a * h, + x = n.x, + _ = n.y, + b = n.z; + return i[0] = (1 - (f + g)) * x, i[1] = (d + A) * x, i[2] = (p - y) * x, i[3] = 0, i[4] = (d - A) * _, i[5] = (1 - (u + g)) * _, i[6] = (m + v) * _, i[7] = 0, i[8] = (p + y) * b, i[9] = (m - v) * b, i[10] = (1 - (u + f)) * b, i[11] = 0, i[12] = t.x, i[13] = t.y, i[14] = t.z, i[15] = 1, this + } + decompose(t, e, n) { + const i = this.elements; + let r = nt.set(i[0], i[1], i[2]).length(); + const o = nt.set(i[4], i[5], i[6]).length(), + s = nt.set(i[8], i[9], i[10]).length(); + this.determinant() < 0 && (r = -r), t.x = i[12], t.y = i[13], t.z = i[14], it.copy(this); + const a = 1 / r, + l = 1 / o, + c = 1 / s; + return it.elements[0] *= a, it.elements[1] *= a, it.elements[2] *= a, it.elements[4] *= l, it.elements[5] *= l, it.elements[6] *= l, it.elements[8] *= c, it.elements[9] *= c, it.elements[10] *= c, e.setFromRotationMatrix(it), n.x = r, n.y = o, n.z = s, this + } + makePerspective(t, e, n, i, r, o) { + void 0 === o && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); + const s = this.elements, + a = 2 * r / (e - t), + l = 2 * r / (n - i), + c = (e + t) / (e - t), + h = (n + i) / (n - i), + u = -(o + r) / (o - r), + d = -2 * o * r / (o - r); + return s[0] = a, s[4] = 0, s[8] = c, s[12] = 0, s[1] = 0, s[5] = l, s[9] = h, s[13] = 0, s[2] = 0, s[6] = 0, s[10] = u, s[14] = d, s[3] = 0, s[7] = 0, s[11] = -1, s[15] = 0, this + } + makeOrthographic(t, e, n, i, r, o) { + const s = this.elements, + a = 1 / (e - t), + l = 1 / (n - i), + c = 1 / (o - r), + h = (e + t) * a, + u = (n + i) * l, + d = (o + r) * c; + return s[0] = 2 * a, s[4] = 0, s[8] = 0, s[12] = -h, s[1] = 0, s[5] = 2 * l, s[9] = 0, s[13] = -u, s[2] = 0, s[6] = 0, s[10] = -2 * c, s[14] = -d, s[3] = 0, s[7] = 0, s[11] = 0, s[15] = 1, this + } + equals(t) { + const e = this.elements, + n = t.elements; + for (let t = 0; t < 16; t++) + if (e[t] !== n[t]) return !1; + return !0 + } + fromArray(t, e = 0) { + for (let n = 0; n < 16; n++) this.elements[n] = t[n + e]; + return this + } + toArray(t = [], e = 0) { + const n = this.elements; + return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t[e + 9] = n[9], t[e + 10] = n[10], t[e + 11] = n[11], t[e + 12] = n[12], t[e + 13] = n[13], t[e + 14] = n[14], t[e + 15] = n[15], t + } + } + const nt = new T, + it = new et, + rt = new T(0, 0, 0), + ot = new T(1, 1, 1), + st = new T, + at = new T, + lt = new T; + class ct { + constructor(t = 0, e = 0, n = 0, i = ct.DefaultOrder) { + Object.defineProperty(this, "isEuler", { + value: !0 + }), this._x = t, this._y = e, this._z = n, this._order = i + } + get x() { + return this._x + } + set x(t) { + this._x = t, this._onChangeCallback() + } + get y() { + return this._y + } + set y(t) { + this._y = t, this._onChangeCallback() + } + get z() { + return this._z + } + set z(t) { + this._z = t, this._onChangeCallback() + } + get order() { + return this._order + } + set order(t) { + this._order = t, this._onChangeCallback() + } + set(t, e, n, i) { + return this._x = t, this._y = e, this._z = n, this._order = i || this._order, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order) + } + copy(t) { + return this._x = t._x, this._y = t._y, this._z = t._z, this._order = t._order, this._onChangeCallback(), this + } + setFromRotationMatrix(t, e, n) { + const i = g.clamp, + r = t.elements, + o = r[0], + s = r[4], + a = r[8], + l = r[1], + c = r[5], + h = r[9], + u = r[2], + d = r[6], + p = r[10]; + switch (e = e || this._order) { + case "XYZ": + this._y = Math.asin(i(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(-h, p), this._z = Math.atan2(-s, o)) : (this._x = Math.atan2(d, c), this._z = 0); + break; + case "YXZ": + this._x = Math.asin(-i(h, -1, 1)), Math.abs(h) < .9999999 ? (this._y = Math.atan2(a, p), this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-u, o), this._z = 0); + break; + case "ZXY": + this._x = Math.asin(i(d, -1, 1)), Math.abs(d) < .9999999 ? (this._y = Math.atan2(-u, p), this._z = Math.atan2(-s, c)) : (this._y = 0, this._z = Math.atan2(l, o)); + break; + case "ZYX": + this._y = Math.asin(-i(u, -1, 1)), Math.abs(u) < .9999999 ? (this._x = Math.atan2(d, p), this._z = Math.atan2(l, o)) : (this._x = 0, this._z = Math.atan2(-s, c)); + break; + case "YZX": + this._z = Math.asin(i(l, -1, 1)), Math.abs(l) < .9999999 ? (this._x = Math.atan2(-h, c), this._y = Math.atan2(-u, o)) : (this._x = 0, this._y = Math.atan2(a, p)); + break; + case "XZY": + this._z = Math.asin(-i(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(d, c), this._y = Math.atan2(a, o)) : (this._x = Math.atan2(-h, p), this._y = 0); + break; + default: + console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + e) + } + return this._order = e, !1 !== n && this._onChangeCallback(), this + } + setFromQuaternion(t, e, n) { + return ht.makeRotationFromQuaternion(t), this.setFromRotationMatrix(ht, e, n) + } + setFromVector3(t, e) { + return this.set(t.x, t.y, t.z, e || this._order) + } + reorder(t) { + return ut.setFromEuler(this), this.setFromQuaternion(ut, t) + } + equals(t) { + return t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order + } + fromArray(t) { + return this._x = t[0], this._y = t[1], this._z = t[2], void 0 !== t[3] && (this._order = t[3]), this._onChangeCallback(), this + } + toArray(t = [], e = 0) { + return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._order, t + } + toVector3(t) { + return t ? t.set(this._x, this._y, this._z) : new T(this._x, this._y, this._z) + } + _onChange(t) { + return this._onChangeCallback = t, this + } + _onChangeCallback() {} + } + ct.DefaultOrder = "XYZ", ct.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]; + const ht = new et, + ut = new S; + class dt { + constructor() { + this.mask = 1 + } + set(t) { + this.mask = 1 << t | 0 + } + enable(t) { + this.mask |= 1 << t | 0 + } + enableAll() { + this.mask = -1 + } + toggle(t) { + this.mask ^= 1 << t | 0 + } + disable(t) { + this.mask &= ~(1 << t | 0) + } + disableAll() { + this.mask = 0 + } + test(t) { + return 0 != (this.mask & t.mask) + } + } + let pt = 0; + const ft = new T, + mt = new S, + gt = new et, + vt = new T, + yt = new T, + At = new T, + xt = new S, + _t = new T(1, 0, 0), + bt = new T(0, 1, 0), + wt = new T(0, 0, 1), + Mt = { + type: "added" + }, + Et = { + type: "removed" + }; + + function St() { + Object.defineProperty(this, "id", { + value: pt++ + }), this.uuid = g.generateUUID(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = St.DefaultUp.clone(); + const t = new T, + e = new ct, + n = new S, + i = new T(1, 1, 1); + e._onChange((function() { + n.setFromEuler(e, !1) + })), n._onChange((function() { + e.setFromQuaternion(n, void 0, !1) + })), Object.defineProperties(this, { + position: { + configurable: !0, + enumerable: !0, + value: t + }, + rotation: { + configurable: !0, + enumerable: !0, + value: e + }, + quaternion: { + configurable: !0, + enumerable: !0, + value: n + }, + scale: { + configurable: !0, + enumerable: !0, + value: i + }, + modelViewMatrix: { + value: new et + }, + normalMatrix: { + value: new y + } + }), this.matrix = new et, this.matrixWorld = new et, this.matrixAutoUpdate = St.DefaultMatrixAutoUpdate, this.matrixWorldNeedsUpdate = !1, this.layers = new dt, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.animations = [], this.userData = {} + } + St.DefaultUp = new T(0, 1, 0), St.DefaultMatrixAutoUpdate = !0, St.prototype = Object.assign(Object.create(p.prototype), { + constructor: St, + isObject3D: !0, + onBeforeRender: function() {}, + onAfterRender: function() {}, + applyMatrix4: function(t) { + this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(t), this.matrix.decompose(this.position, this.quaternion, this.scale) + }, + applyQuaternion: function(t) { + return this.quaternion.premultiply(t), this + }, + setRotationFromAxisAngle: function(t, e) { + this.quaternion.setFromAxisAngle(t, e) + }, + setRotationFromEuler: function(t) { + this.quaternion.setFromEuler(t, !0) + }, + setRotationFromMatrix: function(t) { + this.quaternion.setFromRotationMatrix(t) + }, + setRotationFromQuaternion: function(t) { + this.quaternion.copy(t) + }, + rotateOnAxis: function(t, e) { + return mt.setFromAxisAngle(t, e), this.quaternion.multiply(mt), this + }, + rotateOnWorldAxis: function(t, e) { + return mt.setFromAxisAngle(t, e), this.quaternion.premultiply(mt), this + }, + rotateX: function(t) { + return this.rotateOnAxis(_t, t) + }, + rotateY: function(t) { + return this.rotateOnAxis(bt, t) + }, + rotateZ: function(t) { + return this.rotateOnAxis(wt, t) + }, + translateOnAxis: function(t, e) { + return ft.copy(t).applyQuaternion(this.quaternion), this.position.add(ft.multiplyScalar(e)), this + }, + translateX: function(t) { + return this.translateOnAxis(_t, t) + }, + translateY: function(t) { + return this.translateOnAxis(bt, t) + }, + translateZ: function(t) { + return this.translateOnAxis(wt, t) + }, + localToWorld: function(t) { + return t.applyMatrix4(this.matrixWorld) + }, + worldToLocal: function(t) { + return t.applyMatrix4(gt.copy(this.matrixWorld).invert()) + }, + lookAt: function(t, e, n) { + t.isVector3 ? vt.copy(t) : vt.set(t, e, n); + const i = this.parent; + this.updateWorldMatrix(!0, !1), yt.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? gt.lookAt(yt, vt, this.up) : gt.lookAt(vt, yt, this.up), this.quaternion.setFromRotationMatrix(gt), i && (gt.extractRotation(i.matrixWorld), mt.setFromRotationMatrix(gt), this.quaternion.premultiply(mt.invert())) + }, + add: function(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.add(arguments[t]); + return this + } + return t === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", t), this) : (t && t.isObject3D ? (null !== t.parent && t.parent.remove(t), t.parent = this, this.children.push(t), t.dispatchEvent(Mt)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", t), this) + }, + remove: function(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]); + return this + } + const e = this.children.indexOf(t); + return -1 !== e && (t.parent = null, this.children.splice(e, 1), t.dispatchEvent(Et)), this + }, + clear: function() { + for (let t = 0; t < this.children.length; t++) { + const e = this.children[t]; + e.parent = null, e.dispatchEvent(Et) + } + return this.children.length = 0, this + }, + attach: function(t) { + return this.updateWorldMatrix(!0, !1), gt.copy(this.matrixWorld).invert(), null !== t.parent && (t.parent.updateWorldMatrix(!0, !1), gt.multiply(t.parent.matrixWorld)), t.applyMatrix4(gt), t.updateWorldMatrix(!1, !1), this.add(t), this + }, + getObjectById: function(t) { + return this.getObjectByProperty("id", t) + }, + getObjectByName: function(t) { + return this.getObjectByProperty("name", t) + }, + getObjectByProperty: function(t, e) { + if (this[t] === e) return this; + for (let n = 0, i = this.children.length; n < i; n++) { + const i = this.children[n].getObjectByProperty(t, e); + if (void 0 !== i) return i + } + }, + getWorldPosition: function(t) { + return void 0 === t && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), t.setFromMatrixPosition(this.matrixWorld) + }, + getWorldQuaternion: function(t) { + return void 0 === t && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), t = new S), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, t, At), t + }, + getWorldScale: function(t) { + return void 0 === t && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, xt, t), t + }, + getWorldDirection: function(t) { + void 0 === t && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); + const e = this.matrixWorld.elements; + return t.set(e[8], e[9], e[10]).normalize() + }, + raycast: function() {}, + traverse: function(t) { + t(this); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t) + }, + traverseVisible: function(t) { + if (!1 === this.visible) return; + t(this); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t) + }, + traverseAncestors: function(t) { + const e = this.parent; + null !== e && (t(e), e.traverseAncestors(t)) + }, + updateMatrix: function() { + this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 + }, + updateMatrixWorld: function(t) { + this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || t) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, t = !0); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t) + }, + updateWorldMatrix: function(t, e) { + const n = this.parent; + if (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), !0 === e) { + const t = this.children; + for (let e = 0, n = t.length; e < n; e++) t[e].updateWorldMatrix(!1, !0) + } + }, + toJSON: function(t) { + const e = void 0 === t || "string" == typeof t, + n = {}; + e && (t = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {} + }, n.metadata = { + version: 4.5, + type: "Object", + generator: "Object3D.toJSON" + }); + const i = {}; + + function r(e, n) { + return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid + } + if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON()), this.isMesh || this.isLine || this.isPoints) { + i.geometry = r(t.geometries, this.geometry); + const e = this.geometry.parameters; + if (void 0 !== e && void 0 !== e.shapes) { + const n = e.shapes; + if (Array.isArray(n)) + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + r(t.shapes, i) + } else r(t.shapes, n) + } + } + if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(t.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material) + if (Array.isArray(this.material)) { + const e = []; + for (let n = 0, i = this.material.length; n < i; n++) e.push(r(t.materials, this.material[n])); + i.material = e + } else i.material = r(t.materials, this.material); + if (this.children.length > 0) { + i.children = []; + for (let e = 0; e < this.children.length; e++) i.children.push(this.children[e].toJSON(t).object) + } + if (this.animations.length > 0) { + i.animations = []; + for (let e = 0; e < this.animations.length; e++) { + const n = this.animations[e]; + i.animations.push(r(t.animations, n)) + } + } + if (e) { + const e = o(t.geometries), + i = o(t.materials), + r = o(t.textures), + s = o(t.images), + a = o(t.shapes), + l = o(t.skeletons), + c = o(t.animations); + e.length > 0 && (n.geometries = e), i.length > 0 && (n.materials = i), r.length > 0 && (n.textures = r), s.length > 0 && (n.images = s), a.length > 0 && (n.shapes = a), l.length > 0 && (n.skeletons = l), c.length > 0 && (n.animations = c) + } + return n.object = i, n; + + function o(t) { + const e = []; + for (const n in t) { + const i = t[n]; + delete i.metadata, e.push(i) + } + return e + } + }, + clone: function(t) { + return (new this.constructor).copy(this, t) + }, + copy: function(t, e = !0) { + if (this.name = t.name, this.up.copy(t.up), this.position.copy(t.position), this.rotation.order = t.rotation.order, this.quaternion.copy(t.quaternion), this.scale.copy(t.scale), this.matrix.copy(t.matrix), this.matrixWorld.copy(t.matrixWorld), this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate, this.layers.mask = t.layers.mask, this.visible = t.visible, this.castShadow = t.castShadow, this.receiveShadow = t.receiveShadow, this.frustumCulled = t.frustumCulled, this.renderOrder = t.renderOrder, this.userData = JSON.parse(JSON.stringify(t.userData)), !0 === e) + for (let e = 0; e < t.children.length; e++) { + const n = t.children[e]; + this.add(n.clone()) + } + return this + } + }); + const Tt = new T, + Lt = new T, + Rt = new y; + class Ct { + constructor(t, e) { + Object.defineProperty(this, "isPlane", { + value: !0 + }), this.normal = void 0 !== t ? t : new T(1, 0, 0), this.constant = void 0 !== e ? e : 0 + } + set(t, e) { + return this.normal.copy(t), this.constant = e, this + } + setComponents(t, e, n, i) { + return this.normal.set(t, e, n), this.constant = i, this + } + setFromNormalAndCoplanarPoint(t, e) { + return this.normal.copy(t), this.constant = -e.dot(this.normal), this + } + setFromCoplanarPoints(t, e, n) { + const i = Tt.subVectors(n, e).cross(Lt.subVectors(t, e)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, t), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.normal.copy(t.normal), this.constant = t.constant, this + } + normalize() { + const t = 1 / this.normal.length(); + return this.normal.multiplyScalar(t), this.constant *= t, this + } + negate() { + return this.constant *= -1, this.normal.negate(), this + } + distanceToPoint(t) { + return this.normal.dot(t) + this.constant + } + distanceToSphere(t) { + return this.distanceToPoint(t.center) - t.radius + } + projectPoint(t, e) { + return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), e = new T), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t) + } + intersectLine(t, e) { + void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), e = new T); + const n = t.delta(Tt), + i = this.normal.dot(n); + if (0 === i) return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : void 0; + const r = -(t.start.dot(this.normal) + this.constant) / i; + return r < 0 || r > 1 ? void 0 : e.copy(n).multiplyScalar(r).add(t.start) + } + intersectsLine(t) { + const e = this.distanceToPoint(t.start), + n = this.distanceToPoint(t.end); + return e < 0 && n > 0 || n < 0 && e > 0 + } + intersectsBox(t) { + return t.intersectsPlane(this) + } + intersectsSphere(t) { + return t.intersectsPlane(this) + } + coplanarPoint(t) { + return void 0 === t && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), t = new T), t.copy(this.normal).multiplyScalar(-this.constant) + } + applyMatrix4(t, e) { + const n = e || Rt.getNormalMatrix(t), + i = this.coplanarPoint(Tt).applyMatrix4(t), + r = this.normal.applyMatrix3(n).normalize(); + return this.constant = -i.dot(r), this + } + translate(t) { + return this.constant -= t.dot(this.normal), this + } + equals(t) { + return t.normal.equals(this.normal) && t.constant === this.constant + } + } + const Pt = new T, + Dt = new T, + It = new T, + Ot = new T, + Nt = new T, + Bt = new T, + Ft = new T, + zt = new T, + Ut = new T, + Ht = new T; + class Gt { + constructor(t, e, n) { + this.a = void 0 !== t ? t : new T, this.b = void 0 !== e ? e : new T, this.c = void 0 !== n ? n : new T + } + static getNormal(t, e, n, i) { + void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), i = new T), i.subVectors(n, e), Pt.subVectors(t, e), i.cross(Pt); + const r = i.lengthSq(); + return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0) + } + static getBarycoord(t, e, n, i, r) { + Pt.subVectors(i, e), Dt.subVectors(n, e), It.subVectors(t, e); + const o = Pt.dot(Pt), + s = Pt.dot(Dt), + a = Pt.dot(It), + l = Dt.dot(Dt), + c = Dt.dot(It), + h = o * l - s * s; + if (void 0 === r && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), r = new T), 0 === h) return r.set(-2, -1, -1); + const u = 1 / h, + d = (l * a - s * c) * u, + p = (o * c - s * a) * u; + return r.set(1 - d - p, p, d) + } + static containsPoint(t, e, n, i) { + return this.getBarycoord(t, e, n, i, Ot), Ot.x >= 0 && Ot.y >= 0 && Ot.x + Ot.y <= 1 + } + static getUV(t, e, n, i, r, o, s, a) { + return this.getBarycoord(t, e, n, i, Ot), a.set(0, 0), a.addScaledVector(r, Ot.x), a.addScaledVector(o, Ot.y), a.addScaledVector(s, Ot.z), a + } + static isFrontFacing(t, e, n, i) { + return Pt.subVectors(n, e), Dt.subVectors(t, e), Pt.cross(Dt).dot(i) < 0 + } + set(t, e, n) { + return this.a.copy(t), this.b.copy(e), this.c.copy(n), this + } + setFromPointsAndIndices(t, e, n, i) { + return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this + } + getArea() { + return Pt.subVectors(this.c, this.b), Dt.subVectors(this.a, this.b), .5 * Pt.cross(Dt).length() + } + getMidpoint(t) { + return void 0 === t && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), t = new T), t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) + } + getNormal(t) { + return Gt.getNormal(this.a, this.b, this.c, t) + } + getPlane(t) { + return void 0 === t && (console.warn("THREE.Triangle: .getPlane() target is now required"), t = new Ct), t.setFromCoplanarPoints(this.a, this.b, this.c) + } + getBarycoord(t, e) { + return Gt.getBarycoord(t, this.a, this.b, this.c, e) + } + getUV(t, e, n, i, r) { + return Gt.getUV(t, this.a, this.b, this.c, e, n, i, r) + } + containsPoint(t) { + return Gt.containsPoint(t, this.a, this.b, this.c) + } + isFrontFacing(t) { + return Gt.isFrontFacing(this.a, this.b, this.c, t) + } + intersectsBox(t) { + return t.intersectsTriangle(this) + } + closestPointToPoint(t, e) { + void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), e = new T); + const n = this.a, + i = this.b, + r = this.c; + let o, s; + Nt.subVectors(i, n), Bt.subVectors(r, n), zt.subVectors(t, n); + const a = Nt.dot(zt), + l = Bt.dot(zt); + if (a <= 0 && l <= 0) return e.copy(n); + Ut.subVectors(t, i); + const c = Nt.dot(Ut), + h = Bt.dot(Ut); + if (c >= 0 && h <= c) return e.copy(i); + const u = a * h - c * l; + if (u <= 0 && a >= 0 && c <= 0) return o = a / (a - c), e.copy(n).addScaledVector(Nt, o); + Ht.subVectors(t, r); + const d = Nt.dot(Ht), + p = Bt.dot(Ht); + if (p >= 0 && d <= p) return e.copy(r); + const f = d * l - a * p; + if (f <= 0 && l >= 0 && p <= 0) return s = l / (l - p), e.copy(n).addScaledVector(Bt, s); + const m = c * p - d * h; + if (m <= 0 && h - c >= 0 && d - p >= 0) return Ft.subVectors(r, i), s = (h - c) / (h - c + (d - p)), e.copy(i).addScaledVector(Ft, s); + const g = 1 / (m + f + u); + return o = f * g, s = u * g, e.copy(n).addScaledVector(Nt, o).addScaledVector(Bt, s) + } + equals(t) { + return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c) + } + } + const Vt = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }, + kt = { + h: 0, + s: 0, + l: 0 + }, + Wt = { + h: 0, + s: 0, + l: 0 + }; + + function jt(t, e, n) { + return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + 6 * (e - t) * (2 / 3 - n) : t + } + + function Xt(t) { + return t < .04045 ? .0773993808 * t : Math.pow(.9478672986 * t + .0521327014, 2.4) + } + + function qt(t) { + return t < .0031308 ? 12.92 * t : 1.055 * Math.pow(t, .41666) - .055 + } + class Yt { + constructor(t, e, n) { + return Object.defineProperty(this, "isColor", { + value: !0 + }), void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n) + } + set(t) { + return t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t), this + } + setScalar(t) { + return this.r = t, this.g = t, this.b = t, this + } + setHex(t) { + return t = Math.floor(t), this.r = (t >> 16 & 255) / 255, this.g = (t >> 8 & 255) / 255, this.b = (255 & t) / 255, this + } + setRGB(t, e, n) { + return this.r = t, this.g = e, this.b = n, this + } + setHSL(t, e, n) { + if (t = g.euclideanModulo(t, 1), e = g.clamp(e, 0, 1), n = g.clamp(n, 0, 1), 0 === e) this.r = this.g = this.b = n; + else { + const i = n <= .5 ? n * (1 + e) : n + e - n * e, + r = 2 * n - i; + this.r = jt(r, i, t + 1 / 3), this.g = jt(r, i, t), this.b = jt(r, i, t - 1 / 3) + } + return this + } + setStyle(t) { + function e(e) { + void 0 !== e && parseFloat(e) < 1 && console.warn("THREE.Color: Alpha component of " + t + " will be ignored.") + } + let n; + if (n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)) { + let t; + const i = n[1], + r = n[2]; + switch (i) { + case "rgb": + case "rgba": + if (t = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, e(t[4]), this; + if (t = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, e(t[4]), this; + break; + case "hsl": + case "hsla": + if (t = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) { + const n = parseFloat(t[1]) / 360, + i = parseInt(t[2], 10) / 100, + r = parseInt(t[3], 10) / 100; + return e(t[4]), this.setHSL(n, i, r) + } + } + } else if (n = /^\#([A-Fa-f\d]+)$/.exec(t)) { + const t = n[1], + e = t.length; + if (3 === e) return this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255, this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255, this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255, this; + if (6 === e) return this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255, this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255, this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255, this + } + return t && t.length > 0 ? this.setColorName(t) : this + } + setColorName(t) { + const e = Vt[t]; + return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + t), this + } + clone() { + return new this.constructor(this.r, this.g, this.b) + } + copy(t) { + return this.r = t.r, this.g = t.g, this.b = t.b, this + } + copyGammaToLinear(t, e = 2) { + return this.r = Math.pow(t.r, e), this.g = Math.pow(t.g, e), this.b = Math.pow(t.b, e), this + } + copyLinearToGamma(t, e = 2) { + const n = e > 0 ? 1 / e : 1; + return this.r = Math.pow(t.r, n), this.g = Math.pow(t.g, n), this.b = Math.pow(t.b, n), this + } + convertGammaToLinear(t) { + return this.copyGammaToLinear(this, t), this + } + convertLinearToGamma(t) { + return this.copyLinearToGamma(this, t), this + } + copySRGBToLinear(t) { + return this.r = Xt(t.r), this.g = Xt(t.g), this.b = Xt(t.b), this + } + copyLinearToSRGB(t) { + return this.r = qt(t.r), this.g = qt(t.g), this.b = qt(t.b), this + } + convertSRGBToLinear() { + return this.copySRGBToLinear(this), this + } + convertLinearToSRGB() { + return this.copyLinearToSRGB(this), this + } + getHex() { + return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 + } + getHexString() { + return ("000000" + this.getHex().toString(16)).slice(-6) + } + getHSL(t) { + void 0 === t && (console.warn("THREE.Color: .getHSL() target is now required"), t = { + h: 0, + s: 0, + l: 0 + }); + const e = this.r, + n = this.g, + i = this.b, + r = Math.max(e, n, i), + o = Math.min(e, n, i); + let s, a; + const l = (o + r) / 2; + if (o === r) s = 0, a = 0; + else { + const t = r - o; + switch (a = l <= .5 ? t / (r + o) : t / (2 - r - o), r) { + case e: + s = (n - i) / t + (n < i ? 6 : 0); + break; + case n: + s = (i - e) / t + 2; + break; + case i: + s = (e - n) / t + 4 + } + s /= 6 + } + return t.h = s, t.s = a, t.l = l, t + } + getStyle() { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + } + offsetHSL(t, e, n) { + return this.getHSL(kt), kt.h += t, kt.s += e, kt.l += n, this.setHSL(kt.h, kt.s, kt.l), this + } + add(t) { + return this.r += t.r, this.g += t.g, this.b += t.b, this + } + addColors(t, e) { + return this.r = t.r + e.r, this.g = t.g + e.g, this.b = t.b + e.b, this + } + addScalar(t) { + return this.r += t, this.g += t, this.b += t, this + } + sub(t) { + return this.r = Math.max(0, this.r - t.r), this.g = Math.max(0, this.g - t.g), this.b = Math.max(0, this.b - t.b), this + } + multiply(t) { + return this.r *= t.r, this.g *= t.g, this.b *= t.b, this + } + multiplyScalar(t) { + return this.r *= t, this.g *= t, this.b *= t, this + } + lerp(t, e) { + return this.r += (t.r - this.r) * e, this.g += (t.g - this.g) * e, this.b += (t.b - this.b) * e, this + } + lerpColors(t, e, n) { + return this.r = t.r + (e.r - t.r) * n, this.g = t.g + (e.g - t.g) * n, this.b = t.b + (e.b - t.b) * n, this + } + lerpHSL(t, e) { + this.getHSL(kt), t.getHSL(Wt); + const n = g.lerp(kt.h, Wt.h, e), + i = g.lerp(kt.s, Wt.s, e), + r = g.lerp(kt.l, Wt.l, e); + return this.setHSL(n, i, r), this + } + equals(t) { + return t.r === this.r && t.g === this.g && t.b === this.b + } + fromArray(t, e = 0) { + return this.r = t[e], this.g = t[e + 1], this.b = t[e + 2], this + } + toArray(t = [], e = 0) { + return t[e] = this.r, t[e + 1] = this.g, t[e + 2] = this.b, t + } + fromBufferAttribute(t, e) { + return this.r = t.getX(e), this.g = t.getY(e), this.b = t.getZ(e), !0 === t.normalized && (this.r /= 255, this.g /= 255, this.b /= 255), this + } + toJSON() { + return this.getHex() + } + } + Yt.NAMES = Vt, Yt.prototype.r = 1, Yt.prototype.g = 1, Yt.prototype.b = 1; + class Qt { + constructor(t, e, n, i, r, o = 0) { + this.a = t, this.b = e, this.c = n, this.normal = i && i.isVector3 ? i : new T, this.vertexNormals = Array.isArray(i) ? i : [], this.color = r && r.isColor ? r : new Yt, this.vertexColors = Array.isArray(r) ? r : [], this.materialIndex = o + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + this.a = t.a, this.b = t.b, this.c = t.c, this.normal.copy(t.normal), this.color.copy(t.color), this.materialIndex = t.materialIndex; + for (let e = 0, n = t.vertexNormals.length; e < n; e++) this.vertexNormals[e] = t.vertexNormals[e].clone(); + for (let e = 0, n = t.vertexColors.length; e < n; e++) this.vertexColors[e] = t.vertexColors[e].clone(); + return this + } + } + let Zt = 0; + + function Jt() { + Object.defineProperty(this, "id", { + value: Zt++ + }), this.uuid = g.generateUUID(), this.name = "", this.type = "Material", this.fog = !0, this.blending = 1, this.side = 0, this.flatShading = !1, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = 100, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = 7680, this.stencilZFail = 7680, this.stencilZPass = 7680, this.stencilWrite = !1, this.clippingPlanes = null, this.clipIntersection = !1, this.clipShadows = !1, this.shadowSide = null, this.colorWrite = !0, this.precision = null, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = !1, this.alphaTest = 0, this.premultipliedAlpha = !1, this.visible = !0, this.toneMapped = !0, this.userData = {}, this.version = 0 + } + + function Kt(t) { + Jt.call(this), this.type = "MeshBasicMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.setValues(t) + } + Jt.prototype = Object.assign(Object.create(p.prototype), { + constructor: Jt, + isMaterial: !0, + onBeforeCompile: function() {}, + customProgramCacheKey: function() { + return this.onBeforeCompile.toString() + }, + setValues: function(t) { + if (void 0 !== t) + for (const e in t) { + const n = t[e]; + if (void 0 === n) { + console.warn("THREE.Material: '" + e + "' parameter is undefined."); + continue + } + if ("shading" === e) { + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === n; + continue + } + const i = this[e]; + void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[e] = n : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.") + } + }, + toJSON: function(t) { + const e = void 0 === t || "string" == typeof t; + e && (t = { + textures: {}, + images: {} + }); + const n = { + metadata: { + version: 4.5, + type: "Material", + generator: "Material.toJSON" + } + }; + + function i(t) { + const e = []; + for (const n in t) { + const i = t[n]; + delete i.metadata, e.push(i) + } + return e + } + if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(t).uuid), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(t).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(t).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(t).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(t).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(t).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(t).uuid, n.reflectivity = this.reflectivity, n.refractionRatio = this.refractionRatio, void 0 !== this.combine && (n.combine = this.combine), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity)), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(t).uuid), void 0 !== this.size && (n.size = this.size), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), !0 === this.flatShading && (n.flatShading = this.flatShading), 0 !== this.side && (n.side = this.side), this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), !0 === this.transparent && (n.transparent = this.transparent), n.depthFunc = this.depthFunc, n.depthTest = this.depthTest, n.depthWrite = this.depthWrite, n.stencilWrite = this.stencilWrite, n.stencilWriteMask = this.stencilWriteMask, n.stencilFunc = this.stencilFunc, n.stencilRef = this.stencilRef, n.stencilFuncMask = this.stencilFuncMask, n.stencilFail = this.stencilFail, n.stencilZFail = this.stencilZFail, n.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), !0 === this.wireframe && (n.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.morphTargets && (n.morphTargets = !0), !0 === this.morphNormals && (n.morphNormals = !0), !0 === this.skinning && (n.skinning = !0), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData), e) { + const e = i(t.textures), + r = i(t.images); + e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r) + } + return n + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + this.name = t.name, this.fog = t.fog, this.blending = t.blending, this.side = t.side, this.flatShading = t.flatShading, this.vertexColors = t.vertexColors, this.opacity = t.opacity, this.transparent = t.transparent, this.blendSrc = t.blendSrc, this.blendDst = t.blendDst, this.blendEquation = t.blendEquation, this.blendSrcAlpha = t.blendSrcAlpha, this.blendDstAlpha = t.blendDstAlpha, this.blendEquationAlpha = t.blendEquationAlpha, this.depthFunc = t.depthFunc, this.depthTest = t.depthTest, this.depthWrite = t.depthWrite, this.stencilWriteMask = t.stencilWriteMask, this.stencilFunc = t.stencilFunc, this.stencilRef = t.stencilRef, this.stencilFuncMask = t.stencilFuncMask, this.stencilFail = t.stencilFail, this.stencilZFail = t.stencilZFail, this.stencilZPass = t.stencilZPass, this.stencilWrite = t.stencilWrite; + const e = t.clippingPlanes; + let n = null; + if (null !== e) { + const t = e.length; + n = new Array(t); + for (let i = 0; i !== t; ++i) n[i] = e[i].clone() + } + return this.clippingPlanes = n, this.clipIntersection = t.clipIntersection, this.clipShadows = t.clipShadows, this.shadowSide = t.shadowSide, this.colorWrite = t.colorWrite, this.precision = t.precision, this.polygonOffset = t.polygonOffset, this.polygonOffsetFactor = t.polygonOffsetFactor, this.polygonOffsetUnits = t.polygonOffsetUnits, this.dithering = t.dithering, this.alphaTest = t.alphaTest, this.premultipliedAlpha = t.premultipliedAlpha, this.visible = t.visible, this.toneMapped = t.toneMapped, this.userData = JSON.parse(JSON.stringify(t.userData)), this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), Object.defineProperty(Jt.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Kt.prototype = Object.create(Jt.prototype), Kt.prototype.constructor = Kt, Kt.prototype.isMeshBasicMaterial = !0, Kt.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this + }; + const $t = new T, + te = new v; + + function ee(t, e, n) { + if (Array.isArray(t)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + this.name = "", this.array = t, this.itemSize = e, this.count = void 0 !== t ? t.length / e : 0, this.normalized = !0 === n, this.usage = 35044, this.updateRange = { + offset: 0, + count: -1 + }, this.version = 0 + } + + function ne(t, e, n) { + ee.call(this, new Int8Array(t), e, n) + } + + function ie(t, e, n) { + ee.call(this, new Uint8Array(t), e, n) + } + + function re(t, e, n) { + ee.call(this, new Uint8ClampedArray(t), e, n) + } + + function oe(t, e, n) { + ee.call(this, new Int16Array(t), e, n) + } + + function se(t, e, n) { + ee.call(this, new Uint16Array(t), e, n) + } + + function ae(t, e, n) { + ee.call(this, new Int32Array(t), e, n) + } + + function le(t, e, n) { + ee.call(this, new Uint32Array(t), e, n) + } + + function ce(t, e, n) { + ee.call(this, new Uint16Array(t), e, n) + } + + function he(t, e, n) { + ee.call(this, new Float32Array(t), e, n) + } + + function ue(t, e, n) { + ee.call(this, new Float64Array(t), e, n) + } + + function de(t) { + if (0 === t.length) return -1 / 0; + let e = t[0]; + for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]); + return e + } + Object.defineProperty(ee.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Object.assign(ee.prototype, { + isBufferAttribute: !0, + onUploadCallback: function() {}, + setUsage: function(t) { + return this.usage = t, this + }, + copy: function(t) { + return this.name = t.name, this.array = new t.array.constructor(t.array), this.itemSize = t.itemSize, this.count = t.count, this.normalized = t.normalized, this.usage = t.usage, this + }, + copyAt: function(t, e, n) { + t *= this.itemSize, n *= e.itemSize; + for (let i = 0, r = this.itemSize; i < r; i++) this.array[t + i] = e.array[n + i]; + return this + }, + copyArray: function(t) { + return this.array.set(t), this + }, + copyColorsArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), r = new Yt), e[n++] = r.r, e[n++] = r.g, e[n++] = r.b + } + return this + }, + copyVector2sArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), r = new v), e[n++] = r.x, e[n++] = r.y + } + return this + }, + copyVector3sArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), r = new T), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z + } + return this + }, + copyVector4sArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), r = new M), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z, e[n++] = r.w + } + return this + }, + applyMatrix3: function(t) { + if (2 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) te.fromBufferAttribute(this, e), te.applyMatrix3(t), this.setXY(e, te.x, te.y); + else if (3 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) $t.fromBufferAttribute(this, e), $t.applyMatrix3(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + applyMatrix4: function(t) { + for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyMatrix4(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + applyNormalMatrix: function(t) { + for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyNormalMatrix(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + transformDirection: function(t) { + for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.transformDirection(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + set: function(t, e = 0) { + return this.array.set(t, e), this + }, + getX: function(t) { + return this.array[t * this.itemSize] + }, + setX: function(t, e) { + return this.array[t * this.itemSize] = e, this + }, + getY: function(t) { + return this.array[t * this.itemSize + 1] + }, + setY: function(t, e) { + return this.array[t * this.itemSize + 1] = e, this + }, + getZ: function(t) { + return this.array[t * this.itemSize + 2] + }, + setZ: function(t, e) { + return this.array[t * this.itemSize + 2] = e, this + }, + getW: function(t) { + return this.array[t * this.itemSize + 3] + }, + setW: function(t, e) { + return this.array[t * this.itemSize + 3] = e, this + }, + setXY: function(t, e, n) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this + }, + setXYZ: function(t, e, n, i) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this + }, + setXYZW: function(t, e, n, i, r) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this.array[t + 3] = r, this + }, + onUpload: function(t) { + return this.onUploadCallback = t, this + }, + clone: function() { + return new this.constructor(this.array, this.itemSize).copy(this) + }, + toJSON: function() { + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call(this.array), + normalized: this.normalized + } + } + }), ne.prototype = Object.create(ee.prototype), ne.prototype.constructor = ne, ie.prototype = Object.create(ee.prototype), ie.prototype.constructor = ie, re.prototype = Object.create(ee.prototype), re.prototype.constructor = re, oe.prototype = Object.create(ee.prototype), oe.prototype.constructor = oe, se.prototype = Object.create(ee.prototype), se.prototype.constructor = se, ae.prototype = Object.create(ee.prototype), ae.prototype.constructor = ae, le.prototype = Object.create(ee.prototype), le.prototype.constructor = le, ce.prototype = Object.create(ee.prototype), ce.prototype.constructor = ce, ce.prototype.isFloat16BufferAttribute = !0, he.prototype = Object.create(ee.prototype), he.prototype.constructor = he, ue.prototype = Object.create(ee.prototype), ue.prototype.constructor = ue; + const pe = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }; + + function fe(t, e) { + return new pe[t](e) + } + let me = 0; + const ge = new et, + ve = new St, + ye = new T, + Ae = new C, + xe = new C, + _e = new T; + + function be() { + Object.defineProperty(this, "id", { + value: me++ + }), this.uuid = g.generateUUID(), this.name = "", this.type = "BufferGeometry", this.index = null, this.attributes = {}, this.morphAttributes = {}, this.morphTargetsRelative = !1, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = { + start: 0, + count: 1 / 0 + }, this.userData = {} + } + be.prototype = Object.assign(Object.create(p.prototype), { + constructor: be, + isBufferGeometry: !0, + getIndex: function() { + return this.index + }, + setIndex: function(t) { + return Array.isArray(t) ? this.index = new(de(t) > 65535 ? le : se)(t, 1) : this.index = t, this + }, + getAttribute: function(t) { + return this.attributes[t] + }, + setAttribute: function(t, e) { + return this.attributes[t] = e, this + }, + deleteAttribute: function(t) { + return delete this.attributes[t], this + }, + hasAttribute: function(t) { + return void 0 !== this.attributes[t] + }, + addGroup: function(t, e, n = 0) { + this.groups.push({ + start: t, + count: e, + materialIndex: n + }) + }, + clearGroups: function() { + this.groups = [] + }, + setDrawRange: function(t, e) { + this.drawRange.start = t, this.drawRange.count = e + }, + applyMatrix4: function(t) { + const e = this.attributes.position; + void 0 !== e && (e.applyMatrix4(t), e.needsUpdate = !0); + const n = this.attributes.normal; + if (void 0 !== n) { + const e = (new y).getNormalMatrix(t); + n.applyNormalMatrix(e), n.needsUpdate = !0 + } + const i = this.attributes.tangent; + return void 0 !== i && (i.transformDirection(t), i.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this + }, + rotateX: function(t) { + return ge.makeRotationX(t), this.applyMatrix4(ge), this + }, + rotateY: function(t) { + return ge.makeRotationY(t), this.applyMatrix4(ge), this + }, + rotateZ: function(t) { + return ge.makeRotationZ(t), this.applyMatrix4(ge), this + }, + translate: function(t, e, n) { + return ge.makeTranslation(t, e, n), this.applyMatrix4(ge), this + }, + scale: function(t, e, n) { + return ge.makeScale(t, e, n), this.applyMatrix4(ge), this + }, + lookAt: function(t) { + return ve.lookAt(t), ve.updateMatrix(), this.applyMatrix4(ve.matrix), this + }, + center: function() { + return this.computeBoundingBox(), this.boundingBox.getCenter(ye).negate(), this.translate(ye.x, ye.y, ye.z), this + }, + setFromPoints: function(t) { + const e = []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + e.push(i.x, i.y, i.z || 0) + } + return this.setAttribute("position", new he(e, 3)), this + }, + computeBoundingBox: function() { + null === this.boundingBox && (this.boundingBox = new C); + const t = this.attributes.position, + e = this.morphAttributes.position; + if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingBox.set(new T(-1 / 0, -1 / 0, -1 / 0), new T(1 / 0, 1 / 0, 1 / 0)); + if (void 0 !== t) { + if (this.boundingBox.setFromBufferAttribute(t), e) + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + Ae.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(this.boundingBox.min, Ae.min), this.boundingBox.expandByPoint(_e), _e.addVectors(this.boundingBox.max, Ae.max), this.boundingBox.expandByPoint(_e)) : (this.boundingBox.expandByPoint(Ae.min), this.boundingBox.expandByPoint(Ae.max)) + } + } else this.boundingBox.makeEmpty(); + (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this) + }, + computeBoundingSphere: function() { + null === this.boundingSphere && (this.boundingSphere = new X); + const t = this.attributes.position, + e = this.morphAttributes.position; + if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingSphere.set(new T, 1 / 0); + if (t) { + const n = this.boundingSphere.center; + if (Ae.setFromBufferAttribute(t), e) + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + xe.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(Ae.min, xe.min), Ae.expandByPoint(_e), _e.addVectors(Ae.max, xe.max), Ae.expandByPoint(_e)) : (Ae.expandByPoint(xe.min), Ae.expandByPoint(xe.max)) + } + Ae.getCenter(n); + let i = 0; + for (let e = 0, r = t.count; e < r; e++) _e.fromBufferAttribute(t, e), i = Math.max(i, n.distanceToSquared(_e)); + if (e) + for (let r = 0, o = e.length; r < o; r++) { + const o = e[r], + s = this.morphTargetsRelative; + for (let e = 0, r = o.count; e < r; e++) _e.fromBufferAttribute(o, e), s && (ye.fromBufferAttribute(t, e), _e.add(ye)), i = Math.max(i, n.distanceToSquared(_e)) + } + this.boundingSphere.radius = Math.sqrt(i), isNaN(this.boundingSphere.radius) && console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this) + } + }, + computeFaceNormals: function() {}, + computeTangents: function() { + const t = this.index, + e = this.attributes; + if (null === t || void 0 === e.position || void 0 === e.normal || void 0 === e.uv) return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); + const n = t.array, + i = e.position.array, + r = e.normal.array, + o = e.uv.array, + s = i.length / 3; + void 0 === e.tangent && this.setAttribute("tangent", new ee(new Float32Array(4 * s), 4)); + const a = e.tangent.array, + l = [], + c = []; + for (let t = 0; t < s; t++) l[t] = new T, c[t] = new T; + const h = new T, + u = new T, + d = new T, + p = new v, + f = new v, + m = new v, + g = new T, + y = new T; + + function A(t, e, n) { + h.fromArray(i, 3 * t), u.fromArray(i, 3 * e), d.fromArray(i, 3 * n), p.fromArray(o, 2 * t), f.fromArray(o, 2 * e), m.fromArray(o, 2 * n), u.sub(h), d.sub(h), f.sub(p), m.sub(p); + const r = 1 / (f.x * m.y - m.x * f.y); + isFinite(r) && (g.copy(u).multiplyScalar(m.y).addScaledVector(d, -f.y).multiplyScalar(r), y.copy(d).multiplyScalar(f.x).addScaledVector(u, -m.x).multiplyScalar(r), l[t].add(g), l[e].add(g), l[n].add(g), c[t].add(y), c[e].add(y), c[n].add(y)) + } + let x = this.groups; + 0 === x.length && (x = [{ + start: 0, + count: n.length + }]); + for (let t = 0, e = x.length; t < e; ++t) { + const e = x[t], + i = e.start; + for (let t = i, r = i + e.count; t < r; t += 3) A(n[t + 0], n[t + 1], n[t + 2]) + } + const _ = new T, + b = new T, + w = new T, + M = new T; + + function E(t) { + w.fromArray(r, 3 * t), M.copy(w); + const e = l[t]; + _.copy(e), _.sub(w.multiplyScalar(w.dot(e))).normalize(), b.crossVectors(M, e); + const n = b.dot(c[t]) < 0 ? -1 : 1; + a[4 * t] = _.x, a[4 * t + 1] = _.y, a[4 * t + 2] = _.z, a[4 * t + 3] = n + } + for (let t = 0, e = x.length; t < e; ++t) { + const e = x[t], + i = e.start; + for (let t = i, r = i + e.count; t < r; t += 3) E(n[t + 0]), E(n[t + 1]), E(n[t + 2]) + } + }, + computeVertexNormals: function() { + const t = this.index, + e = this.getAttribute("position"); + if (void 0 !== e) { + let n = this.getAttribute("normal"); + if (void 0 === n) n = new ee(new Float32Array(3 * e.count), 3), this.setAttribute("normal", n); + else + for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0); + const i = new T, + r = new T, + o = new T, + s = new T, + a = new T, + l = new T, + c = new T, + h = new T; + if (t) + for (let u = 0, d = t.count; u < d; u += 3) { + const d = t.getX(u + 0), + p = t.getX(u + 1), + f = t.getX(u + 2); + i.fromBufferAttribute(e, d), r.fromBufferAttribute(e, p), o.fromBufferAttribute(e, f), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), s.fromBufferAttribute(n, d), a.fromBufferAttribute(n, p), l.fromBufferAttribute(n, f), s.add(c), a.add(c), l.add(c), n.setXYZ(d, s.x, s.y, s.z), n.setXYZ(p, a.x, a.y, a.z), n.setXYZ(f, l.x, l.y, l.z) + } else + for (let t = 0, s = e.count; t < s; t += 3) i.fromBufferAttribute(e, t + 0), r.fromBufferAttribute(e, t + 1), o.fromBufferAttribute(e, t + 2), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), n.setXYZ(t + 0, c.x, c.y, c.z), n.setXYZ(t + 1, c.x, c.y, c.z), n.setXYZ(t + 2, c.x, c.y, c.z); + this.normalizeNormals(), n.needsUpdate = !0 + } + }, + merge: function(t, e) { + if (!t || !t.isBufferGeometry) return void console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", t); + void 0 === e && (e = 0, console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.")); + const n = this.attributes; + for (const i in n) { + if (void 0 === t.attributes[i]) continue; + const r = n[i].array, + o = t.attributes[i], + s = o.array, + a = o.itemSize * e, + l = Math.min(s.length, r.length - a); + for (let t = 0, e = a; t < l; t++, e++) r[e] = s[t] + } + return this + }, + normalizeNormals: function() { + const t = this.attributes.normal; + for (let e = 0, n = t.count; e < n; e++) _e.fromBufferAttribute(t, e), _e.normalize(), t.setXYZ(e, _e.x, _e.y, _e.z) + }, + toNonIndexed: function() { + function t(t, e) { + const n = t.array, + i = t.itemSize, + r = t.normalized, + o = new n.constructor(e.length * i); + let s = 0, + a = 0; + for (let t = 0, r = e.length; t < r; t++) { + s = e[t] * i; + for (let t = 0; t < i; t++) o[a++] = n[s++] + } + return new ee(o, i, r) + } + if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this; + const e = new be, + n = this.index.array, + i = this.attributes; + for (const r in i) { + const o = t(i[r], n); + e.setAttribute(r, o) + } + const r = this.morphAttributes; + for (const i in r) { + const o = [], + s = r[i]; + for (let e = 0, i = s.length; e < i; e++) { + const i = t(s[e], n); + o.push(i) + } + e.morphAttributes[i] = o + } + e.morphTargetsRelative = this.morphTargetsRelative; + const o = this.groups; + for (let t = 0, n = o.length; t < n; t++) { + const n = o[t]; + e.addGroup(n.start, n.count, n.materialIndex) + } + return e + }, + toJSON: function() { + const t = { + metadata: { + version: 4.5, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + if (t.uuid = this.uuid, t.type = this.type, "" !== this.name && (t.name = this.name), Object.keys(this.userData).length > 0 && (t.userData = this.userData), void 0 !== this.parameters) { + const e = this.parameters; + for (const n in e) void 0 !== e[n] && (t[n] = e[n]); + return t + } + t.data = { + attributes: {} + }; + const e = this.index; + null !== e && (t.data.index = { + type: e.array.constructor.name, + array: Array.prototype.slice.call(e.array) + }); + const n = this.attributes; + for (const e in n) { + const i = n[e], + r = i.toJSON(t.data); + "" !== i.name && (r.name = i.name), t.data.attributes[e] = r + } + const i = {}; + let r = !1; + for (const e in this.morphAttributes) { + const n = this.morphAttributes[e], + o = []; + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e], + r = i.toJSON(t.data); + "" !== i.name && (r.name = i.name), o.push(r) + } + o.length > 0 && (i[e] = o, r = !0) + } + r && (t.data.morphAttributes = i, t.data.morphTargetsRelative = this.morphTargetsRelative); + const o = this.groups; + o.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(o))); + const s = this.boundingSphere; + return null !== s && (t.data.boundingSphere = { + center: s.center.toArray(), + radius: s.radius + }), t + }, + clone: function() { + return (new be).copy(this) + }, + copy: function(t) { + this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null; + const e = {}; + this.name = t.name; + const n = t.index; + null !== n && this.setIndex(n.clone(e)); + const i = t.attributes; + for (const t in i) { + const n = i[t]; + this.setAttribute(t, n.clone(e)) + } + const r = t.morphAttributes; + for (const t in r) { + const n = [], + i = r[t]; + for (let t = 0, r = i.length; t < r; t++) n.push(i[t].clone(e)); + this.morphAttributes[t] = n + } + this.morphTargetsRelative = t.morphTargetsRelative; + const o = t.groups; + for (let t = 0, e = o.length; t < e; t++) { + const e = o[t]; + this.addGroup(e.start, e.count, e.materialIndex) + } + const s = t.boundingBox; + null !== s && (this.boundingBox = s.clone()); + const a = t.boundingSphere; + return null !== a && (this.boundingSphere = a.clone()), this.drawRange.start = t.drawRange.start, this.drawRange.count = t.drawRange.count, this.userData = t.userData, this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + const we = new et, + Me = new tt, + Ee = new X, + Se = new T, + Te = new T, + Le = new T, + Re = new T, + Ce = new T, + Pe = new T, + De = new T, + Ie = new T, + Oe = new T, + Ne = new v, + Be = new v, + Fe = new v, + ze = new T, + Ue = new T; + + function He(t = new be, e = new Kt) { + St.call(this), this.type = "Mesh", this.geometry = t, this.material = e, this.updateMorphTargets() + } + + function Ge(t, e, n, i, r, o, s, a, l, c, h, u) { + Se.fromBufferAttribute(r, c), Te.fromBufferAttribute(r, h), Le.fromBufferAttribute(r, u); + const d = t.morphTargetInfluences; + if (e.morphTargets && o && d) { + De.set(0, 0, 0), Ie.set(0, 0, 0), Oe.set(0, 0, 0); + for (let t = 0, e = o.length; t < e; t++) { + const e = d[t], + n = o[t]; + 0 !== e && (Re.fromBufferAttribute(n, c), Ce.fromBufferAttribute(n, h), Pe.fromBufferAttribute(n, u), s ? (De.addScaledVector(Re, e), Ie.addScaledVector(Ce, e), Oe.addScaledVector(Pe, e)) : (De.addScaledVector(Re.sub(Se), e), Ie.addScaledVector(Ce.sub(Te), e), Oe.addScaledVector(Pe.sub(Le), e))) + } + Se.add(De), Te.add(Ie), Le.add(Oe) + } + t.isSkinnedMesh && (t.boneTransform(c, Se), t.boneTransform(h, Te), t.boneTransform(u, Le)); + const p = function(t, e, n, i, r, o, s, a) { + let l; + if (l = 1 === e.side ? i.intersectTriangle(s, o, r, !0, a) : i.intersectTriangle(r, o, s, 2 !== e.side, a), null === l) return null; + Ue.copy(a), Ue.applyMatrix4(t.matrixWorld); + const c = n.ray.origin.distanceTo(Ue); + return c < n.near || c > n.far ? null : { + distance: c, + point: Ue.clone(), + object: t + } + }(t, e, n, i, Se, Te, Le, ze); + if (p) { + a && (Ne.fromBufferAttribute(a, c), Be.fromBufferAttribute(a, h), Fe.fromBufferAttribute(a, u), p.uv = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)), l && (Ne.fromBufferAttribute(l, c), Be.fromBufferAttribute(l, h), Fe.fromBufferAttribute(l, u), p.uv2 = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)); + const t = new Qt(c, h, u); + Gt.getNormal(Se, Te, Le, t.normal), p.face = t + } + return p + } + He.prototype = Object.assign(Object.create(St.prototype), { + constructor: He, + isMesh: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), void 0 !== t.morphTargetInfluences && (this.morphTargetInfluences = t.morphTargetInfluences.slice()), void 0 !== t.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)), this.material = t.material, this.geometry = t.geometry, this + }, + updateMorphTargets: function() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && e.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }, + raycast: function(t, e) { + const n = this.geometry, + i = this.material, + r = this.matrixWorld; + if (void 0 === i) return; + if (null === n.boundingSphere && n.computeBoundingSphere(), Ee.copy(n.boundingSphere), Ee.applyMatrix4(r), !1 === t.ray.intersectsSphere(Ee)) return; + if (we.copy(r).invert(), Me.copy(t.ray).applyMatrix4(we), null !== n.boundingBox && !1 === Me.intersectsBox(n.boundingBox)) return; + let o; + if (n.isBufferGeometry) { + const r = n.index, + s = n.attributes.position, + a = n.morphAttributes.position, + l = n.morphTargetsRelative, + c = n.attributes.uv, + h = n.attributes.uv2, + u = n.groups, + d = n.drawRange; + if (null !== r) + if (Array.isArray(i)) + for (let n = 0, p = u.length; n < p; n++) { + const p = u[n], + f = i[p.materialIndex]; + for (let n = Math.max(p.start, d.start), i = Math.min(p.start + p.count, d.start + d.count); n < i; n += 3) { + const i = r.getX(n), + u = r.getX(n + 1), + d = r.getX(n + 2); + o = Ge(this, f, t, Me, s, a, l, c, h, i, u, d), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = p.materialIndex, e.push(o)) + } + } else { + for (let n = Math.max(0, d.start), u = Math.min(r.count, d.start + d.count); n < u; n += 3) { + const u = r.getX(n), + d = r.getX(n + 1), + p = r.getX(n + 2); + o = Ge(this, i, t, Me, s, a, l, c, h, u, d, p), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) + } + } else if (void 0 !== s) + if (Array.isArray(i)) + for (let n = 0, r = u.length; n < r; n++) { + const r = u[n], + p = i[r.materialIndex]; + for (let n = Math.max(r.start, d.start), i = Math.min(r.start + r.count, d.start + d.count); n < i; n += 3) { + o = Ge(this, p, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = r.materialIndex, e.push(o)) + } + } else { + for (let n = Math.max(0, d.start), r = Math.min(s.count, d.start + d.count); n < r; n += 3) { + o = Ge(this, i, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) + } + } + } else n.isGeometry && console.error("THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }); + class Ve extends be { + constructor(t = 1, e = 1, n = 1, i = 1, r = 1, o = 1) { + super(), this.type = "BoxGeometry", this.parameters = { + width: t, + height: e, + depth: n, + widthSegments: i, + heightSegments: r, + depthSegments: o + }; + const s = this; + i = Math.floor(i), r = Math.floor(r), o = Math.floor(o); + const a = [], + l = [], + c = [], + h = []; + let u = 0, + d = 0; + + function p(t, e, n, i, r, o, p, f, m, g, v) { + const y = o / m, + A = p / g, + x = o / 2, + _ = p / 2, + b = f / 2, + w = m + 1, + M = g + 1; + let E = 0, + S = 0; + const L = new T; + for (let o = 0; o < M; o++) { + const s = o * A - _; + for (let a = 0; a < w; a++) { + const u = a * y - x; + L[t] = u * i, L[e] = s * r, L[n] = b, l.push(L.x, L.y, L.z), L[t] = 0, L[e] = 0, L[n] = f > 0 ? 1 : -1, c.push(L.x, L.y, L.z), h.push(a / m), h.push(1 - o / g), E += 1 + } + } + for (let t = 0; t < g; t++) + for (let e = 0; e < m; e++) { + const n = u + e + w * t, + i = u + e + w * (t + 1), + r = u + (e + 1) + w * (t + 1), + o = u + (e + 1) + w * t; + a.push(n, i, o), a.push(i, r, o), S += 6 + } + s.addGroup(d, S, v), d += S, u += E + } + p("z", "y", "x", -1, -1, n, e, t, o, r, 0), p("z", "y", "x", 1, -1, n, e, -t, o, r, 1), p("x", "z", "y", 1, 1, t, n, e, i, o, 2), p("x", "z", "y", 1, -1, t, n, -e, i, o, 3), p("x", "y", "z", 1, -1, t, e, n, i, r, 4), p("x", "y", "z", -1, -1, t, e, -n, i, r, 5), this.setIndex(a), this.setAttribute("position", new he(l, 3)), this.setAttribute("normal", new he(c, 3)), this.setAttribute("uv", new he(h, 2)) + } + } + + function ke(t) { + const e = {}; + for (const n in t) { + e[n] = {}; + for (const i in t[n]) { + const r = t[n][i]; + r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture) ? e[n][i] = r.clone() : Array.isArray(r) ? e[n][i] = r.slice() : e[n][i] = r + } + } + return e + } + + function We(t) { + const e = {}; + for (let n = 0; n < t.length; n++) { + const i = ke(t[n]); + for (const t in i) e[t] = i[t] + } + return e + } + const je = { + clone: ke, + merge: We + }; + + function Xe(t) { + Jt.call(this), this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", this.linewidth = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.lights = !1, this.clipping = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.extensions = { + derivatives: !1, + fragDepth: !1, + drawBuffers: !1, + shaderTextureLOD: !1 + }, this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, this.index0AttributeName = void 0, this.uniformsNeedUpdate = !1, this.glslVersion = null, void 0 !== t && (void 0 !== t.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(t)) + } + + function qe() { + St.call(this), this.type = "Camera", this.matrixWorldInverse = new et, this.projectionMatrix = new et, this.projectionMatrixInverse = new et + } + + function Ye(t = 50, e = 1, n = .1, i = 2e3) { + qe.call(this), this.type = "PerspectiveCamera", this.fov = t, this.zoom = 1, this.near = n, this.far = i, this.focus = 10, this.aspect = e, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() + } + Xe.prototype = Object.create(Jt.prototype), Xe.prototype.constructor = Xe, Xe.prototype.isShaderMaterial = !0, Xe.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.fragmentShader = t.fragmentShader, this.vertexShader = t.vertexShader, this.uniforms = ke(t.uniforms), this.defines = Object.assign({}, t.defines), this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.lights = t.lights, this.clipping = t.clipping, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.extensions = Object.assign({}, t.extensions), this.glslVersion = t.glslVersion, this + }, Xe.prototype.toJSON = function(t) { + const e = Jt.prototype.toJSON.call(this, t); + e.glslVersion = this.glslVersion, e.uniforms = {}; + for (const n in this.uniforms) { + const i = this.uniforms[n].value; + i && i.isTexture ? e.uniforms[n] = { + type: "t", + value: i.toJSON(t).uuid + } : i && i.isColor ? e.uniforms[n] = { + type: "c", + value: i.getHex() + } : i && i.isVector2 ? e.uniforms[n] = { + type: "v2", + value: i.toArray() + } : i && i.isVector3 ? e.uniforms[n] = { + type: "v3", + value: i.toArray() + } : i && i.isVector4 ? e.uniforms[n] = { + type: "v4", + value: i.toArray() + } : i && i.isMatrix3 ? e.uniforms[n] = { + type: "m3", + value: i.toArray() + } : i && i.isMatrix4 ? e.uniforms[n] = { + type: "m4", + value: i.toArray() + } : e.uniforms[n] = { + value: i + } + } + Object.keys(this.defines).length > 0 && (e.defines = this.defines), e.vertexShader = this.vertexShader, e.fragmentShader = this.fragmentShader; + const n = {}; + for (const t in this.extensions) !0 === this.extensions[t] && (n[t] = !0); + return Object.keys(n).length > 0 && (e.extensions = n), e + }, qe.prototype = Object.assign(Object.create(St.prototype), { + constructor: qe, + isCamera: !0, + copy: function(t, e) { + return St.prototype.copy.call(this, t, e), this.matrixWorldInverse.copy(t.matrixWorldInverse), this.projectionMatrix.copy(t.projectionMatrix), this.projectionMatrixInverse.copy(t.projectionMatrixInverse), this + }, + getWorldDirection: function(t) { + void 0 === t && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); + const e = this.matrixWorld.elements; + return t.set(-e[8], -e[9], -e[10]).normalize() + }, + updateMatrixWorld: function(t) { + St.prototype.updateMatrixWorld.call(this, t), this.matrixWorldInverse.copy(this.matrixWorld).invert() + }, + updateWorldMatrix: function(t, e) { + St.prototype.updateWorldMatrix.call(this, t, e), this.matrixWorldInverse.copy(this.matrixWorld).invert() + }, + clone: function() { + return (new this.constructor).copy(this) + } + }), Ye.prototype = Object.assign(Object.create(qe.prototype), { + constructor: Ye, + isPerspectiveCamera: !0, + copy: function(t, e) { + return qe.prototype.copy.call(this, t, e), this.fov = t.fov, this.zoom = t.zoom, this.near = t.near, this.far = t.far, this.focus = t.focus, this.aspect = t.aspect, this.view = null === t.view ? null : Object.assign({}, t.view), this.filmGauge = t.filmGauge, this.filmOffset = t.filmOffset, this + }, + setFocalLength: function(t) { + const e = .5 * this.getFilmHeight() / t; + this.fov = 2 * g.RAD2DEG * Math.atan(e), this.updateProjectionMatrix() + }, + getFocalLength: function() { + const t = Math.tan(.5 * g.DEG2RAD * this.fov); + return .5 * this.getFilmHeight() / t + }, + getEffectiveFOV: function() { + return 2 * g.RAD2DEG * Math.atan(Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom) + }, + getFilmWidth: function() { + return this.filmGauge * Math.min(this.aspect, 1) + }, + getFilmHeight: function() { + return this.filmGauge / Math.max(this.aspect, 1) + }, + setViewOffset: function(t, e, n, i, r, o) { + this.aspect = t / e, null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + const t = this.near; + let e = t * Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom, + n = 2 * e, + i = this.aspect * n, + r = -.5 * i; + const o = this.view; + if (null !== this.view && this.view.enabled) { + const t = o.fullWidth, + s = o.fullHeight; + r += o.offsetX * i / t, e -= o.offsetY * n / s, i *= o.width / t, n *= o.height / s + } + const s = this.filmOffset; + 0 !== s && (r += t * s / this.getFilmWidth()), this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + return e.object.fov = this.fov, e.object.zoom = this.zoom, e.object.near = this.near, e.object.far = this.far, e.object.focus = this.focus, e.object.aspect = this.aspect, null !== this.view && (e.object.view = Object.assign({}, this.view)), e.object.filmGauge = this.filmGauge, e.object.filmOffset = this.filmOffset, e + } + }); + + function Qe(t, e, n) { + if (St.call(this), this.type = "CubeCamera", !0 !== n.isWebGLCubeRenderTarget) return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter."); + this.renderTarget = n; + const i = new Ye(90, 1, t, e); + i.layers = this.layers, i.up.set(0, -1, 0), i.lookAt(new T(1, 0, 0)), this.add(i); + const r = new Ye(90, 1, t, e); + r.layers = this.layers, r.up.set(0, -1, 0), r.lookAt(new T(-1, 0, 0)), this.add(r); + const o = new Ye(90, 1, t, e); + o.layers = this.layers, o.up.set(0, 0, 1), o.lookAt(new T(0, 1, 0)), this.add(o); + const s = new Ye(90, 1, t, e); + s.layers = this.layers, s.up.set(0, 0, -1), s.lookAt(new T(0, -1, 0)), this.add(s); + const a = new Ye(90, 1, t, e); + a.layers = this.layers, a.up.set(0, -1, 0), a.lookAt(new T(0, 0, 1)), this.add(a); + const l = new Ye(90, 1, t, e); + l.layers = this.layers, l.up.set(0, -1, 0), l.lookAt(new T(0, 0, -1)), this.add(l), this.update = function(t, e) { + null === this.parent && this.updateMatrixWorld(); + const c = t.xr.enabled, + h = t.getRenderTarget(); + t.xr.enabled = !1; + const u = n.texture.generateMipmaps; + n.texture.generateMipmaps = !1, t.setRenderTarget(n, 0), t.render(e, i), t.setRenderTarget(n, 1), t.render(e, r), t.setRenderTarget(n, 2), t.render(e, o), t.setRenderTarget(n, 3), t.render(e, s), t.setRenderTarget(n, 4), t.render(e, a), n.texture.generateMipmaps = u, t.setRenderTarget(n, 5), t.render(e, l), t.setRenderTarget(h), t.xr.enabled = c + } + } + + function Ze(t, e, n, i, r, o, s, a, l, c) { + t = void 0 !== t ? t : [], e = void 0 !== e ? e : 301, s = void 0 !== s ? s : 1022, b.call(this, t, e, n, i, r, o, s, a, l, c), this.flipY = !1, this._needsFlipEnvMap = !0 + } + Qe.prototype = Object.create(St.prototype), Qe.prototype.constructor = Qe, Ze.prototype = Object.create(b.prototype), Ze.prototype.constructor = Ze, Ze.prototype.isCubeTexture = !0, Object.defineProperty(Ze.prototype, "images", { + get: function() { + return this.image + }, + set: function(t) { + this.image = t + } + }); + class Je extends E { + constructor(t, e, n) { + Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), e = n), super(t, t, e), Object.defineProperty(this, "isWebGLCubeRenderTarget", { + value: !0 + }), e = e || {}, this.texture = new Ze(void 0, e.mapping, e.wrapS, e.wrapT, e.magFilter, e.minFilter, e.format, e.type, e.anisotropy, e.encoding), this.texture._needsFlipEnvMap = !1 + } + fromEquirectangularTexture(t, e) { + this.texture.type = e.type, this.texture.format = 1023, this.texture.encoding = e.encoding, this.texture.generateMipmaps = e.generateMipmaps, this.texture.minFilter = e.minFilter, this.texture.magFilter = e.magFilter; + const n = { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t", + fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t" + }, + i = new Ve(5, 5, 5), + r = new Xe({ + name: "CubemapFromEquirect", + uniforms: ke(n.uniforms), + vertexShader: n.vertexShader, + fragmentShader: n.fragmentShader, + side: 1, + blending: 0 + }); + r.uniforms.tEquirect.value = e; + const o = new He(i, r), + s = e.minFilter; + 1008 === e.minFilter && (e.minFilter = 1006); + return new Qe(1, 10, this).update(t, o), e.minFilter = s, o.geometry.dispose(), o.material.dispose(), this + } + clear(t, e, n, i) { + const r = t.getRenderTarget(); + for (let r = 0; r < 6; r++) t.setRenderTarget(this, r), t.clear(e, n, i); + t.setRenderTarget(r) + } + } + + function Ke(t, e, n, i, r, o, s, a, l, c, h, u) { + b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { + data: t || null, + width: e || 1, + height: n || 1 + }, this.magFilter = void 0 !== l ? l : 1003, this.minFilter = void 0 !== c ? c : 1003, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.needsUpdate = !0 + } + Ke.prototype = Object.create(b.prototype), Ke.prototype.constructor = Ke, Ke.prototype.isDataTexture = !0; + const $e = new X, + tn = new T; + class en { + constructor(t, e, n, i, r, o) { + this.planes = [void 0 !== t ? t : new Ct, void 0 !== e ? e : new Ct, void 0 !== n ? n : new Ct, void 0 !== i ? i : new Ct, void 0 !== r ? r : new Ct, void 0 !== o ? o : new Ct] + } + set(t, e, n, i, r, o) { + const s = this.planes; + return s[0].copy(t), s[1].copy(e), s[2].copy(n), s[3].copy(i), s[4].copy(r), s[5].copy(o), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]); + return this + } + setFromProjectionMatrix(t) { + const e = this.planes, + n = t.elements, + i = n[0], + r = n[1], + o = n[2], + s = n[3], + a = n[4], + l = n[5], + c = n[6], + h = n[7], + u = n[8], + d = n[9], + p = n[10], + f = n[11], + m = n[12], + g = n[13], + v = n[14], + y = n[15]; + return e[0].setComponents(s - i, h - a, f - u, y - m).normalize(), e[1].setComponents(s + i, h + a, f + u, y + m).normalize(), e[2].setComponents(s + r, h + l, f + d, y + g).normalize(), e[3].setComponents(s - r, h - l, f - d, y - g).normalize(), e[4].setComponents(s - o, h - c, f - p, y - v).normalize(), e[5].setComponents(s + o, h + c, f + p, y + v).normalize(), this + } + intersectsObject(t) { + const e = t.geometry; + return null === e.boundingSphere && e.computeBoundingSphere(), $e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), this.intersectsSphere($e) + } + intersectsSprite(t) { + return $e.center.set(0, 0, 0), $e.radius = .7071067811865476, $e.applyMatrix4(t.matrixWorld), this.intersectsSphere($e) + } + intersectsSphere(t) { + const e = this.planes, + n = t.center, + i = -t.radius; + for (let t = 0; t < 6; t++) { + if (e[t].distanceToPoint(n) < i) return !1 + } + return !0 + } + intersectsBox(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) { + const i = e[n]; + if (tn.x = i.normal.x > 0 ? t.max.x : t.min.x, tn.y = i.normal.y > 0 ? t.max.y : t.min.y, tn.z = i.normal.z > 0 ? t.max.z : t.min.z, i.distanceToPoint(tn) < 0) return !1 + } + return !0 + } + containsPoint(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) + if (e[n].distanceToPoint(t) < 0) return !1; + return !0 + } + } + + function nn() { + let t = null, + e = !1, + n = null, + i = null; + + function r(e, o) { + n(e, o), i = t.requestAnimationFrame(r) + } + return { + start: function() { + !0 !== e && null !== n && (i = t.requestAnimationFrame(r), e = !0) + }, + stop: function() { + t.cancelAnimationFrame(i), e = !1 + }, + setAnimationLoop: function(t) { + n = t + }, + setContext: function(e) { + t = e + } + } + } + + function rn(t, e) { + const n = e.isWebGL2, + i = new WeakMap; + return { + get: function(t) { + return t.isInterleavedBufferAttribute && (t = t.data), i.get(t) + }, + remove: function(e) { + e.isInterleavedBufferAttribute && (e = e.data); + const n = i.get(e); + n && (t.deleteBuffer(n.buffer), i.delete(e)) + }, + update: function(e, r) { + if (e.isGLBufferAttribute) { + const t = i.get(e); + return void((!t || t.version < e.version) && i.set(e, { + buffer: e.buffer, + type: e.type, + bytesPerElement: e.elementSize, + version: e.version + })) + } + e.isInterleavedBufferAttribute && (e = e.data); + const o = i.get(e); + void 0 === o ? i.set(e, function(e, i) { + const r = e.array, + o = e.usage, + s = t.createBuffer(); + t.bindBuffer(i, s), t.bufferData(i, r, o), e.onUploadCallback(); + let a = 5126; + return r instanceof Float32Array ? a = 5126 : r instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : r instanceof Uint16Array ? e.isFloat16BufferAttribute ? n ? a = 5131 : console.warn("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.") : a = 5123 : r instanceof Int16Array ? a = 5122 : r instanceof Uint32Array ? a = 5125 : r instanceof Int32Array ? a = 5124 : r instanceof Int8Array ? a = 5120 : r instanceof Uint8Array && (a = 5121), { + buffer: s, + type: a, + bytesPerElement: r.BYTES_PER_ELEMENT, + version: e.version + } + }(e, r)) : o.version < e.version && (! function(e, i, r) { + const o = i.array, + s = i.updateRange; + t.bindBuffer(r, e), -1 === s.count ? t.bufferSubData(r, 0, o) : (n ? t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o, s.offset, s.count) : t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o.subarray(s.offset, s.offset + s.count)), s.count = -1) + }(o.buffer, e, r), o.version = e.version) + } + } + } + class on extends be { + constructor(t = 1, e = 1, n = 1, i = 1) { + super(), this.type = "PlaneGeometry", this.parameters = { + width: t, + height: e, + widthSegments: n, + heightSegments: i + }; + const r = t / 2, + o = e / 2, + s = Math.floor(n), + a = Math.floor(i), + l = s + 1, + c = a + 1, + h = t / s, + u = e / a, + d = [], + p = [], + f = [], + m = []; + for (let t = 0; t < c; t++) { + const e = t * u - o; + for (let n = 0; n < l; n++) { + const i = n * h - r; + p.push(i, -e, 0), f.push(0, 0, 1), m.push(n / s), m.push(1 - t / a) + } + } + for (let t = 0; t < a; t++) + for (let e = 0; e < s; e++) { + const n = e + l * t, + i = e + l * (t + 1), + r = e + 1 + l * (t + 1), + o = e + 1 + l * t; + d.push(n, i, o), d.push(i, r, o) + } + this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) + } + } + const sn = { + alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", + alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", + aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", + aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", + begin_vertex: "vec3 transformed = vec3( position );", + beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", + bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", + bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", + clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", + clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", + clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", + clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", + color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif", + color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_pars_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif", + color_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif", + common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", + cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif", + defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", + displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", + displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif", + emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", + emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", + encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", + encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", + envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", + envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", + envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", + envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", + envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", + envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", + fog_vertex: "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif", + fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif", + fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", + fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", + gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}", + lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", + lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", + lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", + lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", + lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;", + lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", + lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_phong_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", + lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", + lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", + lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", + lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", + lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif", + logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", + logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif", + logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", + map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", + map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", + map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", + map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", + metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", + morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif", + morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", + morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", + normal_fragment_begin: "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", + normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", + normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", + clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif", + clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif", + clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", + packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", + premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", + project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", + dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", + dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", + roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", + roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", + shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", + shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", + shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", + shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", + skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", + skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", + skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", + skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", + specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", + specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", + tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", + tonemapping_pars_fragment: "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", + transmissionmap_fragment: "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif", + transmissionmap_pars_fragment: "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif", + uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif", + uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif", + uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", + uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif", + uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", + uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif", + worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", + background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", + cube_frag: "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", + cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", + depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", + distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", + distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", + equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", + meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", + normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", + points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", + shadow_vert: "#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", + sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}" + }, + an = { + common: { + diffuse: { + value: new Yt(15658734) + }, + opacity: { + value: 1 + }, + map: { + value: null + }, + uvTransform: { + value: new y + }, + uv2Transform: { + value: new y + }, + alphaMap: { + value: null + } + }, + specularmap: { + specularMap: { + value: null + } + }, + envmap: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + }, + reflectivity: { + value: 1 + }, + refractionRatio: { + value: .98 + }, + maxMipLevel: { + value: 0 + } + }, + aomap: { + aoMap: { + value: null + }, + aoMapIntensity: { + value: 1 + } + }, + lightmap: { + lightMap: { + value: null + }, + lightMapIntensity: { + value: 1 + } + }, + emissivemap: { + emissiveMap: { + value: null + } + }, + bumpmap: { + bumpMap: { + value: null + }, + bumpScale: { + value: 1 + } + }, + normalmap: { + normalMap: { + value: null + }, + normalScale: { + value: new v(1, 1) + } + }, + displacementmap: { + displacementMap: { + value: null + }, + displacementScale: { + value: 1 + }, + displacementBias: { + value: 0 + } + }, + roughnessmap: { + roughnessMap: { + value: null + } + }, + metalnessmap: { + metalnessMap: { + value: null + } + }, + gradientmap: { + gradientMap: { + value: null + } + }, + fog: { + fogDensity: { + value: 25e-5 + }, + fogNear: { + value: 1 + }, + fogFar: { + value: 2e3 + }, + fogColor: { + value: new Yt(16777215) + } + }, + lights: { + ambientLightColor: { + value: [] + }, + lightProbe: { + value: [] + }, + directionalLights: { + value: [], + properties: { + direction: {}, + color: {} + } + }, + directionalLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + directionalShadowMap: { + value: [] + }, + directionalShadowMatrix: { + value: [] + }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } + }, + spotLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + spotShadowMap: { + value: [] + }, + spotShadowMatrix: { + value: [] + }, + pointLights: { + value: [], + properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } + }, + pointLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } + }, + pointShadowMap: { + value: [] + }, + pointShadowMatrix: { + value: [] + }, + hemisphereLights: { + value: [], + properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } + }, + rectAreaLights: { + value: [], + properties: { + color: {}, + position: {}, + width: {}, + height: {} + } + }, + ltc_1: { + value: null + }, + ltc_2: { + value: null + } + }, + points: { + diffuse: { + value: new Yt(15658734) + }, + opacity: { + value: 1 + }, + size: { + value: 1 + }, + scale: { + value: 1 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new y + } + }, + sprite: { + diffuse: { + value: new Yt(15658734) + }, + opacity: { + value: 1 + }, + center: { + value: new v(.5, .5) + }, + rotation: { + value: 0 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new y + } + } + }, + ln = { + basic: { + uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.fog]), + vertexShader: sn.meshbasic_vert, + fragmentShader: sn.meshbasic_frag + }, + lambert: { + uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + } + }]), + vertexShader: sn.meshlambert_vert, + fragmentShader: sn.meshlambert_frag + }, + phong: { + uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + }, + specular: { + value: new Yt(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: sn.meshphong_vert, + fragmentShader: sn.meshphong_frag + }, + standard: { + uniforms: We([an.common, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.roughnessmap, an.metalnessmap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + }, + roughness: { + value: 1 + }, + metalness: { + value: 0 + }, + envMapIntensity: { + value: 1 + } + }]), + vertexShader: sn.meshphysical_vert, + fragmentShader: sn.meshphysical_frag + }, + toon: { + uniforms: We([an.common, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.gradientmap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + } + }]), + vertexShader: sn.meshtoon_vert, + fragmentShader: sn.meshtoon_frag + }, + matcap: { + uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, an.fog, { + matcap: { + value: null + } + }]), + vertexShader: sn.meshmatcap_vert, + fragmentShader: sn.meshmatcap_frag + }, + points: { + uniforms: We([an.points, an.fog]), + vertexShader: sn.points_vert, + fragmentShader: sn.points_frag + }, + dashed: { + uniforms: We([an.common, an.fog, { + scale: { + value: 1 + }, + dashSize: { + value: 1 + }, + totalSize: { + value: 2 + } + }]), + vertexShader: sn.linedashed_vert, + fragmentShader: sn.linedashed_frag + }, + depth: { + uniforms: We([an.common, an.displacementmap]), + vertexShader: sn.depth_vert, + fragmentShader: sn.depth_frag + }, + normal: { + uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, { + opacity: { + value: 1 + } + }]), + vertexShader: sn.normal_vert, + fragmentShader: sn.normal_frag + }, + sprite: { + uniforms: We([an.sprite, an.fog]), + vertexShader: sn.sprite_vert, + fragmentShader: sn.sprite_frag + }, + background: { + uniforms: { + uvTransform: { + value: new y + }, + t2D: { + value: null + } + }, + vertexShader: sn.background_vert, + fragmentShader: sn.background_frag + }, + cube: { + uniforms: We([an.envmap, { + opacity: { + value: 1 + } + }]), + vertexShader: sn.cube_vert, + fragmentShader: sn.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: sn.equirect_vert, + fragmentShader: sn.equirect_frag + }, + distanceRGBA: { + uniforms: We([an.common, an.displacementmap, { + referencePosition: { + value: new T + }, + nearDistance: { + value: 1 + }, + farDistance: { + value: 1e3 + } + }]), + vertexShader: sn.distanceRGBA_vert, + fragmentShader: sn.distanceRGBA_frag + }, + shadow: { + uniforms: We([an.lights, an.fog, { + color: { + value: new Yt(0) + }, + opacity: { + value: 1 + } + }]), + vertexShader: sn.shadow_vert, + fragmentShader: sn.shadow_frag + } + }; + + function cn(t, e, n, i, r) { + const o = new Yt(0); + let s, a, l = 0, + c = null, + h = 0, + u = null; + + function d(t, e) { + n.buffers.color.setClear(t.r, t.g, t.b, e, r) + } + return { + getClearColor: function() { + return o + }, + setClearColor: function(t, e = 1) { + o.set(t), l = e, d(o, l) + }, + getClearAlpha: function() { + return l + }, + setClearAlpha: function(t) { + l = t, d(o, l) + }, + render: function(n, r, p, f) { + let m = !0 === r.isScene ? r.background : null; + m && m.isTexture && (m = e.get(m)); + const g = t.xr, + v = g.getSession && g.getSession(); + v && "additive" === v.environmentBlendMode && (m = null), null === m ? d(o, l) : m && m.isColor && (d(m, 1), f = !0), (t.autoClear || f) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), m && (m.isCubeTexture || m.isWebGLCubeRenderTarget || 306 === m.mapping) ? (void 0 === a && (a = new He(new Ve(1, 1, 1), new Xe({ + name: "BackgroundCubeMaterial", + uniforms: ke(ln.cube.uniforms), + vertexShader: ln.cube.vertexShader, + fragmentShader: ln.cube.fragmentShader, + side: 1, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), a.geometry.deleteAttribute("normal"), a.geometry.deleteAttribute("uv"), a.onBeforeRender = function(t, e, n) { + this.matrixWorld.copyPosition(n.matrixWorld) + }, Object.defineProperty(a.material, "envMap", { + get: function() { + return this.uniforms.envMap.value + } + }), i.update(a)), m.isWebGLCubeRenderTarget && (m = m.texture), a.material.uniforms.envMap.value = m, a.material.uniforms.flipEnvMap.value = m.isCubeTexture && m._needsFlipEnvMap ? -1 : 1, c === m && h === m.version && u === t.toneMapping || (a.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(a, a.geometry, a.material, 0, 0, null)) : m && m.isTexture && (void 0 === s && (s = new He(new on(2, 2), new Xe({ + name: "BackgroundMaterial", + uniforms: ke(ln.background.uniforms), + vertexShader: ln.background.vertexShader, + fragmentShader: ln.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), s.geometry.deleteAttribute("normal"), Object.defineProperty(s.material, "map", { + get: function() { + return this.uniforms.t2D.value + } + }), i.update(s)), s.material.uniforms.t2D.value = m, !0 === m.matrixAutoUpdate && m.updateMatrix(), s.material.uniforms.uvTransform.value.copy(m.matrix), c === m && h === m.version && u === t.toneMapping || (s.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(s, s.geometry, s.material, 0, 0, null)) + } + } + } + + function hn(t, e, n, i) { + const r = t.getParameter(34921), + o = i.isWebGL2 ? null : e.get("OES_vertex_array_object"), + s = i.isWebGL2 || null !== o, + a = {}, + l = d(null); + let c = l; + + function h(e) { + return i.isWebGL2 ? t.bindVertexArray(e) : o.bindVertexArrayOES(e) + } + + function u(e) { + return i.isWebGL2 ? t.deleteVertexArray(e) : o.deleteVertexArrayOES(e) + } + + function d(t) { + const e = [], + n = [], + i = []; + for (let t = 0; t < r; t++) e[t] = 0, n[t] = 0, i[t] = 0; + return { + geometry: null, + program: null, + wireframe: !1, + newAttributes: e, + enabledAttributes: n, + attributeDivisors: i, + object: t, + attributes: {}, + index: null + } + } + + function p() { + const t = c.newAttributes; + for (let e = 0, n = t.length; e < n; e++) t[e] = 0 + } + + function f(t) { + m(t, 0) + } + + function m(n, r) { + const o = c.newAttributes, + s = c.enabledAttributes, + a = c.attributeDivisors; + if (o[n] = 1, 0 === s[n] && (t.enableVertexAttribArray(n), s[n] = 1), a[n] !== r) { + (i.isWebGL2 ? t : e.get("ANGLE_instanced_arrays"))[i.isWebGL2 ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](n, r), a[n] = r + } + } + + function g() { + const e = c.newAttributes, + n = c.enabledAttributes; + for (let i = 0, r = n.length; i < r; i++) n[i] !== e[i] && (t.disableVertexAttribArray(i), n[i] = 0) + } + + function v(e, n, r, o, s, a) { + !0 !== i.isWebGL2 || 5124 !== r && 5125 !== r ? t.vertexAttribPointer(e, n, r, o, s, a) : t.vertexAttribIPointer(e, n, r, s, a) + } + + function y() { + A(), c !== l && (c = l, h(c.object)) + } + + function A() { + l.geometry = null, l.program = null, l.wireframe = !1 + } + return { + setup: function(r, l, u, y, A) { + let x = !1; + if (s) { + const e = function(e, n, r) { + const s = !0 === r.wireframe; + let l = a[e.id]; + void 0 === l && (l = {}, a[e.id] = l); + let c = l[n.id]; + void 0 === c && (c = {}, l[n.id] = c); + let h = c[s]; + void 0 === h && (h = d(i.isWebGL2 ? t.createVertexArray() : o.createVertexArrayOES()), c[s] = h); + return h + }(y, u, l); + c !== e && (c = e, h(c.object)), x = function(t, e) { + const n = c.attributes, + i = t.attributes; + let r = 0; + for (const t in i) { + const e = n[t], + o = i[t]; + if (void 0 === e) return !0; + if (e.attribute !== o) return !0; + if (e.data !== o.data) return !0; + r++ + } + return c.attributesNum !== r || c.index !== e + }(y, A), x && function(t, e) { + const n = {}, + i = t.attributes; + let r = 0; + for (const t in i) { + const e = i[t], + o = {}; + o.attribute = e, e.data && (o.data = e.data), n[t] = o, r++ + } + c.attributes = n, c.attributesNum = r, c.index = e + }(y, A) + } else { + const t = !0 === l.wireframe; + c.geometry === y.id && c.program === u.id && c.wireframe === t || (c.geometry = y.id, c.program = u.id, c.wireframe = t, x = !0) + }!0 === r.isInstancedMesh && (x = !0), null !== A && n.update(A, 34963), x && (! function(r, o, s, a) { + if (!1 === i.isWebGL2 && (r.isInstancedMesh || a.isInstancedBufferGeometry) && null === e.get("ANGLE_instanced_arrays")) return; + p(); + const l = a.attributes, + c = s.getAttributes(), + h = o.defaultAttributeValues; + for (const e in c) { + const i = c[e]; + if (i >= 0) { + const o = l[e]; + if (void 0 !== o) { + const e = o.normalized, + r = o.itemSize, + s = n.get(o); + if (void 0 === s) continue; + const l = s.buffer, + c = s.type, + h = s.bytesPerElement; + if (o.isInterleavedBufferAttribute) { + const n = o.data, + s = n.stride, + u = o.offset; + n && n.isInstancedInterleavedBuffer ? (m(i, n.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = n.meshPerAttribute * n.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, s * h, u * h) + } else o.isInstancedBufferAttribute ? (m(i, o.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = o.meshPerAttribute * o.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, 0, 0) + } else if ("instanceMatrix" === e) { + const e = n.get(r.instanceMatrix); + if (void 0 === e) continue; + const o = e.buffer, + s = e.type; + m(i + 0, 1), m(i + 1, 1), m(i + 2, 1), m(i + 3, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i + 0, 4, s, !1, 64, 0), t.vertexAttribPointer(i + 1, 4, s, !1, 64, 16), t.vertexAttribPointer(i + 2, 4, s, !1, 64, 32), t.vertexAttribPointer(i + 3, 4, s, !1, 64, 48) + } else if ("instanceColor" === e) { + const e = n.get(r.instanceColor); + if (void 0 === e) continue; + const o = e.buffer, + s = e.type; + m(i, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i, 3, s, !1, 12, 0) + } else if (void 0 !== h) { + const n = h[e]; + if (void 0 !== n) switch (n.length) { + case 2: + t.vertexAttrib2fv(i, n); + break; + case 3: + t.vertexAttrib3fv(i, n); + break; + case 4: + t.vertexAttrib4fv(i, n); + break; + default: + t.vertexAttrib1fv(i, n) + } + } + } + } + g() + }(r, l, u, y), null !== A && t.bindBuffer(34963, n.get(A).buffer)) + }, + reset: y, + resetDefaultState: A, + dispose: function() { + y(); + for (const t in a) { + const e = a[t]; + for (const t in e) { + const n = e[t]; + for (const t in n) u(n[t].object), delete n[t]; + delete e[t] + } + delete a[t] + } + }, + releaseStatesOfGeometry: function(t) { + if (void 0 === a[t.id]) return; + const e = a[t.id]; + for (const t in e) { + const n = e[t]; + for (const t in n) u(n[t].object), delete n[t]; + delete e[t] + } + delete a[t.id] + }, + releaseStatesOfProgram: function(t) { + for (const e in a) { + const n = a[e]; + if (void 0 === n[t.id]) continue; + const i = n[t.id]; + for (const t in i) u(i[t].object), delete i[t]; + delete n[t.id] + } + }, + initAttributes: p, + enableAttribute: f, + disableUnusedAttributes: g + } + } + + function un(t, e, n, i) { + const r = i.isWebGL2; + let o; + this.setMode = function(t) { + o = t + }, this.render = function(e, i) { + t.drawArrays(o, e, i), n.update(i, o, 1) + }, this.renderInstances = function(i, s, a) { + if (0 === a) return; + let l, c; + if (r) l = t, c = "drawArraysInstanced"; + else if (l = e.get("ANGLE_instanced_arrays"), c = "drawArraysInstancedANGLE", null === l) return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + l[c](o, i, s, a), n.update(s, o, a) + } + } + + function dn(t, e, n) { + let i; + + function r(e) { + if ("highp" === e) { + if (t.getShaderPrecisionFormat(35633, 36338).precision > 0 && t.getShaderPrecisionFormat(35632, 36338).precision > 0) return "highp"; + e = "mediump" + } + return "mediump" === e && t.getShaderPrecisionFormat(35633, 36337).precision > 0 && t.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" + } + const o = "undefined" != typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && t instanceof WebGL2ComputeRenderingContext; + let s = void 0 !== n.precision ? n.precision : "highp"; + const a = r(s); + a !== s && (console.warn("THREE.WebGLRenderer:", s, "not supported, using", a, "instead."), s = a); + const l = !0 === n.logarithmicDepthBuffer, + c = t.getParameter(34930), + h = t.getParameter(35660), + u = t.getParameter(3379), + d = t.getParameter(34076), + p = t.getParameter(34921), + f = t.getParameter(36347), + m = t.getParameter(36348), + g = t.getParameter(36349), + v = h > 0, + y = o || !!e.get("OES_texture_float"); + return { + isWebGL2: o, + getMaxAnisotropy: function() { + if (void 0 !== i) return i; + const n = e.get("EXT_texture_filter_anisotropic"); + return i = null !== n ? t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0, i + }, + getMaxPrecision: r, + precision: s, + logarithmicDepthBuffer: l, + maxTextures: c, + maxVertexTextures: h, + maxTextureSize: u, + maxCubemapSize: d, + maxAttributes: p, + maxVertexUniforms: f, + maxVaryings: m, + maxFragmentUniforms: g, + vertexTextures: v, + floatFragmentTextures: y, + floatVertexTextures: v && y, + maxSamples: o ? t.getParameter(36183) : 0 + } + } + + function pn(t) { + const e = this; + let n = null, + i = 0, + r = !1, + o = !1; + const s = new Ct, + a = new y, + l = { + value: null, + needsUpdate: !1 + }; + + function c() { + l.value !== n && (l.value = n, l.needsUpdate = i > 0), e.numPlanes = i, e.numIntersection = 0 + } + + function h(t, n, i, r) { + const o = null !== t ? t.length : 0; + let c = null; + if (0 !== o) { + if (c = l.value, !0 !== r || null === c) { + const e = i + 4 * o, + r = n.matrixWorldInverse; + a.getNormalMatrix(r), (null === c || c.length < e) && (c = new Float32Array(e)); + for (let e = 0, n = i; e !== o; ++e, n += 4) s.copy(t[e]).applyMatrix4(r, a), s.normal.toArray(c, n), c[n + 3] = s.constant + } + l.value = c, l.needsUpdate = !0 + } + return e.numPlanes = o, e.numIntersection = 0, c + } + this.uniform = l, this.numPlanes = 0, this.numIntersection = 0, this.init = function(t, e, o) { + const s = 0 !== t.length || e || 0 !== i || r; + return r = e, n = h(t, o, 0), i = t.length, s + }, this.beginShadows = function() { + o = !0, h(null) + }, this.endShadows = function() { + o = !1, c() + }, this.setState = function(e, s, a) { + const u = e.clippingPlanes, + d = e.clipIntersection, + p = e.clipShadows, + f = t.get(e); + if (!r || null === u || 0 === u.length || o && !p) o ? h(null) : c(); + else { + const t = o ? 0 : i, + e = 4 * t; + let r = f.clippingState || null; + l.value = r, r = h(u, s, e, a); + for (let t = 0; t !== e; ++t) r[t] = n[t]; + f.clippingState = r, this.numIntersection = d ? this.numPlanes : 0, this.numPlanes += t + } + } + } + + function fn(t) { + let e = new WeakMap; + + function n(t, e) { + return 303 === e ? t.mapping = 301 : 304 === e && (t.mapping = 302), t + } + + function i(t) { + const n = t.target; + n.removeEventListener("dispose", i); + const r = e.get(n); + void 0 !== r && (e.delete(n), r.dispose()) + } + return { + get: function(r) { + if (r && r.isTexture) { + const o = r.mapping; + if (303 === o || 304 === o) { + if (e.has(r)) { + return n(e.get(r).texture, r.mapping) + } { + const o = r.image; + if (o && o.height > 0) { + const s = t.getRenderList(), + a = t.getRenderTarget(), + l = new Je(o.height / 2); + return l.fromEquirectangularTexture(t, r), e.set(r, l), t.setRenderTarget(a), t.setRenderList(s), r.addEventListener("dispose", i), n(l.texture, r.mapping) + } + return null + } + } + } + return r + }, + dispose: function() { + e = new WeakMap + } + } + } + + function mn(t) { + const e = {}; + + function n(n) { + if (void 0 !== e[n]) return e[n]; + let i; + switch (n) { + case "WEBGL_depth_texture": + i = t.getExtension("WEBGL_depth_texture") || t.getExtension("MOZ_WEBGL_depth_texture") || t.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + i = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + i = t.getExtension("WEBGL_compressed_texture_s3tc") || t.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + i = t.getExtension("WEBGL_compressed_texture_pvrtc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + i = t.getExtension(n) + } + return e[n] = i, i + } + return { + has: function(t) { + return null !== n(t) + }, + init: function(t) { + t.isWebGL2 ? n("EXT_color_buffer_float") : (n("WEBGL_depth_texture"), n("OES_texture_float"), n("OES_texture_half_float"), n("OES_texture_half_float_linear"), n("OES_standard_derivatives"), n("OES_element_index_uint"), n("OES_vertex_array_object"), n("ANGLE_instanced_arrays")), n("OES_texture_float_linear"), n("EXT_color_buffer_half_float") + }, + get: function(t) { + const e = n(t); + return null === e && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), e + } + } + } + + function gn(t, e, n, i) { + const r = {}, + o = new WeakMap; + + function s(t) { + const a = t.target; + null !== a.index && e.remove(a.index); + for (const t in a.attributes) e.remove(a.attributes[t]); + a.removeEventListener("dispose", s), delete r[a.id]; + const l = o.get(a); + l && (e.remove(l), o.delete(a)), i.releaseStatesOfGeometry(a), !0 === a.isInstancedBufferGeometry && delete a._maxInstanceCount, n.memory.geometries-- + } + + function a(t) { + const n = [], + i = t.index, + r = t.attributes.position; + let s = 0; + if (null !== i) { + const t = i.array; + s = i.version; + for (let e = 0, i = t.length; e < i; e += 3) { + const i = t[e + 0], + r = t[e + 1], + o = t[e + 2]; + n.push(i, r, r, o, o, i) + } + } else { + const t = r.array; + s = r.version; + for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) { + const t = e + 0, + i = e + 1, + r = e + 2; + n.push(t, i, i, r, r, t) + } + } + const a = new(de(n) > 65535 ? le : se)(n, 1); + a.version = s; + const l = o.get(t); + l && e.remove(l), o.set(t, a) + } + return { + get: function(t, e) { + return !0 === r[e.id] || (e.addEventListener("dispose", s), r[e.id] = !0, n.memory.geometries++), e + }, + update: function(t) { + const n = t.attributes; + for (const t in n) e.update(n[t], 34962); + const i = t.morphAttributes; + for (const t in i) { + const n = i[t]; + for (let t = 0, i = n.length; t < i; t++) e.update(n[t], 34962) + } + }, + getWireframeAttribute: function(t) { + const e = o.get(t); + if (e) { + const n = t.index; + null !== n && e.version < n.version && a(t) + } else a(t); + return o.get(t) + } + } + } + + function vn(t, e, n, i) { + const r = i.isWebGL2; + let o, s, a; + this.setMode = function(t) { + o = t + }, this.setIndex = function(t) { + s = t.type, a = t.bytesPerElement + }, this.render = function(e, i) { + t.drawElements(o, i, s, e * a), n.update(i, o, 1) + }, this.renderInstances = function(i, l, c) { + if (0 === c) return; + let h, u; + if (r) h = t, u = "drawElementsInstanced"; + else if (h = e.get("ANGLE_instanced_arrays"), u = "drawElementsInstancedANGLE", null === h) return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + h[u](o, l, s, i * a, c), n.update(l, o, c) + } + } + + function yn(t) { + const e = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + return { + memory: { + geometries: 0, + textures: 0 + }, + render: e, + programs: null, + autoReset: !0, + reset: function() { + e.frame++, e.calls = 0, e.triangles = 0, e.points = 0, e.lines = 0 + }, + update: function(t, n, i) { + switch (e.calls++, n) { + case 4: + e.triangles += i * (t / 3); + break; + case 1: + e.lines += i * (t / 2); + break; + case 3: + e.lines += i * (t - 1); + break; + case 2: + e.lines += i * t; + break; + case 0: + e.points += i * t; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", n) + } + } + } + } + + function An(t, e) { + return t[0] - e[0] + } + + function xn(t, e) { + return Math.abs(e[1]) - Math.abs(t[1]) + } + + function _n(t) { + const e = {}, + n = new Float32Array(8), + i = []; + for (let t = 0; t < 8; t++) i[t] = [t, 0]; + return { + update: function(r, o, s, a) { + const l = r.morphTargetInfluences, + c = void 0 === l ? 0 : l.length; + let h = e[o.id]; + if (void 0 === h) { + h = []; + for (let t = 0; t < c; t++) h[t] = [t, 0]; + e[o.id] = h + } + for (let t = 0; t < c; t++) { + const e = h[t]; + e[0] = t, e[1] = l[t] + } + h.sort(xn); + for (let t = 0; t < 8; t++) t < c && h[t][1] ? (i[t][0] = h[t][0], i[t][1] = h[t][1]) : (i[t][0] = Number.MAX_SAFE_INTEGER, i[t][1] = 0); + i.sort(An); + const u = s.morphTargets && o.morphAttributes.position, + d = s.morphNormals && o.morphAttributes.normal; + let p = 0; + for (let t = 0; t < 8; t++) { + const e = i[t], + r = e[0], + s = e[1]; + r !== Number.MAX_SAFE_INTEGER && s ? (u && o.getAttribute("morphTarget" + t) !== u[r] && o.setAttribute("morphTarget" + t, u[r]), d && o.getAttribute("morphNormal" + t) !== d[r] && o.setAttribute("morphNormal" + t, d[r]), n[t] = s, p += s) : (u && !0 === o.hasAttribute("morphTarget" + t) && o.deleteAttribute("morphTarget" + t), d && !0 === o.hasAttribute("morphNormal" + t) && o.deleteAttribute("morphNormal" + t), n[t] = 0) + } + const f = o.morphTargetsRelative ? 1 : 1 - p; + a.getUniforms().setValue(t, "morphTargetBaseInfluence", f), a.getUniforms().setValue(t, "morphTargetInfluences", n) + } + } + } + + function bn(t, e, n, i) { + let r = new WeakMap; + + function o(t) { + const e = t.target; + e.removeEventListener("dispose", o), n.remove(e.instanceMatrix), null !== e.instanceColor && n.remove(e.instanceColor) + } + return { + update: function(t) { + const s = i.render.frame, + a = t.geometry, + l = e.get(t, a); + return r.get(l) !== s && (e.update(l), r.set(l, s)), t.isInstancedMesh && (!1 === t.hasEventListener("dispose", o) && t.addEventListener("dispose", o), n.update(t.instanceMatrix, 34962), null !== t.instanceColor && n.update(t.instanceColor, 34962)), l + }, + dispose: function() { + r = new WeakMap + } + } + } + + function wn(t = null, e = 1, n = 1, i = 1) { + b.call(this, null), this.image = { + data: t, + width: e, + height: n, + depth: i + }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 + } + + function Mn(t = null, e = 1, n = 1, i = 1) { + b.call(this, null), this.image = { + data: t, + width: e, + height: n, + depth: i + }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 + } + ln.physical = { + uniforms: We([ln.standard.uniforms, { + clearcoat: { + value: 0 + }, + clearcoatMap: { + value: null + }, + clearcoatRoughness: { + value: 0 + }, + clearcoatRoughnessMap: { + value: null + }, + clearcoatNormalScale: { + value: new v(1, 1) + }, + clearcoatNormalMap: { + value: null + }, + sheen: { + value: new Yt(0) + }, + transmission: { + value: 0 + }, + transmissionMap: { + value: null + } + }]), + vertexShader: sn.meshphysical_vert, + fragmentShader: sn.meshphysical_frag + }, wn.prototype = Object.create(b.prototype), wn.prototype.constructor = wn, wn.prototype.isDataTexture2DArray = !0, Mn.prototype = Object.create(b.prototype), Mn.prototype.constructor = Mn, Mn.prototype.isDataTexture3D = !0; + const En = new b, + Sn = new wn, + Tn = new Mn, + Ln = new Ze, + Rn = [], + Cn = [], + Pn = new Float32Array(16), + Dn = new Float32Array(9), + In = new Float32Array(4); + + function On(t, e, n) { + const i = t[0]; + if (i <= 0 || i > 0) return t; + const r = e * n; + let o = Rn[r]; + if (void 0 === o && (o = new Float32Array(r), Rn[r] = o), 0 !== e) { + i.toArray(o, 0); + for (let i = 1, r = 0; i !== e; ++i) r += n, t[i].toArray(o, r) + } + return o + } + + function Nn(t, e) { + if (t.length !== e.length) return !1; + for (let n = 0, i = t.length; n < i; n++) + if (t[n] !== e[n]) return !1; + return !0 + } + + function Bn(t, e) { + for (let n = 0, i = e.length; n < i; n++) t[n] = e[n] + } + + function Fn(t, e) { + let n = Cn[e]; + void 0 === n && (n = new Int32Array(e), Cn[e] = n); + for (let i = 0; i !== e; ++i) n[i] = t.allocateTextureUnit(); + return n + } + + function zn(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1f(this.addr, e), n[0] = e) + } + + function Un(t, e) { + const n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y || (t.uniform2f(this.addr, e.x, e.y), n[0] = e.x, n[1] = e.y); + else { + if (Nn(n, e)) return; + t.uniform2fv(this.addr, e), Bn(n, e) + } + } + + function Hn(t, e) { + const n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z || (t.uniform3f(this.addr, e.x, e.y, e.z), n[0] = e.x, n[1] = e.y, n[2] = e.z); + else if (void 0 !== e.r) n[0] === e.r && n[1] === e.g && n[2] === e.b || (t.uniform3f(this.addr, e.r, e.g, e.b), n[0] = e.r, n[1] = e.g, n[2] = e.b); + else { + if (Nn(n, e)) return; + t.uniform3fv(this.addr, e), Bn(n, e) + } + } + + function Gn(t, e) { + const n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w || (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), n[0] = e.x, n[1] = e.y, n[2] = e.z, n[3] = e.w); + else { + if (Nn(n, e)) return; + t.uniform4fv(this.addr, e), Bn(n, e) + } + } + + function Vn(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Nn(n, e)) return; + t.uniformMatrix2fv(this.addr, !1, e), Bn(n, e) + } else { + if (Nn(n, i)) return; + In.set(i), t.uniformMatrix2fv(this.addr, !1, In), Bn(n, i) + } + } + + function kn(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Nn(n, e)) return; + t.uniformMatrix3fv(this.addr, !1, e), Bn(n, e) + } else { + if (Nn(n, i)) return; + Dn.set(i), t.uniformMatrix3fv(this.addr, !1, Dn), Bn(n, i) + } + } + + function Wn(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Nn(n, e)) return; + t.uniformMatrix4fv(this.addr, !1, e), Bn(n, e) + } else { + if (Nn(n, i)) return; + Pn.set(i), t.uniformMatrix4fv(this.addr, !1, Pn), Bn(n, i) + } + } + + function jn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTexture2D(e || En, r) + } + + function Xn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(e || Sn, r) + } + + function qn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(e || Tn, r) + } + + function Yn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTextureCube(e || Ln, r) + } + + function Qn(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1i(this.addr, e), n[0] = e) + } + + function Zn(t, e) { + const n = this.cache; + Nn(n, e) || (t.uniform2iv(this.addr, e), Bn(n, e)) + } + + function Jn(t, e) { + const n = this.cache; + Nn(n, e) || (t.uniform3iv(this.addr, e), Bn(n, e)) + } + + function Kn(t, e) { + const n = this.cache; + Nn(n, e) || (t.uniform4iv(this.addr, e), Bn(n, e)) + } + + function $n(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1ui(this.addr, e), n[0] = e) + } + + function ti(t, e) { + t.uniform1fv(this.addr, e) + } + + function ei(t, e) { + t.uniform1iv(this.addr, e) + } + + function ni(t, e) { + t.uniform2iv(this.addr, e) + } + + function ii(t, e) { + t.uniform3iv(this.addr, e) + } + + function ri(t, e) { + t.uniform4iv(this.addr, e) + } + + function oi(t, e) { + const n = On(e, this.size, 2); + t.uniform2fv(this.addr, n) + } + + function si(t, e) { + const n = On(e, this.size, 3); + t.uniform3fv(this.addr, n) + } + + function ai(t, e) { + const n = On(e, this.size, 4); + t.uniform4fv(this.addr, n) + } + + function li(t, e) { + const n = On(e, this.size, 4); + t.uniformMatrix2fv(this.addr, !1, n) + } + + function ci(t, e) { + const n = On(e, this.size, 9); + t.uniformMatrix3fv(this.addr, !1, n) + } + + function hi(t, e) { + const n = On(e, this.size, 16); + t.uniformMatrix4fv(this.addr, !1, n) + } + + function ui(t, e, n) { + const i = e.length, + r = Fn(n, i); + t.uniform1iv(this.addr, r); + for (let t = 0; t !== i; ++t) n.safeSetTexture2D(e[t] || En, r[t]) + } + + function di(t, e, n) { + const i = e.length, + r = Fn(n, i); + t.uniform1iv(this.addr, r); + for (let t = 0; t !== i; ++t) n.safeSetTextureCube(e[t] || Ln, r[t]) + } + + function pi(t, e, n) { + this.id = t, this.addr = n, this.cache = [], this.setValue = function(t) { + switch (t) { + case 5126: + return zn; + case 35664: + return Un; + case 35665: + return Hn; + case 35666: + return Gn; + case 35674: + return Vn; + case 35675: + return kn; + case 35676: + return Wn; + case 5124: + case 35670: + return Qn; + case 35667: + case 35671: + return Zn; + case 35668: + case 35672: + return Jn; + case 35669: + case 35673: + return Kn; + case 5125: + return $n; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return jn; + case 35679: + case 36299: + case 36307: + return qn; + case 35680: + case 36300: + case 36308: + case 36293: + return Yn; + case 36289: + case 36303: + case 36311: + case 36292: + return Xn + } + }(e.type) + } + + function fi(t, e, n) { + this.id = t, this.addr = n, this.cache = [], this.size = e.size, this.setValue = function(t) { + switch (t) { + case 5126: + return ti; + case 35664: + return oi; + case 35665: + return si; + case 35666: + return ai; + case 35674: + return li; + case 35675: + return ci; + case 35676: + return hi; + case 5124: + case 35670: + return ei; + case 35667: + case 35671: + return ni; + case 35668: + case 35672: + return ii; + case 35669: + case 35673: + return ri; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return ui; + case 35680: + case 36300: + case 36308: + case 36293: + return di + } + }(e.type) + } + + function mi(t) { + this.id = t, this.seq = [], this.map = {} + } + fi.prototype.updateCache = function(t) { + const e = this.cache; + t instanceof Float32Array && e.length !== t.length && (this.cache = new Float32Array(t.length)), Bn(e, t) + }, mi.prototype.setValue = function(t, e, n) { + const i = this.seq; + for (let r = 0, o = i.length; r !== o; ++r) { + const o = i[r]; + o.setValue(t, e[o.id], n) + } + }; + const gi = /(\w+)(\])?(\[|\.)?/g; + + function vi(t, e) { + t.seq.push(e), t.map[e.id] = e + } + + function yi(t, e, n) { + const i = t.name, + r = i.length; + for (gi.lastIndex = 0;;) { + const o = gi.exec(i), + s = gi.lastIndex; + let a = o[1]; + const l = "]" === o[2], + c = o[3]; + if (l && (a |= 0), void 0 === c || "[" === c && s + 2 === r) { + vi(n, void 0 === c ? new pi(a, t, e) : new fi(a, t, e)); + break + } { + let t = n.map[a]; + void 0 === t && (t = new mi(a), vi(n, t)), n = t + } + } + } + + function Ai(t, e) { + this.seq = [], this.map = {}; + const n = t.getProgramParameter(e, 35718); + for (let i = 0; i < n; ++i) { + const n = t.getActiveUniform(e, i); + yi(n, t.getUniformLocation(e, n.name), this) + } + } + + function xi(t, e, n) { + const i = t.createShader(e); + return t.shaderSource(i, n), t.compileShader(i), i + } + Ai.prototype.setValue = function(t, e, n, i) { + const r = this.map[e]; + void 0 !== r && r.setValue(t, n, i) + }, Ai.prototype.setOptional = function(t, e, n) { + const i = e[n]; + void 0 !== i && this.setValue(t, n, i) + }, Ai.upload = function(t, e, n, i) { + for (let r = 0, o = e.length; r !== o; ++r) { + const o = e[r], + s = n[o.id]; + !1 !== s.needsUpdate && o.setValue(t, s.value, i) + } + }, Ai.seqWithValue = function(t, e) { + const n = []; + for (let i = 0, r = t.length; i !== r; ++i) { + const r = t[i]; + r.id in e && n.push(r) + } + return n + }; + let _i = 0; + + function bi(t) { + switch (t) { + case 3e3: + return ["Linear", "( value )"]; + case 3001: + return ["sRGB", "( value )"]; + case 3002: + return ["RGBE", "( value )"]; + case 3004: + return ["RGBM", "( value, 7.0 )"]; + case 3005: + return ["RGBM", "( value, 16.0 )"]; + case 3006: + return ["RGBD", "( value, 256.0 )"]; + case 3007: + return ["Gamma", "( value, float( GAMMA_FACTOR ) )"]; + case 3003: + return ["LogLuv", "( value )"]; + default: + return console.warn("THREE.WebGLProgram: Unsupported encoding:", t), ["Linear", "( value )"] + } + } + + function wi(t, e, n) { + const i = t.getShaderParameter(e, 35713), + r = t.getShaderInfoLog(e).trim(); + if (i && "" === r) return ""; + return "THREE.WebGLShader: gl.getShaderInfoLog() " + n + "\n" + r + function(t) { + const e = t.split("\n"); + for (let t = 0; t < e.length; t++) e[t] = t + 1 + ": " + e[t]; + return e.join("\n") + }(t.getShaderSource(e)) + } + + function Mi(t, e) { + const n = bi(e); + return "vec4 " + t + "( vec4 value ) { return " + n[0] + "ToLinear" + n[1] + "; }" + } + + function Ei(t, e) { + const n = bi(e); + return "vec4 " + t + "( vec4 value ) { return LinearTo" + n[0] + n[1] + "; }" + } + + function Si(t, e) { + let n; + switch (e) { + case 1: + n = "Linear"; + break; + case 2: + n = "Reinhard"; + break; + case 3: + n = "OptimizedCineon"; + break; + case 4: + n = "ACESFilmic"; + break; + case 5: + n = "Custom"; + break; + default: + console.warn("THREE.WebGLProgram: Unsupported toneMapping:", e), n = "Linear" + } + return "vec3 " + t + "( vec3 color ) { return " + n + "ToneMapping( color ); }" + } + + function Ti(t) { + return "" !== t + } + + function Li(t, e) { + return t.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) + } + + function Ri(t, e) { + return t.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) + } + const Ci = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function Pi(t) { + return t.replace(Ci, Di) + } + + function Di(t, e) { + const n = sn[e]; + if (void 0 === n) throw new Error("Can not resolve #include <" + e + ">"); + return Pi(n) + } + const Ii = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, + Oi = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + + function Ni(t) { + return t.replace(Oi, Fi).replace(Ii, Bi) + } + + function Bi(t, e, n, i) { + return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), Fi(t, e, n, i) + } + + function Fi(t, e, n, i) { + let r = ""; + for (let t = parseInt(e); t < parseInt(n); t++) r += i.replace(/\[\s*i\s*\]/g, "[ " + t + " ]").replace(/UNROLLED_LOOP_INDEX/g, t); + return r + } + + function zi(t) { + let e = "precision " + t.precision + " float;\nprecision " + t.precision + " int;"; + return "highp" === t.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === t.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === t.precision && (e += "\n#define LOW_PRECISION"), e + } + + function Ui(t, e, n, i) { + const r = t.getContext(), + o = n.defines; + let s = n.vertexShader, + a = n.fragmentShader; + const l = function(t) { + let e = "SHADOWMAP_TYPE_BASIC"; + return 1 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === t.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), e + }(n), + c = function(t) { + let e = "ENVMAP_TYPE_CUBE"; + if (t.envMap) switch (t.envMapMode) { + case 301: + case 302: + e = "ENVMAP_TYPE_CUBE"; + break; + case 306: + case 307: + e = "ENVMAP_TYPE_CUBE_UV" + } + return e + }(n), + h = function(t) { + let e = "ENVMAP_MODE_REFLECTION"; + if (t.envMap) switch (t.envMapMode) { + case 302: + case 307: + e = "ENVMAP_MODE_REFRACTION" + } + return e + }(n), + u = function(t) { + let e = "ENVMAP_BLENDING_NONE"; + if (t.envMap) switch (t.combine) { + case 0: + e = "ENVMAP_BLENDING_MULTIPLY"; + break; + case 1: + e = "ENVMAP_BLENDING_MIX"; + break; + case 2: + e = "ENVMAP_BLENDING_ADD" + } + return e + }(n), + d = t.gammaFactor > 0 ? t.gammaFactor : 1, + p = n.isWebGL2 ? "" : function(t) { + return [t.extensionDerivatives || t.envMapCubeUV || t.bumpMap || t.tangentSpaceNormalMap || t.clearcoatNormalMap || t.flatShading || "physical" === t.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (t.extensionFragDepth || t.logarithmicDepthBuffer) && t.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", t.extensionDrawBuffers && t.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(Ti).join("\n") + }(n), + f = function(t) { + const e = []; + for (const n in t) { + const i = t[n]; + !1 !== i && e.push("#define " + n + " " + i) + } + return e.join("\n") + }(o), + m = r.createProgram(); + let g, v, y = n.glslVersion ? "#version " + n.glslVersion + "\n" : ""; + n.isRawShaderMaterial ? (g = [f].filter(Ti).join("\n"), g.length > 0 && (g += "\n"), v = [p, f].filter(Ti).join("\n"), v.length > 0 && (v += "\n")) : (g = [zi(n), "#define SHADER_NAME " + n.shaderName, f, n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + d, "#define MAX_BONES " + n.maxBones, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + h : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.displacementMap && n.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.useVertexTexture ? "#define BONE_TEXTURE" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#ifdef USE_COLOR", "\tattribute vec3 color;", "#endif", "#ifdef USE_MORPHTARGETS", "\tattribute vec3 morphTarget0;", "\tattribute vec3 morphTarget1;", "\tattribute vec3 morphTarget2;", "\tattribute vec3 morphTarget3;", "\t#ifdef USE_MORPHNORMALS", "\t\tattribute vec3 morphNormal0;", "\t\tattribute vec3 morphNormal1;", "\t\tattribute vec3 morphNormal2;", "\t\tattribute vec3 morphNormal3;", "\t#else", "\t\tattribute vec3 morphTarget4;", "\t\tattribute vec3 morphTarget5;", "\t\tattribute vec3 morphTarget6;", "\t\tattribute vec3 morphTarget7;", "\t#endif", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(Ti).join("\n"), v = [p, zi(n), "#define SHADER_NAME " + n.shaderName, f, n.alphaTest ? "#define ALPHATEST " + n.alphaTest + (n.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + d, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + c : "", n.envMap ? "#define " + h : "", n.envMap ? "#define " + u : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.sheen ? "#define USE_SHEEN" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (n.extensionShaderTextureLOD || n.envMap) && n.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? sn.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? Si("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", sn.encodings_pars_fragment, n.map ? Mi("mapTexelToLinear", n.mapEncoding) : "", n.matcap ? Mi("matcapTexelToLinear", n.matcapEncoding) : "", n.envMap ? Mi("envMapTexelToLinear", n.envMapEncoding) : "", n.emissiveMap ? Mi("emissiveMapTexelToLinear", n.emissiveMapEncoding) : "", n.lightMap ? Mi("lightMapTexelToLinear", n.lightMapEncoding) : "", Ei("linearToOutputTexel", n.outputEncoding), n.depthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(Ti).join("\n")), s = Pi(s), s = Li(s, n), s = Ri(s, n), a = Pi(a), a = Li(a, n), a = Ri(a, n), s = Ni(s), a = Ni(a), n.isWebGL2 && !0 !== n.isRawShaderMaterial && (y = "#version 300 es\n", g = ["#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + g, v = ["#define varying in", "300 es" === n.glslVersion ? "" : "out highp vec4 pc_fragColor;", "300 es" === n.glslVersion ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + v); + const A = y + v + a, + x = xi(r, 35633, y + g + s), + _ = xi(r, 35632, A); + if (r.attachShader(m, x), r.attachShader(m, _), void 0 !== n.index0AttributeName ? r.bindAttribLocation(m, 0, n.index0AttributeName) : !0 === n.morphTargets && r.bindAttribLocation(m, 0, "position"), r.linkProgram(m), t.debug.checkShaderErrors) { + const t = r.getProgramInfoLog(m).trim(), + e = r.getShaderInfoLog(x).trim(), + n = r.getShaderInfoLog(_).trim(); + let i = !0, + o = !0; + if (!1 === r.getProgramParameter(m, 35714)) { + i = !1; + const e = wi(r, x, "vertex"), + n = wi(r, _, "fragment"); + console.error("THREE.WebGLProgram: shader error: ", r.getError(), "35715", r.getProgramParameter(m, 35715), "gl.getProgramInfoLog", t, e, n) + } else "" !== t ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", t) : "" !== e && "" !== n || (o = !1); + o && (this.diagnostics = { + runnable: i, + programLog: t, + vertexShader: { + log: e, + prefix: g + }, + fragmentShader: { + log: n, + prefix: v + } + }) + } + let b, w; + return r.deleteShader(x), r.deleteShader(_), this.getUniforms = function() { + return void 0 === b && (b = new Ai(r, m)), b + }, this.getAttributes = function() { + return void 0 === w && (w = function(t, e) { + const n = {}, + i = t.getProgramParameter(e, 35721); + for (let r = 0; r < i; r++) { + const i = t.getActiveAttrib(e, r).name; + n[i] = t.getAttribLocation(e, i) + } + return n + }(r, m)), w + }, this.destroy = function() { + i.releaseStatesOfProgram(this), r.deleteProgram(m), this.program = void 0 + }, this.name = n.shaderName, this.id = _i++, this.cacheKey = e, this.usedTimes = 1, this.program = m, this.vertexShader = x, this.fragmentShader = _, this + } + + function Hi(t, e, n, i, r, o) { + const s = [], + a = i.isWebGL2, + l = i.logarithmicDepthBuffer, + c = i.floatVertexTextures, + h = i.maxVertexUniforms, + u = i.vertexTextures; + let d = i.precision; + const p = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }, + f = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen", "transmissionMap"]; + + function m(t) { + let e; + return t && t.isTexture ? e = t.encoding : t && t.isWebGLRenderTarget ? (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), e = t.texture.encoding) : e = 3e3, e + } + return { + getParameters: function(r, s, f, g, v) { + const y = g.fog, + A = r.isMeshStandardMaterial ? g.environment : null, + x = e.get(r.envMap || A), + _ = p[r.type], + b = v.isSkinnedMesh ? function(t) { + const e = t.skeleton.bones; + if (c) return 1024; { + const t = h, + n = Math.floor((t - 20) / 4), + i = Math.min(n, e.length); + return i < e.length ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), 0) : i + } + }(v) : 0; + let w, M; + if (null !== r.precision && (d = i.getMaxPrecision(r.precision), d !== r.precision && console.warn("THREE.WebGLProgram.getParameters:", r.precision, "not supported, using", d, "instead.")), _) { + const t = ln[_]; + w = t.vertexShader, M = t.fragmentShader + } else w = r.vertexShader, M = r.fragmentShader; + const E = t.getRenderTarget(); + return { + isWebGL2: a, + shaderID: _, + shaderName: r.type, + vertexShader: w, + fragmentShader: M, + defines: r.defines, + isRawShaderMaterial: !0 === r.isRawShaderMaterial, + glslVersion: r.glslVersion, + precision: d, + instancing: !0 === v.isInstancedMesh, + instancingColor: !0 === v.isInstancedMesh && null !== v.instanceColor, + supportsVertexTextures: u, + outputEncoding: null !== E ? m(E.texture) : t.outputEncoding, + map: !!r.map, + mapEncoding: m(r.map), + matcap: !!r.matcap, + matcapEncoding: m(r.matcap), + envMap: !!x, + envMapMode: x && x.mapping, + envMapEncoding: m(x), + envMapCubeUV: !!x && (306 === x.mapping || 307 === x.mapping), + lightMap: !!r.lightMap, + lightMapEncoding: m(r.lightMap), + aoMap: !!r.aoMap, + emissiveMap: !!r.emissiveMap, + emissiveMapEncoding: m(r.emissiveMap), + bumpMap: !!r.bumpMap, + normalMap: !!r.normalMap, + objectSpaceNormalMap: 1 === r.normalMapType, + tangentSpaceNormalMap: 0 === r.normalMapType, + clearcoatMap: !!r.clearcoatMap, + clearcoatRoughnessMap: !!r.clearcoatRoughnessMap, + clearcoatNormalMap: !!r.clearcoatNormalMap, + displacementMap: !!r.displacementMap, + roughnessMap: !!r.roughnessMap, + metalnessMap: !!r.metalnessMap, + specularMap: !!r.specularMap, + alphaMap: !!r.alphaMap, + gradientMap: !!r.gradientMap, + sheen: !!r.sheen, + transmissionMap: !!r.transmissionMap, + combine: r.combine, + vertexTangents: r.normalMap && r.vertexTangents, + vertexColors: r.vertexColors, + vertexUvs: !!(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatMap || r.clearcoatRoughnessMap || r.clearcoatNormalMap || r.displacementMap || r.transmissionMap), + uvsVertexOnly: !(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatNormalMap || r.transmissionMap || !r.displacementMap), + fog: !!y, + useFog: r.fog, + fogExp2: y && y.isFogExp2, + flatShading: r.flatShading, + sizeAttenuation: r.sizeAttenuation, + logarithmicDepthBuffer: l, + skinning: r.skinning && b > 0, + maxBones: b, + useVertexTexture: c, + morphTargets: r.morphTargets, + morphNormals: r.morphNormals, + maxMorphTargets: t.maxMorphTargets, + maxMorphNormals: t.maxMorphNormals, + numDirLights: s.directional.length, + numPointLights: s.point.length, + numSpotLights: s.spot.length, + numRectAreaLights: s.rectArea.length, + numHemiLights: s.hemi.length, + numDirLightShadows: s.directionalShadowMap.length, + numPointLightShadows: s.pointShadowMap.length, + numSpotLightShadows: s.spotShadowMap.length, + numClippingPlanes: o.numPlanes, + numClipIntersection: o.numIntersection, + dithering: r.dithering, + shadowMapEnabled: t.shadowMap.enabled && f.length > 0, + shadowMapType: t.shadowMap.type, + toneMapping: r.toneMapped ? t.toneMapping : 0, + physicallyCorrectLights: t.physicallyCorrectLights, + premultipliedAlpha: r.premultipliedAlpha, + alphaTest: r.alphaTest, + doubleSided: 2 === r.side, + flipSided: 1 === r.side, + depthPacking: void 0 !== r.depthPacking && r.depthPacking, + index0AttributeName: r.index0AttributeName, + extensionDerivatives: r.extensions && r.extensions.derivatives, + extensionFragDepth: r.extensions && r.extensions.fragDepth, + extensionDrawBuffers: r.extensions && r.extensions.drawBuffers, + extensionShaderTextureLOD: r.extensions && r.extensions.shaderTextureLOD, + rendererExtensionFragDepth: a || n.has("EXT_frag_depth"), + rendererExtensionDrawBuffers: a || n.has("WEBGL_draw_buffers"), + rendererExtensionShaderTextureLod: a || n.has("EXT_shader_texture_lod"), + customProgramCacheKey: r.customProgramCacheKey() + } + }, + getProgramCacheKey: function(e) { + const n = []; + if (e.shaderID ? n.push(e.shaderID) : (n.push(e.fragmentShader), n.push(e.vertexShader)), void 0 !== e.defines) + for (const t in e.defines) n.push(t), n.push(e.defines[t]); + if (!1 === e.isRawShaderMaterial) { + for (let t = 0; t < f.length; t++) n.push(e[f[t]]); + n.push(t.outputEncoding), n.push(t.gammaFactor) + } + return n.push(e.customProgramCacheKey), n.join() + }, + getUniforms: function(t) { + const e = p[t.type]; + let n; + if (e) { + const t = ln[e]; + n = je.clone(t.uniforms) + } else n = t.uniforms; + return n + }, + acquireProgram: function(e, n) { + let i; + for (let t = 0, e = s.length; t < e; t++) { + const e = s[t]; + if (e.cacheKey === n) { + i = e, ++i.usedTimes; + break + } + } + return void 0 === i && (i = new Ui(t, n, e, r), s.push(i)), i + }, + releaseProgram: function(t) { + if (0 == --t.usedTimes) { + const e = s.indexOf(t); + s[e] = s[s.length - 1], s.pop(), t.destroy() + } + }, + programs: s + } + } + + function Gi() { + let t = new WeakMap; + return { + get: function(e) { + let n = t.get(e); + return void 0 === n && (n = {}, t.set(e, n)), n + }, + remove: function(e) { + t.delete(e) + }, + update: function(e, n, i) { + t.get(e)[n] = i + }, + dispose: function() { + t = new WeakMap + } + } + } + + function Vi(t, e) { + return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.program !== e.program ? t.program.id - e.program.id : t.material.id !== e.material.id ? t.material.id - e.material.id : t.z !== e.z ? t.z - e.z : t.id - e.id + } + + function ki(t, e) { + return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.z !== e.z ? e.z - t.z : t.id - e.id + } + + function Wi(t) { + const e = []; + let n = 0; + const i = [], + r = [], + o = { + id: -1 + }; + + function s(i, r, s, a, l, c) { + let h = e[n]; + const u = t.get(s); + return void 0 === h ? (h = { + id: i.id, + object: i, + geometry: r, + material: s, + program: u.program || o, + groupOrder: a, + renderOrder: i.renderOrder, + z: l, + group: c + }, e[n] = h) : (h.id = i.id, h.object = i, h.geometry = r, h.material = s, h.program = u.program || o, h.groupOrder = a, h.renderOrder = i.renderOrder, h.z = l, h.group = c), n++, h + } + return { + opaque: i, + transparent: r, + init: function() { + n = 0, i.length = 0, r.length = 0 + }, + push: function(t, e, n, o, a, l) { + const c = s(t, e, n, o, a, l); + (!0 === n.transparent ? r : i).push(c) + }, + unshift: function(t, e, n, o, a, l) { + const c = s(t, e, n, o, a, l); + (!0 === n.transparent ? r : i).unshift(c) + }, + finish: function() { + for (let t = n, i = e.length; t < i; t++) { + const n = e[t]; + if (null === n.id) break; + n.id = null, n.object = null, n.geometry = null, n.material = null, n.program = null, n.group = null + } + }, + sort: function(t, e) { + i.length > 1 && i.sort(t || Vi), r.length > 1 && r.sort(e || ki) + } + } + } + + function ji(t) { + let e = new WeakMap; + return { + get: function(n, i) { + const r = e.get(n); + let o; + return void 0 === r ? (o = new Wi(t), e.set(n, new WeakMap), e.get(n).set(i, o)) : (o = r.get(i), void 0 === o && (o = new Wi(t), r.set(i, o))), o + }, + dispose: function() { + e = new WeakMap + } + } + } + + function Xi() { + const t = {}; + return { + get: function(e) { + if (void 0 !== t[e.id]) return t[e.id]; + let n; + switch (e.type) { + case "DirectionalLight": + n = { + direction: new T, + color: new Yt + }; + break; + case "SpotLight": + n = { + position: new T, + direction: new T, + color: new Yt, + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + n = { + position: new T, + color: new Yt, + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + n = { + direction: new T, + skyColor: new Yt, + groundColor: new Yt + }; + break; + case "RectAreaLight": + n = { + color: new Yt, + position: new T, + halfWidth: new T, + halfHeight: new T + } + } + return t[e.id] = n, n + } + } + } + let qi = 0; + + function Yi(t, e) { + return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0) + } + + function Qi(t, e) { + const n = new Xi, + i = function() { + const t = {}; + return { + get: function(e) { + if (void 0 !== t[e.id]) return t[e.id]; + let n; + switch (e.type) { + case "DirectionalLight": + case "SpotLight": + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new v + }; + break; + case "PointLight": + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new v, + shadowCameraNear: 1, + shadowCameraFar: 1e3 + } + } + return t[e.id] = n, n + } + } + }(), + r = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + }; + for (let t = 0; t < 9; t++) r.probe.push(new T); + const o = new T, + s = new et, + a = new et; + return { + setup: function(o) { + let s = 0, + a = 0, + l = 0; + for (let t = 0; t < 9; t++) r.probe[t].set(0, 0, 0); + let c = 0, + h = 0, + u = 0, + d = 0, + p = 0, + f = 0, + m = 0, + g = 0; + o.sort(Yi); + for (let t = 0, e = o.length; t < e; t++) { + const e = o[t], + v = e.color, + y = e.intensity, + A = e.distance, + x = e.shadow && e.shadow.map ? e.shadow.map.texture : null; + if (e.isAmbientLight) s += v.r * y, a += v.g * y, l += v.b * y; + else if (e.isLightProbe) + for (let t = 0; t < 9; t++) r.probe[t].addScaledVector(e.sh.coefficients[t], y); + else if (e.isDirectionalLight) { + const t = n.get(e); + if (t.color.copy(e.color).multiplyScalar(e.intensity), e.castShadow) { + const t = e.shadow, + n = i.get(e); + n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.directionalShadow[c] = n, r.directionalShadowMap[c] = x, r.directionalShadowMatrix[c] = e.shadow.matrix, f++ + } + r.directional[c] = t, c++ + } else if (e.isSpotLight) { + const t = n.get(e); + if (t.position.setFromMatrixPosition(e.matrixWorld), t.color.copy(v).multiplyScalar(y), t.distance = A, t.coneCos = Math.cos(e.angle), t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra)), t.decay = e.decay, e.castShadow) { + const t = e.shadow, + n = i.get(e); + n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.spotShadow[u] = n, r.spotShadowMap[u] = x, r.spotShadowMatrix[u] = e.shadow.matrix, g++ + } + r.spot[u] = t, u++ + } else if (e.isRectAreaLight) { + const t = n.get(e); + t.color.copy(v).multiplyScalar(y), t.halfWidth.set(.5 * e.width, 0, 0), t.halfHeight.set(0, .5 * e.height, 0), r.rectArea[d] = t, d++ + } else if (e.isPointLight) { + const t = n.get(e); + if (t.color.copy(e.color).multiplyScalar(e.intensity), t.distance = e.distance, t.decay = e.decay, e.castShadow) { + const t = e.shadow, + n = i.get(e); + n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, n.shadowCameraNear = t.camera.near, n.shadowCameraFar = t.camera.far, r.pointShadow[h] = n, r.pointShadowMap[h] = x, r.pointShadowMatrix[h] = e.shadow.matrix, m++ + } + r.point[h] = t, h++ + } else if (e.isHemisphereLight) { + const t = n.get(e); + t.skyColor.copy(e.color).multiplyScalar(y), t.groundColor.copy(e.groundColor).multiplyScalar(y), r.hemi[p] = t, p++ + } + } + d > 0 && (e.isWebGL2 || !0 === t.has("OES_texture_float_linear") ? (r.rectAreaLTC1 = an.LTC_FLOAT_1, r.rectAreaLTC2 = an.LTC_FLOAT_2) : !0 === t.has("OES_texture_half_float_linear") ? (r.rectAreaLTC1 = an.LTC_HALF_1, r.rectAreaLTC2 = an.LTC_HALF_2) : console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")), r.ambient[0] = s, r.ambient[1] = a, r.ambient[2] = l; + const v = r.hash; + v.directionalLength === c && v.pointLength === h && v.spotLength === u && v.rectAreaLength === d && v.hemiLength === p && v.numDirectionalShadows === f && v.numPointShadows === m && v.numSpotShadows === g || (r.directional.length = c, r.spot.length = u, r.rectArea.length = d, r.point.length = h, r.hemi.length = p, r.directionalShadow.length = f, r.directionalShadowMap.length = f, r.pointShadow.length = m, r.pointShadowMap.length = m, r.spotShadow.length = g, r.spotShadowMap.length = g, r.directionalShadowMatrix.length = f, r.pointShadowMatrix.length = m, r.spotShadowMatrix.length = g, v.directionalLength = c, v.pointLength = h, v.spotLength = u, v.rectAreaLength = d, v.hemiLength = p, v.numDirectionalShadows = f, v.numPointShadows = m, v.numSpotShadows = g, r.version = qi++) + }, + setupView: function(t, e) { + let n = 0, + i = 0, + l = 0, + c = 0, + h = 0; + const u = e.matrixWorldInverse; + for (let e = 0, d = t.length; e < d; e++) { + const d = t[e]; + if (d.isDirectionalLight) { + const t = r.directional[n]; + t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), n++ + } else if (d.isSpotLight) { + const t = r.spot[l]; + t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), l++ + } else if (d.isRectAreaLight) { + const t = r.rectArea[c]; + t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), a.identity(), s.copy(d.matrixWorld), s.premultiply(u), a.extractRotation(s), t.halfWidth.set(.5 * d.width, 0, 0), t.halfHeight.set(0, .5 * d.height, 0), t.halfWidth.applyMatrix4(a), t.halfHeight.applyMatrix4(a), c++ + } else if (d.isPointLight) { + const t = r.point[i]; + t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), i++ + } else if (d.isHemisphereLight) { + const t = r.hemi[h]; + t.direction.setFromMatrixPosition(d.matrixWorld), t.direction.transformDirection(u), t.direction.normalize(), h++ + } + } + }, + state: r + } + } + + function Zi(t, e) { + const n = new Qi(t, e), + i = [], + r = []; + return { + init: function() { + i.length = 0, r.length = 0 + }, + state: { + lightsArray: i, + shadowsArray: r, + lights: n + }, + setupLights: function() { + n.setup(i) + }, + setupLightsView: function(t) { + n.setupView(i, t) + }, + pushLight: function(t) { + i.push(t) + }, + pushShadow: function(t) { + r.push(t) + } + } + } + + function Ji(t, e) { + let n = new WeakMap; + return { + get: function(i, r = 0) { + let o; + return !1 === n.has(i) ? (o = new Zi(t, e), n.set(i, []), n.get(i).push(o)) : r >= n.get(i).length ? (o = new Zi(t, e), n.get(i).push(o)) : o = n.get(i)[r], o + }, + dispose: function() { + n = new WeakMap + } + } + } + + function Ki(t) { + Jt.call(this), this.type = "MeshDepthMaterial", this.depthPacking = 3200, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.setValues(t) + } + + function $i(t) { + Jt.call(this), this.type = "MeshDistanceMaterial", this.referencePosition = new T, this.nearDistance = 1, this.farDistance = 1e3, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.fog = !1, this.setValues(t) + } + Ki.prototype = Object.create(Jt.prototype), Ki.prototype.constructor = Ki, Ki.prototype.isMeshDepthMaterial = !0, Ki.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.depthPacking = t.depthPacking, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this + }, $i.prototype = Object.create(Jt.prototype), $i.prototype.constructor = $i, $i.prototype.isMeshDistanceMaterial = !0, $i.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.referencePosition.copy(t.referencePosition), this.nearDistance = t.nearDistance, this.farDistance = t.farDistance, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this + }; + + function tr(t, e, n) { + let i = new en; + const r = new v, + o = new v, + s = new M, + a = [], + l = [], + c = {}, + h = { + 0: 1, + 1: 0, + 2: 2 + }, + u = new Xe({ + defines: { + SAMPLE_RATE: 2 / 8, + HALF_SAMPLE_RATE: 1 / 8 + }, + uniforms: { + shadow_pass: { + value: null + }, + resolution: { + value: new v + }, + radius: { + value: 4 + } + }, + vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", + fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" + }), + d = u.clone(); + d.defines.HORIZONTAL_PASS = 1; + const p = new be; + p.setAttribute("position", new ee(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); + const f = new He(p, u), + m = this; + + function g(n, i) { + const r = e.update(f); + u.uniforms.shadow_pass.value = n.map.texture, u.uniforms.resolution.value = n.mapSize, u.uniforms.radius.value = n.radius, t.setRenderTarget(n.mapPass), t.clear(), t.renderBufferDirect(i, null, r, u, f, null), d.uniforms.shadow_pass.value = n.mapPass.texture, d.uniforms.resolution.value = n.mapSize, d.uniforms.radius.value = n.radius, t.setRenderTarget(n.map), t.clear(), t.renderBufferDirect(i, null, r, d, f, null) + } + + function y(t, e, n) { + const i = t << 0 | e << 1 | n << 2; + let r = a[i]; + return void 0 === r && (r = new Ki({ + depthPacking: 3201, + morphTargets: t, + skinning: e + }), a[i] = r), r + } + + function A(t, e, n) { + const i = t << 0 | e << 1 | n << 2; + let r = l[i]; + return void 0 === r && (r = new $i({ + morphTargets: t, + skinning: e + }), l[i] = r), r + } + + function x(e, n, i, r, o, s, a) { + let l = null, + u = y, + d = e.customDepthMaterial; + if (!0 === r.isPointLight && (u = A, d = e.customDistanceMaterial), void 0 === d) { + let t = !1; + !0 === i.morphTargets && (t = n.morphAttributes && n.morphAttributes.position && n.morphAttributes.position.length > 0); + let r = !1; + !0 === e.isSkinnedMesh && (!0 === i.skinning ? r = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e)); + l = u(t, r, !0 === e.isInstancedMesh) + } else l = d; + if (t.localClippingEnabled && !0 === i.clipShadows && 0 !== i.clippingPlanes.length) { + const t = l.uuid, + e = i.uuid; + let n = c[t]; + void 0 === n && (n = {}, c[t] = n); + let r = n[e]; + void 0 === r && (r = l.clone(), n[e] = r), l = r + } + return l.visible = i.visible, l.wireframe = i.wireframe, l.side = 3 === a ? null !== i.shadowSide ? i.shadowSide : i.side : null !== i.shadowSide ? i.shadowSide : h[i.side], l.clipShadows = i.clipShadows, l.clippingPlanes = i.clippingPlanes, l.clipIntersection = i.clipIntersection, l.wireframeLinewidth = i.wireframeLinewidth, l.linewidth = i.linewidth, !0 === r.isPointLight && !0 === l.isMeshDistanceMaterial && (l.referencePosition.setFromMatrixPosition(r.matrixWorld), l.nearDistance = o, l.farDistance = s), l + } + + function _(n, r, o, s, a) { + if (!1 === n.visible) return; + if (n.layers.test(r.layers) && (n.isMesh || n.isLine || n.isPoints) && (n.castShadow || n.receiveShadow && 3 === a) && (!n.frustumCulled || i.intersectsObject(n))) { + n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse, n.matrixWorld); + const i = e.update(n), + r = n.material; + if (Array.isArray(r)) { + const e = i.groups; + for (let l = 0, c = e.length; l < c; l++) { + const c = e[l], + h = r[c.materialIndex]; + if (h && h.visible) { + const e = x(n, i, h, s, o.near, o.far, a); + t.renderBufferDirect(o, null, i, e, n, c) + } + } + } else if (r.visible) { + const e = x(n, i, r, s, o.near, o.far, a); + t.renderBufferDirect(o, null, i, e, n, null) + } + } + const l = n.children; + for (let t = 0, e = l.length; t < e; t++) _(l[t], r, o, s, a) + } + this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1, this.render = function(e, a, l) { + if (!1 === m.enabled) return; + if (!1 === m.autoUpdate && !1 === m.needsUpdate) return; + if (0 === e.length) return; + const c = t.getRenderTarget(), + h = t.getActiveCubeFace(), + u = t.getActiveMipmapLevel(), + d = t.state; + d.setBlending(0), d.buffers.color.setClear(1, 1, 1, 1), d.buffers.depth.setTest(!0), d.setScissorTest(!1); + for (let c = 0, h = e.length; c < h; c++) { + const h = e[c], + u = h.shadow; + if (void 0 === u) { + console.warn("THREE.WebGLShadowMap:", h, "has no shadow."); + continue + } + if (!1 === u.autoUpdate && !1 === u.needsUpdate) continue; + r.copy(u.mapSize); + const p = u.getFrameExtents(); + if (r.multiply(p), o.copy(u.mapSize), (r.x > n || r.y > n) && (r.x > n && (o.x = Math.floor(n / p.x), r.x = o.x * p.x, u.mapSize.x = o.x), r.y > n && (o.y = Math.floor(n / p.y), r.y = o.y * p.y, u.mapSize.y = o.y)), null === u.map && !u.isPointLightShadow && 3 === this.type) { + const t = { + minFilter: 1006, + magFilter: 1006, + format: 1023 + }; + u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.mapPass = new E(r.x, r.y, t), u.camera.updateProjectionMatrix() + } + if (null === u.map) { + const t = { + minFilter: 1003, + magFilter: 1003, + format: 1023 + }; + u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.camera.updateProjectionMatrix() + } + t.setRenderTarget(u.map), t.clear(); + const f = u.getViewportCount(); + for (let t = 0; t < f; t++) { + const e = u.getViewport(t); + s.set(o.x * e.x, o.y * e.y, o.x * e.z, o.y * e.w), d.viewport(s), u.updateMatrices(h, t), i = u.getFrustum(), _(a, l, u.camera, h, this.type) + } + u.isPointLightShadow || 3 !== this.type || g(u, l), u.needsUpdate = !1 + } + m.needsUpdate = !1, t.setRenderTarget(c, h, u) + } + } + + function er(t, e, n) { + const i = n.isWebGL2; + const r = new function() { + let e = !1; + const n = new M; + let i = null; + const r = new M(0, 0, 0, 0); + return { + setMask: function(n) { + i === n || e || (t.colorMask(n, n, n, n), i = n) + }, + setLocked: function(t) { + e = t + }, + setClear: function(e, i, o, s, a) { + !0 === a && (e *= s, i *= s, o *= s), n.set(e, i, o, s), !1 === r.equals(n) && (t.clearColor(e, i, o, s), r.copy(n)) + }, + reset: function() { + e = !1, i = null, r.set(-1, 0, 0, 0) + } + } + }, + o = new function() { + let e = !1, + n = null, + i = null, + r = null; + return { + setTest: function(t) { + t ? O(2929) : N(2929) + }, + setMask: function(i) { + n === i || e || (t.depthMask(i), n = i) + }, + setFunc: function(e) { + if (i !== e) { + if (e) switch (e) { + case 0: + t.depthFunc(512); + break; + case 1: + t.depthFunc(519); + break; + case 2: + t.depthFunc(513); + break; + case 3: + t.depthFunc(515); + break; + case 4: + t.depthFunc(514); + break; + case 5: + t.depthFunc(518); + break; + case 6: + t.depthFunc(516); + break; + case 7: + t.depthFunc(517); + break; + default: + t.depthFunc(515) + } else t.depthFunc(515); + i = e + } + }, + setLocked: function(t) { + e = t + }, + setClear: function(e) { + r !== e && (t.clearDepth(e), r = e) + }, + reset: function() { + e = !1, n = null, i = null, r = null + } + } + }, + s = new function() { + let e = !1, + n = null, + i = null, + r = null, + o = null, + s = null, + a = null, + l = null, + c = null; + return { + setTest: function(t) { + e || (t ? O(2960) : N(2960)) + }, + setMask: function(i) { + n === i || e || (t.stencilMask(i), n = i) + }, + setFunc: function(e, n, s) { + i === e && r === n && o === s || (t.stencilFunc(e, n, s), i = e, r = n, o = s) + }, + setOp: function(e, n, i) { + s === e && a === n && l === i || (t.stencilOp(e, n, i), s = e, a = n, l = i) + }, + setLocked: function(t) { + e = t + }, + setClear: function(e) { + c !== e && (t.clearStencil(e), c = e) + }, + reset: function() { + e = !1, n = null, i = null, r = null, o = null, s = null, a = null, l = null, c = null + } + } + }; + let a = {}, + l = null, + c = null, + h = null, + u = null, + d = null, + p = null, + f = null, + m = null, + g = null, + v = !1, + y = null, + A = null, + x = null, + _ = null, + b = null; + const w = t.getParameter(35661); + let E = !1, + S = 0; + const T = t.getParameter(7938); - 1 !== T.indexOf("WebGL") ? (S = parseFloat(/^WebGL (\d)/.exec(T)[1]), E = S >= 1) : -1 !== T.indexOf("OpenGL ES") && (S = parseFloat(/^OpenGL ES (\d)/.exec(T)[1]), E = S >= 2); + let L = null, + R = {}; + const C = new M, + P = new M; + + function D(e, n, i) { + const r = new Uint8Array(4), + o = t.createTexture(); + t.bindTexture(e, o), t.texParameteri(e, 10241, 9728), t.texParameteri(e, 10240, 9728); + for (let e = 0; e < i; e++) t.texImage2D(n + e, 0, 6408, 1, 1, 0, 6408, 5121, r); + return o + } + const I = {}; + + function O(e) { + !0 !== a[e] && (t.enable(e), a[e] = !0) + } + + function N(e) { + !1 !== a[e] && (t.disable(e), a[e] = !1) + } + I[3553] = D(3553, 3553, 1), I[34067] = D(34067, 34069, 6), r.setClear(0, 0, 0, 1), o.setClear(1), s.setClear(0), O(2929), o.setFunc(3), U(!1), H(1), O(2884), z(0); + const B = { + 100: 32774, + 101: 32778, + 102: 32779 + }; + if (i) B[103] = 32775, B[104] = 32776; + else { + const t = e.get("EXT_blend_minmax"); + null !== t && (B[103] = t.MIN_EXT, B[104] = t.MAX_EXT) + } + const F = { + 200: 0, + 201: 1, + 202: 768, + 204: 770, + 210: 776, + 208: 774, + 206: 772, + 203: 769, + 205: 771, + 209: 775, + 207: 773 + }; + + function z(e, n, i, r, o, s, a, l) { + if (0 !== e) { + if (c || (O(3042), c = !0), 5 === e) o = o || n, s = s || i, a = a || r, n === u && o === f || (t.blendEquationSeparate(B[n], B[o]), u = n, f = o), i === d && r === p && s === m && a === g || (t.blendFuncSeparate(F[i], F[r], F[s], F[a]), d = i, p = r, m = s, g = a), h = e, v = null; + else if (e !== h || l !== v) { + if (100 === u && 100 === f || (t.blendEquation(32774), u = 100, f = 100), l) switch (e) { + case 1: + t.blendFuncSeparate(1, 771, 1, 771); + break; + case 2: + t.blendFunc(1, 1); + break; + case 3: + t.blendFuncSeparate(0, 0, 769, 771); + break; + case 4: + t.blendFuncSeparate(0, 768, 0, 770); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } else switch (e) { + case 1: + t.blendFuncSeparate(770, 771, 1, 771); + break; + case 2: + t.blendFunc(770, 1); + break; + case 3: + t.blendFunc(0, 769); + break; + case 4: + t.blendFunc(0, 768); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } + d = null, p = null, m = null, g = null, h = e, v = l + } + } else c && (N(3042), c = !1) + } + + function U(e) { + y !== e && (e ? t.frontFace(2304) : t.frontFace(2305), y = e) + } + + function H(e) { + 0 !== e ? (O(2884), e !== A && (1 === e ? t.cullFace(1029) : 2 === e ? t.cullFace(1028) : t.cullFace(1032))) : N(2884), A = e + } + + function G(e, n, i) { + e ? (O(32823), _ === n && b === i || (t.polygonOffset(n, i), _ = n, b = i)) : N(32823) + } + + function V(e) { + void 0 === e && (e = 33984 + w - 1), L !== e && (t.activeTexture(e), L = e) + } + return { + buffers: { + color: r, + depth: o, + stencil: s + }, + enable: O, + disable: N, + useProgram: function(e) { + return l !== e && (t.useProgram(e), l = e, !0) + }, + setBlending: z, + setMaterial: function(t, e) { + 2 === t.side ? N(2884) : O(2884); + let n = 1 === t.side; + e && (n = !n), U(n), 1 === t.blending && !1 === t.transparent ? z(0) : z(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.premultipliedAlpha), o.setFunc(t.depthFunc), o.setTest(t.depthTest), o.setMask(t.depthWrite), r.setMask(t.colorWrite); + const i = t.stencilWrite; + s.setTest(i), i && (s.setMask(t.stencilWriteMask), s.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), s.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), G(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits) + }, + setFlipSided: U, + setCullFace: H, + setLineWidth: function(e) { + e !== x && (E && t.lineWidth(e), x = e) + }, + setPolygonOffset: G, + setScissorTest: function(t) { + t ? O(3089) : N(3089) + }, + activeTexture: V, + bindTexture: function(e, n) { + null === L && V(); + let i = R[L]; + void 0 === i && (i = { + type: void 0, + texture: void 0 + }, R[L] = i), i.type === e && i.texture === n || (t.bindTexture(e, n || I[e]), i.type = e, i.texture = n) + }, + unbindTexture: function() { + const e = R[L]; + void 0 !== e && void 0 !== e.type && (t.bindTexture(e.type, null), e.type = void 0, e.texture = void 0) + }, + compressedTexImage2D: function() { + try { + t.compressedTexImage2D.apply(t, arguments) + } catch (t) { + console.error("THREE.WebGLState:", t) + } + }, + texImage2D: function() { + try { + t.texImage2D.apply(t, arguments) + } catch (t) { + console.error("THREE.WebGLState:", t) + } + }, + texImage3D: function() { + try { + t.texImage3D.apply(t, arguments) + } catch (t) { + console.error("THREE.WebGLState:", t) + } + }, + scissor: function(e) { + !1 === C.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), C.copy(e)) + }, + viewport: function(e) { + !1 === P.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), P.copy(e)) + }, + reset: function() { + a = {}, L = null, R = {}, l = null, c = null, h = null, u = null, d = null, p = null, f = null, m = null, g = null, v = !1, y = null, A = null, x = null, _ = null, b = null, r.reset(), o.reset(), s.reset() + } + } + } + + function nr(t, e, n, i, r, o, s) { + const a = r.isWebGL2, + l = r.maxTextures, + c = r.maxCubemapSize, + h = r.maxTextureSize, + u = r.maxSamples, + d = new WeakMap; + let p, f = !1; + try { + f = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") + } catch (t) {} + + function m(t, e) { + return f ? new OffscreenCanvas(t, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") + } + + function v(t, e, n, i) { + let r = 1; + if ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), r < 1 || !0 === e) { + if ("undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap) { + const i = e ? g.floorPowerOfTwo : Math.floor, + o = i(r * t.width), + s = i(r * t.height); + void 0 === p && (p = m(o, s)); + const a = n ? m(o, s) : p; + a.width = o, a.height = s; + return a.getContext("2d").drawImage(t, 0, 0, o, s), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + t.width + "x" + t.height + ") to (" + o + "x" + s + ")."), a + } + return "data" in t && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + t.width + "x" + t.height + ")."), t + } + return t + } + + function y(t) { + return g.isPowerOfTwo(t.width) && g.isPowerOfTwo(t.height) + } + + function A(t, e) { + return t.generateMipmaps && e && 1003 !== t.minFilter && 1006 !== t.minFilter + } + + function x(e, n, r, o) { + t.generateMipmap(e); + i.get(n).__maxMipLevel = Math.log(Math.max(r, o)) * Math.LOG2E + } + + function _(n, i, r) { + if (!1 === a) return i; + if (null !== n) { + if (void 0 !== t[n]) return t[n]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'") + } + let o = i; + return 6403 === i && (5126 === r && (o = 33326), 5131 === r && (o = 33325), 5121 === r && (o = 33321)), 6407 === i && (5126 === r && (o = 34837), 5131 === r && (o = 34843), 5121 === r && (o = 32849)), 6408 === i && (5126 === r && (o = 34836), 5131 === r && (o = 34842), 5121 === r && (o = 32856)), 33325 !== o && 33326 !== o && 34842 !== o && 34836 !== o || e.get("EXT_color_buffer_float"), o + } + + function b(t) { + return 1003 === t || 1004 === t || 1005 === t ? 9728 : 9729 + } + + function w(e) { + const n = e.target; + n.removeEventListener("dispose", w), + function(e) { + const n = i.get(e); + if (void 0 === n.__webglInit) return; + t.deleteTexture(n.__webglTexture), i.remove(e) + }(n), n.isVideoTexture && d.delete(n), s.memory.textures-- + } + + function M(e) { + const n = e.target; + n.removeEventListener("dispose", M), + function(e) { + const n = i.get(e), + r = i.get(e.texture); + if (!e) return; + void 0 !== r.__webglTexture && t.deleteTexture(r.__webglTexture); + e.depthTexture && e.depthTexture.dispose(); + if (e.isWebGLCubeRenderTarget) + for (let e = 0; e < 6; e++) t.deleteFramebuffer(n.__webglFramebuffer[e]), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer[e]); + else t.deleteFramebuffer(n.__webglFramebuffer), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer), n.__webglMultisampledFramebuffer && t.deleteFramebuffer(n.__webglMultisampledFramebuffer), n.__webglColorRenderbuffer && t.deleteRenderbuffer(n.__webglColorRenderbuffer), n.__webglDepthRenderbuffer && t.deleteRenderbuffer(n.__webglDepthRenderbuffer); + i.remove(e.texture), i.remove(e) + }(n), s.memory.textures-- + } + let E = 0; + + function S(t, e) { + const r = i.get(t); + if (t.isVideoTexture && function(t) { + const e = s.render.frame; + d.get(t) !== e && (d.set(t, e), t.update()) + }(t), t.version > 0 && r.__version !== t.version) { + const n = t.image; + if (void 0 === n) console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined"); + else { + if (!1 !== n.complete) return void D(r, t, e); + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") + } + } + n.activeTexture(33984 + e), n.bindTexture(3553, r.__webglTexture) + } + + function T(e, r) { + const s = i.get(e); + e.version > 0 && s.__version !== e.version ? function(e, i, r) { + if (6 !== i.image.length) return; + P(e, i), n.activeTexture(33984 + r), n.bindTexture(34067, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); + const s = i && (i.isCompressedTexture || i.image[0].isCompressedTexture), + l = i.image[0] && i.image[0].isDataTexture, + h = []; + for (let t = 0; t < 6; t++) h[t] = s || l ? l ? i.image[t].image : i.image[t] : v(i.image[t], !1, !0, c); + const u = h[0], + d = y(u) || a, + p = o.convert(i.format), + f = o.convert(i.type), + m = _(i.internalFormat, p, f); + let g; + if (C(34067, i, d), s) { + for (let t = 0; t < 6; t++) { + g = h[t].mipmaps; + for (let e = 0; e < g.length; e++) { + const r = g[e]; + 1023 !== i.format && 1022 !== i.format ? null !== p ? n.compressedTexImage2D(34069 + t, e, m, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : n.texImage2D(34069 + t, e, m, r.width, r.height, 0, p, f, r.data) + } + } + e.__maxMipLevel = g.length - 1 + } else { + g = i.mipmaps; + for (let t = 0; t < 6; t++) + if (l) { + n.texImage2D(34069 + t, 0, m, h[t].width, h[t].height, 0, p, f, h[t].data); + for (let e = 0; e < g.length; e++) { + const i = g[e].image[t].image; + n.texImage2D(34069 + t, e + 1, m, i.width, i.height, 0, p, f, i.data) + } + } else { + n.texImage2D(34069 + t, 0, m, p, f, h[t]); + for (let e = 0; e < g.length; e++) { + const i = g[e]; + n.texImage2D(34069 + t, e + 1, m, p, f, i.image[t]) + } + } e.__maxMipLevel = g.length + } + A(i, d) && x(34067, i, u.width, u.height); + e.__version = i.version, i.onUpdate && i.onUpdate(i) + }(s, e, r) : (n.activeTexture(33984 + r), n.bindTexture(34067, s.__webglTexture)) + } + const L = { + 1e3: 10497, + 1001: 33071, + 1002: 33648 + }, + R = { + 1003: 9728, + 1004: 9984, + 1005: 9986, + 1006: 9729, + 1007: 9985, + 1008: 9987 + }; + + function C(n, o, s) { + s ? (t.texParameteri(n, 10242, L[o.wrapS]), t.texParameteri(n, 10243, L[o.wrapT]), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, L[o.wrapR]), t.texParameteri(n, 10240, R[o.magFilter]), t.texParameteri(n, 10241, R[o.minFilter])) : (t.texParameteri(n, 10242, 33071), t.texParameteri(n, 10243, 33071), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, 33071), 1001 === o.wrapS && 1001 === o.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), t.texParameteri(n, 10240, b(o.magFilter)), t.texParameteri(n, 10241, b(o.minFilter)), 1003 !== o.minFilter && 1006 !== o.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")); + const l = e.get("EXT_texture_filter_anisotropic"); + if (l) { + if (1015 === o.type && null === e.get("OES_texture_float_linear")) return; + if (1016 === o.type && null === (a || e.get("OES_texture_half_float_linear"))) return; + (o.anisotropy > 1 || i.get(o).__currentAnisotropy) && (t.texParameterf(n, l.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(o.anisotropy, r.getMaxAnisotropy())), i.get(o).__currentAnisotropy = o.anisotropy) + } + } + + function P(e, n) { + void 0 === e.__webglInit && (e.__webglInit = !0, n.addEventListener("dispose", w), e.__webglTexture = t.createTexture(), s.memory.textures++) + } + + function D(e, i, r) { + let s = 3553; + i.isDataTexture2DArray && (s = 35866), i.isDataTexture3D && (s = 32879), P(e, i), n.activeTexture(33984 + r), n.bindTexture(s, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); + const l = function(t) { + return !a && (1001 !== t.wrapS || 1001 !== t.wrapT || 1003 !== t.minFilter && 1006 !== t.minFilter) + }(i) && !1 === y(i.image), + c = v(i.image, l, !1, h), + u = y(c) || a, + d = o.convert(i.format); + let p, f = o.convert(i.type), + m = _(i.internalFormat, d, f); + C(s, i, u); + const g = i.mipmaps; + if (i.isDepthTexture) m = 6402, a ? m = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), 1026 === i.format && 6402 === m && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), i.type = 1012, f = o.convert(i.type)), 1027 === i.format && 6402 === m && (m = 34041, 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), i.type = 1020, f = o.convert(i.type))), n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, null); + else if (i.isDataTexture) + if (g.length > 0 && u) { + for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); + i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 + } else n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, c.data), e.__maxMipLevel = 0; + else if (i.isCompressedTexture) { + for (let t = 0, e = g.length; t < e; t++) p = g[t], 1023 !== i.format && 1022 !== i.format ? null !== d ? n.compressedTexImage2D(3553, t, m, p.width, p.height, 0, p.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); + e.__maxMipLevel = g.length - 1 + } else if (i.isDataTexture2DArray) n.texImage3D(35866, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; + else if (i.isDataTexture3D) n.texImage3D(32879, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; + else if (g.length > 0 && u) { + for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, d, f, p); + i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 + } else n.texImage2D(3553, 0, m, d, f, c), e.__maxMipLevel = 0; + A(i, u) && x(s, i, c.width, c.height), e.__version = i.version, i.onUpdate && i.onUpdate(i) + } + + function I(e, r, s, a) { + const l = o.convert(r.texture.format), + c = o.convert(r.texture.type), + h = _(r.texture.internalFormat, l, c); + n.texImage2D(a, 0, h, r.width, r.height, 0, l, c, null), t.bindFramebuffer(36160, e), t.framebufferTexture2D(36160, s, a, i.get(r.texture).__webglTexture, 0), t.bindFramebuffer(36160, null) + } + + function O(e, n, i) { + if (t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer) { + let r = 33189; + if (i) { + const e = n.depthTexture; + e && e.isDepthTexture && (1015 === e.type ? r = 36012 : 1014 === e.type && (r = 33190)); + const i = B(n); + t.renderbufferStorageMultisample(36161, i, r, n.width, n.height) + } else t.renderbufferStorage(36161, r, n.width, n.height); + t.framebufferRenderbuffer(36160, 36096, 36161, e) + } else if (n.depthBuffer && n.stencilBuffer) { + if (i) { + const e = B(n); + t.renderbufferStorageMultisample(36161, e, 35056, n.width, n.height) + } else t.renderbufferStorage(36161, 34041, n.width, n.height); + t.framebufferRenderbuffer(36160, 33306, 36161, e) + } else { + const e = o.convert(n.texture.format), + r = o.convert(n.texture.type), + s = _(n.texture.internalFormat, e, r); + if (i) { + const e = B(n); + t.renderbufferStorageMultisample(36161, e, s, n.width, n.height) + } else t.renderbufferStorage(36161, s, n.width, n.height) + } + t.bindRenderbuffer(36161, null) + } + + function N(e) { + const n = i.get(e), + r = !0 === e.isWebGLCubeRenderTarget; + if (e.depthTexture) { + if (r) throw new Error("target.depthTexture not supported in Cube render targets"); + ! function(e, n) { + if (n && n.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported"); + if (t.bindFramebuffer(36160, e), !n.depthTexture || !n.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + i.get(n.depthTexture).__webglTexture && n.depthTexture.image.width === n.width && n.depthTexture.image.height === n.height || (n.depthTexture.image.width = n.width, n.depthTexture.image.height = n.height, n.depthTexture.needsUpdate = !0), S(n.depthTexture, 0); + const r = i.get(n.depthTexture).__webglTexture; + if (1026 === n.depthTexture.format) t.framebufferTexture2D(36160, 36096, 3553, r, 0); + else { + if (1027 !== n.depthTexture.format) throw new Error("Unknown depthTexture format"); + t.framebufferTexture2D(36160, 33306, 3553, r, 0) + } + }(n.__webglFramebuffer, e) + } else if (r) { + n.__webglDepthbuffer = []; + for (let i = 0; i < 6; i++) t.bindFramebuffer(36160, n.__webglFramebuffer[i]), n.__webglDepthbuffer[i] = t.createRenderbuffer(), O(n.__webglDepthbuffer[i], e, !1) + } else t.bindFramebuffer(36160, n.__webglFramebuffer), n.__webglDepthbuffer = t.createRenderbuffer(), O(n.__webglDepthbuffer, e, !1); + t.bindFramebuffer(36160, null) + } + + function B(t) { + return a && t.isWebGLMultisampleRenderTarget ? Math.min(u, t.samples) : 0 + } + let F = !1, + z = !1; + this.allocateTextureUnit = function() { + const t = E; + return t >= l && console.warn("THREE.WebGLTextures: Trying to use " + t + " texture units while this GPU supports only " + l), E += 1, t + }, this.resetTextureUnits = function() { + E = 0 + }, this.setTexture2D = S, this.setTexture2DArray = function(t, e) { + const r = i.get(t); + t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture)) + }, this.setTexture3D = function(t, e) { + const r = i.get(t); + t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture)) + }, this.setTextureCube = T, this.setupRenderTarget = function(e) { + const r = i.get(e), + l = i.get(e.texture); + e.addEventListener("dispose", M), l.__webglTexture = t.createTexture(), s.memory.textures++; + const c = !0 === e.isWebGLCubeRenderTarget, + h = !0 === e.isWebGLMultisampleRenderTarget, + u = y(e) || a; + if (!a || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), c) { + r.__webglFramebuffer = []; + for (let e = 0; e < 6; e++) r.__webglFramebuffer[e] = t.createFramebuffer() + } else if (r.__webglFramebuffer = t.createFramebuffer(), h) + if (a) { + r.__webglMultisampledFramebuffer = t.createFramebuffer(), r.__webglColorRenderbuffer = t.createRenderbuffer(), t.bindRenderbuffer(36161, r.__webglColorRenderbuffer); + const n = o.convert(e.texture.format), + i = o.convert(e.texture.type), + s = _(e.texture.internalFormat, n, i), + a = B(e); + t.renderbufferStorageMultisample(36161, a, s, e.width, e.height), t.bindFramebuffer(36160, r.__webglMultisampledFramebuffer), t.framebufferRenderbuffer(36160, 36064, 36161, r.__webglColorRenderbuffer), t.bindRenderbuffer(36161, null), e.depthBuffer && (r.__webglDepthRenderbuffer = t.createRenderbuffer(), O(r.__webglDepthRenderbuffer, e, !0)), t.bindFramebuffer(36160, null) + } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); + if (c) { + n.bindTexture(34067, l.__webglTexture), C(34067, e.texture, u); + for (let t = 0; t < 6; t++) I(r.__webglFramebuffer[t], e, 36064, 34069 + t); + A(e.texture, u) && x(34067, e.texture, e.width, e.height), n.bindTexture(34067, null) + } else n.bindTexture(3553, l.__webglTexture), C(3553, e.texture, u), I(r.__webglFramebuffer, e, 36064, 3553), A(e.texture, u) && x(3553, e.texture, e.width, e.height), n.bindTexture(3553, null); + e.depthBuffer && N(e) + }, this.updateRenderTargetMipmap = function(t) { + const e = t.texture; + if (A(e, y(t) || a)) { + const r = t.isWebGLCubeRenderTarget ? 34067 : 3553, + o = i.get(e).__webglTexture; + n.bindTexture(r, o), x(r, e, t.width, t.height), n.bindTexture(r, null) + } + }, this.updateMultisampleRenderTarget = function(e) { + if (e.isWebGLMultisampleRenderTarget) + if (a) { + const n = i.get(e); + t.bindFramebuffer(36008, n.__webglMultisampledFramebuffer), t.bindFramebuffer(36009, n.__webglFramebuffer); + const r = e.width, + o = e.height; + let s = 16384; + e.depthBuffer && (s |= 256), e.stencilBuffer && (s |= 1024), t.blitFramebuffer(0, 0, r, o, 0, 0, r, o, s, 9728), t.bindFramebuffer(36160, n.__webglMultisampledFramebuffer) + } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.") + }, this.safeSetTexture2D = function(t, e) { + t && t.isWebGLRenderTarget && (!1 === F && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), F = !0), t = t.texture), S(t, e) + }, this.safeSetTextureCube = function(t, e) { + t && t.isWebGLCubeRenderTarget && (!1 === z && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), z = !0), t = t.texture), T(t, e) + } + } + + function ir(t, e, n) { + const i = n.isWebGL2; + return { + convert: function(t) { + let n; + if (1009 === t) return 5121; + if (1017 === t) return 32819; + if (1018 === t) return 32820; + if (1019 === t) return 33635; + if (1010 === t) return 5120; + if (1011 === t) return 5122; + if (1012 === t) return 5123; + if (1013 === t) return 5124; + if (1014 === t) return 5125; + if (1015 === t) return 5126; + if (1016 === t) return i ? 5131 : (n = e.get("OES_texture_half_float"), null !== n ? n.HALF_FLOAT_OES : null); + if (1021 === t) return 6406; + if (1022 === t) return 6407; + if (1023 === t) return 6408; + if (1024 === t) return 6409; + if (1025 === t) return 6410; + if (1026 === t) return 6402; + if (1027 === t) return 34041; + if (1028 === t) return 6403; + if (1029 === t) return 36244; + if (1030 === t) return 33319; + if (1031 === t) return 33320; + if (1032 === t) return 36248; + if (1033 === t) return 36249; + if (33776 === t || 33777 === t || 33778 === t || 33779 === t) { + if (n = e.get("WEBGL_compressed_texture_s3tc"), null === n) return null; + if (33776 === t) return n.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (33777 === t) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (33778 === t) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (33779 === t) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT + } + if (35840 === t || 35841 === t || 35842 === t || 35843 === t) { + if (n = e.get("WEBGL_compressed_texture_pvrtc"), null === n) return null; + if (35840 === t) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (35841 === t) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (35842 === t) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (35843 === t) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (36196 === t) return n = e.get("WEBGL_compressed_texture_etc1"), null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null; + if ((37492 === t || 37496 === t) && (n = e.get("WEBGL_compressed_texture_etc"), null !== n)) { + if (37492 === t) return n.COMPRESSED_RGB8_ETC2; + if (37496 === t) return n.COMPRESSED_RGBA8_ETC2_EAC + } + return 37808 === t || 37809 === t || 37810 === t || 37811 === t || 37812 === t || 37813 === t || 37814 === t || 37815 === t || 37816 === t || 37817 === t || 37818 === t || 37819 === t || 37820 === t || 37821 === t || 37840 === t || 37841 === t || 37842 === t || 37843 === t || 37844 === t || 37845 === t || 37846 === t || 37847 === t || 37848 === t || 37849 === t || 37850 === t || 37851 === t || 37852 === t || 37853 === t ? (n = e.get("WEBGL_compressed_texture_astc"), null !== n ? t : null) : 36492 === t ? (n = e.get("EXT_texture_compression_bptc"), null !== n ? t : null) : 1020 === t ? i ? 34042 : (n = e.get("WEBGL_depth_texture"), null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) : void 0 + } + } + } + + function rr(t = []) { + Ye.call(this), this.cameras = t + } + + function or() { + St.call(this), this.type = "Group" + } + + function sr() { + this._targetRay = null, this._grip = null, this._hand = null + } + + function ar(t, e) { + const n = this; + let i = null, + r = 1, + o = null, + s = "local-floor", + a = null; + const l = [], + c = new Map, + h = new Ye; + h.layers.enable(1), h.viewport = new M; + const u = new Ye; + u.layers.enable(2), u.viewport = new M; + const d = [h, u], + p = new rr; + p.layers.enable(1), p.layers.enable(2); + let f = null, + m = null; + + function g(t) { + const e = c.get(t.inputSource); + e && e.dispatchEvent({ + type: t.type, + data: t.inputSource + }) + } + + function v() { + c.forEach((function(t, e) { + t.disconnect(e) + })), c.clear(), f = null, m = null, t.setFramebuffer(null), t.setRenderTarget(t.getRenderTarget()), w.stop(), n.isPresenting = !1, n.dispatchEvent({ + type: "sessionend" + }) + } + + function y(t) { + const e = i.inputSources; + for (let t = 0; t < l.length; t++) c.set(e[t], l[t]); + for (let e = 0; e < t.removed.length; e++) { + const n = t.removed[e], + i = c.get(n); + i && (i.dispatchEvent({ + type: "disconnected", + data: n + }), c.delete(n)) + } + for (let e = 0; e < t.added.length; e++) { + const n = t.added[e], + i = c.get(n); + i && i.dispatchEvent({ + type: "connected", + data: n + }) + } + } + this.enabled = !1, this.isPresenting = !1, this.getController = function(t) { + let e = l[t]; + return void 0 === e && (e = new sr, l[t] = e), e.getTargetRaySpace() + }, this.getControllerGrip = function(t) { + let e = l[t]; + return void 0 === e && (e = new sr, l[t] = e), e.getGripSpace() + }, this.getHand = function(t) { + let e = l[t]; + return void 0 === e && (e = new sr, l[t] = e), e.getHandSpace() + }, this.setFramebufferScaleFactor = function(t) { + r = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.") + }, this.setReferenceSpaceType = function(t) { + s = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.") + }, this.getReferenceSpace = function() { + return o + }, this.getSession = function() { + return i + }, this.setSession = async function(t) { + if (i = t, null !== i) { + i.addEventListener("select", g), i.addEventListener("selectstart", g), i.addEventListener("selectend", g), i.addEventListener("squeeze", g), i.addEventListener("squeezestart", g), i.addEventListener("squeezeend", g), i.addEventListener("end", v), i.addEventListener("inputsourceschange", y); + const t = e.getContextAttributes(); + !0 !== t.xrCompatible && await e.makeXRCompatible(); + const a = { + antialias: t.antialias, + alpha: t.alpha, + depth: t.depth, + stencil: t.stencil, + framebufferScaleFactor: r + }, + l = new XRWebGLLayer(i, e, a); + i.updateRenderState({ + baseLayer: l + }), o = await i.requestReferenceSpace(s), w.setContext(i), w.start(), n.isPresenting = !0, n.dispatchEvent({ + type: "sessionstart" + }) + } + }; + const A = new T, + x = new T; + + function _(t, e) { + null === e ? t.matrixWorld.copy(t.matrix) : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), t.matrixWorldInverse.copy(t.matrixWorld).invert() + } + this.getCamera = function(t) { + p.near = u.near = h.near = t.near, p.far = u.far = h.far = t.far, f === p.near && m === p.far || (i.updateRenderState({ + depthNear: p.near, + depthFar: p.far + }), f = p.near, m = p.far); + const e = t.parent, + n = p.cameras; + _(p, e); + for (let t = 0; t < n.length; t++) _(n[t], e); + t.matrixWorld.copy(p.matrixWorld), t.matrix.copy(p.matrix), t.matrix.decompose(t.position, t.quaternion, t.scale); + const r = t.children; + for (let t = 0, e = r.length; t < e; t++) r[t].updateMatrixWorld(!0); + return 2 === n.length ? function(t, e, n) { + A.setFromMatrixPosition(e.matrixWorld), x.setFromMatrixPosition(n.matrixWorld); + const i = A.distanceTo(x), + r = e.projectionMatrix.elements, + o = n.projectionMatrix.elements, + s = r[14] / (r[10] - 1), + a = r[14] / (r[10] + 1), + l = (r[9] + 1) / r[5], + c = (r[9] - 1) / r[5], + h = (r[8] - 1) / r[0], + u = (o[8] + 1) / o[0], + d = s * h, + p = s * u, + f = i / (-h + u), + m = f * -h; + e.matrixWorld.decompose(t.position, t.quaternion, t.scale), t.translateX(m), t.translateZ(f), t.matrixWorld.compose(t.position, t.quaternion, t.scale), t.matrixWorldInverse.copy(t.matrixWorld).invert(); + const g = s + f, + v = a + f, + y = d - m, + _ = p + (i - m), + b = l * a / v * g, + w = c * a / v * g; + t.projectionMatrix.makePerspective(y, _, b, w, g, v) + }(p, h, u) : p.projectionMatrix.copy(h.projectionMatrix), p + }; + let b = null; + const w = new nn; + w.setAnimationLoop((function(e, n) { + if (a = n.getViewerPose(o), null !== a) { + const e = a.views, + n = i.renderState.baseLayer; + t.setFramebuffer(n.framebuffer); + let r = !1; + e.length !== p.cameras.length && (p.cameras.length = 0, r = !0); + for (let t = 0; t < e.length; t++) { + const i = e[t], + o = n.getViewport(i), + s = d[t]; + s.matrix.fromArray(i.transform.matrix), s.projectionMatrix.fromArray(i.projectionMatrix), s.viewport.set(o.x, o.y, o.width, o.height), 0 === t && p.matrix.copy(s.matrix), !0 === r && p.cameras.push(s) + } + } + const r = i.inputSources; + for (let t = 0; t < l.length; t++) { + const e = l[t], + i = r[t]; + e.update(i, n, o) + } + b && b(e, n) + })), this.setAnimationLoop = function(t) { + b = t + }, this.dispose = function() {} + } + + function lr(t) { + function e(e, n) { + e.opacity.value = n.opacity, n.color && e.diffuse.value.copy(n.color), n.emissive && e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity), n.map && (e.map.value = n.map), n.alphaMap && (e.alphaMap.value = n.alphaMap), n.specularMap && (e.specularMap.value = n.specularMap); + const i = t.get(n).envMap; + if (i) { + e.envMap.value = i, e.flipEnvMap.value = i.isCubeTexture && i._needsFlipEnvMap ? -1 : 1, e.reflectivity.value = n.reflectivity, e.refractionRatio.value = n.refractionRatio; + const r = t.get(i).__maxMipLevel; + void 0 !== r && (e.maxMipLevel.value = r) + } + let r, o; + n.lightMap && (e.lightMap.value = n.lightMap, e.lightMapIntensity.value = n.lightMapIntensity), n.aoMap && (e.aoMap.value = n.aoMap, e.aoMapIntensity.value = n.aoMapIntensity), n.map ? r = n.map : n.specularMap ? r = n.specularMap : n.displacementMap ? r = n.displacementMap : n.normalMap ? r = n.normalMap : n.bumpMap ? r = n.bumpMap : n.roughnessMap ? r = n.roughnessMap : n.metalnessMap ? r = n.metalnessMap : n.alphaMap ? r = n.alphaMap : n.emissiveMap ? r = n.emissiveMap : n.clearcoatMap ? r = n.clearcoatMap : n.clearcoatNormalMap ? r = n.clearcoatNormalMap : n.clearcoatRoughnessMap && (r = n.clearcoatRoughnessMap), void 0 !== r && (r.isWebGLRenderTarget && (r = r.texture), !0 === r.matrixAutoUpdate && r.updateMatrix(), e.uvTransform.value.copy(r.matrix)), n.aoMap ? o = n.aoMap : n.lightMap && (o = n.lightMap), void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), !0 === o.matrixAutoUpdate && o.updateMatrix(), e.uv2Transform.value.copy(o.matrix)) + } + + function n(e, n) { + e.roughness.value = n.roughness, e.metalness.value = n.metalness, n.roughnessMap && (e.roughnessMap.value = n.roughnessMap), n.metalnessMap && (e.metalnessMap.value = n.metalnessMap), n.emissiveMap && (e.emissiveMap.value = n.emissiveMap), n.bumpMap && (e.bumpMap.value = n.bumpMap, e.bumpScale.value = n.bumpScale, 1 === n.side && (e.bumpScale.value *= -1)), n.normalMap && (e.normalMap.value = n.normalMap, e.normalScale.value.copy(n.normalScale), 1 === n.side && e.normalScale.value.negate()), n.displacementMap && (e.displacementMap.value = n.displacementMap, e.displacementScale.value = n.displacementScale, e.displacementBias.value = n.displacementBias); + t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity) + } + return { + refreshFogUniforms: function(t, e) { + t.fogColor.value.copy(e.color), e.isFog ? (t.fogNear.value = e.near, t.fogFar.value = e.far) : e.isFogExp2 && (t.fogDensity.value = e.density) + }, + refreshMaterialUniforms: function(t, i, r, o) { + i.isMeshBasicMaterial ? e(t, i) : i.isMeshLambertMaterial ? (e(t, i), function(t, e) { + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) + }(t, i)) : i.isMeshToonMaterial ? (e(t, i), function(t, e) { + e.gradientMap && (t.gradientMap.value = e.gradientMap); + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshPhongMaterial ? (e(t, i), function(t, e) { + t.specular.value.copy(e.specular), t.shininess.value = Math.max(e.shininess, 1e-4), e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshStandardMaterial ? (e(t, i), i.isMeshPhysicalMaterial ? function(t, e) { + n(t, e), t.reflectivity.value = e.reflectivity, t.clearcoat.value = e.clearcoat, t.clearcoatRoughness.value = e.clearcoatRoughness, e.sheen && t.sheen.value.copy(e.sheen); + e.clearcoatMap && (t.clearcoatMap.value = e.clearcoatMap); + e.clearcoatRoughnessMap && (t.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap); + e.clearcoatNormalMap && (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), t.clearcoatNormalMap.value = e.clearcoatNormalMap, 1 === e.side && t.clearcoatNormalScale.value.negate()); + t.transmission.value = e.transmission, e.transmissionMap && (t.transmissionMap.value = e.transmissionMap) + }(t, i) : n(t, i)) : i.isMeshMatcapMaterial ? (e(t, i), function(t, e) { + e.matcap && (t.matcap.value = e.matcap); + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshDepthMaterial ? (e(t, i), function(t, e) { + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshDistanceMaterial ? (e(t, i), function(t, e) { + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias); + t.referencePosition.value.copy(e.referencePosition), t.nearDistance.value = e.nearDistance, t.farDistance.value = e.farDistance + }(t, i)) : i.isMeshNormalMaterial ? (e(t, i), function(t, e) { + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isLineBasicMaterial ? (function(t, e) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity + }(t, i), i.isLineDashedMaterial && function(t, e) { + t.dashSize.value = e.dashSize, t.totalSize.value = e.dashSize + e.gapSize, t.scale.value = e.scale + }(t, i)) : i.isPointsMaterial ? function(t, e, n, i) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.size.value = e.size * n, t.scale.value = .5 * i, e.map && (t.map.value = e.map); + e.alphaMap && (t.alphaMap.value = e.alphaMap); + let r; + e.map ? r = e.map : e.alphaMap && (r = e.alphaMap); + void 0 !== r && (!0 === r.matrixAutoUpdate && r.updateMatrix(), t.uvTransform.value.copy(r.matrix)) + }(t, i, r, o) : i.isSpriteMaterial ? function(t, e) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.rotation.value = e.rotation, e.map && (t.map.value = e.map); + e.alphaMap && (t.alphaMap.value = e.alphaMap); + let n; + e.map ? n = e.map : e.alphaMap && (n = e.alphaMap); + void 0 !== n && (!0 === n.matrixAutoUpdate && n.updateMatrix(), t.uvTransform.value.copy(n.matrix)) + }(t, i) : i.isShadowMaterial ? (t.color.value.copy(i.color), t.opacity.value = i.opacity) : i.isShaderMaterial && (i.uniformsNeedUpdate = !1) + } + } + } + + function cr(t) { + const e = void 0 !== (t = t || {}).canvas ? t.canvas : function() { + const t = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + return t.style.display = "block", t + }(), + n = void 0 !== t.context ? t.context : null, + i = void 0 !== t.alpha && t.alpha, + r = void 0 === t.depth || t.depth, + o = void 0 === t.stencil || t.stencil, + s = void 0 !== t.antialias && t.antialias, + a = void 0 === t.premultipliedAlpha || t.premultipliedAlpha, + l = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer, + c = void 0 !== t.powerPreference ? t.powerPreference : "default", + h = void 0 !== t.failIfMajorPerformanceCaveat && t.failIfMajorPerformanceCaveat; + let u = null, + d = null; + const p = []; + this.domElement = e, this.debug = { + checkShaderErrors: !0 + }, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this.gammaFactor = 2, this.outputEncoding = 3e3, this.physicallyCorrectLights = !1, this.toneMapping = 0, this.toneMappingExposure = 1, this.maxMorphTargets = 8, this.maxMorphNormals = 4; + const f = this; + let m = !1, + y = null, + A = 0, + x = 0, + _ = null, + b = null, + w = -1, + E = null; + const S = new M, + L = new M; + let R = null, + C = e.width, + P = e.height, + D = 1, + I = null, + O = null; + const N = new M(0, 0, C, P), + B = new M(0, 0, C, P); + let F = !1; + const z = new en; + let U = !1, + H = !1; + const G = new et, + V = new T, + k = { + background: null, + fog: null, + environment: null, + overrideMaterial: null, + isScene: !0 + }; + + function W() { + return null === _ ? D : 1 + } + let j, X, q, Y, Q, Z, J, K, $, tt, nt, it, rt, ot, st, at, lt, ct, ht, ut, dt, pt = n; + + function ft(t, n) { + for (let i = 0; i < t.length; i++) { + const r = t[i], + o = e.getContext(r, n); + if (null !== o) return o + } + return null + } + try { + const t = { + alpha: i, + depth: r, + stencil: o, + antialias: s, + premultipliedAlpha: a, + preserveDrawingBuffer: l, + powerPreference: c, + failIfMajorPerformanceCaveat: h + }; + if (e.addEventListener("webglcontextlost", yt, !1), e.addEventListener("webglcontextrestored", At, !1), null === pt) { + const e = ["webgl2", "webgl", "experimental-webgl"]; + if (!0 === f.isWebGL1Renderer && e.shift(), pt = ft(e, t), null === pt) throw ft(e) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.") + } + void 0 === pt.getShaderPrecisionFormat && (pt.getShaderPrecisionFormat = function() { + return { + rangeMin: 1, + rangeMax: 1, + precision: 1 + } + }) + } catch (t) { + throw console.error("THREE.WebGLRenderer: " + t.message), t + } + + function mt() { + j = new mn(pt), X = new dn(pt, j, t), j.init(X), ut = new ir(pt, j, X), q = new er(pt, j, X), q.scissor(L.copy(B).multiplyScalar(D).floor()), q.viewport(S.copy(N).multiplyScalar(D).floor()), Y = new yn(pt), Q = new Gi, Z = new nr(pt, j, q, Q, X, ut, Y), J = new fn(f), K = new rn(pt, X), dt = new hn(pt, j, K, X), $ = new gn(pt, K, Y, dt), tt = new bn(pt, $, K, Y), lt = new _n(pt), st = new pn(Q), nt = new Hi(f, J, j, X, dt, st), it = new lr(Q), rt = new ji(Q), ot = new Ji(j, X), at = new cn(f, J, q, tt, a), ct = new un(pt, j, Y, X), ht = new vn(pt, j, Y, X), Y.programs = nt.programs, f.capabilities = X, f.extensions = j, f.properties = Q, f.renderLists = rt, f.state = q, f.info = Y + } + mt(); + const gt = new ar(f, pt); + this.xr = gt; + const vt = new tr(f, tt, X.maxTextureSize); + + function yt(t) { + t.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), m = !0 + } + + function At() { + console.log("THREE.WebGLRenderer: Context Restored."), m = !1, mt() + } + + function xt(t) { + const e = t.target; + e.removeEventListener("dispose", xt), + function(t) { + _t(t), Q.remove(t) + }(e) + } + + function _t(t) { + const e = Q.get(t).program; + void 0 !== e && nt.releaseProgram(e) + } + this.shadowMap = vt, this.getContext = function() { + return pt + }, this.getContextAttributes = function() { + return pt.getContextAttributes() + }, this.forceContextLoss = function() { + const t = j.get("WEBGL_lose_context"); + t && t.loseContext() + }, this.forceContextRestore = function() { + const t = j.get("WEBGL_lose_context"); + t && t.restoreContext() + }, this.getPixelRatio = function() { + return D + }, this.setPixelRatio = function(t) { + void 0 !== t && (D = t, this.setSize(C, P, !1)) + }, this.getSize = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), t = new v), t.set(C, P) + }, this.setSize = function(t, n, i) { + gt.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (C = t, P = n, e.width = Math.floor(t * D), e.height = Math.floor(n * D), !1 !== i && (e.style.width = t + "px", e.style.height = n + "px"), this.setViewport(0, 0, t, n)) + }, this.getDrawingBufferSize = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), t = new v), t.set(C * D, P * D).floor() + }, this.setDrawingBufferSize = function(t, n, i) { + C = t, P = n, D = i, e.width = Math.floor(t * i), e.height = Math.floor(n * i), this.setViewport(0, 0, t, n) + }, this.getCurrentViewport = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), t = new M), t.copy(S) + }, this.getViewport = function(t) { + return t.copy(N) + }, this.setViewport = function(t, e, n, i) { + t.isVector4 ? N.set(t.x, t.y, t.z, t.w) : N.set(t, e, n, i), q.viewport(S.copy(N).multiplyScalar(D).floor()) + }, this.getScissor = function(t) { + return t.copy(B) + }, this.setScissor = function(t, e, n, i) { + t.isVector4 ? B.set(t.x, t.y, t.z, t.w) : B.set(t, e, n, i), q.scissor(L.copy(B).multiplyScalar(D).floor()) + }, this.getScissorTest = function() { + return F + }, this.setScissorTest = function(t) { + q.setScissorTest(F = t) + }, this.setOpaqueSort = function(t) { + I = t + }, this.setTransparentSort = function(t) { + O = t + }, this.getClearColor = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getClearColor() now requires a Color as an argument"), t = new Yt), t.copy(at.getClearColor()) + }, this.setClearColor = function() { + at.setClearColor.apply(at, arguments) + }, this.getClearAlpha = function() { + return at.getClearAlpha() + }, this.setClearAlpha = function() { + at.setClearAlpha.apply(at, arguments) + }, this.clear = function(t, e, n) { + let i = 0; + (void 0 === t || t) && (i |= 16384), (void 0 === e || e) && (i |= 256), (void 0 === n || n) && (i |= 1024), pt.clear(i) + }, this.clearColor = function() { + this.clear(!0, !1, !1) + }, this.clearDepth = function() { + this.clear(!1, !0, !1) + }, this.clearStencil = function() { + this.clear(!1, !1, !0) + }, this.dispose = function() { + e.removeEventListener("webglcontextlost", yt, !1), e.removeEventListener("webglcontextrestored", At, !1), rt.dispose(), ot.dispose(), Q.dispose(), J.dispose(), tt.dispose(), dt.dispose(), gt.dispose(), wt.stop() + }, this.renderBufferImmediate = function(t, e) { + dt.initAttributes(); + const n = Q.get(t); + t.hasPositions && !n.position && (n.position = pt.createBuffer()), t.hasNormals && !n.normal && (n.normal = pt.createBuffer()), t.hasUvs && !n.uv && (n.uv = pt.createBuffer()), t.hasColors && !n.color && (n.color = pt.createBuffer()); + const i = e.getAttributes(); + t.hasPositions && (pt.bindBuffer(34962, n.position), pt.bufferData(34962, t.positionArray, 35048), dt.enableAttribute(i.position), pt.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), t.hasNormals && (pt.bindBuffer(34962, n.normal), pt.bufferData(34962, t.normalArray, 35048), dt.enableAttribute(i.normal), pt.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), t.hasUvs && (pt.bindBuffer(34962, n.uv), pt.bufferData(34962, t.uvArray, 35048), dt.enableAttribute(i.uv), pt.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), t.hasColors && (pt.bindBuffer(34962, n.color), pt.bufferData(34962, t.colorArray, 35048), dt.enableAttribute(i.color), pt.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), dt.disableUnusedAttributes(), pt.drawArrays(4, 0, t.count), t.count = 0 + }, this.renderBufferDirect = function(t, e, n, i, r, o) { + null === e && (e = k); + const s = r.isMesh && r.matrixWorld.determinant() < 0, + a = Lt(t, e, i, r); + q.setMaterial(i, s); + let l = n.index; + const c = n.attributes.position; + if (null === l) { + if (void 0 === c || 0 === c.count) return + } else if (0 === l.count) return; + let h, u = 1; + !0 === i.wireframe && (l = $.getWireframeAttribute(n), u = 2), (i.morphTargets || i.morphNormals) && lt.update(r, n, i, a), dt.setup(r, i, a, n, l); + let d = ct; + null !== l && (h = K.get(l), d = ht, d.setIndex(h)); + const p = null !== l ? l.count : c.count, + f = n.drawRange.start * u, + m = n.drawRange.count * u, + g = null !== o ? o.start * u : 0, + v = null !== o ? o.count * u : 1 / 0, + y = Math.max(f, g), + A = Math.min(p, f + m, g + v) - 1, + x = Math.max(0, A - y + 1); + if (0 !== x) { + if (r.isMesh) !0 === i.wireframe ? (q.setLineWidth(i.wireframeLinewidth * W()), d.setMode(1)) : d.setMode(4); + else if (r.isLine) { + let t = i.linewidth; + void 0 === t && (t = 1), q.setLineWidth(t * W()), r.isLineSegments ? d.setMode(1) : r.isLineLoop ? d.setMode(2) : d.setMode(3) + } else r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4); + if (r.isInstancedMesh) d.renderInstances(y, x, r.count); + else if (n.isInstancedBufferGeometry) { + const t = Math.min(n.instanceCount, n._maxInstanceCount); + d.renderInstances(y, x, t) + } else d.render(y, x) + } + }, this.compile = function(t, e) { + d = ot.get(t), d.init(), t.traverseVisible((function(t) { + t.isLight && t.layers.test(e.layers) && (d.pushLight(t), t.castShadow && d.pushShadow(t)) + })), d.setupLights(); + const n = new WeakMap; + t.traverse((function(e) { + const i = e.material; + if (i) + if (Array.isArray(i)) + for (let r = 0; r < i.length; r++) { + const o = i[r]; + !1 === n.has(o) && (Tt(o, t, e), n.set(o)) + } else !1 === n.has(i) && (Tt(i, t, e), n.set(i)) + })) + }; + let bt = null; + const wt = new nn; + + function Mt(t, e, n, i) { + if (!1 === t.visible) return; + if (t.layers.test(e.layers)) + if (t.isGroup) n = t.renderOrder; + else if (t.isLOD) !0 === t.autoUpdate && t.update(e); + else if (t.isLight) d.pushLight(t), t.castShadow && d.pushShadow(t); + else if (t.isSprite) { + if (!t.frustumCulled || z.intersectsSprite(t)) { + i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); + const e = tt.update(t), + r = t.material; + r.visible && u.push(t, e, r, n, V.z, null) + } + } else if (t.isImmediateRenderObject) i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G), u.push(t, null, t.material, n, V.z, null); + else if ((t.isMesh || t.isLine || t.isPoints) && (t.isSkinnedMesh && t.skeleton.frame !== Y.render.frame && (t.skeleton.update(), t.skeleton.frame = Y.render.frame), !t.frustumCulled || z.intersectsObject(t))) { + i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); + const e = tt.update(t), + r = t.material; + if (Array.isArray(r)) { + const i = e.groups; + for (let o = 0, s = i.length; o < s; o++) { + const s = i[o], + a = r[s.materialIndex]; + a && a.visible && u.push(t, e, a, n, V.z, s) + } + } else r.visible && u.push(t, e, r, n, V.z, null) + } + const r = t.children; + for (let t = 0, o = r.length; t < o; t++) Mt(r[t], e, n, i) + } + + function Et(t, e, n) { + const i = !0 === e.isScene ? e.overrideMaterial : null; + for (let r = 0, o = t.length; r < o; r++) { + const o = t[r], + s = o.object, + a = o.geometry, + l = null === i ? o.material : i, + c = o.group; + if (n.isArrayCamera) { + const t = n.cameras; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + s.layers.test(i.layers) && (q.viewport(S.copy(i.viewport)), d.setupLightsView(i), St(s, e, i, a, l, c)) + } + } else St(s, e, n, a, l, c) + } + } + + function St(t, e, n, i, r, o) { + if (t.onBeforeRender(f, e, n, i, r, o), t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), t.normalMatrix.getNormalMatrix(t.modelViewMatrix), t.isImmediateRenderObject) { + const i = Lt(n, e, r, t); + q.setMaterial(r), dt.reset(), + function(t, e) { + t.render((function(t) { + f.renderBufferImmediate(t, e) + })) + }(t, i) + } else f.renderBufferDirect(n, e, i, r, t, o); + t.onAfterRender(f, e, n, i, r, o) + } + + function Tt(t, e, n) { + !0 !== e.isScene && (e = k); + const i = Q.get(t), + r = d.state.lights, + o = d.state.shadowsArray, + s = r.state.version, + a = nt.getParameters(t, r.state, o, e, n), + l = nt.getProgramCacheKey(a); + let c = i.program, + h = !0; + if (i.environment = t.isMeshStandardMaterial ? e.environment : null, i.fog = e.fog, i.envMap = J.get(t.envMap || i.environment), void 0 === c) t.addEventListener("dispose", xt); + else if (c.cacheKey !== l) _t(t); + else if (i.lightsStateVersion !== s) h = !1; + else { + if (void 0 !== a.shaderID) return; + h = !1 + } + h && (a.uniforms = nt.getUniforms(t), t.onBeforeCompile(a, f), c = nt.acquireProgram(a, l), i.program = c, i.uniforms = a.uniforms, i.outputEncoding = a.outputEncoding); + const u = i.uniforms; + (t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping || (i.numClippingPlanes = st.numPlanes, i.numIntersection = st.numIntersection, u.clippingPlanes = st.uniform), i.needsLights = function(t) { + return t.isMeshLambertMaterial || t.isMeshToonMaterial || t.isMeshPhongMaterial || t.isMeshStandardMaterial || t.isShadowMaterial || t.isShaderMaterial && !0 === t.lights + }(t), i.lightsStateVersion = s, i.needsLights && (u.ambientLightColor.value = r.state.ambient, u.lightProbe.value = r.state.probe, u.directionalLights.value = r.state.directional, u.directionalLightShadows.value = r.state.directionalShadow, u.spotLights.value = r.state.spot, u.spotLightShadows.value = r.state.spotShadow, u.rectAreaLights.value = r.state.rectArea, u.ltc_1.value = r.state.rectAreaLTC1, u.ltc_2.value = r.state.rectAreaLTC2, u.pointLights.value = r.state.point, u.pointLightShadows.value = r.state.pointShadow, u.hemisphereLights.value = r.state.hemi, u.directionalShadowMap.value = r.state.directionalShadowMap, u.directionalShadowMatrix.value = r.state.directionalShadowMatrix, u.spotShadowMap.value = r.state.spotShadowMap, u.spotShadowMatrix.value = r.state.spotShadowMatrix, u.pointShadowMap.value = r.state.pointShadowMap, u.pointShadowMatrix.value = r.state.pointShadowMatrix); + const p = i.program.getUniforms(), + m = Ai.seqWithValue(p.seq, u); + i.uniformsList = m + } + + function Lt(t, e, n, i) { + !0 !== e.isScene && (e = k), Z.resetTextureUnits(); + const r = e.fog, + o = n.isMeshStandardMaterial ? e.environment : null, + s = null === _ ? f.outputEncoding : _.texture.encoding, + a = J.get(n.envMap || o), + l = Q.get(n), + c = d.state.lights; + if (!0 === U && (!0 === H || t !== E)) { + const e = t === E && n.id === w; + st.setState(n, t, e) + } + n.version === l.__version ? n.fog && l.fog !== r || l.environment !== o || l.needsLights && l.lightsStateVersion !== c.state.version ? Tt(n, e, i) : void 0 === l.numClippingPlanes || l.numClippingPlanes === st.numPlanes && l.numIntersection === st.numIntersection ? (l.outputEncoding !== s || l.envMap !== a) && Tt(n, e, i) : Tt(n, e, i) : (Tt(n, e, i), l.__version = n.version); + let h = !1, + u = !1, + p = !1; + const m = l.program, + v = m.getUniforms(), + y = l.uniforms; + if (q.useProgram(m.program) && (h = !0, u = !0, p = !0), n.id !== w && (w = n.id, u = !0), h || E !== t) { + if (v.setValue(pt, "projectionMatrix", t.projectionMatrix), X.logarithmicDepthBuffer && v.setValue(pt, "logDepthBufFC", 2 / (Math.log(t.far + 1) / Math.LN2)), E !== t && (E = t, u = !0, p = !0), n.isShaderMaterial || n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshStandardMaterial || n.envMap) { + const e = v.map.cameraPosition; + void 0 !== e && e.setValue(pt, V.setFromMatrixPosition(t.matrixWorld)) + }(n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial) && v.setValue(pt, "isOrthographic", !0 === t.isOrthographicCamera), (n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial || n.isShadowMaterial || n.skinning) && v.setValue(pt, "viewMatrix", t.matrixWorldInverse) + } + if (n.skinning) { + v.setOptional(pt, i, "bindMatrix"), v.setOptional(pt, i, "bindMatrixInverse"); + const t = i.skeleton; + if (t) { + const e = t.bones; + if (X.floatVertexTextures) { + if (null === t.boneTexture) { + let n = Math.sqrt(4 * e.length); + n = g.ceilPowerOfTwo(n), n = Math.max(n, 4); + const i = new Float32Array(n * n * 4); + i.set(t.boneMatrices); + const r = new Ke(i, n, n, 1023, 1015); + t.boneMatrices = i, t.boneTexture = r, t.boneTextureSize = n + } + v.setValue(pt, "boneTexture", t.boneTexture, Z), v.setValue(pt, "boneTextureSize", t.boneTextureSize) + } else v.setOptional(pt, t, "boneMatrices") + } + } + var A, x; + return (u || l.receiveShadow !== i.receiveShadow) && (l.receiveShadow = i.receiveShadow, v.setValue(pt, "receiveShadow", i.receiveShadow)), u && (v.setValue(pt, "toneMappingExposure", f.toneMappingExposure), l.needsLights && (x = p, (A = y).ambientLightColor.needsUpdate = x, A.lightProbe.needsUpdate = x, A.directionalLights.needsUpdate = x, A.directionalLightShadows.needsUpdate = x, A.pointLights.needsUpdate = x, A.pointLightShadows.needsUpdate = x, A.spotLights.needsUpdate = x, A.spotLightShadows.needsUpdate = x, A.rectAreaLights.needsUpdate = x, A.hemisphereLights.needsUpdate = x), r && n.fog && it.refreshFogUniforms(y, r), it.refreshMaterialUniforms(y, n, D, P), Ai.upload(pt, l.uniformsList, y, Z)), n.isShaderMaterial && !0 === n.uniformsNeedUpdate && (Ai.upload(pt, l.uniformsList, y, Z), n.uniformsNeedUpdate = !1), n.isSpriteMaterial && v.setValue(pt, "center", i.center), v.setValue(pt, "modelViewMatrix", i.modelViewMatrix), v.setValue(pt, "normalMatrix", i.normalMatrix), v.setValue(pt, "modelMatrix", i.matrixWorld), m + } + wt.setAnimationLoop((function(t) { + gt.isPresenting || bt && bt(t) + })), "undefined" != typeof window && wt.setContext(window), this.setAnimationLoop = function(t) { + bt = t, gt.setAnimationLoop(t), null === t ? wt.stop() : wt.start() + }, this.render = function(t, e) { + let n, i; + if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), n = arguments[2]), void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), i = arguments[3]), void 0 !== e && !0 !== e.isCamera) return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); + if (!0 === m) return; + dt.resetDefaultState(), w = -1, E = null, !0 === t.autoUpdate && t.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), !0 === gt.enabled && !0 === gt.isPresenting && (e = gt.getCamera(e)), !0 === t.isScene && t.onBeforeRender(f, t, e, n || _), d = ot.get(t, p.length), d.init(), p.push(d), G.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), z.setFromProjectionMatrix(G), H = this.localClippingEnabled, U = st.init(this.clippingPlanes, H, e), u = rt.get(t, e), u.init(), Mt(t, e, 0, f.sortObjects), u.finish(), !0 === f.sortObjects && u.sort(I, O), !0 === U && st.beginShadows(); + const r = d.state.shadowsArray; + vt.render(r, t, e), d.setupLights(), d.setupLightsView(e), !0 === U && st.endShadows(), !0 === this.info.autoReset && this.info.reset(), void 0 !== n && this.setRenderTarget(n), at.render(u, t, e, i); + const o = u.opaque, + s = u.transparent; + o.length > 0 && Et(o, t, e), s.length > 0 && Et(s, t, e), !0 === t.isScene && t.onAfterRender(f, t, e), null !== _ && (Z.updateRenderTargetMipmap(_), Z.updateMultisampleRenderTarget(_)), q.buffers.depth.setTest(!0), q.buffers.depth.setMask(!0), q.buffers.color.setMask(!0), q.setPolygonOffset(!1), p.pop(), d = p.length > 0 ? p[p.length - 1] : null, u = null + }, this.setFramebuffer = function(t) { + y !== t && null === _ && pt.bindFramebuffer(36160, t), y = t + }, this.getActiveCubeFace = function() { + return A + }, this.getActiveMipmapLevel = function() { + return x + }, this.getRenderList = function() { + return u + }, this.setRenderList = function(t) { + u = t + }, this.getRenderTarget = function() { + return _ + }, this.setRenderTarget = function(t, e = 0, n = 0) { + _ = t, A = e, x = n, t && void 0 === Q.get(t).__webglFramebuffer && Z.setupRenderTarget(t); + let i = y, + r = !1; + if (t) { + const n = Q.get(t).__webglFramebuffer; + t.isWebGLCubeRenderTarget ? (i = n[e], r = !0) : i = t.isWebGLMultisampleRenderTarget ? Q.get(t).__webglMultisampledFramebuffer : n, S.copy(t.viewport), L.copy(t.scissor), R = t.scissorTest + } else S.copy(N).multiplyScalar(D).floor(), L.copy(B).multiplyScalar(D).floor(), R = F; + if (b !== i && (pt.bindFramebuffer(36160, i), b = i), q.viewport(S), q.scissor(L), q.setScissorTest(R), r) { + const i = Q.get(t.texture); + pt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n) + } + }, this.readRenderTargetPixels = function(t, e, n, i, r, o, s) { + if (!t || !t.isWebGLRenderTarget) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + let a = Q.get(t).__webglFramebuffer; + if (t.isWebGLCubeRenderTarget && void 0 !== s && (a = a[s]), a) { + let s = !1; + a !== b && (pt.bindFramebuffer(36160, a), s = !0); + try { + const a = t.texture, + l = a.format, + c = a.type; + if (1023 !== l && ut.convert(l) !== pt.getParameter(35739)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + const h = 1016 === c && (j.has("EXT_color_buffer_half_float") || X.isWebGL2 && j.has("EXT_color_buffer_float")); + if (!(1009 === c || ut.convert(c) === pt.getParameter(35738) || 1015 === c && (X.isWebGL2 || j.has("OES_texture_float") || j.has("WEBGL_color_buffer_float")) || h)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + 36053 === pt.checkFramebufferStatus(36160) ? e >= 0 && e <= t.width - i && n >= 0 && n <= t.height - r && pt.readPixels(e, n, i, r, ut.convert(l), ut.convert(c), o) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.") + } finally { + s && pt.bindFramebuffer(36160, b) + } + } + }, this.copyFramebufferToTexture = function(t, e, n = 0) { + const i = Math.pow(2, -n), + r = Math.floor(e.image.width * i), + o = Math.floor(e.image.height * i), + s = ut.convert(e.format); + Z.setTexture2D(e, 0), pt.copyTexImage2D(3553, n, s, t.x, t.y, r, o, 0), q.unbindTexture() + }, this.copyTextureToTexture = function(t, e, n, i = 0) { + const r = e.image.width, + o = e.image.height, + s = ut.convert(n.format), + a = ut.convert(n.type); + Z.setTexture2D(n, 0), pt.pixelStorei(37440, n.flipY), pt.pixelStorei(37441, n.premultiplyAlpha), pt.pixelStorei(3317, n.unpackAlignment), e.isDataTexture ? pt.texSubImage2D(3553, i, t.x, t.y, r, o, s, a, e.image.data) : e.isCompressedTexture ? pt.compressedTexSubImage2D(3553, i, t.x, t.y, e.mipmaps[0].width, e.mipmaps[0].height, s, e.mipmaps[0].data) : pt.texSubImage2D(3553, i, t.x, t.y, s, a, e.image), 0 === i && n.generateMipmaps && pt.generateMipmap(3553), q.unbindTexture() + }, this.initTexture = function(t) { + Z.setTexture2D(t, 0), q.unbindTexture() + }, this.resetState = function() { + q.reset(), dt.reset() + }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + + function hr(t) { + cr.call(this, t) + } + rr.prototype = Object.assign(Object.create(Ye.prototype), { + constructor: rr, + isArrayCamera: !0 + }), or.prototype = Object.assign(Object.create(St.prototype), { + constructor: or, + isGroup: !0 + }), Object.assign(sr.prototype, { + constructor: sr, + getHandSpace: function() { + return null === this._hand && (this._hand = new or, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = { + pinching: !1 + }), this._hand + }, + getTargetRaySpace: function() { + return null === this._targetRay && (this._targetRay = new or, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1), this._targetRay + }, + getGripSpace: function() { + return null === this._grip && (this._grip = new or, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1), this._grip + }, + dispatchEvent: function(t) { + return null !== this._targetRay && this._targetRay.dispatchEvent(t), null !== this._grip && this._grip.dispatchEvent(t), null !== this._hand && this._hand.dispatchEvent(t), this + }, + disconnect: function(t) { + return this.dispatchEvent({ + type: "disconnected", + data: t + }), null !== this._targetRay && (this._targetRay.visible = !1), null !== this._grip && (this._grip.visible = !1), null !== this._hand && (this._hand.visible = !1), this + }, + update: function(t, e, n) { + let i = null, + r = null, + o = null; + const s = this._targetRay, + a = this._grip, + l = this._hand; + if (t && "visible-blurred" !== e.session.visibilityState) + if (l && t.hand) { + o = !0; + for (const i of t.hand.values()) { + const t = e.getJointPose(i, n); + if (void 0 === l.joints[i.jointName]) { + const t = new or; + t.matrixAutoUpdate = !1, t.visible = !1, l.joints[i.jointName] = t, l.add(t) + } + const r = l.joints[i.jointName]; + null !== t && (r.matrix.fromArray(t.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.jointRadius = t.radius), r.visible = null !== t + } + const i = l.joints["index-finger-tip"], + r = l.joints["thumb-tip"], + s = i.position.distanceTo(r.position), + a = .02, + c = .005; + l.inputState.pinching && s > a + c ? (l.inputState.pinching = !1, this.dispatchEvent({ + type: "pinchend", + handedness: t.handedness, + target: this + })) : !l.inputState.pinching && s <= a - c && (l.inputState.pinching = !0, this.dispatchEvent({ + type: "pinchstart", + handedness: t.handedness, + target: this + })) + } else null !== s && (i = e.getPose(t.targetRaySpace, n), null !== i && (s.matrix.fromArray(i.transform.matrix), s.matrix.decompose(s.position, s.rotation, s.scale))), null !== a && t.gripSpace && (r = e.getPose(t.gripSpace, n), null !== r && (a.matrix.fromArray(r.transform.matrix), a.matrix.decompose(a.position, a.rotation, a.scale))); + return null !== s && (s.visible = null !== i), null !== a && (a.visible = null !== r), null !== l && (l.visible = null !== o), this + } + }), Object.assign(ar.prototype, p.prototype), hr.prototype = Object.assign(Object.create(cr.prototype), { + constructor: hr, + isWebGL1Renderer: !0 + }); + class ur extends St { + constructor() { + super(), Object.defineProperty(this, "isScene", { + value: !0 + }), this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.overrideMaterial = null, this.autoUpdate = !0, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + copy(t, e) { + return super.copy(t, e), null !== t.background && (this.background = t.background.clone()), null !== t.environment && (this.environment = t.environment.clone()), null !== t.fog && (this.fog = t.fog.clone()), null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()), this.autoUpdate = t.autoUpdate, this.matrixAutoUpdate = t.matrixAutoUpdate, this + } + toJSON(t) { + const e = super.toJSON(t); + return null !== this.background && (e.object.background = this.background.toJSON(t)), null !== this.environment && (e.object.environment = this.environment.toJSON(t)), null !== this.fog && (e.object.fog = this.fog.toJSON()), e + } + } + + function dr(t, e) { + this.array = t, this.stride = e, this.count = void 0 !== t ? t.length / e : 0, this.usage = 35044, this.updateRange = { + offset: 0, + count: -1 + }, this.version = 0, this.uuid = g.generateUUID() + } + Object.defineProperty(dr.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Object.assign(dr.prototype, { + isInterleavedBuffer: !0, + onUploadCallback: function() {}, + setUsage: function(t) { + return this.usage = t, this + }, + copy: function(t) { + return this.array = new t.array.constructor(t.array), this.count = t.count, this.stride = t.stride, this.usage = t.usage, this + }, + copyAt: function(t, e, n) { + t *= this.stride, n *= e.stride; + for (let i = 0, r = this.stride; i < r; i++) this.array[t + i] = e.array[n + i]; + return this + }, + set: function(t, e = 0) { + return this.array.set(t, e), this + }, + clone: function(t) { + void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer); + const e = new dr(new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]), this.stride); + return e.setUsage(this.usage), e + }, + onUpload: function(t) { + return this.onUploadCallback = t, this + }, + toJSON: function(t) { + return void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer))), { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + } + } + }); + const pr = new T; + + function fr(t, e, n, i) { + this.name = "", this.data = t, this.itemSize = e, this.offset = n, this.normalized = !0 === i + } + + function mr(t) { + Jt.call(this), this.type = "SpriteMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.rotation = 0, this.sizeAttenuation = !0, this.transparent = !0, this.setValues(t) + } + let gr; + Object.defineProperties(fr.prototype, { + count: { + get: function() { + return this.data.count + } + }, + array: { + get: function() { + return this.data.array + } + }, + needsUpdate: { + set: function(t) { + this.data.needsUpdate = t + } + } + }), Object.assign(fr.prototype, { + isInterleavedBufferAttribute: !0, + applyMatrix4: function(t) { + for (let e = 0, n = this.data.count; e < n; e++) pr.x = this.getX(e), pr.y = this.getY(e), pr.z = this.getZ(e), pr.applyMatrix4(t), this.setXYZ(e, pr.x, pr.y, pr.z); + return this + }, + setX: function(t, e) { + return this.data.array[t * this.data.stride + this.offset] = e, this + }, + setY: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 1] = e, this + }, + setZ: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 2] = e, this + }, + setW: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 3] = e, this + }, + getX: function(t) { + return this.data.array[t * this.data.stride + this.offset] + }, + getY: function(t) { + return this.data.array[t * this.data.stride + this.offset + 1] + }, + getZ: function(t) { + return this.data.array[t * this.data.stride + this.offset + 2] + }, + getW: function(t) { + return this.data.array[t * this.data.stride + this.offset + 3] + }, + setXY: function(t, e, n) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this + }, + setXYZ: function(t, e, n, i) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this + }, + setXYZW: function(t, e, n, i, r) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this.data.array[t + 3] = r, this + }, + clone: function(t) { + if (void 0 === t) { + console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data."); + const t = []; + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset; + for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) + } + return new ee(new this.array.constructor(t), this.itemSize, this.normalized) + } + return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)), new fr(t.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized) + }, + toJSON: function(t) { + if (void 0 === t) { + console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data."); + const t = []; + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset; + for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: t, + normalized: this.normalized + } + } + return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), { + isInterleavedBufferAttribute: !0, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + } + } + }), mr.prototype = Object.create(Jt.prototype), mr.prototype.constructor = mr, mr.prototype.isSpriteMaterial = !0, mr.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.rotation = t.rotation, this.sizeAttenuation = t.sizeAttenuation, this + }; + const vr = new T, + yr = new T, + Ar = new T, + xr = new v, + _r = new v, + br = new et, + wr = new T, + Mr = new T, + Er = new T, + Sr = new v, + Tr = new v, + Lr = new v; + + function Rr(t) { + if (St.call(this), this.type = "Sprite", void 0 === gr) { + gr = new be; + const t = new dr(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5); + gr.setIndex([0, 1, 2, 0, 2, 3]), gr.setAttribute("position", new fr(t, 3, 0, !1)), gr.setAttribute("uv", new fr(t, 2, 3, !1)) + } + this.geometry = gr, this.material = void 0 !== t ? t : new mr, this.center = new v(.5, .5) + } + + function Cr(t, e, n, i, r, o) { + xr.subVectors(t, n).addScalar(.5).multiply(i), void 0 !== r ? (_r.x = o * xr.x - r * xr.y, _r.y = r * xr.x + o * xr.y) : _r.copy(xr), t.copy(e), t.x += _r.x, t.y += _r.y, t.applyMatrix4(br) + } + Rr.prototype = Object.assign(Object.create(St.prototype), { + constructor: Rr, + isSprite: !0, + raycast: function(t, e) { + null === t.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), yr.setFromMatrixScale(this.matrixWorld), br.copy(t.camera.matrixWorld), this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld), Ar.setFromMatrixPosition(this.modelViewMatrix), t.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && yr.multiplyScalar(-Ar.z); + const n = this.material.rotation; + let i, r; + 0 !== n && (r = Math.cos(n), i = Math.sin(n)); + const o = this.center; + Cr(wr.set(-.5, -.5, 0), Ar, o, yr, i, r), Cr(Mr.set(.5, -.5, 0), Ar, o, yr, i, r), Cr(Er.set(.5, .5, 0), Ar, o, yr, i, r), Sr.set(0, 0), Tr.set(1, 0), Lr.set(1, 1); + let s = t.ray.intersectTriangle(wr, Mr, Er, !1, vr); + if (null === s && (Cr(Mr.set(-.5, .5, 0), Ar, o, yr, i, r), Tr.set(0, 1), s = t.ray.intersectTriangle(wr, Er, Mr, !1, vr), null === s)) return; + const a = t.ray.origin.distanceTo(vr); + a < t.near || a > t.far || e.push({ + distance: a, + point: vr.clone(), + uv: Gt.getUV(vr, wr, Mr, Er, Sr, Tr, Lr, new v), + face: null, + object: this + }) + }, + copy: function(t) { + return St.prototype.copy.call(this, t), void 0 !== t.center && this.center.copy(t.center), this.material = t.material, this + } + }); + const Pr = new T, + Dr = new T; + + function Ir() { + St.call(this), this._currentLevel = 0, this.type = "LOD", Object.defineProperties(this, { + levels: { + enumerable: !0, + value: [] + } + }), this.autoUpdate = !0 + } + Ir.prototype = Object.assign(Object.create(St.prototype), { + constructor: Ir, + isLOD: !0, + copy: function(t) { + St.prototype.copy.call(this, t, !1); + const e = t.levels; + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + this.addLevel(n.object.clone(), n.distance) + } + return this.autoUpdate = t.autoUpdate, this + }, + addLevel: function(t, e = 0) { + e = Math.abs(e); + const n = this.levels; + let i; + for (i = 0; i < n.length && !(e < n[i].distance); i++); + return n.splice(i, 0, { + distance: e, + object: t + }), this.add(t), this + }, + getCurrentLevel: function() { + return this._currentLevel + }, + getObjectForDistance: function(t) { + const e = this.levels; + if (e.length > 0) { + let n, i; + for (n = 1, i = e.length; n < i && !(t < e[n].distance); n++); + return e[n - 1].object + } + return null + }, + raycast: function(t, e) { + if (this.levels.length > 0) { + Pr.setFromMatrixPosition(this.matrixWorld); + const n = t.ray.origin.distanceTo(Pr); + this.getObjectForDistance(n).raycast(t, e) + } + }, + update: function(t) { + const e = this.levels; + if (e.length > 1) { + Pr.setFromMatrixPosition(t.matrixWorld), Dr.setFromMatrixPosition(this.matrixWorld); + const n = Pr.distanceTo(Dr) / t.zoom; + let i, r; + for (e[0].object.visible = !0, i = 1, r = e.length; i < r && n >= e[i].distance; i++) e[i - 1].object.visible = !1, e[i].object.visible = !0; + for (this._currentLevel = i - 1; i < r; i++) e[i].object.visible = !1 + } + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + !1 === this.autoUpdate && (e.object.autoUpdate = !1), e.object.levels = []; + const n = this.levels; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + e.object.levels.push({ + object: i.object.uuid, + distance: i.distance + }) + } + return e + } + }); + const Or = new T, + Nr = new M, + Br = new M, + Fr = new T, + zr = new et; + + function Ur(t, e) { + t && t.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), He.call(this, t, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new et, this.bindMatrixInverse = new et + } + + function Hr() { + St.call(this), this.type = "Bone" + } + Ur.prototype = Object.assign(Object.create(He.prototype), { + constructor: Ur, + isSkinnedMesh: !0, + copy: function(t) { + return He.prototype.copy.call(this, t), this.bindMode = t.bindMode, this.bindMatrix.copy(t.bindMatrix), this.bindMatrixInverse.copy(t.bindMatrixInverse), this.skeleton = t.skeleton, this + }, + bind: function(t, e) { + this.skeleton = t, void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.copy(e).invert() + }, + pose: function() { + this.skeleton.pose() + }, + normalizeSkinWeights: function() { + const t = new M, + e = this.geometry.attributes.skinWeight; + for (let n = 0, i = e.count; n < i; n++) { + t.x = e.getX(n), t.y = e.getY(n), t.z = e.getZ(n), t.w = e.getW(n); + const i = 1 / t.manhattanLength(); + i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0), e.setXYZW(n, t.x, t.y, t.z, t.w) + } + }, + updateMatrixWorld: function(t) { + He.prototype.updateMatrixWorld.call(this, t), "attached" === this.bindMode ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + }, + boneTransform: function(t, e) { + const n = this.skeleton, + i = this.geometry; + Nr.fromBufferAttribute(i.attributes.skinIndex, t), Br.fromBufferAttribute(i.attributes.skinWeight, t), Or.fromBufferAttribute(i.attributes.position, t).applyMatrix4(this.bindMatrix), e.set(0, 0, 0); + for (let t = 0; t < 4; t++) { + const i = Br.getComponent(t); + if (0 !== i) { + const r = Nr.getComponent(t); + zr.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), e.addScaledVector(Fr.copy(Or).applyMatrix4(zr), i) + } + } + return e.applyMatrix4(this.bindMatrixInverse) + } + }), Hr.prototype = Object.assign(Object.create(St.prototype), { + constructor: Hr, + isBone: !0 + }); + const Gr = new et, + Vr = new et; + + function kr(t = [], e = []) { + this.uuid = g.generateUUID(), this.bones = t.slice(0), this.boneInverses = e, this.boneMatrices = null, this.boneTexture = null, this.boneTextureSize = 0, this.frame = -1, this.init() + } + Object.assign(kr.prototype, { + init: function() { + const t = this.bones, + e = this.boneInverses; + if (this.boneMatrices = new Float32Array(16 * t.length), 0 === e.length) this.calculateInverses(); + else if (t.length !== e.length) { + console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."), this.boneInverses = []; + for (let t = 0, e = this.bones.length; t < e; t++) this.boneInverses.push(new et) + } + }, + calculateInverses: function() { + this.boneInverses.length = 0; + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = new et; + this.bones[t] && e.copy(this.bones[t].matrixWorld).invert(), this.boneInverses.push(e) + } + }, + pose: function() { + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = this.bones[t]; + e && e.matrixWorld.copy(this.boneInverses[t]).invert() + } + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = this.bones[t]; + e && (e.parent && e.parent.isBone ? (e.matrix.copy(e.parent.matrixWorld).invert(), e.matrix.multiply(e.matrixWorld)) : e.matrix.copy(e.matrixWorld), e.matrix.decompose(e.position, e.quaternion, e.scale)) + } + }, + update: function() { + const t = this.bones, + e = this.boneInverses, + n = this.boneMatrices, + i = this.boneTexture; + for (let i = 0, r = t.length; i < r; i++) { + const r = t[i] ? t[i].matrixWorld : Vr; + Gr.multiplyMatrices(r, e[i]), Gr.toArray(n, 16 * i) + } + null !== i && (i.needsUpdate = !0) + }, + clone: function() { + return new kr(this.bones, this.boneInverses) + }, + getBoneByName: function(t) { + for (let e = 0, n = this.bones.length; e < n; e++) { + const n = this.bones[e]; + if (n.name === t) return n + } + }, + dispose: function() { + null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null) + }, + fromJSON: function(t, e) { + this.uuid = t.uuid; + for (let n = 0, i = t.bones.length; n < i; n++) { + const i = t.bones[n]; + let r = e[i]; + void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new Hr), this.bones.push(r), this.boneInverses.push((new et).fromArray(t.boneInverses[n])) + } + return this.init(), this + }, + toJSON: function() { + const t = { + metadata: { + version: 4.5, + type: "Skeleton", + generator: "Skeleton.toJSON" + }, + bones: [], + boneInverses: [] + }; + t.uuid = this.uuid; + const e = this.bones, + n = this.boneInverses; + for (let i = 0, r = e.length; i < r; i++) { + const r = e[i]; + t.bones.push(r.uuid); + const o = n[i]; + t.boneInverses.push(o.toArray()) + } + return t + } + }); + const Wr = new et, + jr = new et, + Xr = [], + qr = new He; + + function Yr(t, e, n) { + He.call(this, t, e), this.instanceMatrix = new ee(new Float32Array(16 * n), 16), this.instanceColor = null, this.count = n, this.frustumCulled = !1 + } + + function Qr(t) { + Jt.call(this), this.type = "LineBasicMaterial", this.color = new Yt(16777215), this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.morphTargets = !1, this.setValues(t) + } + Yr.prototype = Object.assign(Object.create(He.prototype), { + constructor: Yr, + isInstancedMesh: !0, + copy: function(t) { + return He.prototype.copy.call(this, t), this.instanceMatrix.copy(t.instanceMatrix), null !== t.instanceColor && (this.instanceColor = t.instanceColor.clone()), this.count = t.count, this + }, + getColorAt: function(t, e) { + e.fromArray(this.instanceColor.array, 3 * t) + }, + getMatrixAt: function(t, e) { + e.fromArray(this.instanceMatrix.array, 16 * t) + }, + raycast: function(t, e) { + const n = this.matrixWorld, + i = this.count; + if (qr.geometry = this.geometry, qr.material = this.material, void 0 !== qr.material) + for (let r = 0; r < i; r++) { + this.getMatrixAt(r, Wr), jr.multiplyMatrices(n, Wr), qr.matrixWorld = jr, qr.raycast(t, Xr); + for (let t = 0, n = Xr.length; t < n; t++) { + const n = Xr[t]; + n.instanceId = r, n.object = this, e.push(n) + } + Xr.length = 0 + } + }, + setColorAt: function(t, e) { + null === this.instanceColor && (this.instanceColor = new ee(new Float32Array(3 * this.count), 3)), e.toArray(this.instanceColor.array, 3 * t) + }, + setMatrixAt: function(t, e) { + e.toArray(this.instanceMatrix.array, 16 * t) + }, + updateMorphTargets: function() {}, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), Qr.prototype = Object.create(Jt.prototype), Qr.prototype.constructor = Qr, Qr.prototype.isLineBasicMaterial = !0, Qr.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.linewidth = t.linewidth, this.linecap = t.linecap, this.linejoin = t.linejoin, this.morphTargets = t.morphTargets, this + }; + const Zr = new T, + Jr = new T, + Kr = new et, + $r = new tt, + to = new X; + + function eo(t = new be, e = new Qr) { + St.call(this), this.type = "Line", this.geometry = t, this.material = e, this.updateMorphTargets() + } + eo.prototype = Object.assign(Object.create(St.prototype), { + constructor: eo, + isLine: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this + }, + computeLineDistances: function() { + const t = this.geometry; + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = [0]; + for (let t = 1, i = e.count; t < i; t++) Zr.fromBufferAttribute(e, t - 1), Jr.fromBufferAttribute(e, t), n[t] = n[t - 1], n[t] += Zr.distanceTo(Jr); + t.setAttribute("lineDistance", new he(n, 1)) + } else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else t.isGeometry && console.error("THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); + return this + }, + raycast: function(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Line.threshold; + if (null === n.boundingSphere && n.computeBoundingSphere(), to.copy(n.boundingSphere), to.applyMatrix4(i), to.radius += r, !1 === t.ray.intersectsSphere(to)) return; + Kr.copy(i).invert(), $r.copy(t.ray).applyMatrix4(Kr); + const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + s = o * o, + a = new T, + l = new T, + c = new T, + h = new T, + u = this.isLineSegments ? 2 : 1; + if (n.isBufferGeometry) { + const i = n.index, + r = n.attributes.position; + if (null !== i) { + const n = i.array; + for (let i = 0, o = n.length - 1; i < o; i += u) { + const o = n[i], + u = n[i + 1]; + a.fromBufferAttribute(r, o), l.fromBufferAttribute(r, u); + if ($r.distanceSqToSegment(a, l, h, c) > s) continue; + h.applyMatrix4(this.matrixWorld); + const d = t.ray.origin.distanceTo(h); + d < t.near || d > t.far || e.push({ + distance: d, + point: c.clone().applyMatrix4(this.matrixWorld), + index: i, + face: null, + faceIndex: null, + object: this + }) + } + } else + for (let n = 0, i = r.count - 1; n < i; n += u) { + a.fromBufferAttribute(r, n), l.fromBufferAttribute(r, n + 1); + if ($r.distanceSqToSegment(a, l, h, c) > s) continue; + h.applyMatrix4(this.matrixWorld); + const i = t.ray.origin.distanceTo(h); + i < t.near || i > t.far || e.push({ + distance: i, + point: c.clone().applyMatrix4(this.matrixWorld), + index: n, + face: null, + faceIndex: null, + object: this + }) + } + } else n.isGeometry && console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + }, + updateMorphTargets: function() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && e.length > 0 && console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") + } + } + }); + const no = new T, + io = new T; + + function ro(t, e) { + eo.call(this, t, e), this.type = "LineSegments" + } + + function oo(t, e) { + eo.call(this, t, e), this.type = "LineLoop" + } + + function so(t) { + Jt.call(this), this.type = "PointsMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.morphTargets = !1, this.setValues(t) + } + ro.prototype = Object.assign(Object.create(eo.prototype), { + constructor: ro, + isLineSegments: !0, + computeLineDistances: function() { + const t = this.geometry; + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = []; + for (let t = 0, i = e.count; t < i; t += 2) no.fromBufferAttribute(e, t), io.fromBufferAttribute(e, t + 1), n[t] = 0 === t ? 0 : n[t - 1], n[t + 1] = n[t] + no.distanceTo(io); + t.setAttribute("lineDistance", new he(n, 1)) + } else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else t.isGeometry && console.error("THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); + return this + } + }), oo.prototype = Object.assign(Object.create(eo.prototype), { + constructor: oo, + isLineLoop: !0 + }), so.prototype = Object.create(Jt.prototype), so.prototype.constructor = so, so.prototype.isPointsMaterial = !0, so.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.size = t.size, this.sizeAttenuation = t.sizeAttenuation, this.morphTargets = t.morphTargets, this + }; + const ao = new et, + lo = new tt, + co = new X, + ho = new T; + + function uo(t = new be, e = new so) { + St.call(this), this.type = "Points", this.geometry = t, this.material = e, this.updateMorphTargets() + } + + function po(t, e, n, i, r, o, s) { + const a = lo.distanceSqToPoint(t); + if (a < n) { + const n = new T; + lo.closestPointToPoint(t, n), n.applyMatrix4(i); + const l = r.ray.origin.distanceTo(n); + if (l < r.near || l > r.far) return; + o.push({ + distance: l, + distanceToRay: Math.sqrt(a), + point: n, + index: e, + face: null, + object: s + }) + } + } + + function fo(t, e, n, i, r, o, s, a, l) { + b.call(this, t, e, n, i, r, o, s, a, l), this.format = void 0 !== s ? s : 1022, this.minFilter = void 0 !== o ? o : 1006, this.magFilter = void 0 !== r ? r : 1006, this.generateMipmaps = !1; + const c = this; + "requestVideoFrameCallback" in t && t.requestVideoFrameCallback((function e() { + c.needsUpdate = !0, t.requestVideoFrameCallback(e) + })) + } + + function mo(t, e, n, i, r, o, s, a, l, c, h, u) { + b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { + width: e, + height: n + }, this.mipmaps = t, this.flipY = !1, this.generateMipmaps = !1 + } + + function go(t, e, n, i, r, o, s, a, l) { + b.call(this, t, e, n, i, r, o, s, a, l), this.needsUpdate = !0 + } + + function vo(t, e, n, i, r, o, s, a, l, c) { + if (1026 !== (c = void 0 !== c ? c : 1026) && 1027 !== c) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + void 0 === n && 1026 === c && (n = 1012), void 0 === n && 1027 === c && (n = 1020), b.call(this, null, i, r, o, s, a, c, n, l), this.image = { + width: t, + height: e + }, this.magFilter = void 0 !== s ? s : 1003, this.minFilter = void 0 !== a ? a : 1003, this.flipY = !1, this.generateMipmaps = !1 + } + uo.prototype = Object.assign(Object.create(St.prototype), { + constructor: uo, + isPoints: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this + }, + raycast: function(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Points.threshold; + if (null === n.boundingSphere && n.computeBoundingSphere(), co.copy(n.boundingSphere), co.applyMatrix4(i), co.radius += r, !1 === t.ray.intersectsSphere(co)) return; + ao.copy(i).invert(), lo.copy(t.ray).applyMatrix4(ao); + const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + s = o * o; + if (n.isBufferGeometry) { + const r = n.index, + o = n.attributes.position; + if (null !== r) { + const n = r.array; + for (let r = 0, a = n.length; r < a; r++) { + const a = n[r]; + ho.fromBufferAttribute(o, a), po(ho, a, s, i, t, e, this) + } + } else + for (let n = 0, r = o.count; n < r; n++) ho.fromBufferAttribute(o, n), po(ho, n, s, i, t, e, this) + } else console.error("THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + }, + updateMorphTargets: function() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && e.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") + } + } + }), fo.prototype = Object.assign(Object.create(b.prototype), { + constructor: fo, + clone: function() { + return new this.constructor(this.image).copy(this) + }, + isVideoTexture: !0, + update: function() { + const t = this.image; + !1 === "requestVideoFrameCallback" in t && t.readyState >= t.HAVE_CURRENT_DATA && (this.needsUpdate = !0) + } + }), mo.prototype = Object.create(b.prototype), mo.prototype.constructor = mo, mo.prototype.isCompressedTexture = !0, go.prototype = Object.create(b.prototype), go.prototype.constructor = go, go.prototype.isCanvasTexture = !0, vo.prototype = Object.create(b.prototype), vo.prototype.constructor = vo, vo.prototype.isDepthTexture = !0; + new T, new T, new T, new Gt; + const yo = function(t, e, n) { + n = n || 2; + const i = e && e.length, + r = i ? e[0] * n : t.length; + let o = Ao(t, 0, r, n, !0); + const s = []; + if (!o || o.next === o.prev) return s; + let a, l, c, h, u, d, p; + if (i && (o = function(t, e, n, i) { + const r = []; + let o, s, a, l, c; + for (o = 0, s = e.length; o < s; o++) a = e[o] * i, l = o < s - 1 ? e[o + 1] * i : t.length, c = Ao(t, a, l, i, !1), c === c.next && (c.steiner = !0), r.push(Co(c)); + for (r.sort(So), o = 0; o < r.length; o++) To(r[o], n), n = xo(n, n.next); + return n + }(t, e, o, n)), t.length > 80 * n) { + a = c = t[0], l = h = t[1]; + for (let e = n; e < r; e += n) u = t[e], d = t[e + 1], u < a && (a = u), d < l && (l = d), u > c && (c = u), d > h && (h = d); + p = Math.max(c - a, h - l), p = 0 !== p ? 1 / p : 0 + } + return _o(o, s, n, a, l, p), s + }; + + function Ao(t, e, n, i, r) { + let o, s; + if (r === function(t, e, n, i) { + let r = 0; + for (let o = e, s = n - i; o < n; o += i) r += (t[s] - t[o]) * (t[o + 1] + t[s + 1]), s = o; + return r + }(t, e, n, i) > 0) + for (o = e; o < n; o += i) s = Ho(o, t[o], t[o + 1], s); + else + for (o = n - i; o >= e; o -= i) s = Ho(o, t[o], t[o + 1], s); + return s && Oo(s, s.next) && (Go(s), s = s.next), s + } + + function xo(t, e) { + if (!t) return t; + e || (e = t); + let n, i = t; + do { + if (n = !1, i.steiner || !Oo(i, i.next) && 0 !== Io(i.prev, i, i.next)) i = i.next; + else { + if (Go(i), i = e = i.prev, i === i.next) break; + n = !0 + } + } while (n || i !== e); + return e + } + + function _o(t, e, n, i, r, o, s) { + if (!t) return; + !s && o && function(t, e, n, i) { + let r = t; + do { + null === r.z && (r.z = Ro(r.x, r.y, e, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next + } while (r !== t); + r.prevZ.nextZ = null, r.prevZ = null, + function(t) { + let e, n, i, r, o, s, a, l, c = 1; + do { + for (n = t, t = null, o = null, s = 0; n;) { + for (s++, i = n, a = 0, e = 0; e < c && (a++, i = i.nextZ, i); e++); + for (l = c; a > 0 || l > 0 && i;) 0 !== a && (0 === l || !i || n.z <= i.z) ? (r = n, n = n.nextZ, a--) : (r = i, i = i.nextZ, l--), o ? o.nextZ = r : t = r, r.prevZ = o, o = r; + n = i + } + o.nextZ = null, c *= 2 + } while (s > 1) + }(r) + }(t, i, r, o); + let a, l, c = t; + for (; t.prev !== t.next;) + if (a = t.prev, l = t.next, o ? wo(t, i, r, o) : bo(t)) e.push(a.i / n), e.push(t.i / n), e.push(l.i / n), Go(t), t = l.next, c = l.next; + else if ((t = l) === c) { + s ? 1 === s ? _o(t = Mo(xo(t), e, n), e, n, i, r, o, 2) : 2 === s && Eo(t, e, n, i, r, o) : _o(xo(t), e, n, i, r, o, 1); + break + } + } + + function bo(t) { + const e = t.prev, + n = t, + i = t.next; + if (Io(e, n, i) >= 0) return !1; + let r = t.next.next; + for (; r !== t.prev;) { + if (Po(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && Io(r.prev, r, r.next) >= 0) return !1; + r = r.next + } + return !0 + } + + function wo(t, e, n, i) { + const r = t.prev, + o = t, + s = t.next; + if (Io(r, o, s) >= 0) return !1; + const a = r.x < o.x ? r.x < s.x ? r.x : s.x : o.x < s.x ? o.x : s.x, + l = r.y < o.y ? r.y < s.y ? r.y : s.y : o.y < s.y ? o.y : s.y, + c = r.x > o.x ? r.x > s.x ? r.x : s.x : o.x > s.x ? o.x : s.x, + h = r.y > o.y ? r.y > s.y ? r.y : s.y : o.y > s.y ? o.y : s.y, + u = Ro(a, l, e, n, i), + d = Ro(c, h, e, n, i); + let p = t.prevZ, + f = t.nextZ; + for (; p && p.z >= u && f && f.z <= d;) { + if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; + if (p = p.prevZ, f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; + f = f.nextZ + } + for (; p && p.z >= u;) { + if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; + p = p.prevZ + } + for (; f && f.z <= d;) { + if (f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; + f = f.nextZ + } + return !0 + } + + function Mo(t, e, n) { + let i = t; + do { + const r = i.prev, + o = i.next.next; + !Oo(r, o) && No(r, i, i.next, o) && zo(r, o) && zo(o, r) && (e.push(r.i / n), e.push(i.i / n), e.push(o.i / n), Go(i), Go(i.next), i = t = o), i = i.next + } while (i !== t); + return xo(i) + } + + function Eo(t, e, n, i, r, o) { + let s = t; + do { + let t = s.next.next; + for (; t !== s.prev;) { + if (s.i !== t.i && Do(s, t)) { + let a = Uo(s, t); + return s = xo(s, s.next), a = xo(a, a.next), _o(s, e, n, i, r, o), void _o(a, e, n, i, r, o) + } + t = t.next + } + s = s.next + } while (s !== t) + } + + function So(t, e) { + return t.x - e.x + } + + function To(t, e) { + if (e = function(t, e) { + let n = e; + const i = t.x, + r = t.y; + let o, s = -1 / 0; + do { + if (r <= n.y && r >= n.next.y && n.next.y !== n.y) { + const t = n.x + (r - n.y) * (n.next.x - n.x) / (n.next.y - n.y); + if (t <= i && t > s) { + if (s = t, t === i) { + if (r === n.y) return n; + if (r === n.next.y) return n.next + } + o = n.x < n.next.x ? n : n.next + } + } + n = n.next + } while (n !== e); + if (!o) return null; + if (i === s) return o; + const a = o, + l = o.x, + c = o.y; + let h, u = 1 / 0; + n = o; + do { + i >= n.x && n.x >= l && i !== n.x && Po(r < c ? i : s, r, l, c, r < c ? s : i, r, n.x, n.y) && (h = Math.abs(r - n.y) / (i - n.x), zo(n, t) && (h < u || h === u && (n.x > o.x || n.x === o.x && Lo(o, n))) && (o = n, u = h)), n = n.next + } while (n !== a); + return o + }(t, e)) { + const n = Uo(e, t); + xo(e, e.next), xo(n, n.next) + } + } + + function Lo(t, e) { + return Io(t.prev, t, e.prev) < 0 && Io(e.next, t, t.next) < 0 + } + + function Ro(t, e, n, i, r) { + return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 + } + + function Co(t) { + let e = t, + n = t; + do { + (e.x < n.x || e.x === n.x && e.y < n.y) && (n = e), e = e.next + } while (e !== t); + return n + } + + function Po(t, e, n, i, r, o, s, a) { + return (r - s) * (e - a) - (t - s) * (o - a) >= 0 && (t - s) * (i - a) - (n - s) * (e - a) >= 0 && (n - s) * (o - a) - (r - s) * (i - a) >= 0 + } + + function Do(t, e) { + return t.next.i !== e.i && t.prev.i !== e.i && ! function(t, e) { + let n = t; + do { + if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && No(n, n.next, t, e)) return !0; + n = n.next + } while (n !== t); + return !1 + }(t, e) && (zo(t, e) && zo(e, t) && function(t, e) { + let n = t, + i = !1; + const r = (t.x + e.x) / 2, + o = (t.y + e.y) / 2; + do { + n.y > o != n.next.y > o && n.next.y !== n.y && r < (n.next.x - n.x) * (o - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next + } while (n !== t); + return i + }(t, e) && (Io(t.prev, t, e.prev) || Io(t, e.prev, e)) || Oo(t, e) && Io(t.prev, t, t.next) > 0 && Io(e.prev, e, e.next) > 0) + } + + function Io(t, e, n) { + return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) + } + + function Oo(t, e) { + return t.x === e.x && t.y === e.y + } + + function No(t, e, n, i) { + const r = Fo(Io(t, e, n)), + o = Fo(Io(t, e, i)), + s = Fo(Io(n, i, t)), + a = Fo(Io(n, i, e)); + return r !== o && s !== a || (!(0 !== r || !Bo(t, n, e)) || (!(0 !== o || !Bo(t, i, e)) || (!(0 !== s || !Bo(n, t, i)) || !(0 !== a || !Bo(n, e, i))))) + } + + function Bo(t, e, n) { + return e.x <= Math.max(t.x, n.x) && e.x >= Math.min(t.x, n.x) && e.y <= Math.max(t.y, n.y) && e.y >= Math.min(t.y, n.y) + } + + function Fo(t) { + return t > 0 ? 1 : t < 0 ? -1 : 0 + } + + function zo(t, e) { + return Io(t.prev, t, t.next) < 0 ? Io(t, e, t.next) >= 0 && Io(t, t.prev, e) >= 0 : Io(t, e, t.prev) < 0 || Io(t, t.next, e) < 0 + } + + function Uo(t, e) { + const n = new Vo(t.i, t.x, t.y), + i = new Vo(e.i, e.x, e.y), + r = t.next, + o = e.prev; + return t.next = e, e.prev = t, n.next = r, r.prev = n, i.next = n, n.prev = i, o.next = i, i.prev = o, i + } + + function Ho(t, e, n, i) { + const r = new Vo(t, e, n); + return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r + } + + function Go(t) { + t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ) + } + + function Vo(t, e, n) { + this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 + } + const ko = { + area: function(t) { + const e = t.length; + let n = 0; + for (let i = e - 1, r = 0; r < e; i = r++) n += t[i].x * t[r].y - t[r].x * t[i].y; + return .5 * n + }, + isClockWise: function(t) { + return ko.area(t) < 0 + }, + triangulateShape: function(t, e) { + const n = [], + i = [], + r = []; + Wo(t), jo(n, t); + let o = t.length; + e.forEach(Wo); + for (let t = 0; t < e.length; t++) i.push(o), o += e[t].length, jo(n, e[t]); + const s = yo(n, i); + for (let t = 0; t < s.length; t += 3) r.push(s.slice(t, t + 3)); + return r + } + }; + + function Wo(t) { + const e = t.length; + e > 2 && t[e - 1].equals(t[0]) && t.pop() + } + + function jo(t, e) { + for (let n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y) + } + class Xo extends be { + constructor(t, e) { + super(), this.type = "ExtrudeGeometry", this.parameters = { + shapes: t, + options: e + }, t = Array.isArray(t) ? t : [t]; + const n = this, + i = [], + r = []; + for (let e = 0, n = t.length; e < n; e++) { + o(t[e]) + } + + function o(t) { + const o = [], + s = void 0 !== e.curveSegments ? e.curveSegments : 12, + a = void 0 !== e.steps ? e.steps : 1; + let l = void 0 !== e.depth ? e.depth : 100, + c = void 0 === e.bevelEnabled || e.bevelEnabled, + h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, + u = void 0 !== e.bevelSize ? e.bevelSize : h - 2, + d = void 0 !== e.bevelOffset ? e.bevelOffset : 0, + p = void 0 !== e.bevelSegments ? e.bevelSegments : 3; + const f = e.extrudePath, + m = void 0 !== e.UVGenerator ? e.UVGenerator : qo; + void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), l = e.amount); + let g, y, A, x, _, b = !1; + f && (g = f.getSpacedPoints(a), b = !0, c = !1, y = f.computeFrenetFrames(a, !1), A = new T, x = new T, _ = new T), c || (p = 0, h = 0, u = 0, d = 0); + const w = t.extractPoints(s); + let M = w.shape; + const E = w.holes; + if (!ko.isClockWise(M)) { + M = M.reverse(); + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + ko.isClockWise(e) && (E[t] = e.reverse()) + } + } + const S = ko.triangulateShape(M, E), + L = M; + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + M = M.concat(e) + } + + function R(t, e, n) { + return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), e.clone().multiplyScalar(n).add(t) + } + const C = M.length, + P = S.length; + + function D(t, e, n) { + let i, r, o; + const s = t.x - e.x, + a = t.y - e.y, + l = n.x - t.x, + c = n.y - t.y, + h = s * s + a * a, + u = s * c - a * l; + if (Math.abs(u) > Number.EPSILON) { + const u = Math.sqrt(h), + d = Math.sqrt(l * l + c * c), + p = e.x - a / u, + f = e.y + s / u, + m = ((n.x - c / d - p) * c - (n.y + l / d - f) * l) / (s * c - a * l); + i = p + s * m - t.x, r = f + a * m - t.y; + const g = i * i + r * r; + if (g <= 2) return new v(i, r); + o = Math.sqrt(g / 2) + } else { + let t = !1; + s > Number.EPSILON ? l > Number.EPSILON && (t = !0) : s < -Number.EPSILON ? l < -Number.EPSILON && (t = !0) : Math.sign(a) === Math.sign(c) && (t = !0), t ? (i = -a, r = s, o = Math.sqrt(h)) : (i = s, r = a, o = Math.sqrt(h / 2)) + } + return new v(i / o, r / o) + } + const I = []; + for (let t = 0, e = L.length, n = e - 1, i = t + 1; t < e; t++, n++, i++) n === e && (n = 0), i === e && (i = 0), I[t] = D(L[t], L[n], L[i]); + const O = []; + let N, B = I.concat(); + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + N = []; + for (let t = 0, n = e.length, i = n - 1, r = t + 1; t < n; t++, i++, r++) i === n && (i = 0), r === n && (r = 0), N[t] = D(e[t], e[i], e[r]); + O.push(N), B = B.concat(N) + } + for (let t = 0; t < p; t++) { + const e = t / p, + n = h * Math.cos(e * Math.PI / 2), + i = u * Math.sin(e * Math.PI / 2) + d; + for (let t = 0, e = L.length; t < e; t++) { + const e = R(L[t], I[t], i); + U(e.x, e.y, -n) + } + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + N = O[t]; + for (let t = 0, r = e.length; t < r; t++) { + const r = R(e[t], N[t], i); + U(r.x, r.y, -n) + } + } + } + const F = u + d; + for (let t = 0; t < C; t++) { + const e = c ? R(M[t], B[t], F) : M[t]; + b ? (x.copy(y.normals[0]).multiplyScalar(e.x), A.copy(y.binormals[0]).multiplyScalar(e.y), _.copy(g[0]).add(x).add(A), U(_.x, _.y, _.z)) : U(e.x, e.y, 0) + } + for (let t = 1; t <= a; t++) + for (let e = 0; e < C; e++) { + const n = c ? R(M[e], B[e], F) : M[e]; + b ? (x.copy(y.normals[t]).multiplyScalar(n.x), A.copy(y.binormals[t]).multiplyScalar(n.y), _.copy(g[t]).add(x).add(A), U(_.x, _.y, _.z)) : U(n.x, n.y, l / a * t) + } + for (let t = p - 1; t >= 0; t--) { + const e = t / p, + n = h * Math.cos(e * Math.PI / 2), + i = u * Math.sin(e * Math.PI / 2) + d; + for (let t = 0, e = L.length; t < e; t++) { + const e = R(L[t], I[t], i); + U(e.x, e.y, l + n) + } + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + N = O[t]; + for (let t = 0, r = e.length; t < r; t++) { + const r = R(e[t], N[t], i); + b ? U(r.x, r.y + g[a - 1].y, g[a - 1].x + n) : U(r.x, r.y, l + n) + } + } + } + + function z(t, e) { + let n = t.length; + for (; --n >= 0;) { + const i = n; + let r = n - 1; + r < 0 && (r = t.length - 1); + for (let t = 0, n = a + 2 * p; t < n; t++) { + const n = C * t, + o = C * (t + 1); + G(e + i + n, e + r + n, e + r + o, e + i + o) + } + } + } + + function U(t, e, n) { + o.push(t), o.push(e), o.push(n) + } + + function H(t, e, r) { + V(t), V(e), V(r); + const o = i.length / 3, + s = m.generateTopUV(n, i, o - 3, o - 2, o - 1); + k(s[0]), k(s[1]), k(s[2]) + } + + function G(t, e, r, o) { + V(t), V(e), V(o), V(e), V(r), V(o); + const s = i.length / 3, + a = m.generateSideWallUV(n, i, s - 6, s - 3, s - 2, s - 1); + k(a[0]), k(a[1]), k(a[3]), k(a[1]), k(a[2]), k(a[3]) + } + + function V(t) { + i.push(o[3 * t + 0]), i.push(o[3 * t + 1]), i.push(o[3 * t + 2]) + } + + function k(t) { + r.push(t.x), r.push(t.y) + }! function() { + const t = i.length / 3; + if (c) { + let t = 0, + e = C * t; + for (let t = 0; t < P; t++) { + const n = S[t]; + H(n[2] + e, n[1] + e, n[0] + e) + } + t = a + 2 * p, e = C * t; + for (let t = 0; t < P; t++) { + const n = S[t]; + H(n[0] + e, n[1] + e, n[2] + e) + } + } else { + for (let t = 0; t < P; t++) { + const e = S[t]; + H(e[2], e[1], e[0]) + } + for (let t = 0; t < P; t++) { + const e = S[t]; + H(e[0] + C * a, e[1] + C * a, e[2] + C * a) + } + } + n.addGroup(t, i.length / 3 - t, 0) + }(), + function() { + const t = i.length / 3; + let e = 0; + z(L, e), e += L.length; + for (let t = 0, n = E.length; t < n; t++) { + const n = E[t]; + z(n, e), e += n.length + } + n.addGroup(t, i.length / 3 - t, 1) + }() + } + this.setAttribute("position", new he(i, 3)), this.setAttribute("uv", new he(r, 2)), this.computeVertexNormals() + } + toJSON() { + const t = be.prototype.toJSON.call(this); + return function(t, e, n) { + if (n.shapes = [], Array.isArray(t)) + for (let e = 0, i = t.length; e < i; e++) { + const i = t[e]; + n.shapes.push(i.uuid) + } else n.shapes.push(t.uuid); + void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON()); + return n + }(this.parameters.shapes, this.parameters.options, t) + } + } + const qo = { + generateTopUV: function(t, e, n, i, r) { + const o = e[3 * n], + s = e[3 * n + 1], + a = e[3 * i], + l = e[3 * i + 1], + c = e[3 * r], + h = e[3 * r + 1]; + return [new v(o, s), new v(a, l), new v(c, h)] + }, + generateSideWallUV: function(t, e, n, i, r, o) { + const s = e[3 * n], + a = e[3 * n + 1], + l = e[3 * n + 2], + c = e[3 * i], + h = e[3 * i + 1], + u = e[3 * i + 2], + d = e[3 * r], + p = e[3 * r + 1], + f = e[3 * r + 2], + m = e[3 * o], + g = e[3 * o + 1], + y = e[3 * o + 2]; + return Math.abs(a - h) < .01 ? [new v(s, 1 - l), new v(c, 1 - u), new v(d, 1 - f), new v(m, 1 - y)] : [new v(a, 1 - l), new v(h, 1 - u), new v(p, 1 - f), new v(g, 1 - y)] + } + }; + + function Yo(t, e, n) { + be.call(this), this.type = "ParametricGeometry", this.parameters = { + func: t, + slices: e, + stacks: n + }; + const i = [], + r = [], + o = [], + s = [], + a = 1e-5, + l = new T, + c = new T, + h = new T, + u = new T, + d = new T; + t.length < 3 && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); + const p = e + 1; + for (let i = 0; i <= n; i++) { + const p = i / n; + for (let n = 0; n <= e; n++) { + const i = n / e; + t(i, p, c), r.push(c.x, c.y, c.z), i - a >= 0 ? (t(i - a, p, h), u.subVectors(c, h)) : (t(i + a, p, h), u.subVectors(h, c)), p - a >= 0 ? (t(i, p - a, h), d.subVectors(c, h)) : (t(i, p + a, h), d.subVectors(h, c)), l.crossVectors(u, d).normalize(), o.push(l.x, l.y, l.z), s.push(i, p) + } + } + for (let t = 0; t < n; t++) + for (let n = 0; n < e; n++) { + const e = t * p + n, + r = t * p + n + 1, + o = (t + 1) * p + n + 1, + s = (t + 1) * p + n; + i.push(e, r, s), i.push(r, o, s) + } + this.setIndex(i), this.setAttribute("position", new he(r, 3)), this.setAttribute("normal", new he(o, 3)), this.setAttribute("uv", new he(s, 2)) + } + Yo.prototype = Object.create(be.prototype), Yo.prototype.constructor = Yo; + class Qo extends be { + constructor(t, e = 12) { + super(), this.type = "ShapeGeometry", this.parameters = { + shapes: t, + curveSegments: e + }; + const n = [], + i = [], + r = [], + o = []; + let s = 0, + a = 0; + if (!1 === Array.isArray(t)) l(t); + else + for (let e = 0; e < t.length; e++) l(t[e]), this.addGroup(s, a, e), s += a, a = 0; + + function l(t) { + const s = i.length / 3, + l = t.extractPoints(e); + let c = l.shape; + const h = l.holes; + !1 === ko.isClockWise(c) && (c = c.reverse()); + for (let t = 0, e = h.length; t < e; t++) { + const e = h[t]; + !0 === ko.isClockWise(e) && (h[t] = e.reverse()) + } + const u = ko.triangulateShape(c, h); + for (let t = 0, e = h.length; t < e; t++) { + const e = h[t]; + c = c.concat(e) + } + for (let t = 0, e = c.length; t < e; t++) { + const e = c[t]; + i.push(e.x, e.y, 0), r.push(0, 0, 1), o.push(e.x, e.y) + } + for (let t = 0, e = u.length; t < e; t++) { + const e = u[t], + i = e[0] + s, + r = e[1] + s, + o = e[2] + s; + n.push(i, r, o), a += 3 + } + } + this.setIndex(n), this.setAttribute("position", new he(i, 3)), this.setAttribute("normal", new he(r, 3)), this.setAttribute("uv", new he(o, 2)) + } + toJSON() { + const t = be.prototype.toJSON.call(this); + return function(t, e) { + if (e.shapes = [], Array.isArray(t)) + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + e.shapes.push(i.uuid) + } else e.shapes.push(t.uuid); + return e + }(this.parameters.shapes, t) + } + } + class Zo extends be { + constructor(t = 1, e = 8, n = 6, i = 0, r = 2 * Math.PI, o = 0, s = Math.PI) { + super(), this.type = "SphereGeometry", this.parameters = { + radius: t, + widthSegments: e, + heightSegments: n, + phiStart: i, + phiLength: r, + thetaStart: o, + thetaLength: s + }, e = Math.max(3, Math.floor(e)), n = Math.max(2, Math.floor(n)); + const a = Math.min(o + s, Math.PI); + let l = 0; + const c = [], + h = new T, + u = new T, + d = [], + p = [], + f = [], + m = []; + for (let d = 0; d <= n; d++) { + const g = [], + v = d / n; + let y = 0; + 0 == d && 0 == o ? y = .5 / e : d == n && a == Math.PI && (y = -.5 / e); + for (let n = 0; n <= e; n++) { + const a = n / e; + h.x = -t * Math.cos(i + a * r) * Math.sin(o + v * s), h.y = t * Math.cos(o + v * s), h.z = t * Math.sin(i + a * r) * Math.sin(o + v * s), p.push(h.x, h.y, h.z), u.copy(h).normalize(), f.push(u.x, u.y, u.z), m.push(a + y, 1 - v), g.push(l++) + } + c.push(g) + } + for (let t = 0; t < n; t++) + for (let i = 0; i < e; i++) { + const e = c[t][i + 1], + r = c[t][i], + s = c[t + 1][i], + l = c[t + 1][i + 1]; + (0 !== t || o > 0) && d.push(e, r, l), (t !== n - 1 || a < Math.PI) && d.push(r, s, l) + } + this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) + } + } + + function Jo(t) { + Jt.call(this), this.type = "ShadowMaterial", this.color = new Yt(0), this.transparent = !0, this.setValues(t) + } + + function Ko(t) { + Xe.call(this, t), this.type = "RawShaderMaterial" + } + + function $o(t) { + Jt.call(this), this.defines = { + STANDARD: "" + }, this.type = "MeshStandardMaterial", this.color = new Yt(16777215), this.roughness = 1, this.metalness = 0, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapIntensity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.vertexTangents = !1, this.setValues(t) + } + + function ts(t) { + $o.call(this), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.type = "MeshPhysicalMaterial", this.clearcoat = 0, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new v(1, 1), this.clearcoatNormalMap = null, this.reflectivity = .5, Object.defineProperty(this, "ior", { + get: function() { + return (1 + .4 * this.reflectivity) / (1 - .4 * this.reflectivity) + }, + set: function(t) { + this.reflectivity = g.clamp(2.5 * (t - 1) / (t + 1), 0, 1) + } + }), this.sheen = null, this.transmission = 0, this.transmissionMap = null, this.setValues(t) + } + + function es(t) { + Jt.call(this), this.type = "MeshPhongMaterial", this.color = new Yt(16777215), this.specular = new Yt(1118481), this.shininess = 30, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function ns(t) { + Jt.call(this), this.defines = { + TOON: "" + }, this.type = "MeshToonMaterial", this.color = new Yt(16777215), this.map = null, this.gradientMap = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function is(t) { + Jt.call(this), this.type = "MeshNormalMaterial", this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function rs(t) { + Jt.call(this), this.type = "MeshLambertMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function os(t) { + Jt.call(this), this.defines = { + MATCAP: "" + }, this.type = "MeshMatcapMaterial", this.color = new Yt(16777215), this.matcap = null, this.map = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function ss(t) { + Qr.call(this), this.type = "LineDashedMaterial", this.scale = 1, this.dashSize = 3, this.gapSize = 1, this.setValues(t) + } + Jo.prototype = Object.create(Jt.prototype), Jo.prototype.constructor = Jo, Jo.prototype.isShadowMaterial = !0, Jo.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this + }, Ko.prototype = Object.create(Xe.prototype), Ko.prototype.constructor = Ko, Ko.prototype.isRawShaderMaterial = !0, $o.prototype = Object.create(Jt.prototype), $o.prototype.constructor = $o, $o.prototype.isMeshStandardMaterial = !0, $o.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.defines = { + STANDARD: "" + }, this.color.copy(t.color), this.roughness = t.roughness, this.metalness = t.metalness, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.roughnessMap = t.roughnessMap, this.metalnessMap = t.metalnessMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.envMapIntensity = t.envMapIntensity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.vertexTangents = t.vertexTangents, this + }, ts.prototype = Object.create($o.prototype), ts.prototype.constructor = ts, ts.prototype.isMeshPhysicalMaterial = !0, ts.prototype.copy = function(t) { + return $o.prototype.copy.call(this, t), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.clearcoat = t.clearcoat, this.clearcoatMap = t.clearcoatMap, this.clearcoatRoughness = t.clearcoatRoughness, this.clearcoatRoughnessMap = t.clearcoatRoughnessMap, this.clearcoatNormalMap = t.clearcoatNormalMap, this.clearcoatNormalScale.copy(t.clearcoatNormalScale), this.reflectivity = t.reflectivity, t.sheen ? this.sheen = (this.sheen || new Yt).copy(t.sheen) : this.sheen = null, this.transmission = t.transmission, this.transmissionMap = t.transmissionMap, this + }, es.prototype = Object.create(Jt.prototype), es.prototype.constructor = es, es.prototype.isMeshPhongMaterial = !0, es.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.specular.copy(t.specular), this.shininess = t.shininess, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, ns.prototype = Object.create(Jt.prototype), ns.prototype.constructor = ns, ns.prototype.isMeshToonMaterial = !0, ns.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.gradientMap = t.gradientMap, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, is.prototype = Object.create(Jt.prototype), is.prototype.constructor = is, is.prototype.isMeshNormalMaterial = !0, is.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, rs.prototype = Object.create(Jt.prototype), rs.prototype.constructor = rs, rs.prototype.isMeshLambertMaterial = !0, rs.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, os.prototype = Object.create(Jt.prototype), os.prototype.constructor = os, os.prototype.isMeshMatcapMaterial = !0, os.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.defines = { + MATCAP: "" + }, this.color.copy(t.color), this.matcap = t.matcap, this.map = t.map, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, ss.prototype = Object.create(Qr.prototype), ss.prototype.constructor = ss, ss.prototype.isLineDashedMaterial = !0, ss.prototype.copy = function(t) { + return Qr.prototype.copy.call(this, t), this.scale = t.scale, this.dashSize = t.dashSize, this.gapSize = t.gapSize, this + }; + var as = Object.freeze({ + __proto__: null, + ShadowMaterial: Jo, + SpriteMaterial: mr, + RawShaderMaterial: Ko, + ShaderMaterial: Xe, + PointsMaterial: so, + MeshPhysicalMaterial: ts, + MeshStandardMaterial: $o, + MeshPhongMaterial: es, + MeshToonMaterial: ns, + MeshNormalMaterial: is, + MeshLambertMaterial: rs, + MeshDepthMaterial: Ki, + MeshDistanceMaterial: $i, + MeshBasicMaterial: Kt, + MeshMatcapMaterial: os, + LineDashedMaterial: ss, + LineBasicMaterial: Qr, + Material: Jt + }); + const ls = { + arraySlice: function(t, e, n) { + return ls.isTypedArray(t) ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) : t.slice(e, n) + }, + convertArray: function(t, e, n) { + return !t || !n && t.constructor === e ? t : "number" == typeof e.BYTES_PER_ELEMENT ? new e(t) : Array.prototype.slice.call(t) + }, + isTypedArray: function(t) { + return ArrayBuffer.isView(t) && !(t instanceof DataView) + }, + getKeyframeOrder: function(t) { + const e = t.length, + n = new Array(e); + for (let t = 0; t !== e; ++t) n[t] = t; + return n.sort((function(e, n) { + return t[e] - t[n] + })), n + }, + sortedArray: function(t, e, n) { + const i = t.length, + r = new t.constructor(i); + for (let o = 0, s = 0; s !== i; ++o) { + const i = n[o] * e; + for (let n = 0; n !== e; ++n) r[s++] = t[i + n] + } + return r + }, + flattenJSON: function(t, e, n, i) { + let r = 1, + o = t[0]; + for (; void 0 !== o && void 0 === o[i];) o = t[r++]; + if (void 0 === o) return; + let s = o[i]; + if (void 0 !== s) + if (Array.isArray(s)) + do { + s = o[i], void 0 !== s && (e.push(o.time), n.push.apply(n, s)), o = t[r++] + } while (void 0 !== o); + else if (void 0 !== s.toArray) + do { + s = o[i], void 0 !== s && (e.push(o.time), s.toArray(n, n.length)), o = t[r++] + } while (void 0 !== o); + else + do { + s = o[i], void 0 !== s && (e.push(o.time), n.push(s)), o = t[r++] + } while (void 0 !== o) + }, + subclip: function(t, e, n, i, r = 30) { + const o = t.clone(); + o.name = e; + const s = []; + for (let t = 0; t < o.tracks.length; ++t) { + const e = o.tracks[t], + a = e.getValueSize(), + l = [], + c = []; + for (let t = 0; t < e.times.length; ++t) { + const o = e.times[t] * r; + if (!(o < n || o >= i)) { + l.push(e.times[t]); + for (let n = 0; n < a; ++n) c.push(e.values[t * a + n]) + } + } + 0 !== l.length && (e.times = ls.convertArray(l, e.times.constructor), e.values = ls.convertArray(c, e.values.constructor), s.push(e)) + } + o.tracks = s; + let a = 1 / 0; + for (let t = 0; t < o.tracks.length; ++t) a > o.tracks[t].times[0] && (a = o.tracks[t].times[0]); + for (let t = 0; t < o.tracks.length; ++t) o.tracks[t].shift(-1 * a); + return o.resetDuration(), o + }, + makeClipAdditive: function(t, e = 0, n = t, i = 30) { + i <= 0 && (i = 30); + const r = n.tracks.length, + o = e / i; + for (let e = 0; e < r; ++e) { + const i = n.tracks[e], + r = i.ValueTypeName; + if ("bool" === r || "string" === r) continue; + const s = t.tracks.find((function(t) { + return t.name === i.name && t.ValueTypeName === r + })); + if (void 0 === s) continue; + let a = 0; + const l = i.getValueSize(); + i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (a = l / 3); + let c = 0; + const h = s.getValueSize(); + s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (c = h / 3); + const u = i.times.length - 1; + let d; + if (o <= i.times[0]) { + const t = a, + e = l - a; + d = ls.arraySlice(i.values, t, e) + } else if (o >= i.times[u]) { + const t = u * l + a, + e = t + l - a; + d = ls.arraySlice(i.values, t, e) + } else { + const t = i.createInterpolant(), + e = a, + n = l - a; + t.evaluate(o), d = ls.arraySlice(t.resultBuffer, e, n) + } + if ("quaternion" === r) { + (new S).fromArray(d).normalize().conjugate().toArray(d) + } + const p = s.times.length; + for (let t = 0; t < p; ++t) { + const e = t * h + c; + if ("quaternion" === r) S.multiplyQuaternionsFlat(s.values, e, d, 0, s.values, e); + else { + const t = h - 2 * c; + for (let n = 0; n < t; ++n) s.values[e + n] -= d[n] + } + } + } + return t.blendMode = 2501, t + } + }; + + function cs(t, e, n, i) { + this.parameterPositions = t, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new e.constructor(n), this.sampleValues = e, this.valueSize = n + } + + function hs(t, e, n, i) { + cs.call(this, t, e, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0 + } + + function us(t, e, n, i) { + cs.call(this, t, e, n, i) + } + + function ds(t, e, n, i) { + cs.call(this, t, e, n, i) + } + + function ps(t, e, n, i) { + if (void 0 === t) throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (void 0 === e || 0 === e.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + t); + this.name = t, this.times = ls.convertArray(e, this.TimeBufferType), this.values = ls.convertArray(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) + } + + function fs(t, e, n) { + ps.call(this, t, e, n) + } + + function ms(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function gs(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function vs(t, e, n, i) { + cs.call(this, t, e, n, i) + } + + function ys(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function As(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function xs(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function _s(t, e = -1, n, i = 2500) { + this.name = t, this.tracks = n, this.duration = e, this.blendMode = i, this.uuid = g.generateUUID(), this.duration < 0 && this.resetDuration() + } + + function bs(t) { + if (void 0 === t.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + const e = function(t) { + switch (t.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return gs; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return xs; + case "color": + return ms; + case "quaternion": + return ys; + case "bool": + case "boolean": + return fs; + case "string": + return As + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + t) + }(t.type); + if (void 0 === t.times) { + const e = [], + n = []; + ls.flattenJSON(t.keys, e, n, "value"), t.times = e, t.values = n + } + return void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation) + } + Object.assign(cs.prototype, { + evaluate: function(t) { + const e = this.parameterPositions; + let n = this._cachedIndex, + i = e[n], + r = e[n - 1]; + t: { + e: { + let o;n: { + i: if (!(t < i)) { + for (let o = n + 2;;) { + if (void 0 === i) { + if (t < r) break i; + return n = e.length, this._cachedIndex = n, this.afterEnd_(n - 1, t, r) + } + if (n === o) break; + if (r = i, i = e[++n], t < i) break e + } + o = e.length; + break n + }if (t >= r) break t; { + const s = e[1]; + t < s && (n = 2, r = s); + for (let o = n - 2;;) { + if (void 0 === r) return this._cachedIndex = 0, this.beforeStart_(0, t, i); + if (n === o) break; + if (i = r, r = e[--n - 1], t >= r) break e + } + o = n, n = 0 + } + } + for (; n < o;) { + const i = n + o >>> 1; + t < e[i] ? o = i : n = i + 1 + } + if (i = e[n], r = e[n - 1], void 0 === r) return this._cachedIndex = 0, + this.beforeStart_(0, t, i); + if (void 0 === i) return n = e.length, + this._cachedIndex = n, + this.afterEnd_(n - 1, r, t) + } + this._cachedIndex = n, + this.intervalChanged_(n, r, i) + } + return this.interpolate_(n, r, t, i) + }, + settings: null, + DefaultSettings_: {}, + getSettings_: function() { + return this.settings || this.DefaultSettings_ + }, + copySampleValue_: function(t) { + const e = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = t * i; + for (let t = 0; t !== i; ++t) e[t] = n[r + t]; + return e + }, + interpolate_: function() { + throw new Error("call to abstract method") + }, + intervalChanged_: function() {} + }), Object.assign(cs.prototype, { + beforeStart_: cs.prototype.copySampleValue_, + afterEnd_: cs.prototype.copySampleValue_ + }), hs.prototype = Object.assign(Object.create(cs.prototype), { + constructor: hs, + DefaultSettings_: { + endingStart: 2400, + endingEnd: 2400 + }, + intervalChanged_: function(t, e, n) { + const i = this.parameterPositions; + let r = t - 2, + o = t + 1, + s = i[r], + a = i[o]; + if (void 0 === s) switch (this.getSettings_().endingStart) { + case 2401: + r = t, s = 2 * e - n; + break; + case 2402: + r = i.length - 2, s = e + i[r] - i[r + 1]; + break; + default: + r = t, s = n + } + if (void 0 === a) switch (this.getSettings_().endingEnd) { + case 2401: + o = t, a = 2 * n - e; + break; + case 2402: + o = 1, a = n + i[1] - i[0]; + break; + default: + o = t - 1, a = e + } + const l = .5 * (n - e), + c = this.valueSize; + this._weightPrev = l / (e - s), this._weightNext = l / (a - n), this._offsetPrev = r * c, this._offsetNext = o * c + }, + interpolate_: function(t, e, n, i) { + const r = this.resultBuffer, + o = this.sampleValues, + s = this.valueSize, + a = t * s, + l = a - s, + c = this._offsetPrev, + h = this._offsetNext, + u = this._weightPrev, + d = this._weightNext, + p = (n - e) / (i - e), + f = p * p, + m = f * p, + g = -u * m + 2 * u * f - u * p, + v = (1 + u) * m + (-1.5 - 2 * u) * f + (-.5 + u) * p + 1, + y = (-1 - d) * m + (1.5 + d) * f + .5 * p, + A = d * m - d * f; + for (let t = 0; t !== s; ++t) r[t] = g * o[c + t] + v * o[l + t] + y * o[a + t] + A * o[h + t]; + return r + } + }), us.prototype = Object.assign(Object.create(cs.prototype), { + constructor: us, + interpolate_: function(t, e, n, i) { + const r = this.resultBuffer, + o = this.sampleValues, + s = this.valueSize, + a = t * s, + l = a - s, + c = (n - e) / (i - e), + h = 1 - c; + for (let t = 0; t !== s; ++t) r[t] = o[l + t] * h + o[a + t] * c; + return r + } + }), ds.prototype = Object.assign(Object.create(cs.prototype), { + constructor: ds, + interpolate_: function(t) { + return this.copySampleValue_(t - 1) + } + }), Object.assign(ps, { + toJSON: function(t) { + const e = t.constructor; + let n; + if (void 0 !== e.toJSON) n = e.toJSON(t); + else { + n = { + name: t.name, + times: ls.convertArray(t.times, Array), + values: ls.convertArray(t.values, Array) + }; + const e = t.getInterpolation(); + e !== t.DefaultInterpolation && (n.interpolation = e) + } + return n.type = t.ValueTypeName, n + } + }), Object.assign(ps.prototype, { + constructor: ps, + TimeBufferType: Float32Array, + ValueBufferType: Float32Array, + DefaultInterpolation: 2301, + InterpolantFactoryMethodDiscrete: function(t) { + return new ds(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodLinear: function(t) { + return new us(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodSmooth: function(t) { + return new hs(this.times, this.values, this.getValueSize(), t) + }, + setInterpolation: function(t) { + let e; + switch (t) { + case 2300: + e = this.InterpolantFactoryMethodDiscrete; + break; + case 2301: + e = this.InterpolantFactoryMethodLinear; + break; + case 2302: + e = this.InterpolantFactoryMethodSmooth + } + if (void 0 === e) { + const e = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (void 0 === this.createInterpolant) { + if (t === this.DefaultInterpolation) throw new Error(e); + this.setInterpolation(this.DefaultInterpolation) + } + return console.warn("THREE.KeyframeTrack:", e), this + } + return this.createInterpolant = e, this + }, + getInterpolation: function() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return 2300; + case this.InterpolantFactoryMethodLinear: + return 2301; + case this.InterpolantFactoryMethodSmooth: + return 2302 + } + }, + getValueSize: function() { + return this.values.length / this.times.length + }, + shift: function(t) { + if (0 !== t) { + const e = this.times; + for (let n = 0, i = e.length; n !== i; ++n) e[n] += t + } + return this + }, + scale: function(t) { + if (1 !== t) { + const e = this.times; + for (let n = 0, i = e.length; n !== i; ++n) e[n] *= t + } + return this + }, + trim: function(t, e) { + const n = this.times, + i = n.length; + let r = 0, + o = i - 1; + for (; r !== i && n[r] < t;) ++r; + for (; - 1 !== o && n[o] > e;) --o; + if (++o, 0 !== r || o !== i) { + r >= o && (o = Math.max(o, 1), r = o - 1); + const t = this.getValueSize(); + this.times = ls.arraySlice(n, r, o), this.values = ls.arraySlice(this.values, r * t, o * t) + } + return this + }, + validate: function() { + let t = !0; + const e = this.getValueSize(); + e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), t = !1); + const n = this.times, + i = this.values, + r = n.length; + 0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), t = !1); + let o = null; + for (let e = 0; e !== r; e++) { + const i = n[e]; + if ("number" == typeof i && isNaN(i)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, e, i), t = !1; + break + } + if (null !== o && o > i) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, e, i, o), t = !1; + break + } + o = i + } + if (void 0 !== i && ls.isTypedArray(i)) + for (let e = 0, n = i.length; e !== n; ++e) { + const n = i[e]; + if (isNaN(n)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, e, n), t = !1; + break + } + } + return t + }, + optimize: function() { + const t = ls.arraySlice(this.times), + e = ls.arraySlice(this.values), + n = this.getValueSize(), + i = 2302 === this.getInterpolation(), + r = t.length - 1; + let o = 1; + for (let s = 1; s < r; ++s) { + let r = !1; + const a = t[s]; + if (a !== t[s + 1] && (1 !== s || a !== t[0])) + if (i) r = !0; + else { + const t = s * n, + i = t - n, + o = t + n; + for (let s = 0; s !== n; ++s) { + const n = e[t + s]; + if (n !== e[i + s] || n !== e[o + s]) { + r = !0; + break + } + } + } if (r) { + if (s !== o) { + t[o] = t[s]; + const i = s * n, + r = o * n; + for (let t = 0; t !== n; ++t) e[r + t] = e[i + t] + }++o + } + } + if (r > 0) { + t[o] = t[r]; + for (let t = r * n, i = o * n, s = 0; s !== n; ++s) e[i + s] = e[t + s]; + ++o + } + return o !== t.length ? (this.times = ls.arraySlice(t, 0, o), this.values = ls.arraySlice(e, 0, o * n)) : (this.times = t, this.values = e), this + }, + clone: function() { + const t = ls.arraySlice(this.times, 0), + e = ls.arraySlice(this.values, 0), + n = new(0, this.constructor)(this.name, t, e); + return n.createInterpolant = this.createInterpolant, n + } + }), fs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: fs, + ValueTypeName: "bool", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), ms.prototype = Object.assign(Object.create(ps.prototype), { + constructor: ms, + ValueTypeName: "color" + }), gs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: gs, + ValueTypeName: "number" + }), vs.prototype = Object.assign(Object.create(cs.prototype), { + constructor: vs, + interpolate_: function(t, e, n, i) { + const r = this.resultBuffer, + o = this.sampleValues, + s = this.valueSize, + a = (n - e) / (i - e); + let l = t * s; + for (let t = l + s; l !== t; l += 4) S.slerpFlat(r, 0, o, l - s, o, l, a); + return r + } + }), ys.prototype = Object.assign(Object.create(ps.prototype), { + constructor: ys, + ValueTypeName: "quaternion", + DefaultInterpolation: 2301, + InterpolantFactoryMethodLinear: function(t) { + return new vs(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodSmooth: void 0 + }), As.prototype = Object.assign(Object.create(ps.prototype), { + constructor: As, + ValueTypeName: "string", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), xs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: xs, + ValueTypeName: "vector" + }), Object.assign(_s, { + parse: function(t) { + const e = [], + n = t.tracks, + i = 1 / (t.fps || 1); + for (let t = 0, r = n.length; t !== r; ++t) e.push(bs(n[t]).scale(i)); + const r = new _s(t.name, t.duration, e, t.blendMode); + return r.uuid = t.uuid, r + }, + toJSON: function(t) { + const e = [], + n = t.tracks, + i = { + name: t.name, + duration: t.duration, + tracks: e, + uuid: t.uuid, + blendMode: t.blendMode + }; + for (let t = 0, i = n.length; t !== i; ++t) e.push(ps.toJSON(n[t])); + return i + }, + CreateFromMorphTargetSequence: function(t, e, n, i) { + const r = e.length, + o = []; + for (let t = 0; t < r; t++) { + let s = [], + a = []; + s.push((t + r - 1) % r, t, (t + 1) % r), a.push(0, 1, 0); + const l = ls.getKeyframeOrder(s); + s = ls.sortedArray(s, 1, l), a = ls.sortedArray(a, 1, l), i || 0 !== s[0] || (s.push(r), a.push(a[0])), o.push(new gs(".morphTargetInfluences[" + e[t].name + "]", s, a).scale(1 / n)) + } + return new _s(t, -1, o) + }, + findByName: function(t, e) { + let n = t; + if (!Array.isArray(t)) { + const e = t; + n = e.geometry && e.geometry.animations || e.animations + } + for (let t = 0; t < n.length; t++) + if (n[t].name === e) return n[t]; + return null + }, + CreateClipsFromMorphTargetSequences: function(t, e, n) { + const i = {}, + r = /^([\w-]*?)([\d]+)$/; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e], + o = n.name.match(r); + if (o && o.length > 1) { + const t = o[1]; + let e = i[t]; + e || (i[t] = e = []), e.push(n) + } + } + const o = []; + for (const t in i) o.push(_s.CreateFromMorphTargetSequence(t, i[t], e, n)); + return o + }, + parseAnimation: function(t, e) { + if (!t) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null; + const n = function(t, e, n, i, r) { + if (0 !== n.length) { + const o = [], + s = []; + ls.flattenJSON(n, o, s, i), 0 !== o.length && r.push(new t(e, o, s)) + } + }, + i = [], + r = t.name || "default", + o = t.fps || 30, + s = t.blendMode; + let a = t.length || -1; + const l = t.hierarchy || []; + for (let t = 0; t < l.length; t++) { + const r = l[t].keys; + if (r && 0 !== r.length) + if (r[0].morphTargets) { + const t = {}; + let e; + for (e = 0; e < r.length; e++) + if (r[e].morphTargets) + for (let n = 0; n < r[e].morphTargets.length; n++) t[r[e].morphTargets[n]] = -1; + for (const n in t) { + const t = [], + o = []; + for (let i = 0; i !== r[e].morphTargets.length; ++i) { + const i = r[e]; + t.push(i.time), o.push(i.morphTarget === n ? 1 : 0) + } + i.push(new gs(".morphTargetInfluence[" + n + "]", t, o)) + } + a = t.length * (o || 1) + } else { + const o = ".bones[" + e[t].name + "]"; + n(xs, o + ".position", r, "pos", i), n(ys, o + ".quaternion", r, "rot", i), n(xs, o + ".scale", r, "scl", i) + } + } + if (0 === i.length) return null; + return new _s(r, a, i, s) + } + }), Object.assign(_s.prototype, { + resetDuration: function() { + let t = 0; + for (let e = 0, n = this.tracks.length; e !== n; ++e) { + const n = this.tracks[e]; + t = Math.max(t, n.times[n.times.length - 1]) + } + return this.duration = t, this + }, + trim: function() { + for (let t = 0; t < this.tracks.length; t++) this.tracks[t].trim(0, this.duration); + return this + }, + validate: function() { + let t = !0; + for (let e = 0; e < this.tracks.length; e++) t = t && this.tracks[e].validate(); + return t + }, + optimize: function() { + for (let t = 0; t < this.tracks.length; t++) this.tracks[t].optimize(); + return this + }, + clone: function() { + const t = []; + for (let e = 0; e < this.tracks.length; e++) t.push(this.tracks[e].clone()); + return new _s(this.name, this.duration, t, this.blendMode) + }, + toJSON: function() { + return _s.toJSON(this) + } + }); + const ws = { + enabled: !1, + files: {}, + add: function(t, e) { + !1 !== this.enabled && (this.files[t] = e) + }, + get: function(t) { + if (!1 !== this.enabled) return this.files[t] + }, + remove: function(t) { + delete this.files[t] + }, + clear: function() { + this.files = {} + } + }; + const Ms = new function(t, e, n) { + const i = this; + let r = !1, + o = 0, + s = 0, + a = void 0; + const l = []; + this.onStart = void 0, this.onLoad = t, this.onProgress = e, this.onError = n, this.itemStart = function(t) { + s++, !1 === r && void 0 !== i.onStart && i.onStart(t, o, s), r = !0 + }, this.itemEnd = function(t) { + o++, void 0 !== i.onProgress && i.onProgress(t, o, s), o === s && (r = !1, void 0 !== i.onLoad && i.onLoad()) + }, this.itemError = function(t) { + void 0 !== i.onError && i.onError(t) + }, this.resolveURL = function(t) { + return a ? a(t) : t + }, this.setURLModifier = function(t) { + return a = t, this + }, this.addHandler = function(t, e) { + return l.push(t, e), this + }, this.removeHandler = function(t) { + const e = l.indexOf(t); + return -1 !== e && l.splice(e, 2), this + }, this.getHandler = function(t) { + for (let e = 0, n = l.length; e < n; e += 2) { + const n = l[e], + i = l[e + 1]; + if (n.global && (n.lastIndex = 0), n.test(t)) return i + } + return null + } + }; + + function Es(t) { + this.manager = void 0 !== t ? t : Ms, this.crossOrigin = "anonymous", this.withCredentials = !1, this.path = "", this.resourcePath = "", this.requestHeader = {} + } + Object.assign(Es.prototype, { + load: function() {}, + loadAsync: function(t, e) { + const n = this; + return new Promise((function(i, r) { + n.load(t, i, e, r) + })) + }, + parse: function() {}, + setCrossOrigin: function(t) { + return this.crossOrigin = t, this + }, + setWithCredentials: function(t) { + return this.withCredentials = t, this + }, + setPath: function(t) { + return this.path = t, this + }, + setResourcePath: function(t) { + return this.resourcePath = t, this + }, + setRequestHeader: function(t) { + return this.requestHeader = t, this + } + }); + const Ss = {}; + + function Ts(t) { + Es.call(this, t) + } + + function Ls(t) { + Es.call(this, t) + } + + function Rs(t) { + Es.call(this, t) + } + + function Cs(t) { + Es.call(this, t) + } + + function Ps(t) { + Es.call(this, t) + } + + function Ds(t) { + Es.call(this, t) + } + + function Is(t) { + Es.call(this, t) + } + + function Os() { + this.type = "Curve", this.arcLengthDivisions = 200 + } + + function Ns(t, e, n, i, r, o, s, a) { + Os.call(this), this.type = "EllipseCurve", this.aX = t || 0, this.aY = e || 0, this.xRadius = n || 1, this.yRadius = i || 1, this.aStartAngle = r || 0, this.aEndAngle = o || 2 * Math.PI, this.aClockwise = s || !1, this.aRotation = a || 0 + } + + function Bs(t, e, n, i, r, o) { + Ns.call(this, t, e, n, n, i, r, o), this.type = "ArcCurve" + } + + function Fs() { + let t = 0, + e = 0, + n = 0, + i = 0; + + function r(r, o, s, a) { + t = r, e = s, n = -3 * r + 3 * o - 2 * s - a, i = 2 * r - 2 * o + s + a + } + return { + initCatmullRom: function(t, e, n, i, o) { + r(e, n, o * (n - t), o * (i - e)) + }, + initNonuniformCatmullRom: function(t, e, n, i, o, s, a) { + let l = (e - t) / o - (n - t) / (o + s) + (n - e) / s, + c = (n - e) / s - (i - e) / (s + a) + (i - n) / a; + l *= s, c *= s, r(e, n, l, c) + }, + calc: function(r) { + const o = r * r; + return t + e * r + n * o + i * (o * r) + } + } + } + Ts.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ts, + load: function(t, e, n, i) { + void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); + const r = this, + o = ws.get(t); + if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { + e && e(o), r.manager.itemEnd(t) + }), 0), o; + if (void 0 !== Ss[t]) return void Ss[t].push({ + onLoad: e, + onProgress: n, + onError: i + }); + const s = t.match(/^data:(.*?)(;base64)?,(.*)$/); + let a; + if (s) { + const n = s[1], + o = !!s[2]; + let a = s[3]; + a = decodeURIComponent(a), o && (a = atob(a)); + try { + let i; + const o = (this.responseType || "").toLowerCase(); + switch (o) { + case "arraybuffer": + case "blob": + const t = new Uint8Array(a.length); + for (let e = 0; e < a.length; e++) t[e] = a.charCodeAt(e); + i = "blob" === o ? new Blob([t.buffer], { + type: n + }) : t.buffer; + break; + case "document": + const e = new DOMParser; + i = e.parseFromString(a, n); + break; + case "json": + i = JSON.parse(a); + break; + default: + i = a + } + setTimeout((function() { + e && e(i), r.manager.itemEnd(t) + }), 0) + } catch (e) { + setTimeout((function() { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + }), 0) + } + } else { + Ss[t] = [], Ss[t].push({ + onLoad: e, + onProgress: n, + onError: i + }), a = new XMLHttpRequest, a.open("GET", t, !0), a.addEventListener("load", (function(e) { + const n = this.response, + i = Ss[t]; + if (delete Ss[t], 200 === this.status || 0 === this.status) { + 0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), ws.add(t, n); + for (let t = 0, e = i.length; t < e; t++) { + const e = i[t]; + e.onLoad && e.onLoad(n) + } + r.manager.itemEnd(t) + } else { + for (let t = 0, n = i.length; t < n; t++) { + const n = i[t]; + n.onError && n.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + } + }), !1), a.addEventListener("progress", (function(e) { + const n = Ss[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onProgress && i.onProgress(e) + } + }), !1), a.addEventListener("error", (function(e) { + const n = Ss[t]; + delete Ss[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onError && i.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + }), !1), a.addEventListener("abort", (function(e) { + const n = Ss[t]; + delete Ss[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onError && i.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + }), !1), void 0 !== this.responseType && (a.responseType = this.responseType), void 0 !== this.withCredentials && (a.withCredentials = this.withCredentials), a.overrideMimeType && a.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"); + for (const t in this.requestHeader) a.setRequestHeader(t, this.requestHeader[t]); + a.send(null) + } + return r.manager.itemStart(t), a + }, + setResponseType: function(t) { + return this.responseType = t, this + }, + setMimeType: function(t) { + return this.mimeType = t, this + } + }), Ls.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ls, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + e(r.parse(JSON.parse(n))) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + }, + parse: function(t) { + const e = []; + for (let n = 0; n < t.length; n++) { + const i = _s.parse(t[n]); + e.push(i) + } + return e + } + }), Rs.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Rs, + load: function(t, e, n, i) { + const r = this, + o = [], + s = new mo, + a = new Ts(this.manager); + a.setPath(this.path), a.setResponseType("arraybuffer"), a.setRequestHeader(this.requestHeader), a.setWithCredentials(r.withCredentials); + let l = 0; + + function c(c) { + a.load(t[c], (function(t) { + const n = r.parse(t, !0); + o[c] = { + width: n.width, + height: n.height, + format: n.format, + mipmaps: n.mipmaps + }, l += 1, 6 === l && (1 === n.mipmapCount && (s.minFilter = 1006), s.image = o, s.format = n.format, s.needsUpdate = !0, e && e(s)) + }), n, i) + } + if (Array.isArray(t)) + for (let e = 0, n = t.length; e < n; ++e) c(e); + else a.load(t, (function(t) { + const n = r.parse(t, !0); + if (n.isCubemap) { + const t = n.mipmaps.length / n.mipmapCount; + for (let e = 0; e < t; e++) { + o[e] = { + mipmaps: [] + }; + for (let t = 0; t < n.mipmapCount; t++) o[e].mipmaps.push(n.mipmaps[e * n.mipmapCount + t]), o[e].format = n.format, o[e].width = n.width, o[e].height = n.height + } + s.image = o + } else s.image.width = n.width, s.image.height = n.height, s.mipmaps = n.mipmaps; + 1 === n.mipmapCount && (s.minFilter = 1006), s.format = n.format, s.needsUpdate = !0, e && e(s) + }), n, i); + return s + } + }), Cs.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Cs, + load: function(t, e, n, i) { + void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); + const r = this, + o = ws.get(t); + if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { + e && e(o), r.manager.itemEnd(t) + }), 0), o; + const s = document.createElementNS("http://www.w3.org/1999/xhtml", "img"); + + function a() { + s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), ws.add(t, this), e && e(this), r.manager.itemEnd(t) + } + + function l(e) { + s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + } + return s.addEventListener("load", a, !1), s.addEventListener("error", l, !1), "data:" !== t.substr(0, 5) && void 0 !== this.crossOrigin && (s.crossOrigin = this.crossOrigin), r.manager.itemStart(t), s.src = t, s + } + }), Ps.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ps, + load: function(t, e, n, i) { + const r = new Ze, + o = new Cs(this.manager); + o.setCrossOrigin(this.crossOrigin), o.setPath(this.path); + let s = 0; + + function a(n) { + o.load(t[n], (function(t) { + r.images[n] = t, s++, 6 === s && (r.needsUpdate = !0, e && e(r)) + }), void 0, i) + } + for (let e = 0; e < t.length; ++e) a(e); + return r + } + }), Ds.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ds, + load: function(t, e, n, i) { + const r = this, + o = new Ke, + s = new Ts(this.manager); + return s.setResponseType("arraybuffer"), s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(r.withCredentials), s.load(t, (function(t) { + const n = r.parse(t); + n && (void 0 !== n.image ? o.image = n.image : void 0 !== n.data && (o.image.width = n.width, o.image.height = n.height, o.image.data = n.data), o.wrapS = void 0 !== n.wrapS ? n.wrapS : 1001, o.wrapT = void 0 !== n.wrapT ? n.wrapT : 1001, o.magFilter = void 0 !== n.magFilter ? n.magFilter : 1006, o.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, o.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1, void 0 !== n.encoding && (o.encoding = n.encoding), void 0 !== n.flipY && (o.flipY = n.flipY), void 0 !== n.format && (o.format = n.format), void 0 !== n.type && (o.type = n.type), void 0 !== n.mipmaps && (o.mipmaps = n.mipmaps, o.minFilter = 1008), 1 === n.mipmapCount && (o.minFilter = 1006), o.needsUpdate = !0, e && e(o, n)) + }), n, i), o + } + }), Is.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Is, + load: function(t, e, n, i) { + const r = new b, + o = new Cs(this.manager); + return o.setCrossOrigin(this.crossOrigin), o.setPath(this.path), o.load(t, (function(n) { + r.image = n; + const i = t.search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/); + r.format = i ? 1022 : 1023, r.needsUpdate = !0, void 0 !== e && e(r) + }), n, i), r + } + }), Object.assign(Os.prototype, { + getPoint: function() { + return console.warn("THREE.Curve: .getPoint() not implemented."), null + }, + getPointAt: function(t, e) { + const n = this.getUtoTmapping(t); + return this.getPoint(n, e) + }, + getPoints: function(t = 5) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return e + }, + getSpacedPoints: function(t = 5) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPointAt(n / t)); + return e + }, + getLength: function() { + const t = this.getLengths(); + return t[t.length - 1] + }, + getLengths: function(t) { + if (void 0 === t && (t = this.arcLengthDivisions), this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate) return this.cacheArcLengths; + this.needsUpdate = !1; + const e = []; + let n, i = this.getPoint(0), + r = 0; + e.push(0); + for (let o = 1; o <= t; o++) n = this.getPoint(o / t), r += n.distanceTo(i), e.push(r), i = n; + return this.cacheArcLengths = e, e + }, + updateArcLengths: function() { + this.needsUpdate = !0, this.getLengths() + }, + getUtoTmapping: function(t, e) { + const n = this.getLengths(); + let i = 0; + const r = n.length; + let o; + o = e || t * n[r - 1]; + let s, a = 0, + l = r - 1; + for (; a <= l;) + if (i = Math.floor(a + (l - a) / 2), s = n[i] - o, s < 0) a = i + 1; + else { + if (!(s > 0)) { + l = i; + break + } + l = i - 1 + } if (i = l, n[i] === o) return i / (r - 1); + const c = n[i]; + return (i + (o - c) / (n[i + 1] - c)) / (r - 1) + }, + getTangent: function(t, e) { + let n = t - 1e-4, + i = t + 1e-4; + n < 0 && (n = 0), i > 1 && (i = 1); + const r = this.getPoint(n), + o = this.getPoint(i), + s = e || (r.isVector2 ? new v : new T); + return s.copy(o).sub(r).normalize(), s + }, + getTangentAt: function(t, e) { + const n = this.getUtoTmapping(t); + return this.getTangent(n, e) + }, + computeFrenetFrames: function(t, e) { + const n = new T, + i = [], + r = [], + o = [], + s = new T, + a = new et; + for (let e = 0; e <= t; e++) { + const n = e / t; + i[e] = this.getTangentAt(n, new T), i[e].normalize() + } + r[0] = new T, o[0] = new T; + let l = Number.MAX_VALUE; + const c = Math.abs(i[0].x), + h = Math.abs(i[0].y), + u = Math.abs(i[0].z); + c <= l && (l = c, n.set(1, 0, 0)), h <= l && (l = h, n.set(0, 1, 0)), u <= l && n.set(0, 0, 1), s.crossVectors(i[0], n).normalize(), r[0].crossVectors(i[0], s), o[0].crossVectors(i[0], r[0]); + for (let e = 1; e <= t; e++) { + if (r[e] = r[e - 1].clone(), o[e] = o[e - 1].clone(), s.crossVectors(i[e - 1], i[e]), s.length() > Number.EPSILON) { + s.normalize(); + const t = Math.acos(g.clamp(i[e - 1].dot(i[e]), -1, 1)); + r[e].applyMatrix4(a.makeRotationAxis(s, t)) + } + o[e].crossVectors(i[e], r[e]) + } + if (!0 === e) { + let e = Math.acos(g.clamp(r[0].dot(r[t]), -1, 1)); + e /= t, i[0].dot(s.crossVectors(r[0], r[t])) > 0 && (e = -e); + for (let n = 1; n <= t; n++) r[n].applyMatrix4(a.makeRotationAxis(i[n], e * n)), o[n].crossVectors(i[n], r[n]) + } + return { + tangents: i, + normals: r, + binormals: o + } + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.arcLengthDivisions = t.arcLengthDivisions, this + }, + toJSON: function() { + const t = { + metadata: { + version: 4.5, + type: "Curve", + generator: "Curve.toJSON" + } + }; + return t.arcLengthDivisions = this.arcLengthDivisions, t.type = this.type, t + }, + fromJSON: function(t) { + return this.arcLengthDivisions = t.arcLengthDivisions, this + } + }), Ns.prototype = Object.create(Os.prototype), Ns.prototype.constructor = Ns, Ns.prototype.isEllipseCurve = !0, Ns.prototype.getPoint = function(t, e) { + const n = e || new v, + i = 2 * Math.PI; + let r = this.aEndAngle - this.aStartAngle; + const o = Math.abs(r) < Number.EPSILON; + for (; r < 0;) r += i; + for (; r > i;) r -= i; + r < Number.EPSILON && (r = o ? 0 : i), !0 !== this.aClockwise || o || (r === i ? r = -i : r -= i); + const s = this.aStartAngle + t * r; + let a = this.aX + this.xRadius * Math.cos(s), + l = this.aY + this.yRadius * Math.sin(s); + if (0 !== this.aRotation) { + const t = Math.cos(this.aRotation), + e = Math.sin(this.aRotation), + n = a - this.aX, + i = l - this.aY; + a = n * t - i * e + this.aX, l = n * e + i * t + this.aY + } + return n.set(a, l) + }, Ns.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this + }, Ns.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.aX = this.aX, t.aY = this.aY, t.xRadius = this.xRadius, t.yRadius = this.yRadius, t.aStartAngle = this.aStartAngle, t.aEndAngle = this.aEndAngle, t.aClockwise = this.aClockwise, t.aRotation = this.aRotation, t + }, Ns.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this + }, Bs.prototype = Object.create(Ns.prototype), Bs.prototype.constructor = Bs, Bs.prototype.isArcCurve = !0; + const zs = new T, + Us = new Fs, + Hs = new Fs, + Gs = new Fs; + + function Vs(t = [], e = !1, n = "centripetal", i = .5) { + Os.call(this), this.type = "CatmullRomCurve3", this.points = t, this.closed = e, this.curveType = n, this.tension = i + } + + function ks(t, e, n, i, r) { + const o = .5 * (i - e), + s = .5 * (r - n), + a = t * t; + return (2 * n - 2 * i + o + s) * (t * a) + (-3 * n + 3 * i - 2 * o - s) * a + o * t + n + } + + function Ws(t, e, n, i) { + return function(t, e) { + const n = 1 - t; + return n * n * e + }(t, e) + function(t, e) { + return 2 * (1 - t) * t * e + }(t, n) + function(t, e) { + return t * t * e + }(t, i) + } + + function js(t, e, n, i, r) { + return function(t, e) { + const n = 1 - t; + return n * n * n * e + }(t, e) + function(t, e) { + const n = 1 - t; + return 3 * n * n * t * e + }(t, n) + function(t, e) { + return 3 * (1 - t) * t * t * e + }(t, i) + function(t, e) { + return t * t * t * e + }(t, r) + } + + function Xs(t = new v, e = new v, n = new v, i = new v) { + Os.call(this), this.type = "CubicBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i + } + + function qs(t = new T, e = new T, n = new T, i = new T) { + Os.call(this), this.type = "CubicBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i + } + + function Ys(t = new v, e = new v) { + Os.call(this), this.type = "LineCurve", this.v1 = t, this.v2 = e + } + + function Qs(t = new T, e = new T) { + Os.call(this), this.type = "LineCurve3", this.v1 = t, this.v2 = e + } + + function Zs(t = new v, e = new v, n = new v) { + Os.call(this), this.type = "QuadraticBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n + } + + function Js(t = new T, e = new T, n = new T) { + Os.call(this), this.type = "QuadraticBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n + } + + function Ks(t = []) { + Os.call(this), this.type = "SplineCurve", this.points = t + } + Vs.prototype = Object.create(Os.prototype), Vs.prototype.constructor = Vs, Vs.prototype.isCatmullRomCurve3 = !0, Vs.prototype.getPoint = function(t, e = new T) { + const n = e, + i = this.points, + r = i.length, + o = (r - (this.closed ? 0 : 1)) * t; + let s, a, l = Math.floor(o), + c = o - l; + this.closed ? l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r : 0 === c && l === r - 1 && (l = r - 2, c = 1), this.closed || l > 0 ? s = i[(l - 1) % r] : (zs.subVectors(i[0], i[1]).add(i[0]), s = zs); + const h = i[l % r], + u = i[(l + 1) % r]; + if (this.closed || l + 2 < r ? a = i[(l + 2) % r] : (zs.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), a = zs), "centripetal" === this.curveType || "chordal" === this.curveType) { + const t = "chordal" === this.curveType ? .5 : .25; + let e = Math.pow(s.distanceToSquared(h), t), + n = Math.pow(h.distanceToSquared(u), t), + i = Math.pow(u.distanceToSquared(a), t); + n < 1e-4 && (n = 1), e < 1e-4 && (e = n), i < 1e-4 && (i = n), Us.initNonuniformCatmullRom(s.x, h.x, u.x, a.x, e, n, i), Hs.initNonuniformCatmullRom(s.y, h.y, u.y, a.y, e, n, i), Gs.initNonuniformCatmullRom(s.z, h.z, u.z, a.z, e, n, i) + } else "catmullrom" === this.curveType && (Us.initCatmullRom(s.x, h.x, u.x, a.x, this.tension), Hs.initCatmullRom(s.y, h.y, u.y, a.y, this.tension), Gs.initCatmullRom(s.z, h.z, u.z, a.z, this.tension)); + return n.set(Us.calc(c), Hs.calc(c), Gs.calc(c)), n + }, Vs.prototype.copy = function(t) { + Os.prototype.copy.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(n.clone()) + } + return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this + }, Vs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + t.points = []; + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e]; + t.points.push(n.toArray()) + } + return t.closed = this.closed, t.curveType = this.curveType, t.tension = this.tension, t + }, Vs.prototype.fromJSON = function(t) { + Os.prototype.fromJSON.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push((new T).fromArray(n)) + } + return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this + }, Xs.prototype = Object.create(Os.prototype), Xs.prototype.constructor = Xs, Xs.prototype.isCubicBezierCurve = !0, Xs.prototype.getPoint = function(t, e = new v) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2, + s = this.v3; + return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y)), n + }, Xs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this + }, Xs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t + }, Xs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this + }, qs.prototype = Object.create(Os.prototype), qs.prototype.constructor = qs, qs.prototype.isCubicBezierCurve3 = !0, qs.prototype.getPoint = function(t, e = new T) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2, + s = this.v3; + return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y), js(t, i.z, r.z, o.z, s.z)), n + }, qs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this + }, qs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t + }, qs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this + }, Ys.prototype = Object.create(Os.prototype), Ys.prototype.constructor = Ys, Ys.prototype.isLineCurve = !0, Ys.prototype.getPoint = function(t, e = new v) { + const n = e; + return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n + }, Ys.prototype.getPointAt = function(t, e) { + return this.getPoint(t, e) + }, Ys.prototype.getTangent = function(t, e) { + const n = e || new v; + return n.copy(this.v2).sub(this.v1).normalize(), n + }, Ys.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Ys.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Ys.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Qs.prototype = Object.create(Os.prototype), Qs.prototype.constructor = Qs, Qs.prototype.isLineCurve3 = !0, Qs.prototype.getPoint = function(t, e = new T) { + const n = e; + return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n + }, Qs.prototype.getPointAt = function(t, e) { + return this.getPoint(t, e) + }, Qs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Qs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Qs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Zs.prototype = Object.create(Os.prototype), Zs.prototype.constructor = Zs, Zs.prototype.isQuadraticBezierCurve = !0, Zs.prototype.getPoint = function(t, e = new v) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2; + return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y)), n + }, Zs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Zs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Zs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Js.prototype = Object.create(Os.prototype), Js.prototype.constructor = Js, Js.prototype.isQuadraticBezierCurve3 = !0, Js.prototype.getPoint = function(t, e = new T) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2; + return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y), Ws(t, i.z, r.z, o.z)), n + }, Js.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Js.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Js.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Ks.prototype = Object.create(Os.prototype), Ks.prototype.constructor = Ks, Ks.prototype.isSplineCurve = !0, Ks.prototype.getPoint = function(t, e = new v) { + const n = e, + i = this.points, + r = (i.length - 1) * t, + o = Math.floor(r), + s = r - o, + a = i[0 === o ? o : o - 1], + l = i[o], + c = i[o > i.length - 2 ? i.length - 1 : o + 1], + h = i[o > i.length - 3 ? i.length - 1 : o + 2]; + return n.set(ks(s, a.x, l.x, c.x, h.x), ks(s, a.y, l.y, c.y, h.y)), n + }, Ks.prototype.copy = function(t) { + Os.prototype.copy.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(n.clone()) + } + return this + }, Ks.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + t.points = []; + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e]; + t.points.push(n.toArray()) + } + return t + }, Ks.prototype.fromJSON = function(t) { + Os.prototype.fromJSON.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push((new v).fromArray(n)) + } + return this + }; + var $s = Object.freeze({ + __proto__: null, + ArcCurve: Bs, + CatmullRomCurve3: Vs, + CubicBezierCurve: Xs, + CubicBezierCurve3: qs, + EllipseCurve: Ns, + LineCurve: Ys, + LineCurve3: Qs, + QuadraticBezierCurve: Zs, + QuadraticBezierCurve3: Js, + SplineCurve: Ks + }); + + function ta() { + Os.call(this), this.type = "CurvePath", this.curves = [], this.autoClose = !1 + } + + function ea(t) { + ta.call(this), this.type = "Path", this.currentPoint = new v, t && this.setFromPoints(t) + } + + function na(t) { + ea.call(this, t), this.uuid = g.generateUUID(), this.type = "Shape", this.holes = [] + } + + function ia(t, e = 1) { + St.call(this), this.type = "Light", this.color = new Yt(t), this.intensity = e + } + + function ra(t, e, n) { + ia.call(this, t, n), this.type = "HemisphereLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.groundColor = new Yt(e) + } + + function oa(t) { + this.camera = t, this.bias = 0, this.normalBias = 0, this.radius = 1, this.mapSize = new v(512, 512), this.map = null, this.mapPass = null, this.matrix = new et, this.autoUpdate = !0, this.needsUpdate = !1, this._frustum = new en, this._frameExtents = new v(1, 1), this._viewportCount = 1, this._viewports = [new M(0, 0, 1, 1)] + } + + function sa() { + oa.call(this, new Ye(50, 1, .5, 500)), this.focus = 1 + } + + function aa(t, e, n, i, r, o) { + ia.call(this, t, e), this.type = "SpotLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, Object.defineProperty(this, "power", { + get: function() { + return this.intensity * Math.PI + }, + set: function(t) { + this.intensity = t / Math.PI + } + }), this.distance = void 0 !== n ? n : 0, this.angle = void 0 !== i ? i : Math.PI / 3, this.penumbra = void 0 !== r ? r : 0, this.decay = void 0 !== o ? o : 1, this.shadow = new sa + } + + function la() { + oa.call(this, new Ye(90, 1, .5, 500)), this._frameExtents = new v(4, 2), this._viewportCount = 6, this._viewports = [new M(2, 1, 1, 1), new M(0, 1, 1, 1), new M(3, 1, 1, 1), new M(1, 1, 1, 1), new M(3, 0, 1, 1), new M(1, 0, 1, 1)], this._cubeDirections = [new T(1, 0, 0), new T(-1, 0, 0), new T(0, 0, 1), new T(0, 0, -1), new T(0, 1, 0), new T(0, -1, 0)], this._cubeUps = [new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 0, 1), new T(0, 0, -1)] + } + + function ca(t, e, n, i) { + ia.call(this, t, e), this.type = "PointLight", Object.defineProperty(this, "power", { + get: function() { + return 4 * this.intensity * Math.PI + }, + set: function(t) { + this.intensity = t / (4 * Math.PI) + } + }), this.distance = void 0 !== n ? n : 0, this.decay = void 0 !== i ? i : 1, this.shadow = new la + } + + function ha(t = -1, e = 1, n = 1, i = -1, r = .1, o = 2e3) { + qe.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = t, this.right = e, this.top = n, this.bottom = i, this.near = r, this.far = o, this.updateProjectionMatrix() + } + + function ua() { + oa.call(this, new ha(-5, 5, 5, -5, .5, 500)) + } + + function da(t, e) { + ia.call(this, t, e), this.type = "DirectionalLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, this.shadow = new ua + } + + function pa(t, e) { + ia.call(this, t, e), this.type = "AmbientLight" + } + + function fa(t, e, n, i) { + ia.call(this, t, e), this.type = "RectAreaLight", this.width = void 0 !== n ? n : 10, this.height = void 0 !== i ? i : 10 + } + ta.prototype = Object.assign(Object.create(Os.prototype), { + constructor: ta, + add: function(t) { + this.curves.push(t) + }, + closePath: function() { + const t = this.curves[0].getPoint(0), + e = this.curves[this.curves.length - 1].getPoint(1); + t.equals(e) || this.curves.push(new Ys(e, t)) + }, + getPoint: function(t) { + const e = t * this.getLength(), + n = this.getCurveLengths(); + let i = 0; + for (; i < n.length;) { + if (n[i] >= e) { + const t = n[i] - e, + r = this.curves[i], + o = r.getLength(), + s = 0 === o ? 0 : 1 - t / o; + return r.getPointAt(s) + } + i++ + } + return null + }, + getLength: function() { + const t = this.getCurveLengths(); + return t[t.length - 1] + }, + updateArcLengths: function() { + this.needsUpdate = !0, this.cacheLengths = null, this.getCurveLengths() + }, + getCurveLengths: function() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) return this.cacheLengths; + const t = []; + let e = 0; + for (let n = 0, i = this.curves.length; n < i; n++) e += this.curves[n].getLength(), t.push(e); + return this.cacheLengths = t, t + }, + getSpacedPoints: function(t = 40) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return this.autoClose && e.push(e[0]), e + }, + getPoints: function(t = 12) { + const e = []; + let n; + for (let i = 0, r = this.curves; i < r.length; i++) { + const o = r[i], + s = o && o.isEllipseCurve ? 2 * t : o && (o.isLineCurve || o.isLineCurve3) ? 1 : o && o.isSplineCurve ? t * o.points.length : t, + a = o.getPoints(s); + for (let t = 0; t < a.length; t++) { + const i = a[t]; + n && n.equals(i) || (e.push(i), n = i) + } + } + return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]), e + }, + copy: function(t) { + Os.prototype.copy.call(this, t), this.curves = []; + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e]; + this.curves.push(n.clone()) + } + return this.autoClose = t.autoClose, this + }, + toJSON: function() { + const t = Os.prototype.toJSON.call(this); + t.autoClose = this.autoClose, t.curves = []; + for (let e = 0, n = this.curves.length; e < n; e++) { + const n = this.curves[e]; + t.curves.push(n.toJSON()) + } + return t + }, + fromJSON: function(t) { + Os.prototype.fromJSON.call(this, t), this.autoClose = t.autoClose, this.curves = []; + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e]; + this.curves.push((new $s[n.type]).fromJSON(n)) + } + return this + } + }), ea.prototype = Object.assign(Object.create(ta.prototype), { + constructor: ea, + setFromPoints: function(t) { + this.moveTo(t[0].x, t[0].y); + for (let e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y); + return this + }, + moveTo: function(t, e) { + return this.currentPoint.set(t, e), this + }, + lineTo: function(t, e) { + const n = new Ys(this.currentPoint.clone(), new v(t, e)); + return this.curves.push(n), this.currentPoint.set(t, e), this + }, + quadraticCurveTo: function(t, e, n, i) { + const r = new Zs(this.currentPoint.clone(), new v(t, e), new v(n, i)); + return this.curves.push(r), this.currentPoint.set(n, i), this + }, + bezierCurveTo: function(t, e, n, i, r, o) { + const s = new Xs(this.currentPoint.clone(), new v(t, e), new v(n, i), new v(r, o)); + return this.curves.push(s), this.currentPoint.set(r, o), this + }, + splineThru: function(t) { + const e = new Ks([this.currentPoint.clone()].concat(t)); + return this.curves.push(e), this.currentPoint.copy(t[t.length - 1]), this + }, + arc: function(t, e, n, i, r, o) { + const s = this.currentPoint.x, + a = this.currentPoint.y; + return this.absarc(t + s, e + a, n, i, r, o), this + }, + absarc: function(t, e, n, i, r, o) { + return this.absellipse(t, e, n, n, i, r, o), this + }, + ellipse: function(t, e, n, i, r, o, s, a) { + const l = this.currentPoint.x, + c = this.currentPoint.y; + return this.absellipse(t + l, e + c, n, i, r, o, s, a), this + }, + absellipse: function(t, e, n, i, r, o, s, a) { + const l = new Ns(t, e, n, i, r, o, s, a); + if (this.curves.length > 0) { + const t = l.getPoint(0); + t.equals(this.currentPoint) || this.lineTo(t.x, t.y) + } + this.curves.push(l); + const c = l.getPoint(1); + return this.currentPoint.copy(c), this + }, + copy: function(t) { + return ta.prototype.copy.call(this, t), this.currentPoint.copy(t.currentPoint), this + }, + toJSON: function() { + const t = ta.prototype.toJSON.call(this); + return t.currentPoint = this.currentPoint.toArray(), t + }, + fromJSON: function(t) { + return ta.prototype.fromJSON.call(this, t), this.currentPoint.fromArray(t.currentPoint), this + } + }), na.prototype = Object.assign(Object.create(ea.prototype), { + constructor: na, + getPointsHoles: function(t) { + const e = []; + for (let n = 0, i = this.holes.length; n < i; n++) e[n] = this.holes[n].getPoints(t); + return e + }, + extractPoints: function(t) { + return { + shape: this.getPoints(t), + holes: this.getPointsHoles(t) + } + }, + copy: function(t) { + ea.prototype.copy.call(this, t), this.holes = []; + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e]; + this.holes.push(n.clone()) + } + return this + }, + toJSON: function() { + const t = ea.prototype.toJSON.call(this); + t.uuid = this.uuid, t.holes = []; + for (let e = 0, n = this.holes.length; e < n; e++) { + const n = this.holes[e]; + t.holes.push(n.toJSON()) + } + return t + }, + fromJSON: function(t) { + ea.prototype.fromJSON.call(this, t), this.uuid = t.uuid, this.holes = []; + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e]; + this.holes.push((new ea).fromJSON(n)) + } + return this + } + }), ia.prototype = Object.assign(Object.create(St.prototype), { + constructor: ia, + isLight: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), this.color.copy(t.color), this.intensity = t.intensity, this + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + return e.object.color = this.color.getHex(), e.object.intensity = this.intensity, void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (e.object.distance = this.distance), void 0 !== this.angle && (e.object.angle = this.angle), void 0 !== this.decay && (e.object.decay = this.decay), void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), e + } + }), ra.prototype = Object.assign(Object.create(ia.prototype), { + constructor: ra, + isHemisphereLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.groundColor.copy(t.groundColor), this + } + }), Object.assign(oa.prototype, { + _projScreenMatrix: new et, + _lightPositionWorld: new T, + _lookTarget: new T, + getViewportCount: function() { + return this._viewportCount + }, + getFrustum: function() { + return this._frustum + }, + updateMatrices: function(t) { + const e = this.camera, + n = this.matrix, + i = this._projScreenMatrix, + r = this._lookTarget, + o = this._lightPositionWorld; + o.setFromMatrixPosition(t.matrixWorld), e.position.copy(o), r.setFromMatrixPosition(t.target.matrixWorld), e.lookAt(r), e.updateMatrixWorld(), i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), this._frustum.setFromProjectionMatrix(i), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(e.projectionMatrix), n.multiply(e.matrixWorldInverse) + }, + getViewport: function(t) { + return this._viewports[t] + }, + getFrameExtents: function() { + return this._frameExtents + }, + copy: function(t) { + return this.camera = t.camera.clone(), this.bias = t.bias, this.radius = t.radius, this.mapSize.copy(t.mapSize), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + const t = {}; + return 0 !== this.bias && (t.bias = this.bias), 0 !== this.normalBias && (t.normalBias = this.normalBias), 1 !== this.radius && (t.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (t.mapSize = this.mapSize.toArray()), t.camera = this.camera.toJSON(!1).object, delete t.camera.matrix, t + } + }), sa.prototype = Object.assign(Object.create(oa.prototype), { + constructor: sa, + isSpotLightShadow: !0, + updateMatrices: function(t) { + const e = this.camera, + n = 2 * g.RAD2DEG * t.angle * this.focus, + i = this.mapSize.width / this.mapSize.height, + r = t.distance || e.far; + n === e.fov && i === e.aspect && r === e.far || (e.fov = n, e.aspect = i, e.far = r, e.updateProjectionMatrix()), oa.prototype.updateMatrices.call(this, t) + } + }), aa.prototype = Object.assign(Object.create(ia.prototype), { + constructor: aa, + isSpotLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.distance = t.distance, this.angle = t.angle, this.penumbra = t.penumbra, this.decay = t.decay, this.target = t.target.clone(), this.shadow = t.shadow.clone(), this + } + }), la.prototype = Object.assign(Object.create(oa.prototype), { + constructor: la, + isPointLightShadow: !0, + updateMatrices: function(t, e = 0) { + const n = this.camera, + i = this.matrix, + r = this._lightPositionWorld, + o = this._lookTarget, + s = this._projScreenMatrix; + r.setFromMatrixPosition(t.matrixWorld), n.position.copy(r), o.copy(n.position), o.add(this._cubeDirections[e]), n.up.copy(this._cubeUps[e]), n.lookAt(o), n.updateMatrixWorld(), i.makeTranslation(-r.x, -r.y, -r.z), s.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), this._frustum.setFromProjectionMatrix(s) + } + }), ca.prototype = Object.assign(Object.create(ia.prototype), { + constructor: ca, + isPointLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.distance = t.distance, this.decay = t.decay, this.shadow = t.shadow.clone(), this + } + }), ha.prototype = Object.assign(Object.create(qe.prototype), { + constructor: ha, + isOrthographicCamera: !0, + copy: function(t, e) { + return qe.prototype.copy.call(this, t, e), this.left = t.left, this.right = t.right, this.top = t.top, this.bottom = t.bottom, this.near = t.near, this.far = t.far, this.zoom = t.zoom, this.view = null === t.view ? null : Object.assign({}, t.view), this + }, + setViewOffset: function(t, e, n, i, r, o) { + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + const t = (this.right - this.left) / (2 * this.zoom), + e = (this.top - this.bottom) / (2 * this.zoom), + n = (this.right + this.left) / 2, + i = (this.top + this.bottom) / 2; + let r = n - t, + o = n + t, + s = i + e, + a = i - e; + if (null !== this.view && this.view.enabled) { + const t = (this.right - this.left) / this.view.fullWidth / this.zoom, + e = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + r += t * this.view.offsetX, o = r + t * this.view.width, s -= e * this.view.offsetY, a = s - e * this.view.height + } + this.projectionMatrix.makeOrthographic(r, o, s, a, this.near, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + return e.object.zoom = this.zoom, e.object.left = this.left, e.object.right = this.right, e.object.top = this.top, e.object.bottom = this.bottom, e.object.near = this.near, e.object.far = this.far, null !== this.view && (e.object.view = Object.assign({}, this.view)), e + } + }), ua.prototype = Object.assign(Object.create(oa.prototype), { + constructor: ua, + isDirectionalLightShadow: !0, + updateMatrices: function(t) { + oa.prototype.updateMatrices.call(this, t) + } + }), da.prototype = Object.assign(Object.create(ia.prototype), { + constructor: da, + isDirectionalLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.target = t.target.clone(), this.shadow = t.shadow.clone(), this + } + }), pa.prototype = Object.assign(Object.create(ia.prototype), { + constructor: pa, + isAmbientLight: !0 + }), fa.prototype = Object.assign(Object.create(ia.prototype), { + constructor: fa, + isRectAreaLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.width = t.width, this.height = t.height, this + }, + toJSON: function(t) { + const e = ia.prototype.toJSON.call(this, t); + return e.object.width = this.width, e.object.height = this.height, e + } + }); + class ma { + constructor() { + Object.defineProperty(this, "isSphericalHarmonics3", { + value: !0 + }), this.coefficients = []; + for (let t = 0; t < 9; t++) this.coefficients.push(new T) + } + set(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].copy(t[e]); + return this + } + zero() { + for (let t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0); + return this + } + getAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + o = this.coefficients; + return e.copy(o[0]).multiplyScalar(.282095), e.addScaledVector(o[1], .488603 * i), e.addScaledVector(o[2], .488603 * r), e.addScaledVector(o[3], .488603 * n), e.addScaledVector(o[4], n * i * 1.092548), e.addScaledVector(o[5], i * r * 1.092548), e.addScaledVector(o[6], .315392 * (3 * r * r - 1)), e.addScaledVector(o[7], n * r * 1.092548), e.addScaledVector(o[8], .546274 * (n * n - i * i)), e + } + getIrradianceAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + o = this.coefficients; + return e.copy(o[0]).multiplyScalar(.886227), e.addScaledVector(o[1], 1.023328 * i), e.addScaledVector(o[2], 1.023328 * r), e.addScaledVector(o[3], 1.023328 * n), e.addScaledVector(o[4], .858086 * n * i), e.addScaledVector(o[5], .858086 * i * r), e.addScaledVector(o[6], .743125 * r * r - .247708), e.addScaledVector(o[7], .858086 * n * r), e.addScaledVector(o[8], .429043 * (n * n - i * i)), e + } + add(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]); + return this + } + addScaledSH(t, e) { + for (let n = 0; n < 9; n++) this.coefficients[n].addScaledVector(t.coefficients[n], e); + return this + } + scale(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t); + return this + } + lerp(t, e) { + for (let n = 0; n < 9; n++) this.coefficients[n].lerp(t.coefficients[n], e); + return this + } + equals(t) { + for (let e = 0; e < 9; e++) + if (!this.coefficients[e].equals(t.coefficients[e])) return !1; + return !0 + } + copy(t) { + return this.set(t.coefficients) + } + clone() { + return (new this.constructor).copy(this) + } + fromArray(t, e = 0) { + const n = this.coefficients; + for (let i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i); + return this + } + toArray(t = [], e = 0) { + const n = this.coefficients; + for (let i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i); + return t + } + static getBasisAt(t, e) { + const n = t.x, + i = t.y, + r = t.z; + e[0] = .282095, e[1] = .488603 * i, e[2] = .488603 * r, e[3] = .488603 * n, e[4] = 1.092548 * n * i, e[5] = 1.092548 * i * r, e[6] = .315392 * (3 * r * r - 1), e[7] = 1.092548 * n * r, e[8] = .546274 * (n * n - i * i) + } + } + + function ga(t, e) { + ia.call(this, void 0, e), this.type = "LightProbe", this.sh = void 0 !== t ? t : new ma + } + + function va(t) { + Es.call(this, t), this.textures = {} + } + ga.prototype = Object.assign(Object.create(ia.prototype), { + constructor: ga, + isLightProbe: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.sh.copy(t.sh), this + }, + fromJSON: function(t) { + return this.intensity = t.intensity, this.sh.fromArray(t.sh), this + }, + toJSON: function(t) { + const e = ia.prototype.toJSON.call(this, t); + return e.object.sh = this.sh.toArray(), e + } + }), va.prototype = Object.assign(Object.create(Es.prototype), { + constructor: va, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + e(r.parse(JSON.parse(n))) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + }, + parse: function(t) { + const e = this.textures; + + function n(t) { + return void 0 === e[t] && console.warn("THREE.MaterialLoader: Undefined texture", t), e[t] + } + const i = new as[t.type]; + if (void 0 !== t.uuid && (i.uuid = t.uuid), void 0 !== t.name && (i.name = t.name), void 0 !== t.color && void 0 !== i.color && i.color.setHex(t.color), void 0 !== t.roughness && (i.roughness = t.roughness), void 0 !== t.metalness && (i.metalness = t.metalness), void 0 !== t.sheen && (i.sheen = (new Yt).setHex(t.sheen)), void 0 !== t.emissive && void 0 !== i.emissive && i.emissive.setHex(t.emissive), void 0 !== t.specular && void 0 !== i.specular && i.specular.setHex(t.specular), void 0 !== t.shininess && (i.shininess = t.shininess), void 0 !== t.clearcoat && (i.clearcoat = t.clearcoat), void 0 !== t.clearcoatRoughness && (i.clearcoatRoughness = t.clearcoatRoughness), void 0 !== t.fog && (i.fog = t.fog), void 0 !== t.flatShading && (i.flatShading = t.flatShading), void 0 !== t.blending && (i.blending = t.blending), void 0 !== t.combine && (i.combine = t.combine), void 0 !== t.side && (i.side = t.side), void 0 !== t.opacity && (i.opacity = t.opacity), void 0 !== t.transparent && (i.transparent = t.transparent), void 0 !== t.alphaTest && (i.alphaTest = t.alphaTest), void 0 !== t.depthTest && (i.depthTest = t.depthTest), void 0 !== t.depthWrite && (i.depthWrite = t.depthWrite), void 0 !== t.colorWrite && (i.colorWrite = t.colorWrite), void 0 !== t.stencilWrite && (i.stencilWrite = t.stencilWrite), void 0 !== t.stencilWriteMask && (i.stencilWriteMask = t.stencilWriteMask), void 0 !== t.stencilFunc && (i.stencilFunc = t.stencilFunc), void 0 !== t.stencilRef && (i.stencilRef = t.stencilRef), void 0 !== t.stencilFuncMask && (i.stencilFuncMask = t.stencilFuncMask), void 0 !== t.stencilFail && (i.stencilFail = t.stencilFail), void 0 !== t.stencilZFail && (i.stencilZFail = t.stencilZFail), void 0 !== t.stencilZPass && (i.stencilZPass = t.stencilZPass), void 0 !== t.wireframe && (i.wireframe = t.wireframe), void 0 !== t.wireframeLinewidth && (i.wireframeLinewidth = t.wireframeLinewidth), void 0 !== t.wireframeLinecap && (i.wireframeLinecap = t.wireframeLinecap), void 0 !== t.wireframeLinejoin && (i.wireframeLinejoin = t.wireframeLinejoin), void 0 !== t.rotation && (i.rotation = t.rotation), 1 !== t.linewidth && (i.linewidth = t.linewidth), void 0 !== t.dashSize && (i.dashSize = t.dashSize), void 0 !== t.gapSize && (i.gapSize = t.gapSize), void 0 !== t.scale && (i.scale = t.scale), void 0 !== t.polygonOffset && (i.polygonOffset = t.polygonOffset), void 0 !== t.polygonOffsetFactor && (i.polygonOffsetFactor = t.polygonOffsetFactor), void 0 !== t.polygonOffsetUnits && (i.polygonOffsetUnits = t.polygonOffsetUnits), void 0 !== t.skinning && (i.skinning = t.skinning), void 0 !== t.morphTargets && (i.morphTargets = t.morphTargets), void 0 !== t.morphNormals && (i.morphNormals = t.morphNormals), void 0 !== t.dithering && (i.dithering = t.dithering), void 0 !== t.vertexTangents && (i.vertexTangents = t.vertexTangents), void 0 !== t.visible && (i.visible = t.visible), void 0 !== t.toneMapped && (i.toneMapped = t.toneMapped), void 0 !== t.userData && (i.userData = t.userData), void 0 !== t.vertexColors && ("number" == typeof t.vertexColors ? i.vertexColors = t.vertexColors > 0 : i.vertexColors = t.vertexColors), void 0 !== t.uniforms) + for (const e in t.uniforms) { + const r = t.uniforms[e]; + switch (i.uniforms[e] = {}, r.type) { + case "t": + i.uniforms[e].value = n(r.value); + break; + case "c": + i.uniforms[e].value = (new Yt).setHex(r.value); + break; + case "v2": + i.uniforms[e].value = (new v).fromArray(r.value); + break; + case "v3": + i.uniforms[e].value = (new T).fromArray(r.value); + break; + case "v4": + i.uniforms[e].value = (new M).fromArray(r.value); + break; + case "m3": + i.uniforms[e].value = (new y).fromArray(r.value); + break; + case "m4": + i.uniforms[e].value = (new et).fromArray(r.value); + break; + default: + i.uniforms[e].value = r.value + } + } + if (void 0 !== t.defines && (i.defines = t.defines), void 0 !== t.vertexShader && (i.vertexShader = t.vertexShader), void 0 !== t.fragmentShader && (i.fragmentShader = t.fragmentShader), void 0 !== t.extensions) + for (const e in t.extensions) i.extensions[e] = t.extensions[e]; + if (void 0 !== t.shading && (i.flatShading = 1 === t.shading), void 0 !== t.size && (i.size = t.size), void 0 !== t.sizeAttenuation && (i.sizeAttenuation = t.sizeAttenuation), void 0 !== t.map && (i.map = n(t.map)), void 0 !== t.matcap && (i.matcap = n(t.matcap)), void 0 !== t.alphaMap && (i.alphaMap = n(t.alphaMap)), void 0 !== t.bumpMap && (i.bumpMap = n(t.bumpMap)), void 0 !== t.bumpScale && (i.bumpScale = t.bumpScale), void 0 !== t.normalMap && (i.normalMap = n(t.normalMap)), void 0 !== t.normalMapType && (i.normalMapType = t.normalMapType), void 0 !== t.normalScale) { + let e = t.normalScale; + !1 === Array.isArray(e) && (e = [e, e]), i.normalScale = (new v).fromArray(e) + } + return void 0 !== t.displacementMap && (i.displacementMap = n(t.displacementMap)), void 0 !== t.displacementScale && (i.displacementScale = t.displacementScale), void 0 !== t.displacementBias && (i.displacementBias = t.displacementBias), void 0 !== t.roughnessMap && (i.roughnessMap = n(t.roughnessMap)), void 0 !== t.metalnessMap && (i.metalnessMap = n(t.metalnessMap)), void 0 !== t.emissiveMap && (i.emissiveMap = n(t.emissiveMap)), void 0 !== t.emissiveIntensity && (i.emissiveIntensity = t.emissiveIntensity), void 0 !== t.specularMap && (i.specularMap = n(t.specularMap)), void 0 !== t.envMap && (i.envMap = n(t.envMap)), void 0 !== t.envMapIntensity && (i.envMapIntensity = t.envMapIntensity), void 0 !== t.reflectivity && (i.reflectivity = t.reflectivity), void 0 !== t.refractionRatio && (i.refractionRatio = t.refractionRatio), void 0 !== t.lightMap && (i.lightMap = n(t.lightMap)), void 0 !== t.lightMapIntensity && (i.lightMapIntensity = t.lightMapIntensity), void 0 !== t.aoMap && (i.aoMap = n(t.aoMap)), void 0 !== t.aoMapIntensity && (i.aoMapIntensity = t.aoMapIntensity), void 0 !== t.gradientMap && (i.gradientMap = n(t.gradientMap)), void 0 !== t.clearcoatMap && (i.clearcoatMap = n(t.clearcoatMap)), void 0 !== t.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = n(t.clearcoatRoughnessMap)), void 0 !== t.clearcoatNormalMap && (i.clearcoatNormalMap = n(t.clearcoatNormalMap)), void 0 !== t.clearcoatNormalScale && (i.clearcoatNormalScale = (new v).fromArray(t.clearcoatNormalScale)), void 0 !== t.transmission && (i.transmission = t.transmission), void 0 !== t.transmissionMap && (i.transmissionMap = n(t.transmissionMap)), i + }, + setTextures: function(t) { + return this.textures = t, this + } + }); + const ya = function(t) { + const e = t.lastIndexOf("/"); + return -1 === e ? "./" : t.substr(0, e + 1) + }; + + function Aa() { + be.call(this), this.type = "InstancedBufferGeometry", this.instanceCount = 1 / 0 + } + + function xa(t, e, n, i) { + "number" == typeof n && (i = n, n = !1, console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), ee.call(this, t, e, n), this.meshPerAttribute = i || 1 + } + + function _a(t) { + Es.call(this, t) + } + + function ba(t) { + "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), Es.call(this, t), this.options = { + premultiplyAlpha: "none" + } + } + + function wa() { + this.type = "ShapePath", this.color = new Yt, this.subPaths = [], this.currentPath = null + } + Aa.prototype = Object.assign(Object.create(be.prototype), { + constructor: Aa, + isInstancedBufferGeometry: !0, + copy: function(t) { + return be.prototype.copy.call(this, t), this.instanceCount = t.instanceCount, this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + const t = be.prototype.toJSON.call(this); + return t.instanceCount = this.instanceCount, t.isInstancedBufferGeometry = !0, t + } + }), xa.prototype = Object.assign(Object.create(ee.prototype), { + constructor: xa, + isInstancedBufferAttribute: !0, + copy: function(t) { + return ee.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this + }, + toJSON: function() { + const t = ee.prototype.toJSON.call(this); + return t.meshPerAttribute = this.meshPerAttribute, t.isInstancedBufferAttribute = !0, t + } + }), _a.prototype = Object.assign(Object.create(Es.prototype), { + constructor: _a, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + e(r.parse(JSON.parse(n))) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + }, + parse: function(t) { + const e = {}, + n = {}; + + function i(t, i) { + if (void 0 !== e[i]) return e[i]; + const r = t.interleavedBuffers[i], + o = function(t, e) { + if (void 0 !== n[e]) return n[e]; + const i = t.arrayBuffers[e], + r = new Uint32Array(i).buffer; + return n[e] = r, r + }(t, r.buffer), + s = new dr(fe(r.type, o), r.stride); + return s.uuid = r.uuid, e[i] = s, s + } + const r = t.isInstancedBufferGeometry ? new Aa : new be, + o = t.data.index; + if (void 0 !== o) { + const t = fe(o.type, o.array); + r.setIndex(new ee(t, 1)) + } + const s = t.data.attributes; + for (const e in s) { + const n = s[e]; + let o; + if (n.isInterleavedBufferAttribute) { + o = new fr(i(t.data, n.data), n.itemSize, n.offset, n.normalized) + } else { + const t = fe(n.type, n.array); + o = new(n.isInstancedBufferAttribute ? xa : ee)(t, n.itemSize, n.normalized) + } + void 0 !== n.name && (o.name = n.name), r.setAttribute(e, o) + } + const a = t.data.morphAttributes; + if (a) + for (const e in a) { + const n = a[e], + o = []; + for (let e = 0, r = n.length; e < r; e++) { + const r = n[e]; + let s; + if (r.isInterleavedBufferAttribute) { + s = new fr(i(t.data, r.data), r.itemSize, r.offset, r.normalized) + } else { + s = new ee(fe(r.type, r.array), r.itemSize, r.normalized) + } + void 0 !== r.name && (s.name = r.name), o.push(s) + } + r.morphAttributes[e] = o + } + t.data.morphTargetsRelative && (r.morphTargetsRelative = !0); + const l = t.data.groups || t.data.drawcalls || t.data.offsets; + if (void 0 !== l) + for (let t = 0, e = l.length; t !== e; ++t) { + const e = l[t]; + r.addGroup(e.start, e.count, e.materialIndex) + } + const c = t.data.boundingSphere; + if (void 0 !== c) { + const t = new T; + void 0 !== c.center && t.fromArray(c.center), r.boundingSphere = new X(t, c.radius) + } + return t.name && (r.name = t.name), t.userData && (r.userData = t.userData), r + } + }), ba.prototype = Object.assign(Object.create(Es.prototype), { + constructor: ba, + isImageBitmapLoader: !0, + setOptions: function(t) { + return this.options = t, this + }, + load: function(t, e, n, i) { + void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); + const r = this, + o = ws.get(t); + if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { + e && e(o), r.manager.itemEnd(t) + }), 0), o; + const s = {}; + s.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include", fetch(t, s).then((function(t) { + return t.blob() + })).then((function(t) { + return createImageBitmap(t, r.options) + })).then((function(n) { + ws.add(t, n), e && e(n), r.manager.itemEnd(t) + })).catch((function(e) { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + })), r.manager.itemStart(t) + } + }), Object.assign(wa.prototype, { + moveTo: function(t, e) { + return this.currentPath = new ea, this.subPaths.push(this.currentPath), this.currentPath.moveTo(t, e), this + }, + lineTo: function(t, e) { + return this.currentPath.lineTo(t, e), this + }, + quadraticCurveTo: function(t, e, n, i) { + return this.currentPath.quadraticCurveTo(t, e, n, i), this + }, + bezierCurveTo: function(t, e, n, i, r, o) { + return this.currentPath.bezierCurveTo(t, e, n, i, r, o), this + }, + splineThru: function(t) { + return this.currentPath.splineThru(t), this + }, + toShapes: function(t, e) { + function n(t) { + const e = []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n], + r = new na; + r.curves = i.curves, e.push(r) + } + return e + } + + function i(t, e) { + const n = e.length; + let i = !1; + for (let r = n - 1, o = 0; o < n; r = o++) { + let n = e[r], + s = e[o], + a = s.x - n.x, + l = s.y - n.y; + if (Math.abs(l) > Number.EPSILON) { + if (l < 0 && (n = e[o], a = -a, s = e[r], l = -l), t.y < n.y || t.y > s.y) continue; + if (t.y === n.y) { + if (t.x === n.x) return !0 + } else { + const e = l * (t.x - n.x) - a * (t.y - n.y); + if (0 === e) return !0; + if (e < 0) continue; + i = !i + } + } else { + if (t.y !== n.y) continue; + if (s.x <= t.x && t.x <= n.x || n.x <= t.x && t.x <= s.x) return !0 + } + } + return i + } + const r = ko.isClockWise, + o = this.subPaths; + if (0 === o.length) return []; + if (!0 === e) return n(o); + let s, a, l; + const c = []; + if (1 === o.length) return a = o[0], l = new na, l.curves = a.curves, c.push(l), c; + let h = !r(o[0].getPoints()); + h = t ? !h : h; + const u = [], + d = []; + let p, f, m = [], + g = 0; + d[g] = void 0, m[g] = []; + for (let e = 0, n = o.length; e < n; e++) a = o[e], p = a.getPoints(), s = r(p), s = t ? !s : s, s ? (!h && d[g] && g++, d[g] = { + s: new na, + p: p + }, d[g].s.curves = a.curves, h && g++, m[g] = []) : m[g].push({ + h: a, + p: p[0] + }); + if (!d[0]) return n(o); + if (d.length > 1) { + let t = !1; + const e = []; + for (let t = 0, e = d.length; t < e; t++) u[t] = []; + for (let n = 0, r = d.length; n < r; n++) { + const r = m[n]; + for (let o = 0; o < r.length; o++) { + const s = r[o]; + let a = !0; + for (let r = 0; r < d.length; r++) i(s.p, d[r].p) && (n !== r && e.push({ + froms: n, + tos: r, + hole: o + }), a ? (a = !1, u[r].push(s)) : t = !0); + a && u[n].push(s) + } + } + e.length > 0 && (t || (m = u)) + } + for (let t = 0, e = d.length; t < e; t++) { + l = d[t].s, c.push(l), f = m[t]; + for (let t = 0, e = f.length; t < e; t++) l.holes.push(f[t].h) + } + return c + } + }); + class Ma { + constructor(t) { + Object.defineProperty(this, "isFont", { + value: !0 + }), this.type = "Font", this.data = t + } + generateShapes(t, e = 100) { + const n = [], + i = function(t, e, n) { + const i = Array.from ? Array.from(t) : String(t).split(""), + r = e / n.resolution, + o = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * r, + s = []; + let a = 0, + l = 0; + for (let t = 0; t < i.length; t++) { + const e = i[t]; + if ("\n" === e) a = 0, l -= o; + else { + const t = Ea(e, r, a, l, n); + a += t.offsetX, s.push(t.path) + } + } + return s + }(t, e, this.data); + for (let t = 0, e = i.length; t < e; t++) Array.prototype.push.apply(n, i[t].toShapes()); + return n + } + } + + function Ea(t, e, n, i, r) { + const o = r.glyphs[t] || r.glyphs["?"]; + if (!o) return void console.error('THREE.Font: character "' + t + '" does not exists in font family ' + r.familyName + "."); + const s = new wa; + let a, l, c, h, u, d, p, f; + if (o.o) { + const t = o._cachedOutline || (o._cachedOutline = o.o.split(" ")); + for (let r = 0, o = t.length; r < o;) { + switch (t[r++]) { + case "m": + a = t[r++] * e + n, l = t[r++] * e + i, s.moveTo(a, l); + break; + case "l": + a = t[r++] * e + n, l = t[r++] * e + i, s.lineTo(a, l); + break; + case "q": + c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, s.quadraticCurveTo(u, d, c, h); + break; + case "b": + c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, p = t[r++] * e + n, f = t[r++] * e + i, s.bezierCurveTo(u, d, p, f, c, h) + } + } + } + return { + offsetX: o.ha * e, + path: s + } + } + + function Sa(t) { + Es.call(this, t) + } + let Ta; + Sa.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Sa, + load: function(t, e, n, i) { + const r = this, + o = new Ts(this.manager); + o.setPath(this.path), o.setRequestHeader(this.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(t) { + let n; + try { + n = JSON.parse(t) + } catch (e) { + console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), n = JSON.parse(t.substring(65, t.length - 2)) + } + const i = r.parse(n); + e && e(i) + }), n, i) + }, + parse: function(t) { + return new Ma(t) + } + }); + const La = function() { + return void 0 === Ta && (Ta = new(window.AudioContext || window.webkitAudioContext)), Ta + }; + + function Ra(t) { + Es.call(this, t) + } + + function Ca(t, e, n) { + ga.call(this, void 0, n); + const i = (new Yt).set(t), + r = (new Yt).set(e), + o = new T(i.r, i.g, i.b), + s = new T(r.r, r.g, r.b), + a = Math.sqrt(Math.PI), + l = a * Math.sqrt(.75); + this.sh.coefficients[0].copy(o).add(s).multiplyScalar(a), this.sh.coefficients[1].copy(o).sub(s).multiplyScalar(l) + } + + function Pa(t, e) { + ga.call(this, void 0, e); + const n = (new Yt).set(t); + this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(2 * Math.sqrt(Math.PI)) + } + Ra.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ra, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setResponseType("arraybuffer"), o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + const t = n.slice(0); + La().decodeAudioData(t, (function(t) { + e(t) + })) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + } + }), Ca.prototype = Object.assign(Object.create(ga.prototype), { + constructor: Ca, + isHemisphereLightProbe: !0, + copy: function(t) { + return ga.prototype.copy.call(this, t), this + }, + toJSON: function(t) { + return ga.prototype.toJSON.call(this, t) + } + }), Pa.prototype = Object.assign(Object.create(ga.prototype), { + constructor: Pa, + isAmbientLightProbe: !0, + copy: function(t) { + return ga.prototype.copy.call(this, t), this + }, + toJSON: function(t) { + return ga.prototype.toJSON.call(this, t) + } + }); + const Da = new et, + Ia = new et; + Object.assign(function() { + this.type = "StereoCamera", this.aspect = 1, this.eyeSep = .064, this.cameraL = new Ye, this.cameraL.layers.enable(1), this.cameraL.matrixAutoUpdate = !1, this.cameraR = new Ye, this.cameraR.layers.enable(2), this.cameraR.matrixAutoUpdate = !1, this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + } + }.prototype, { + update: function(t) { + const e = this._cache; + if (e.focus !== t.focus || e.fov !== t.fov || e.aspect !== t.aspect * this.aspect || e.near !== t.near || e.far !== t.far || e.zoom !== t.zoom || e.eyeSep !== this.eyeSep) { + e.focus = t.focus, e.fov = t.fov, e.aspect = t.aspect * this.aspect, e.near = t.near, e.far = t.far, e.zoom = t.zoom, e.eyeSep = this.eyeSep; + const n = t.projectionMatrix.clone(), + i = e.eyeSep / 2, + r = i * e.near / e.focus, + o = e.near * Math.tan(g.DEG2RAD * e.fov * .5) / e.zoom; + let s, a; + Ia.elements[12] = -i, Da.elements[12] = i, s = -o * e.aspect + r, a = o * e.aspect + r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraL.projectionMatrix.copy(n), s = -o * e.aspect - r, a = o * e.aspect - r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraR.projectionMatrix.copy(n) + } + this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Ia), this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(Da) + } + }); + + function Oa(t, e, n) { + let i, r, o; + switch (this.binding = t, this.valueSize = n, e) { + case "quaternion": + i = this._slerp, r = this._slerpAdditive, o = this._setAdditiveIdentityQuaternion, this.buffer = new Float64Array(6 * n), this._workIndex = 5; + break; + case "string": + case "bool": + i = this._select, r = this._select, o = this._setAdditiveIdentityOther, this.buffer = new Array(5 * n); + break; + default: + i = this._lerp, r = this._lerpAdditive, o = this._setAdditiveIdentityNumeric, this.buffer = new Float64Array(5 * n) + } + this._mixBufferRegion = i, this._mixBufferRegionAdditive = r, this._setIdentity = o, this._origIndex = 3, this._addIndex = 4, this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, this.useCount = 0, this.referenceCount = 0 + } + Object.assign(Oa.prototype, { + accumulate: function(t, e) { + const n = this.buffer, + i = this.valueSize, + r = t * i + i; + let o = this.cumulativeWeight; + if (0 === o) { + for (let t = 0; t !== i; ++t) n[r + t] = n[t]; + o = e + } else { + o += e; + const t = e / o; + this._mixBufferRegion(n, r, 0, t, i) + } + this.cumulativeWeight = o + }, + accumulateAdditive: function(t) { + const e = this.buffer, + n = this.valueSize, + i = n * this._addIndex; + 0 === this.cumulativeWeightAdditive && this._setIdentity(), this._mixBufferRegionAdditive(e, i, 0, t, n), this.cumulativeWeightAdditive += t + }, + apply: function(t) { + const e = this.valueSize, + n = this.buffer, + i = t * e + e, + r = this.cumulativeWeight, + o = this.cumulativeWeightAdditive, + s = this.binding; + if (this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, r < 1) { + const t = e * this._origIndex; + this._mixBufferRegion(n, i, t, 1 - r, e) + } + o > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e); + for (let t = e, r = e + e; t !== r; ++t) + if (n[t] !== n[t + e]) { + s.setValue(n, i); + break + } + }, + saveOriginalState: function() { + const t = this.binding, + e = this.buffer, + n = this.valueSize, + i = n * this._origIndex; + t.getValue(e, i); + for (let t = n, r = i; t !== r; ++t) e[t] = e[i + t % n]; + this._setIdentity(), this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0 + }, + restoreOriginalState: function() { + const t = 3 * this.valueSize; + this.binding.setValue(this.buffer, t) + }, + _setAdditiveIdentityNumeric: function() { + const t = this._addIndex * this.valueSize, + e = t + this.valueSize; + for (let n = t; n < e; n++) this.buffer[n] = 0 + }, + _setAdditiveIdentityQuaternion: function() { + this._setAdditiveIdentityNumeric(), this.buffer[this._addIndex * this.valueSize + 3] = 1 + }, + _setAdditiveIdentityOther: function() { + const t = this._origIndex * this.valueSize, + e = this._addIndex * this.valueSize; + for (let n = 0; n < this.valueSize; n++) this.buffer[e + n] = this.buffer[t + n] + }, + _select: function(t, e, n, i, r) { + if (i >= .5) + for (let i = 0; i !== r; ++i) t[e + i] = t[n + i] + }, + _slerp: function(t, e, n, i) { + S.slerpFlat(t, e, t, e, t, n, i) + }, + _slerpAdditive: function(t, e, n, i, r) { + const o = this._workIndex * r; + S.multiplyQuaternionsFlat(t, o, t, e, t, n), S.slerpFlat(t, e, t, e, t, o, i) + }, + _lerp: function(t, e, n, i, r) { + const o = 1 - i; + for (let s = 0; s !== r; ++s) { + const r = e + s; + t[r] = t[r] * o + t[n + s] * i + } + }, + _lerpAdditive: function(t, e, n, i, r) { + for (let o = 0; o !== r; ++o) { + const r = e + o; + t[r] = t[r] + t[n + o] * i + } + } + }); + const Na = new RegExp("[\\[\\]\\.:\\/]", "g"), + Ba = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]", + Fa = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + za = /(WCOD+)?/.source.replace("WCOD", Ba), + Ua = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + Ha = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + Ga = new RegExp("^" + Fa + za + Ua + Ha + "$"), + Va = ["material", "materials", "bones"]; + + function ka(t, e, n) { + const i = n || Wa.parseTrackName(e); + this._targetGroup = t, this._bindings = t.subscribe_(e, i) + } + + function Wa(t, e, n) { + this.path = e, this.parsedPath = n || Wa.parseTrackName(e), this.node = Wa.findNode(t, this.parsedPath.nodeName) || t, this.rootNode = t + } + Object.assign(ka.prototype, { + getValue: function(t, e) { + this.bind(); + const n = this._targetGroup.nCachedObjects_, + i = this._bindings[n]; + void 0 !== i && i.getValue(t, e) + }, + setValue: function(t, e) { + const n = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) n[i].setValue(t, e) + }, + bind: function() { + const t = this._bindings; + for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].bind() + }, + unbind: function() { + const t = this._bindings; + for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].unbind() + } + }), Object.assign(Wa, { + Composite: ka, + create: function(t, e, n) { + return t && t.isAnimationObjectGroup ? new Wa.Composite(t, e, n) : new Wa(t, e, n) + }, + sanitizeNodeName: function(t) { + return t.replace(/\s/g, "_").replace(Na, "") + }, + parseTrackName: function(t) { + const e = Ga.exec(t); + if (!e) throw new Error("PropertyBinding: Cannot parse trackName: " + t); + const n = { + nodeName: e[2], + objectName: e[3], + objectIndex: e[4], + propertyName: e[5], + propertyIndex: e[6] + }, + i = n.nodeName && n.nodeName.lastIndexOf("."); + if (void 0 !== i && -1 !== i) { + const t = n.nodeName.substring(i + 1); - 1 !== Va.indexOf(t) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = t) + } + if (null === n.propertyName || 0 === n.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + t); + return n + }, + findNode: function(t, e) { + if (!e || "" === e || "." === e || -1 === e || e === t.name || e === t.uuid) return t; + if (t.skeleton) { + const n = t.skeleton.getBoneByName(e); + if (void 0 !== n) return n + } + if (t.children) { + const n = function(t) { + for (let i = 0; i < t.length; i++) { + const r = t[i]; + if (r.name === e || r.uuid === e) return r; + const o = n(r.children); + if (o) return o + } + return null + }, + i = n(t.children); + if (i) return i + } + return null + } + }), Object.assign(Wa.prototype, { + _getValue_unavailable: function() {}, + _setValue_unavailable: function() {}, + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + GetterByBindingType: [function(t, e) { + t[e] = this.node[this.propertyName] + }, function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) t[e++] = n[i] + }, function(t, e) { + t[e] = this.resolvedProperty[this.propertyIndex] + }, function(t, e) { + this.resolvedProperty.toArray(t, e) + }], + SetterByBindingTypeAndVersioning: [ + [function(t, e) { + this.targetObject[this.propertyName] = t[e] + }, function(t, e) { + this.targetObject[this.propertyName] = t[e], this.targetObject.needsUpdate = !0 + }, function(t, e) { + this.targetObject[this.propertyName] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++] + }, function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; + this.targetObject.needsUpdate = !0 + }, function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; + this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e] + }, function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.needsUpdate = !0 + }, function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function(t, e) { + this.resolvedProperty.fromArray(t, e) + }, function(t, e) { + this.resolvedProperty.fromArray(t, e), this.targetObject.needsUpdate = !0 + }, function(t, e) { + this.resolvedProperty.fromArray(t, e), this.targetObject.matrixWorldNeedsUpdate = !0 + }] + ], + getValue: function(t, e) { + this.bind(), this.getValue(t, e) + }, + setValue: function(t, e) { + this.bind(), this.setValue(t, e) + }, + bind: function() { + let t = this.node; + const e = this.parsedPath, + n = e.objectName, + i = e.propertyName; + let r = e.propertyIndex; + if (t || (t = Wa.findNode(this.rootNode, e.nodeName) || this.rootNode, this.node = t), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !t) return void console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found."); + if (n) { + let i = e.objectIndex; + switch (n) { + case "materials": + if (!t.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!t.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + t = t.material.materials; + break; + case "bones": + if (!t.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + t = t.skeleton.bones; + for (let e = 0; e < t.length; e++) + if (t[e].name === i) { + i = e; + break + } break; + default: + if (void 0 === t[n]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + t = t[n] + } + if (void 0 !== i) { + if (void 0 === t[i]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, t); + t = t[i] + } + } + const o = t[i]; + if (void 0 === o) { + const n = e.nodeName; + return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", t) + } + let s = this.Versioning.None; + this.targetObject = t, void 0 !== t.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== t.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate); + let a = this.BindingType.Direct; + if (void 0 !== r) { + if ("morphTargetInfluences" === i) { + if (!t.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + if (!t.geometry.isBufferGeometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.", this); + if (!t.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + void 0 !== t.morphTargetDictionary[r] && (r = t.morphTargetDictionary[r]) + } + a = this.BindingType.ArrayElement, this.resolvedProperty = o, this.propertyIndex = r + } else void 0 !== o.fromArray && void 0 !== o.toArray ? (a = this.BindingType.HasFromToArray, this.resolvedProperty = o) : Array.isArray(o) ? (a = this.BindingType.EntireArray, this.resolvedProperty = o) : this.propertyName = i; + this.getValue = this.GetterByBindingType[a], this.setValue = this.SetterByBindingTypeAndVersioning[a][s] + }, + unbind: function() { + this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound + } + }), Object.assign(Wa.prototype, { + _getValue_unbound: Wa.prototype.getValue, + _setValue_unbound: Wa.prototype.setValue + }), Object.assign(function() { + this.uuid = g.generateUUID(), this._objects = Array.prototype.slice.call(arguments), this.nCachedObjects_ = 0; + const t = {}; + this._indicesByUUID = t; + for (let e = 0, n = arguments.length; e !== n; ++e) t[arguments[e].uuid] = e; + this._paths = [], this._parsedPaths = [], this._bindings = [], this._bindingsIndicesByPath = {}; + const e = this; + this.stats = { + objects: { + get total() { + return e._objects.length + }, + get inUse() { + return this.total - e.nCachedObjects_ + } + }, + get bindingsPerObject() { + return e._bindings.length + } + } + }.prototype, { + isAnimationObjectGroup: !0, + add: function() { + const t = this._objects, + e = this._indicesByUUID, + n = this._paths, + i = this._parsedPaths, + r = this._bindings, + o = r.length; + let s = void 0, + a = t.length, + l = this.nCachedObjects_; + for (let c = 0, h = arguments.length; c !== h; ++c) { + const h = arguments[c], + u = h.uuid; + let d = e[u]; + if (void 0 === d) { + d = a++, e[u] = d, t.push(h); + for (let t = 0, e = o; t !== e; ++t) r[t].push(new Wa(h, n[t], i[t])) + } else if (d < l) { + s = t[d]; + const a = --l, + c = t[a]; + e[c.uuid] = d, t[d] = c, e[u] = a, t[a] = h; + for (let t = 0, e = o; t !== e; ++t) { + const e = r[t], + o = e[a]; + let s = e[d]; + e[d] = o, void 0 === s && (s = new Wa(h, n[t], i[t])), e[a] = s + } + } else t[d] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.") + } + this.nCachedObjects_ = l + }, + remove: function() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length; + let r = this.nCachedObjects_; + for (let o = 0, s = arguments.length; o !== s; ++o) { + const s = arguments[o], + a = s.uuid, + l = e[a]; + if (void 0 !== l && l >= r) { + const o = r++, + c = t[o]; + e[c.uuid] = l, t[l] = c, e[a] = o, t[o] = s; + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[o], + r = e[l]; + e[l] = i, e[o] = r + } + } + } + this.nCachedObjects_ = r + }, + uncache: function() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length; + let r = this.nCachedObjects_, + o = t.length; + for (let s = 0, a = arguments.length; s !== a; ++s) { + const a = arguments[s].uuid, + l = e[a]; + if (void 0 !== l) + if (delete e[a], l < r) { + const s = --r, + a = t[s], + c = --o, + h = t[c]; + e[a.uuid] = l, t[l] = a, e[h.uuid] = s, t[s] = h, t.pop(); + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[s], + r = e[c]; + e[l] = i, e[s] = r, e.pop() + } + } else { + const r = --o, + s = t[r]; + r > 0 && (e[s.uuid] = l), t[l] = s, t.pop(); + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t]; + e[l] = e[r], e.pop() + } + } + } + this.nCachedObjects_ = r + }, + subscribe_: function(t, e) { + const n = this._bindingsIndicesByPath; + let i = n[t]; + const r = this._bindings; + if (void 0 !== i) return r[i]; + const o = this._paths, + s = this._parsedPaths, + a = this._objects, + l = a.length, + c = this.nCachedObjects_, + h = new Array(l); + i = r.length, n[t] = i, o.push(t), s.push(e), r.push(h); + for (let n = c, i = a.length; n !== i; ++n) { + const i = a[n]; + h[n] = new Wa(i, t, e) + } + return h + }, + unsubscribe_: function(t) { + const e = this._bindingsIndicesByPath, + n = e[t]; + if (void 0 !== n) { + const i = this._paths, + r = this._parsedPaths, + o = this._bindings, + s = o.length - 1, + a = o[s]; + e[t[s]] = n, o[n] = a, o.pop(), r[n] = r[s], r.pop(), i[n] = i[s], i.pop() + } + } + }); + class ja { + constructor(t, e, n = null, i = e.blendMode) { + this._mixer = t, this._clip = e, this._localRoot = n, this.blendMode = i; + const r = e.tracks, + o = r.length, + s = new Array(o), + a = { + endingStart: 2400, + endingEnd: 2400 + }; + for (let t = 0; t !== o; ++t) { + const e = r[t].createInterpolant(null); + s[t] = e, e.settings = a + } + this._interpolantSettings = a, this._interpolants = s, this._propertyBindings = new Array(o), this._cacheIndex = null, this._byClipCacheIndex = null, this._timeScaleInterpolant = null, this._weightInterpolant = null, this.loop = 2201, this._loopCount = -1, this._startTime = null, this.time = 0, this.timeScale = 1, this._effectiveTimeScale = 1, this.weight = 1, this._effectiveWeight = 1, this.repetitions = 1 / 0, this.paused = !1, this.enabled = !0, this.clampWhenFinished = !1, this.zeroSlopeAtStart = !0, this.zeroSlopeAtEnd = !0 + } + play() { + return this._mixer._activateAction(this), this + } + stop() { + return this._mixer._deactivateAction(this), this.reset() + } + reset() { + return this.paused = !1, this.enabled = !0, this.time = 0, this._loopCount = -1, this._startTime = null, this.stopFading().stopWarping() + } + isRunning() { + return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) + } + isScheduled() { + return this._mixer._isActiveAction(this) + } + startAt(t) { + return this._startTime = t, this + } + setLoop(t, e) { + return this.loop = t, this.repetitions = e, this + } + setEffectiveWeight(t) { + return this.weight = t, this._effectiveWeight = this.enabled ? t : 0, this.stopFading() + } + getEffectiveWeight() { + return this._effectiveWeight + } + fadeIn(t) { + return this._scheduleFading(t, 0, 1) + } + fadeOut(t) { + return this._scheduleFading(t, 1, 0) + } + crossFadeFrom(t, e, n) { + if (t.fadeOut(e), this.fadeIn(e), n) { + const n = this._clip.duration, + i = t._clip.duration, + r = i / n, + o = n / i; + t.warp(1, r, e), this.warp(o, 1, e) + } + return this + } + crossFadeTo(t, e, n) { + return t.crossFadeFrom(this, e, n) + } + stopFading() { + const t = this._weightInterpolant; + return null !== t && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this + } + setEffectiveTimeScale(t) { + return this.timeScale = t, this._effectiveTimeScale = this.paused ? 0 : t, this.stopWarping() + } + getEffectiveTimeScale() { + return this._effectiveTimeScale + } + setDuration(t) { + return this.timeScale = this._clip.duration / t, this.stopWarping() + } + syncWith(t) { + return this.time = t.time, this.timeScale = t.timeScale, this.stopWarping() + } + halt(t) { + return this.warp(this._effectiveTimeScale, 0, t) + } + warp(t, e, n) { + const i = this._mixer, + r = i.time, + o = this.timeScale; + let s = this._timeScaleInterpolant; + null === s && (s = i._lendControlInterpolant(), this._timeScaleInterpolant = s); + const a = s.parameterPositions, + l = s.sampleValues; + return a[0] = r, a[1] = r + n, l[0] = t / o, l[1] = e / o, this + } + stopWarping() { + const t = this._timeScaleInterpolant; + return null !== t && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this + } + getMixer() { + return this._mixer + } + getClip() { + return this._clip + } + getRoot() { + return this._localRoot || this._mixer._root + } + _update(t, e, n, i) { + if (!this.enabled) return void this._updateWeight(t); + const r = this._startTime; + if (null !== r) { + const i = (t - r) * n; + if (i < 0 || 0 === n) return; + this._startTime = null, e = n * i + } + e *= this._updateTimeScale(t); + const o = this._updateTime(e), + s = this._updateWeight(t); + if (s > 0) { + const t = this._interpolants, + e = this._propertyBindings; + switch (this.blendMode) { + case 2501: + for (let n = 0, i = t.length; n !== i; ++n) t[n].evaluate(o), e[n].accumulateAdditive(s); + break; + case 2500: + default: + for (let n = 0, r = t.length; n !== r; ++n) t[n].evaluate(o), e[n].accumulate(i, s) + } + } + } + _updateWeight(t) { + let e = 0; + if (this.enabled) { + e = this.weight; + const n = this._weightInterpolant; + if (null !== n) { + const i = n.evaluate(t)[0]; + e *= i, t > n.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1)) + } + } + return this._effectiveWeight = e, e + } + _updateTimeScale(t) { + let e = 0; + if (!this.paused) { + e = this.timeScale; + const n = this._timeScaleInterpolant; + if (null !== n) { + e *= n.evaluate(t)[0], t > n.parameterPositions[1] && (this.stopWarping(), 0 === e ? this.paused = !0 : this.timeScale = e) + } + } + return this._effectiveTimeScale = e, e + } + _updateTime(t) { + const e = this._clip.duration, + n = this.loop; + let i = this.time + t, + r = this._loopCount; + const o = 2202 === n; + if (0 === t) return -1 === r ? i : o && 1 == (1 & r) ? e - i : i; + if (2200 === n) { + -1 === r && (this._loopCount = 0, this._setEndings(!0, !0, !1)); + t: { + if (i >= e) i = e; + else { + if (!(i < 0)) { + this.time = i; + break t + } + i = 0 + } + this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, + this.time = i, + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: t < 0 ? -1 : 1 + }) + } + } else { + if (-1 === r && (t >= 0 ? (r = 0, this._setEndings(!0, 0 === this.repetitions, o)) : this._setEndings(0 === this.repetitions, !0, o)), i >= e || i < 0) { + const n = Math.floor(i / e); + i -= e * n, r += Math.abs(n); + const s = this.repetitions - r; + if (s <= 0) this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, i = t > 0 ? e : 0, this.time = i, this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: t > 0 ? 1 : -1 + }); + else { + if (1 === s) { + const e = t < 0; + this._setEndings(e, !e, o) + } else this._setEndings(!1, !1, o); + this._loopCount = r, this.time = i, this._mixer.dispatchEvent({ + type: "loop", + action: this, + loopDelta: n + }) + } + } else this.time = i; + if (o && 1 == (1 & r)) return e - i + } + return i + } + _setEndings(t, e, n) { + const i = this._interpolantSettings; + n ? (i.endingStart = 2401, i.endingEnd = 2401) : (i.endingStart = t ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402) + } + _scheduleFading(t, e, n) { + const i = this._mixer, + r = i.time; + let o = this._weightInterpolant; + null === o && (o = i._lendControlInterpolant(), this._weightInterpolant = o); + const s = o.parameterPositions, + a = o.sampleValues; + return s[0] = r, a[0] = e, s[1] = r + t, a[1] = n, this + } + } + + function Xa(t) { + this._root = t, this._initMemoryManager(), this._accuIndex = 0, this.time = 0, this.timeScale = 1 + } + Xa.prototype = Object.assign(Object.create(p.prototype), { + constructor: Xa, + _bindAction: function(t, e) { + const n = t._localRoot || this._root, + i = t._clip.tracks, + r = i.length, + o = t._propertyBindings, + s = t._interpolants, + a = n.uuid, + l = this._bindingsByRootAndName; + let c = l[a]; + void 0 === c && (c = {}, l[a] = c); + for (let t = 0; t !== r; ++t) { + const r = i[t], + l = r.name; + let h = c[l]; + if (void 0 !== h) o[t] = h; + else { + if (h = o[t], void 0 !== h) { + null === h._cacheIndex && (++h.referenceCount, this._addInactiveBinding(h, a, l)); + continue + } + const i = e && e._propertyBindings[t].binding.parsedPath; + h = new Oa(Wa.create(n, l, i), r.ValueTypeName, r.getValueSize()), ++h.referenceCount, this._addInactiveBinding(h, a, l), o[t] = h + } + s[t].resultBuffer = h.buffer + } + }, + _activateAction: function(t) { + if (!this._isActiveAction(t)) { + if (null === t._cacheIndex) { + const e = (t._localRoot || this._root).uuid, + n = t._clip.uuid, + i = this._actionsByClip[n]; + this._bindAction(t, i && i.knownActions[0]), this._addInactiveAction(t, n, e) + } + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == n.useCount++ && (this._lendBinding(n), n.saveOriginalState()) + } + this._lendAction(t) + } + }, + _deactivateAction: function(t) { + if (this._isActiveAction(t)) { + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == --n.useCount && (n.restoreOriginalState(), this._takeBackBinding(n)) + } + this._takeBackAction(t) + } + }, + _initMemoryManager: function() { + this._actions = [], this._nActiveActions = 0, this._actionsByClip = {}, this._bindings = [], this._nActiveBindings = 0, this._bindingsByRootAndName = {}, this._controlInterpolants = [], this._nActiveControlInterpolants = 0; + const t = this; + this.stats = { + actions: { + get total() { + return t._actions.length + }, + get inUse() { + return t._nActiveActions + } + }, + bindings: { + get total() { + return t._bindings.length + }, + get inUse() { + return t._nActiveBindings + } + }, + controlInterpolants: { + get total() { + return t._controlInterpolants.length + }, + get inUse() { + return t._nActiveControlInterpolants + } + } + } + }, + _isActiveAction: function(t) { + const e = t._cacheIndex; + return null !== e && e < this._nActiveActions + }, + _addInactiveAction: function(t, e, n) { + const i = this._actions, + r = this._actionsByClip; + let o = r[e]; + if (void 0 === o) o = { + knownActions: [t], + actionByRoot: {} + }, t._byClipCacheIndex = 0, r[e] = o; + else { + const e = o.knownActions; + t._byClipCacheIndex = e.length, e.push(t) + } + t._cacheIndex = i.length, i.push(t), o.actionByRoot[n] = t + }, + _removeInactiveAction: function(t) { + const e = this._actions, + n = e[e.length - 1], + i = t._cacheIndex; + n._cacheIndex = i, e[i] = n, e.pop(), t._cacheIndex = null; + const r = t._clip.uuid, + o = this._actionsByClip, + s = o[r], + a = s.knownActions, + l = a[a.length - 1], + c = t._byClipCacheIndex; + l._byClipCacheIndex = c, a[c] = l, a.pop(), t._byClipCacheIndex = null; + delete s.actionByRoot[(t._localRoot || this._root).uuid], 0 === a.length && delete o[r], this._removeInactiveBindingsForAction(t) + }, + _removeInactiveBindingsForAction: function(t) { + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == --n.referenceCount && this._removeInactiveBinding(n) + } + }, + _lendAction: function(t) { + const e = this._actions, + n = t._cacheIndex, + i = this._nActiveActions++, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _takeBackAction: function(t) { + const e = this._actions, + n = t._cacheIndex, + i = --this._nActiveActions, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _addInactiveBinding: function(t, e, n) { + const i = this._bindingsByRootAndName, + r = this._bindings; + let o = i[e]; + void 0 === o && (o = {}, i[e] = o), o[n] = t, t._cacheIndex = r.length, r.push(t) + }, + _removeInactiveBinding: function(t) { + const e = this._bindings, + n = t.binding, + i = n.rootNode.uuid, + r = n.path, + o = this._bindingsByRootAndName, + s = o[i], + a = e[e.length - 1], + l = t._cacheIndex; + a._cacheIndex = l, e[l] = a, e.pop(), delete s[r], 0 === Object.keys(s).length && delete o[i] + }, + _lendBinding: function(t) { + const e = this._bindings, + n = t._cacheIndex, + i = this._nActiveBindings++, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _takeBackBinding: function(t) { + const e = this._bindings, + n = t._cacheIndex, + i = --this._nActiveBindings, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _lendControlInterpolant: function() { + const t = this._controlInterpolants, + e = this._nActiveControlInterpolants++; + let n = t[e]; + return void 0 === n && (n = new us(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer), n.__cacheIndex = e, t[e] = n), n + }, + _takeBackControlInterpolant: function(t) { + const e = this._controlInterpolants, + n = t.__cacheIndex, + i = --this._nActiveControlInterpolants, + r = e[i]; + t.__cacheIndex = i, e[i] = t, r.__cacheIndex = n, e[n] = r + }, + _controlInterpolantsResultBuffer: new Float32Array(1), + clipAction: function(t, e, n) { + const i = e || this._root, + r = i.uuid; + let o = "string" == typeof t ? _s.findByName(i, t) : t; + const s = null !== o ? o.uuid : t, + a = this._actionsByClip[s]; + let l = null; + if (void 0 === n && (n = null !== o ? o.blendMode : 2500), void 0 !== a) { + const t = a.actionByRoot[r]; + if (void 0 !== t && t.blendMode === n) return t; + l = a.knownActions[0], null === o && (o = l._clip) + } + if (null === o) return null; + const c = new ja(this, o, e, n); + return this._bindAction(c, l), this._addInactiveAction(c, s, r), c + }, + existingAction: function(t, e) { + const n = e || this._root, + i = n.uuid, + r = "string" == typeof t ? _s.findByName(n, t) : t, + o = r ? r.uuid : t, + s = this._actionsByClip[o]; + return void 0 !== s && s.actionByRoot[i] || null + }, + stopAllAction: function() { + const t = this._actions; + for (let e = this._nActiveActions - 1; e >= 0; --e) t[e].stop(); + return this + }, + update: function(t) { + t *= this.timeScale; + const e = this._actions, + n = this._nActiveActions, + i = this.time += t, + r = Math.sign(t), + o = this._accuIndex ^= 1; + for (let s = 0; s !== n; ++s) { + e[s]._update(i, t, r, o) + } + const s = this._bindings, + a = this._nActiveBindings; + for (let t = 0; t !== a; ++t) s[t].apply(o); + return this + }, + setTime: function(t) { + this.time = 0; + for (let t = 0; t < this._actions.length; t++) this._actions[t].time = 0; + return this.update(t) + }, + getRoot: function() { + return this._root + }, + uncacheClip: function(t) { + const e = this._actions, + n = t.uuid, + i = this._actionsByClip, + r = i[n]; + if (void 0 !== r) { + const t = r.knownActions; + for (let n = 0, i = t.length; n !== i; ++n) { + const i = t[n]; + this._deactivateAction(i); + const r = i._cacheIndex, + o = e[e.length - 1]; + i._cacheIndex = null, i._byClipCacheIndex = null, o._cacheIndex = r, e[r] = o, e.pop(), this._removeInactiveBindingsForAction(i) + } + delete i[n] + } + }, + uncacheRoot: function(t) { + const e = t.uuid, + n = this._actionsByClip; + for (const t in n) { + const i = n[t].actionByRoot[e]; + void 0 !== i && (this._deactivateAction(i), this._removeInactiveAction(i)) + } + const i = this._bindingsByRootAndName[e]; + if (void 0 !== i) + for (const t in i) { + const e = i[t]; + e.restoreOriginalState(), this._removeInactiveBinding(e) + } + }, + uncacheAction: function(t, e) { + const n = this.existingAction(t, e); + null !== n && (this._deactivateAction(n), this._removeInactiveAction(n)) + } + }); + class qa { + constructor(t) { + "string" == typeof t && (console.warn("THREE.Uniform: Type parameter is no longer needed."), t = arguments[1]), this.value = t + } + clone() { + return new qa(void 0 === this.value.clone ? this.value : this.value.clone()) + } + } + + function Ya(t, e, n) { + dr.call(this, t, e), this.meshPerAttribute = n || 1 + } + + function Qa(t, e, n, i, r) { + this.buffer = t, this.type = e, this.itemSize = n, this.elementSize = i, this.count = r, this.version = 0 + } + + function Za(t, e, n, i) { + this.ray = new tt(t, e), this.near = n || 0, this.far = i || 1 / 0, this.camera = null, this.layers = new dt, this.params = { + Mesh: {}, + Line: { + threshold: 1 + }, + LOD: {}, + Points: { + threshold: 1 + }, + Sprite: {} + }, Object.defineProperties(this.params, { + PointCloud: { + get: function() { + return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."), this.Points + } + } + }) + } + + function Ja(t, e) { + return t.distance - e.distance + } + + function Ka(t, e, n, i) { + if (t.layers.test(e.layers) && t.raycast(e, n), !0 === i) { + const i = t.children; + for (let t = 0, r = i.length; t < r; t++) Ka(i[t], e, n, !0) + } + } + Ya.prototype = Object.assign(Object.create(dr.prototype), { + constructor: Ya, + isInstancedInterleavedBuffer: !0, + copy: function(t) { + return dr.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this + }, + clone: function(t) { + const e = dr.prototype.clone.call(this, t); + return e.meshPerAttribute = this.meshPerAttribute, e + }, + toJSON: function(t) { + const e = dr.prototype.toJSON.call(this, t); + return e.isInstancedInterleavedBuffer = !0, e.meshPerAttribute = this.meshPerAttribute, e + } + }), Object.defineProperty(Qa.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Object.assign(Qa.prototype, { + isGLBufferAttribute: !0, + setBuffer: function(t) { + return this.buffer = t, this + }, + setType: function(t, e) { + return this.type = t, this.elementSize = e, this + }, + setItemSize: function(t) { + return this.itemSize = t, this + }, + setCount: function(t) { + return this.count = t, this + } + }), Object.assign(Za.prototype, { + set: function(t, e) { + this.ray.set(t, e) + }, + setFromCamera: function(t, e) { + e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(t.x, t.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type: " + e.type) + }, + intersectObject: function(t, e, n) { + const i = n || []; + return Ka(t, this, i, e), i.sort(Ja), i + }, + intersectObjects: function(t, e, n) { + const i = n || []; + if (!1 === Array.isArray(t)) return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), i; + for (let n = 0, r = t.length; n < r; n++) Ka(t[n], this, i, e); + return i.sort(Ja), i + } + }); + class $a { + constructor(t = 1, e = 0, n = 0) { + return this.radius = t, this.phi = e, this.theta = n, this + } + set(t, e, n) { + return this.radius = t, this.phi = e, this.theta = n, this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.radius = t.radius, this.phi = t.phi, this.theta = t.theta, this + } + makeSafe() { + return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), this + } + setFromVector3(t) { + return this.setFromCartesianCoords(t.x, t.y, t.z) + } + setFromCartesianCoords(t, e, n) { + return this.radius = Math.sqrt(t * t + e * e + n * n), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(t, n), this.phi = Math.acos(g.clamp(e / this.radius, -1, 1))), this + } + } + const tl = new v; + const el = new T, + nl = new T; + + function il(t) { + St.call(this), this.material = t, this.render = function() {}, this.hasPositions = !1, this.hasNormals = !1, this.hasColors = !1, this.hasUvs = !1, this.positionArray = null, this.normalArray = null, this.colorArray = null, this.uvArray = null, this.count = 0 + } + il.prototype = Object.create(St.prototype), il.prototype.constructor = il, il.prototype.isImmediateRenderObject = !0; + const rl = new T, + ol = new et, + sl = new et; + const al = new Kt({ + side: 1, + depthWrite: !1, + depthTest: !1 + }); + new He(new Ve, al); + + function ll(t) { + console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), Vs.call(this, t), this.type = "catmullrom" + } + Os.create = function(t, e) { + return console.log("THREE.Curve.create() has been deprecated"), t.prototype = Object.create(Os.prototype), t.prototype.constructor = t, t.prototype.getPoint = e, t + }, Object.assign(ea.prototype, { + fromPoints: function(t) { + return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), this.setFromPoints(t) + } + }), ll.prototype = Object.create(Vs.prototype), Object.assign(ll.prototype, { + initFromArray: function() { + console.error("THREE.Spline: .initFromArray() has been removed.") + }, + getControlPointsArray: function() { + console.error("THREE.Spline: .getControlPointsArray() has been removed.") + }, + reparametrizeByArcLength: function() { + console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.") + } + }), class extends ro { + constructor(t = 10, e = 10, n = 4473924, i = 8947848) { + n = new Yt(n), i = new Yt(i); + const r = e / 2, + o = t / e, + s = t / 2, + a = [], + l = []; + for (let t = 0, c = 0, h = -s; t <= e; t++, h += o) { + a.push(-s, 0, h, s, 0, h), a.push(h, 0, -s, h, 0, s); + const e = t === r ? n : i; + e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3 + } + const c = new be; + c.setAttribute("position", new he(a, 3)), c.setAttribute("color", new he(l, 3)); + super(c, new Qr({ + vertexColors: !0, + toneMapped: !1 + })), this.type = "GridHelper" + } + }.prototype.setColors = function() { + console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.") + }, class extends ro { + constructor(t) { + const e = function t(e) { + const n = []; + e && e.isBone && n.push(e); + for (let i = 0; i < e.children.length; i++) n.push.apply(n, t(e.children[i])); + return n + }(t), + n = new be, + i = [], + r = [], + o = new Yt(0, 0, 1), + s = new Yt(0, 1, 0); + for (let t = 0; t < e.length; t++) { + const n = e[t]; + n.parent && n.parent.isBone && (i.push(0, 0, 0), i.push(0, 0, 0), r.push(o.r, o.g, o.b), r.push(s.r, s.g, s.b)) + } + n.setAttribute("position", new he(i, 3)), n.setAttribute("color", new he(r, 3)); + super(n, new Qr({ + vertexColors: !0, + depthTest: !1, + depthWrite: !1, + toneMapped: !1, + transparent: !0 + })), this.type = "SkeletonHelper", this.isSkeletonHelper = !0, this.root = t, this.bones = e, this.matrix = t.matrixWorld, this.matrixAutoUpdate = !1 + } + updateMatrixWorld(t) { + const e = this.bones, + n = this.geometry, + i = n.getAttribute("position"); + sl.copy(this.root.matrixWorld).invert(); + for (let t = 0, n = 0; t < e.length; t++) { + const r = e[t]; + r.parent && r.parent.isBone && (ol.multiplyMatrices(sl, r.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n, rl.x, rl.y, rl.z), ol.multiplyMatrices(sl, r.parent.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n + 1, rl.x, rl.y, rl.z), n += 2) + } + n.getAttribute("position").needsUpdate = !0, super.updateMatrixWorld(t) + } + }.prototype.update = function() { + console.error("THREE.SkeletonHelper: update() no longer needs to be called.") + }, Object.assign(Es.prototype, { + extractUrlBase: function(t) { + return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), ya(t) + } + }), Es.Handlers = { + add: function() { + console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.") + }, + get: function() { + console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.") + } + }, Object.assign(class { + constructor(t, e) { + Object.defineProperty(this, "isBox2", { + value: !0 + }), this.min = void 0 !== t ? t : new v(1 / 0, 1 / 0), this.max = void 0 !== e ? e : new v(-1 / 0, -1 / 0) + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this + } + setFromPoints(t) { + this.makeEmpty(); + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this + } + setFromCenterAndSize(t, e) { + const n = tl.copy(e).multiplyScalar(.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + } + makeEmpty() { + return this.min.x = this.min.y = 1 / 0, this.max.x = this.max.y = -1 / 0, this + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y + } + getCenter(t) { + return void 0 === t && (console.warn("THREE.Box2: .getCenter() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) + } + getSize(t) { + return void 0 === t && (console.warn("THREE.Box2: .getSize() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min) + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + } + containsPoint(t) { + return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y) + } + containsBox(t) { + return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y + } + getParameter(t, e) { + return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), e = new v), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y)) + } + intersectsBox(t) { + return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y) + } + clampPoint(t, e) { + return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), e = new v), e.copy(t).clamp(this.min, this.max) + } + distanceToPoint(t) { + return tl.copy(t).clamp(this.min, this.max).sub(t).length() + } + intersect(t) { + return this.min.max(t.min), this.max.min(t.max), this + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this + } + translate(t) { + return this.min.add(t), this.max.add(t), this + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + }.prototype, { + center: function(t) { + return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), this.getCenter(t) + }, + empty: function() { + return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), this.isEmpty() + }, + isIntersectionBox: function(t) { + return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) + }, + size: function(t) { + return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), this.getSize(t) + } + }), Object.assign(C.prototype, { + center: function(t) { + return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), this.getCenter(t) + }, + empty: function() { + return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), this.isEmpty() + }, + isIntersectionBox: function(t) { + return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) + }, + isIntersectionSphere: function(t) { + return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) + }, + size: function(t) { + return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), this.getSize(t) + } + }), Object.assign(X.prototype, { + empty: function() { + return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."), this.isEmpty() + } + }), en.prototype.setFromMatrix = function(t) { + return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), this.setFromProjectionMatrix(t) + }, class { + constructor(t, e) { + this.start = void 0 !== t ? t : new T, this.end = void 0 !== e ? e : new T + } + set(t, e) { + return this.start.copy(t), this.end.copy(e), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.start.copy(t.start), this.end.copy(t.end), this + } + getCenter(t) { + return void 0 === t && (console.warn("THREE.Line3: .getCenter() target is now required"), t = new T), t.addVectors(this.start, this.end).multiplyScalar(.5) + } + delta(t) { + return void 0 === t && (console.warn("THREE.Line3: .delta() target is now required"), t = new T), t.subVectors(this.end, this.start) + } + distanceSq() { + return this.start.distanceToSquared(this.end) + } + distance() { + return this.start.distanceTo(this.end) + } + at(t, e) { + return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), e = new T), this.delta(e).multiplyScalar(t).add(this.start) + } + closestPointToPointParameter(t, e) { + el.subVectors(t, this.start), nl.subVectors(this.end, this.start); + const n = nl.dot(nl); + let i = nl.dot(el) / n; + return e && (i = g.clamp(i, 0, 1)), i + } + closestPointToPoint(t, e, n) { + const i = this.closestPointToPointParameter(t, e); + return void 0 === n && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), n = new T), this.delta(n).multiplyScalar(i).add(this.start) + } + applyMatrix4(t) { + return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this + } + equals(t) { + return t.start.equals(this.start) && t.end.equals(this.end) + } + }.prototype.center = function(t) { + return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), this.getCenter(t) + }, Object.assign(g, { + random16: function() { + return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), Math.random() + }, + nearestPowerOfTwo: function(t) { + return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), g.floorPowerOfTwo(t) + }, + nextPowerOfTwo: function(t) { + return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), g.ceilPowerOfTwo(t) + } + }), Object.assign(y.prototype, { + flattenToArrayOffset: function(t, e) { + return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) + }, + multiplyVector3: function(t) { + return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) + }, + multiplyVector3Array: function() { + console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.") + }, + applyToBufferAttribute: function(t) { + return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) + }, + applyToVector3Array: function() { + console.error("THREE.Matrix3: .applyToVector3Array() has been removed.") + }, + getInverse: function(t) { + return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() + } + }), Object.assign(et.prototype, { + extractPosition: function(t) { + return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), this.copyPosition(t) + }, + flattenToArrayOffset: function(t, e) { + return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) + }, + getPosition: function() { + return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), (new T).setFromMatrixColumn(this, 3) + }, + setRotationFromQuaternion: function(t) { + return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), this.makeRotationFromQuaternion(t) + }, + multiplyToArray: function() { + console.warn("THREE.Matrix4: .multiplyToArray() has been removed.") + }, + multiplyVector3: function(t) { + return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + multiplyVector4: function(t) { + return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + multiplyVector3Array: function() { + console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.") + }, + rotateAxis: function(t) { + console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), t.transformDirection(this) + }, + crossVector: function(t) { + return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + translate: function() { + console.error("THREE.Matrix4: .translate() has been removed.") + }, + rotateX: function() { + console.error("THREE.Matrix4: .rotateX() has been removed.") + }, + rotateY: function() { + console.error("THREE.Matrix4: .rotateY() has been removed.") + }, + rotateZ: function() { + console.error("THREE.Matrix4: .rotateZ() has been removed.") + }, + rotateByAxis: function() { + console.error("THREE.Matrix4: .rotateByAxis() has been removed.") + }, + applyToBufferAttribute: function(t) { + return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + applyToVector3Array: function() { + console.error("THREE.Matrix4: .applyToVector3Array() has been removed.") + }, + makeFrustum: function(t, e, n, i, r, o) { + return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), this.makePerspective(t, e, i, n, r, o) + }, + getInverse: function(t) { + return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() + } + }), Ct.prototype.isIntersectionLine = function(t) { + return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), this.intersectsLine(t) + }, Object.assign(S.prototype, { + multiplyVector3: function(t) { + return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), t.applyQuaternion(this) + }, + inverse: function() { + return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."), this.invert() + } + }), Object.assign(tt.prototype, { + isIntersectionBox: function(t) { + return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) + }, + isIntersectionPlane: function(t) { + return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), this.intersectsPlane(t) + }, + isIntersectionSphere: function(t) { + return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) + } + }), Object.assign(Gt.prototype, { + area: function() { + return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), this.getArea() + }, + barycoordFromPoint: function(t, e) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), this.getBarycoord(t, e) + }, + midpoint: function(t) { + return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), this.getMidpoint(t) + }, + normal: function(t) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), this.getNormal(t) + }, + plane: function(t) { + return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), this.getPlane(t) + } + }), Object.assign(Gt, { + barycoordFromPoint: function(t, e, n, i, r) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), Gt.getBarycoord(t, e, n, i, r) + }, + normal: function(t, e, n, i) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), Gt.getNormal(t, e, n, i) + } + }), Object.assign(na.prototype, { + extractAllPoints: function(t) { + return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), this.extractPoints(t) + }, + extrude: function(t) { + return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), new Xo(this, t) + }, + makeGeometry: function(t) { + return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), new Qo(this, t) + } + }), Object.assign(v.prototype, { + fromAttribute: function(t, e, n) { + return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) + }, + distanceToManhattan: function(t) { + return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() + } + }), Object.assign(T.prototype, { + setEulerFromRotationMatrix: function() { + console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.") + }, + setEulerFromQuaternion: function() { + console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.") + }, + getPositionFromMatrix: function(t) { + return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), this.setFromMatrixPosition(t) + }, + getScaleFromMatrix: function(t) { + return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), this.setFromMatrixScale(t) + }, + getColumnFromMatrix: function(t, e) { + return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), this.setFromMatrixColumn(e, t) + }, + applyProjection: function(t) { + return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), this.applyMatrix4(t) + }, + fromAttribute: function(t, e, n) { + return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) + }, + distanceToManhattan: function(t) { + return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() + } + }), Object.assign(M.prototype, { + fromAttribute: function(t, e, n) { + return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() + } + }), Object.assign(St.prototype, { + getChildByName: function(t) { + return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), this.getObjectByName(t) + }, + renderDepth: function() { + console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.") + }, + translate: function(t, e) { + return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), this.translateOnAxis(e, t) + }, + getWorldRotation: function() { + console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.") + }, + applyMatrix: function(t) { + return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) + } + }), Object.defineProperties(St.prototype, { + eulerOrder: { + get: function() { + return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order + }, + set: function(t) { + console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order = t + } + }, + useQuaternion: { + get: function() { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + }, + set: function() { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + } + } + }), Object.assign(He.prototype, { + setDrawMode: function() { + console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + }), Object.defineProperties(He.prototype, { + drawMode: { + get: function() { + return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), 0 + }, + set: function() { + console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + } + }), Object.defineProperties(Ir.prototype, { + objects: { + get: function() { + return console.warn("THREE.LOD: .objects has been renamed to .levels."), this.levels + } + } + }), Object.defineProperty(kr.prototype, "useVertexTexture", { + get: function() { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + }, + set: function() { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + } + }), Ur.prototype.initBones = function() { + console.error("THREE.SkinnedMesh: initBones() has been removed.") + }, Object.defineProperty(Os.prototype, "__arcLengthDivisions", { + get: function() { + return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions + }, + set: function(t) { + console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions = t + } + }), Ye.prototype.setLens = function(t, e) { + console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), void 0 !== e && (this.filmGauge = e), this.setFocalLength(t) + }, Object.defineProperties(ia.prototype, { + onlyShadow: { + set: function() { + console.warn("THREE.Light: .onlyShadow has been removed.") + } + }, + shadowCameraFov: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), this.shadow.camera.fov = t + } + }, + shadowCameraLeft: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), this.shadow.camera.left = t + } + }, + shadowCameraRight: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), this.shadow.camera.right = t + } + }, + shadowCameraTop: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), this.shadow.camera.top = t + } + }, + shadowCameraBottom: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), this.shadow.camera.bottom = t + } + }, + shadowCameraNear: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), this.shadow.camera.near = t + } + }, + shadowCameraFar: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), this.shadow.camera.far = t + } + }, + shadowCameraVisible: { + set: function() { + console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.") + } + }, + shadowBias: { + set: function(t) { + console.warn("THREE.Light: .shadowBias is now .shadow.bias."), this.shadow.bias = t + } + }, + shadowDarkness: { + set: function() { + console.warn("THREE.Light: .shadowDarkness has been removed.") + } + }, + shadowMapWidth: { + set: function(t) { + console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), this.shadow.mapSize.width = t + } + }, + shadowMapHeight: { + set: function(t) { + console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), this.shadow.mapSize.height = t + } + } + }), Object.defineProperties(ee.prototype, { + length: { + get: function() { + return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."), this.array.length + } + }, + dynamic: { + get: function() { + return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), 35048 === this.usage + }, + set: function() { + console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), this.setUsage(35048) + } + } + }), Object.assign(ee.prototype, { + setDynamic: function(t) { + return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this + }, + copyIndicesArray: function() { + console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.") + }, + setArray: function() { + console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), Object.assign(be.prototype, { + addIndex: function(t) { + console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), this.setIndex(t) + }, + addAttribute: function(t, e) { + return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === t ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), this.setIndex(e), this) : this.setAttribute(t, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.setAttribute(t, new ee(arguments[1], arguments[2]))) + }, + addDrawCall: function(t, e, n) { + void 0 !== n && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), this.addGroup(t, e) + }, + clearDrawCalls: function() { + console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), this.clearGroups() + }, + computeOffsets: function() { + console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.") + }, + removeAttribute: function(t) { + return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), this.deleteAttribute(t) + }, + applyMatrix: function(t) { + return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) + } + }), Object.defineProperties(be.prototype, { + drawcalls: { + get: function() { + return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."), this.groups + } + }, + offsets: { + get: function() { + return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."), this.groups + } + } + }), Object.defineProperties(Aa.prototype, { + maxInstancedCount: { + get: function() { + return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount + }, + set: function(t) { + console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount = t + } + } + }), Object.defineProperties(Za.prototype, { + linePrecision: { + get: function() { + return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold + }, + set: function(t) { + console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold = t + } + } + }), Object.defineProperties(dr.prototype, { + dynamic: { + get: function() { + return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), 35048 === this.usage + }, + set: function(t) { + console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), this.setUsage(t) + } + } + }), Object.assign(dr.prototype, { + setDynamic: function(t) { + return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this + }, + setArray: function() { + console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), Object.assign(Xo.prototype, { + getArrays: function() { + console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.") + }, + addShapeList: function() { + console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.") + }, + addShape: function() { + console.error("THREE.ExtrudeGeometry: .addShape() has been removed.") + } + }), Object.assign(ur.prototype, { + dispose: function() { + console.error("THREE.Scene: .dispose() has been removed.") + } + }), Object.defineProperties(qa.prototype, { + dynamic: { + set: function() { + console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.") + } + }, + onUpdate: { + value: function() { + return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."), this + } + } + }), Object.defineProperties(Jt.prototype, { + wrapAround: { + get: function() { + console.warn("THREE.Material: .wrapAround has been removed.") + }, + set: function() { + console.warn("THREE.Material: .wrapAround has been removed.") + } + }, + overdraw: { + get: function() { + console.warn("THREE.Material: .overdraw has been removed.") + }, + set: function() { + console.warn("THREE.Material: .overdraw has been removed.") + } + }, + wrapRGB: { + get: function() { + return console.warn("THREE.Material: .wrapRGB has been removed."), new Yt + } + }, + shading: { + get: function() { + console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.") + }, + set: function(t) { + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === t + } + }, + stencilMask: { + get: function() { + return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask + }, + set: function(t) { + console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask = t + } + } + }), Object.defineProperties(es.prototype, { + metal: { + get: function() { + return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."), !1 + }, + set: function() { + console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead") + } + } + }), Object.defineProperties(ts.prototype, { + transparency: { + get: function() { + return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission + }, + set: function(t) { + console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission = t + } + } + }), Object.defineProperties(Xe.prototype, { + derivatives: { + get: function() { + return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives + }, + set: function(t) { + console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives = t + } + } + }), Object.assign(cr.prototype, { + clearTarget: function(t, e, n, i) { + console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), this.setRenderTarget(t), this.clear(e, n, i) + }, + animate: function(t) { + console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), this.setAnimationLoop(t) + }, + getCurrentRenderTarget: function() { + return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."), this.getRenderTarget() + }, + getMaxAnisotropy: function() { + return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."), this.capabilities.getMaxAnisotropy() + }, + getPrecision: function() { + return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."), this.capabilities.precision + }, + resetGLState: function() { + return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."), this.state.reset() + }, + supportsFloatTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."), this.extensions.get("OES_texture_float") + }, + supportsHalfFloatTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."), this.extensions.get("OES_texture_half_float") + }, + supportsStandardDerivatives: function() { + return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."), this.extensions.get("OES_standard_derivatives") + }, + supportsCompressedTextureS3TC: function() { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."), this.extensions.get("WEBGL_compressed_texture_s3tc") + }, + supportsCompressedTexturePVRTC: function() { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."), this.extensions.get("WEBGL_compressed_texture_pvrtc") + }, + supportsBlendMinMax: function() { + return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."), this.extensions.get("EXT_blend_minmax") + }, + supportsVertexTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."), this.capabilities.vertexTextures + }, + supportsInstancedArrays: function() { + return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."), this.extensions.get("ANGLE_instanced_arrays") + }, + enableScissorTest: function(t) { + console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), this.setScissorTest(t) + }, + initMaterial: function() { + console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.") + }, + addPrePlugin: function() { + console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.") + }, + addPostPlugin: function() { + console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.") + }, + updateShadowMap: function() { + console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.") + }, + setFaceCulling: function() { + console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.") + }, + allocTextureUnit: function() { + console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.") + }, + setTexture: function() { + console.warn("THREE.WebGLRenderer: .setTexture() has been removed.") + }, + setTexture2D: function() { + console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.") + }, + setTextureCube: function() { + console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.") + }, + getActiveMipMapLevel: function() { + return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."), this.getActiveMipmapLevel() + } + }), Object.defineProperties(cr.prototype, { + shadowMapEnabled: { + get: function() { + return this.shadowMap.enabled + }, + set: function(t) { + console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), this.shadowMap.enabled = t + } + }, + shadowMapType: { + get: function() { + return this.shadowMap.type + }, + set: function(t) { + console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), this.shadowMap.type = t + } + }, + shadowMapCullFace: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + } + }, + context: { + get: function() { + return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."), this.getContext() + } + }, + vr: { + get: function() { + return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"), this.xr + } + }, + gammaInput: { + get: function() { + return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."), !1 + }, + set: function() { + console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.") + } + }, + gammaOutput: { + get: function() { + return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), !1 + }, + set: function(t) { + console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), this.outputEncoding = !0 === t ? 3001 : 3e3 + } + }, + toneMappingWhitePoint: { + get: function() { + return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."), 1 + }, + set: function() { + console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.") + } + } + }), Object.defineProperties(tr.prototype, { + cullFace: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + } + }, + renderReverseSided: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + } + }, + renderSingleSided: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + } + } + }), Object.defineProperties(E.prototype, { + wrapS: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS = t + } + }, + wrapT: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT = t + } + }, + magFilter: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter = t + } + }, + minFilter: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter = t + } + }, + anisotropy: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy = t + } + }, + offset: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset = t + } + }, + repeat: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat = t + } + }, + format: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format = t + } + }, + type: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type = t + } + }, + generateMipmaps: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps = t + } + } + }), Object.defineProperties(class extends St { + constructor(t) { + super(), this.type = "Audio", this.listener = t, this.context = t.context, this.gain = this.context.createGain(), this.gain.connect(t.getInput()), this.autoplay = !1, this.buffer = null, this.detune = 0, this.loop = !1, this.loopStart = 0, this.loopEnd = 0, this.offset = 0, this.duration = void 0, this.playbackRate = 1, this.isPlaying = !1, this.hasPlaybackControl = !0, this.source = null, this.sourceType = "empty", this._startedAt = 0, this._progress = 0, this._connected = !1, this.filters = [] + } + getOutput() { + return this.gain + } + setNodeSource(t) { + return this.hasPlaybackControl = !1, this.sourceType = "audioNode", this.source = t, this.connect(), this + } + setMediaElementSource(t) { + return this.hasPlaybackControl = !1, this.sourceType = "mediaNode", this.source = this.context.createMediaElementSource(t), this.connect(), this + } + setMediaStreamSource(t) { + return this.hasPlaybackControl = !1, this.sourceType = "mediaStreamNode", this.source = this.context.createMediaStreamSource(t), this.connect(), this + } + setBuffer(t) { + return this.buffer = t, this.sourceType = "buffer", this.autoplay && this.play(), this + } + play(t = 0) { + if (!0 === this.isPlaying) return void console.warn("THREE.Audio: Audio is already playing."); + if (!1 === this.hasPlaybackControl) return void console.warn("THREE.Audio: this Audio has no playback control."); + this._startedAt = this.context.currentTime + t; + const e = this.context.createBufferSource(); + return e.buffer = this.buffer, e.loop = this.loop, e.loopStart = this.loopStart, e.loopEnd = this.loopEnd, e.onended = this.onEnded.bind(this), e.start(this._startedAt, this._progress + this.offset, this.duration), this.isPlaying = !0, this.source = e, this.setDetune(this.detune), this.setPlaybackRate(this.playbackRate), this.connect() + } + pause() { + if (!1 !== this.hasPlaybackControl) return !0 === this.isPlaying && (this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, !0 === this.loop && (this._progress = this._progress % (this.duration || this.buffer.duration)), this.source.stop(), this.source.onended = null, this.isPlaying = !1), this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + stop() { + if (!1 !== this.hasPlaybackControl) return this._progress = 0, this.source.stop(), this.source.onended = null, this.isPlaying = !1, this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + connect() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].connect(this.filters[t]); + this.filters[this.filters.length - 1].connect(this.getOutput()) + } else this.source.connect(this.getOutput()); + return this._connected = !0, this + } + disconnect() { + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].disconnect(this.filters[t]); + this.filters[this.filters.length - 1].disconnect(this.getOutput()) + } else this.source.disconnect(this.getOutput()); + return this._connected = !1, this + } + getFilters() { + return this.filters + } + setFilters(t) { + return t || (t = []), !0 === this._connected ? (this.disconnect(), this.filters = t.slice(), this.connect()) : this.filters = t.slice(), this + } + setDetune(t) { + if (this.detune = t, void 0 !== this.source.detune) return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this + } + getDetune() { + return this.detune + } + getFilter() { + return this.getFilters()[0] + } + setFilter(t) { + return this.setFilters(t ? [t] : []) + } + setPlaybackRate(t) { + if (!1 !== this.hasPlaybackControl) return this.playbackRate = t, !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + getPlaybackRate() { + return this.playbackRate + } + onEnded() { + this.isPlaying = !1 + } + getLoop() { + return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), !1) : this.loop + } + setLoop(t) { + if (!1 !== this.hasPlaybackControl) return this.loop = t, !0 === this.isPlaying && (this.source.loop = this.loop), this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + setLoopStart(t) { + return this.loopStart = t, this + } + setLoopEnd(t) { + return this.loopEnd = t, this + } + getVolume() { + return this.gain.gain.value + } + setVolume(t) { + return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01), this + } + }.prototype, { + load: { + value: function(t) { + console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead."); + const e = this; + return (new Ra).load(t, (function(t) { + e.setBuffer(t) + })), this + } + }, + startTime: { + set: function() { + console.warn("THREE.Audio: .startTime is now .play( delay ).") + } + } + }), class { + constructor(t, e = 2048) { + this.analyser = t.context.createAnalyser(), this.analyser.fftSize = e, this.data = new Uint8Array(this.analyser.frequencyBinCount), t.getOutput().connect(this.analyser) + } + getFrequencyData() { + return this.analyser.getByteFrequencyData(this.data), this.data + } + getAverageFrequency() { + let t = 0; + const e = this.getFrequencyData(); + for (let n = 0; n < e.length; n++) t += e[n]; + return t / e.length + } + }.prototype.getData = function() { + return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), this.getFrequencyData() + }, Qe.prototype.updateCubeMap = function(t, e) { + return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), this.update(t, e) + }, Qe.prototype.clear = function(t, e, n, i) { + return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."), this.renderTarget.clear(t, e, n, i) + }, x.crossOrigin = void 0, x.loadTexture = function(t, e, n, i) { + console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead."); + const r = new Is; + r.setCrossOrigin(this.crossOrigin); + const o = r.load(t, n, void 0, i); + return e && (o.mapping = e), o + }, x.loadTextureCube = function(t, e, n, i) { + console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead."); + const r = new Ps; + r.setCrossOrigin(this.crossOrigin); + const o = r.load(t, n, void 0, i); + return e && (o.mapping = e), o + }, x.loadCompressedTexture = function() { + console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") + }, x.loadCompressedTextureCube = function() { + console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") + }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { + detail: { + revision: "125" + } + })), "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = "125"); + var cl = function(t, e) { + var n, i, r = this, + o = new et, + s = null; + "VRFrameData" in window && (s = new VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { + i = t, t.length > 0 ? n = t[0] : e && e("VR input not available.") + })).catch((function() { + console.warn("THREE.VRControls: Unable to get VR Displays") + })), this.scale = 1, this.standing = !1, this.userHeight = 1.6, this.getVRDisplay = function() { + return n + }, this.setVRDisplay = function(t) { + n = t + }, this.getVRDisplays = function() { + return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."), i + }, this.getStandingMatrix = function() { + return o + }, this.update = function() { + var e; + n && (n.getFrameData ? (n.getFrameData(s), e = s.pose) : n.getPose && (e = n.getPose()), null !== e.orientation && t.quaternion.fromArray(e.orientation), null !== e.position ? t.position.fromArray(e.position) : t.position.set(0, 0, 0), this.standing && (n.stageParameters ? (t.updateMatrix(), o.fromArray(n.stageParameters.sittingToStandingTransform), t.applyMatrix(o)) : t.position.setY(t.position.y + this.userHeight)), t.position.multiplyScalar(r.scale)) + }, this.dispose = function() { + n = null + } + }, + hl = function(t, e) { + var n, i, r, o, s = new T, + a = new T, + l = new et, + c = new et, + h = new et, + u = null; + "VRFrameData" in window && (u = new window.VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { + i = t, t.length > 0 ? n = t[0] : e && e("HMD not available") + })).catch((function() { + console.warn("THREE.VREffect: Unable to get VR Displays") + })), this.isPresenting = !1; + var d = this, + p = t.getSize(), + f = !1, + m = t.getPixelRatio(); + this.getVRDisplay = function() { + return n + }, this.setVRDisplay = function(t) { + n = t + }, this.getVRDisplays = function() { + return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."), i + }, this.setSize = function(e, i, r) { + if (p = { + width: e, + height: i + }, f = r, d.isPresenting) { + var o = n.getEyeParameters("left"); + t.setPixelRatio(1), t.setSize(2 * o.renderWidth, o.renderHeight, !1) + } else t.setPixelRatio(m), t.setSize(e, i, r) + }; + var g = t.domElement, + v = [0, 0, .5, 1], + y = [.5, 0, .5, 1]; + + function A() { + var e = d.isPresenting; + if (d.isPresenting = void 0 !== n && n.isPresenting, d.isPresenting) { + var i = n.getEyeParameters("left"), + r = i.renderWidth, + o = i.renderHeight; + e || (m = t.getPixelRatio(), p = t.getSize(), t.setPixelRatio(1), t.setSize(2 * r, o, !1)) + } else e && (t.setPixelRatio(m), t.setSize(p.width, p.height, f)) + } + window.addEventListener("vrdisplaypresentchange", A, !1), this.setFullScreen = function(t) { + return new Promise((function(e, i) { + void 0 !== n ? d.isPresenting !== t ? e(t ? n.requestPresent([{ + source: g + }]) : n.exitPresent()) : e() : i(new Error("No VR hardware found.")) + })) + }, this.requestPresent = function() { + return this.setFullScreen(!0) + }, this.exitPresent = function() { + return this.setFullScreen(!1) + }, this.requestAnimationFrame = function(t) { + return void 0 !== n ? n.requestAnimationFrame(t) : window.requestAnimationFrame(t) + }, this.cancelAnimationFrame = function(t) { + void 0 !== n ? n.cancelAnimationFrame(t) : window.cancelAnimationFrame(t) + }, this.submitFrame = function() { + void 0 !== n && d.isPresenting && n.submitFrame() + }, this.autoSubmitFrame = !0; + var x = new Ye; + x.layers.enable(1); + var _ = new Ye; + _.layers.enable(2), this.render = function(e, i, p, f) { + if (n && d.isPresenting) { + var m = e.autoUpdate; + m && (e.updateMatrixWorld(), e.autoUpdate = !1), Array.isArray(e) && (console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."), e = e[0]); + var g, A, E = t.getSize(), + S = n.getLayers(); + if (S.length) { + var T = S[0]; + g = null !== T.leftBounds && 4 === T.leftBounds.length ? T.leftBounds : v, A = null !== T.rightBounds && 4 === T.rightBounds.length ? T.rightBounds : y + } else g = v, A = y; + if (r = { + x: Math.round(E.width * g[0]), + y: Math.round(E.height * g[1]), + width: Math.round(E.width * g[2]), + height: Math.round(E.height * g[3]) + }, o = { + x: Math.round(E.width * A[0]), + y: Math.round(E.height * A[1]), + width: Math.round(E.width * A[2]), + height: Math.round(E.height * A[3]) + }, p ? (t.setRenderTarget(p), p.scissorTest = !0) : (t.setRenderTarget(null), t.setScissorTest(!0)), (t.autoClear || f) && t.clear(), null === i.parent && i.updateMatrixWorld(), i.matrixWorld.decompose(x.position, x.quaternion, x.scale), _.position.copy(x.position), _.quaternion.copy(x.quaternion), _.scale.copy(x.scale), n.getFrameData) n.depthNear = i.near, n.depthFar = i.far, n.getFrameData(u), x.projectionMatrix.elements = u.leftProjectionMatrix, _.projectionMatrix.elements = u.rightProjectionMatrix, + function(t) { + t.pose.orientation ? (b.fromArray(t.pose.orientation), l.makeRotationFromQuaternion(b)) : l.identity(); + t.pose.position && (w.fromArray(t.pose.position), l.setPosition(w)); + c.fromArray(t.leftViewMatrix), c.multiply(l), h.fromArray(t.rightViewMatrix), h.multiply(l), c.getInverse(c), h.getInverse(h) + }(u), x.updateMatrix(), x.matrix.multiply(c), x.matrix.decompose(x.position, x.quaternion, x.scale), _.updateMatrix(), _.matrix.multiply(h), _.matrix.decompose(_.position, _.quaternion, _.scale); + else { + var L = n.getEyeParameters("left"), + R = n.getEyeParameters("right"); + x.projectionMatrix = M(L.fieldOfView, !0, i.near, i.far), _.projectionMatrix = M(R.fieldOfView, !0, i.near, i.far), s.fromArray(L.offset), a.fromArray(R.offset), x.translateOnAxis(s, x.scale.x), _.translateOnAxis(a, _.scale.x) + } + return p ? (p.viewport.set(r.x, r.y, r.width, r.height), p.scissor.set(r.x, r.y, r.width, r.height)) : (t.setViewport(r.x, r.y, r.width, r.height), t.setScissor(r.x, r.y, r.width, r.height)), t.render(e, x, p, f), p ? (p.viewport.set(o.x, o.y, o.width, o.height), p.scissor.set(o.x, o.y, o.width, o.height)) : (t.setViewport(o.x, o.y, o.width, o.height), t.setScissor(o.x, o.y, o.width, o.height)), t.render(e, _, p, f), p ? (p.viewport.set(0, 0, E.width, E.height), p.scissor.set(0, 0, E.width, E.height), p.scissorTest = !1, t.setRenderTarget(null)) : (t.setViewport(0, 0, E.width, E.height), t.setScissorTest(!1)), m && (e.autoUpdate = !0), void(d.autoSubmitFrame && d.submitFrame()) + } + t.render(e, i, p, f) + }, this.dispose = function() { + window.removeEventListener("vrdisplaypresentchange", A, !1) + }; + var b = new S, + w = new T; + + function M(t, e, n, i) { + var r = Math.PI / 180; + return function(t, e, n, i) { + n = void 0 === n ? .01 : n, i = void 0 === i ? 1e4 : i; + var r = (e = void 0 === e || e) ? -1 : 1, + o = new et, + s = o.elements, + a = function(t) { + var e = 2 / (t.leftTan + t.rightTan), + n = (t.leftTan - t.rightTan) * e * .5, + i = 2 / (t.upTan + t.downTan); + return { + scale: [e, i], + offset: [n, (t.upTan - t.downTan) * i * .5] + } + }(t); + return s[0] = a.scale[0], s[1] = 0, s[2] = a.offset[0] * r, s[3] = 0, s[4] = 0, s[5] = a.scale[1], s[6] = -a.offset[1] * r, s[7] = 0, s[8] = 0, s[9] = 0, s[10] = i / (n - i) * -r, s[11] = i * n / (n - i), s[12] = 0, s[13] = 0, s[14] = r, s[15] = 0, o.transpose(), o + }({ + upTan: Math.tan(t.upDegrees * r), + downTan: Math.tan(t.downDegrees * r), + leftTan: Math.tan(t.leftDegrees * r), + rightTan: Math.tan(t.rightDegrees * r) + }, e, n, i) + } + }, + ul = function(t, e) { + var n, i, r, o, s; + this.object = t, this.domElement = void 0 !== e ? e : document, this.enabled = !0, this.target = new T, this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = .25, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !1, this.keyPanSpeed = 7, this.autoRotate = !1, this.autoRotateSpeed = 2, this.enableKeys = !0, this.keys = { + LEFT: 37, + UP: 38, + RIGHT: 39, + BOTTOM: 40 + }, this.mouseButtons = { + ORBIT: h, + ZOOM: u, + PAN: d + }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this.getPolarAngle = function() { + return y.phi + }, this.getAzimuthalAngle = function() { + return y.theta + }, this.saveState = function() { + a.target0.copy(a.target), a.position0.copy(a.object.position), a.zoom0 = a.object.zoom + }, this.reset = function() { + a.target.copy(a.target0), a.object.position.copy(a.position0), a.object.zoom = a.zoom0, a.object.updateProjectionMatrix(), a.dispatchEvent(l), a.update(), m = f.NONE + }, this.update = (n = new T, i = (new S).setFromUnitVectors(t.up, new T(0, 1, 0)), r = i.clone().inverse(), o = new T, s = new S, function() { + var t = a.object.position; + return n.copy(t).sub(a.target), n.applyQuaternion(i), y.setFromVector3(n), a.autoRotate && m === f.NONE && a.rotateLeft(2 * Math.PI / 60 / 60 * a.autoRotateSpeed), y.theta += A.theta, y.phi += A.phi, y.theta = Math.max(a.minAzimuthAngle, Math.min(a.maxAzimuthAngle, y.theta)), y.phi = Math.max(a.minPolarAngle, Math.min(a.maxPolarAngle, y.phi)), y.makeSafe(), y.radius *= x, y.radius = Math.max(a.minDistance, Math.min(a.maxDistance, y.radius)), a.target.add(_), n.setFromSpherical(y), n.applyQuaternion(r), t.copy(a.target).add(n), a.object.lookAt(a.target), !0 === a.enableDamping ? (A.theta *= 1 - a.dampingFactor, A.phi *= 1 - a.dampingFactor, _.multiplyScalar(1 - a.dampingFactor)) : (A.set(0, 0, 0), _.set(0, 0, 0)), x = 1, !!(b || o.distanceToSquared(a.object.position) > g || 8 * (1 - s.dot(a.object.quaternion)) > g) && (a.dispatchEvent(l), o.copy(a.object.position), s.copy(a.object.quaternion), b = !1, !0) + }), this.dispose = function() { + a.domElement.removeEventListener("contextmenu", Q, !1), a.domElement.removeEventListener("mousedown", G, !1), a.domElement.removeEventListener("wheel", W, !1), a.domElement.removeEventListener("touchstart", X, !1), a.domElement.removeEventListener("touchend", Y, !1), a.domElement.removeEventListener("touchmove", q, !1), document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), window.removeEventListener("keydown", j, !1) + }; + var a = this, + l = { + type: "change" + }, + c = { + type: "start" + }, + p = { + type: "end" + }, + f = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_DOLLY_PAN: 4 + }, + m = f.NONE, + g = 1e-6, + y = new $a, + A = new $a, + x = 1, + _ = new T, + b = !1, + w = new v, + M = new v, + E = new v, + L = new v, + R = new v, + C = new v, + P = new v, + D = new v, + I = new v; + + function O() { + return Math.pow(.95, a.zoomSpeed) + } + a.rotateLeft = function(t) { + A.theta -= t + }, a.rotateUp = function(t) { + A.phi -= t + }; + var N, B = (N = new T, function(t, e) { + N.setFromMatrixColumn(e, 0), N.multiplyScalar(-t), _.add(N) + }), + F = function() { + var t = new T; + return function(e, n) { + !0 === a.screenSpacePanning ? t.setFromMatrixColumn(n, 1) : (t.setFromMatrixColumn(n, 0), t.crossVectors(a.object.up, t)), t.multiplyScalar(e), _.add(t) + } + }(), + z = function() { + var t = new T; + return function(e, n) { + var i = a.domElement === document ? a.domElement.body : a.domElement; + if (a.object.isPerspectiveCamera) { + var r = a.object.position; + t.copy(r).sub(a.target); + var o = t.length(); + o *= Math.tan(a.object.fov / 2 * Math.PI / 180), B(2 * e * o / i.clientHeight, a.object.matrix), F(2 * n * o / i.clientHeight, a.object.matrix) + } else a.object.isOrthographicCamera ? (B(e * (a.object.right - a.object.left) / a.object.zoom / i.clientWidth, a.object.matrix), F(n * (a.object.top - a.object.bottom) / a.object.zoom / i.clientHeight, a.object.matrix)) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."), a.enablePan = !1) + } + }(); + + function U(t) { + a.object.isPerspectiveCamera ? x /= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom * t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) + } + + function H(t) { + a.object.isPerspectiveCamera ? x *= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom / t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) + } + + function G(t) { + if (!1 !== a.enabled) { + switch (t.preventDefault(), t.button) { + case a.mouseButtons.ORBIT: + if (!1 === a.enableRotate) return; + ! function(t) { + w.set(t.clientX, t.clientY) + }(t), m = f.ROTATE; + break; + case a.mouseButtons.ZOOM: + if (!1 === a.enableZoom) return; + ! function(t) { + P.set(t.clientX, t.clientY) + }(t), m = f.DOLLY; + break; + case a.mouseButtons.PAN: + if (!1 === a.enablePan) return; + ! function(t) { + L.set(t.clientX, t.clientY) + }(t), m = f.PAN + } + m !== f.NONE && (document.addEventListener("mousemove", V, !1), document.addEventListener("mouseup", k, !1), a.dispatchEvent(c)) + } + } + + function V(t) { + if (!1 !== a.enabled) switch (t.preventDefault(), m) { + case f.ROTATE: + if (!1 === a.enableRotate) return; + ! function(t) { + M.set(t.clientX, t.clientY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); + var e = a.domElement === document ? a.domElement.body : a.domElement; + a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() + }(t); + break; + case f.DOLLY: + if (!1 === a.enableZoom) return; + ! function(t) { + D.set(t.clientX, t.clientY), I.subVectors(D, P), I.y > 0 ? U(O()) : I.y < 0 && H(O()), P.copy(D), a.update() + }(t); + break; + case f.PAN: + if (!1 === a.enablePan) return; + ! function(t) { + R.set(t.clientX, t.clientY), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R), a.update() + }(t) + } + } + + function k(t) { + !1 !== a.enabled && (document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), a.dispatchEvent(p), m = f.NONE) + } + + function W(t) { + !1 === a.enabled || !1 === a.enableZoom || m !== f.NONE && m !== f.ROTATE || (t.preventDefault(), t.stopPropagation(), a.dispatchEvent(c), function(t) { + t.deltaY < 0 ? H(O()) : t.deltaY > 0 && U(O()), a.update() + }(t), a.dispatchEvent(p)) + } + + function j(t) { + !1 !== a.enabled && !1 !== a.enableKeys && !1 !== a.enablePan && function(t) { + switch (t.keyCode) { + case a.keys.UP: + z(0, a.keyPanSpeed), a.update(); + break; + case a.keys.BOTTOM: + z(0, -a.keyPanSpeed), a.update(); + break; + case a.keys.LEFT: + z(a.keyPanSpeed, 0), a.update(); + break; + case a.keys.RIGHT: + z(-a.keyPanSpeed, 0), a.update() + } + }(t) + } + + function X(t) { + if (!1 !== a.enabled) { + switch (t.preventDefault(), t.touches.length) { + case 1: + if (!1 === a.enableRotate) return; + ! function(t) { + w.set(t.touches[0].pageX, t.touches[0].pageY) + }(t), m = f.TOUCH_ROTATE; + break; + case 2: + if (!1 === a.enableZoom && !1 === a.enablePan) return; + ! function(t) { + if (a.enableZoom) { + var e = t.touches[0].pageX - t.touches[1].pageX, + n = t.touches[0].pageY - t.touches[1].pageY, + i = Math.sqrt(e * e + n * n); + P.set(0, i) + } + if (a.enablePan) { + var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), + o = .5 * (t.touches[0].pageY + t.touches[1].pageY); + L.set(r, o) + } + }(t), m = f.TOUCH_DOLLY_PAN; + break; + default: + m = f.NONE + } + m !== f.NONE && a.dispatchEvent(c) + } + } + + function q(t) { + if (!1 !== a.enabled) switch (t.preventDefault(), t.stopPropagation(), t.touches.length) { + case 1: + if (!1 === a.enableRotate) return; + if (m !== f.TOUCH_ROTATE) return; + ! function(t) { + M.set(t.touches[0].pageX, t.touches[0].pageY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); + var e = a.domElement === document ? a.domElement.body : a.domElement; + a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() + }(t); + break; + case 2: + if (!1 === a.enableZoom && !1 === a.enablePan) return; + if (m !== f.TOUCH_DOLLY_PAN) return; + ! function(t) { + if (a.enableZoom) { + var e = t.touches[0].pageX - t.touches[1].pageX, + n = t.touches[0].pageY - t.touches[1].pageY, + i = Math.sqrt(e * e + n * n); + D.set(0, i), I.set(0, Math.pow(D.y / P.y, a.zoomSpeed)), U(I.y), P.copy(D) + } + if (a.enablePan) { + var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), + o = .5 * (t.touches[0].pageY + t.touches[1].pageY); + R.set(r, o), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R) + } + a.update() + }(t); + break; + default: + m = f.NONE + } + } + + function Y(t) { + !1 !== a.enabled && (a.dispatchEvent(p), m = f.NONE) + } + + function Q(t) { + !1 !== a.enabled && t.preventDefault() + } + a.domElement.addEventListener("mousedown", G, !1), a.domElement.addEventListener("wheel", W, !1), a.domElement.addEventListener("touchstart", X, !1), a.domElement.addEventListener("touchend", Y, !1), a.domElement.addEventListener("touchmove", q, !1), window.addEventListener("keydown", j, !1), this.update() + }; + (ul.prototype = Object.create(p.prototype)).constructor = ul, Object.defineProperties(ul.prototype, { + center: { + get: function() { + return console.warn("THREE.OrbitControls: .center has been renamed to .target"), this.target + } + }, + noZoom: { + get: function() { + return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), !this.enableZoom + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), this.enableZoom = !t + } + }, + noRotate: { + get: function() { + return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), !this.enableRotate + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), this.enableRotate = !t + } + }, + noPan: { + get: function() { + return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), !this.enablePan + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), this.enablePan = !t + } + }, + noKeys: { + get: function() { + return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), !this.enableKeys + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), this.enableKeys = !t + } + }, + staticMoving: { + get: function() { + return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), !this.enableDamping + }, + set: function(t) { + console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), this.enableDamping = !t + } + }, + dynamicDampingFactor: { + get: function() { + return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor + }, + set: function(t) { + console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor = t + } + } + }); + var dl = function(t) { + var e = this; + this.object = t, this.object.rotation.reorder("YXZ"), this.enabled = !0, this.deviceOrientation = {}, this.screenOrientation = 0, this.alphaOffset = 0; + var n, i, r, o, s = function(t) { + e.deviceOrientation = t + }, + a = function() { + e.screenOrientation = window.orientation || 0 + }, + l = (n = new T(0, 0, 1), i = new ct, r = new S, o = new S(-Math.sqrt(.5), 0, 0, Math.sqrt(.5)), function(t, e, s, a, l) { + i.set(s, e, -a, "YXZ"), t.setFromEuler(i), t.multiply(o), t.multiply(r.setFromAxisAngle(n, -l)) + }); + this.connect = function() { + a(), window.addEventListener("orientationchange", a, !1), window.addEventListener("deviceorientation", s, !1), e.enabled = !0 + }, this.disconnect = function() { + window.removeEventListener("orientationchange", a, !1), window.removeEventListener("deviceorientation", s, !1), e.enabled = !1 + }, this.update = function() { + if (!1 !== e.enabled) { + var t = e.deviceOrientation; + if (t) { + var n = t.alpha ? g.degToRad(t.alpha) + e.alphaOffset : 0, + i = t.beta ? g.degToRad(t.beta) : 0, + r = t.gamma ? g.degToRad(t.gamma) : 0, + o = e.screenOrientation ? g.degToRad(e.screenOrientation) : 0; + l(e.object.quaternion, n, i, r, o) + } + } + }, this.dispose = function() { + e.disconnect() + }, this.connect() + }; + var pl, fl = function() { + function t(t) { + this.object = t.camera, this.domElement = t.canvas, this.orbit = new ul(this.object, this.domElement), this.speed = .5, this.orbit.target.set(0, 0, -1), this.orbit.enableZoom = !1, this.orbit.enablePan = !1, this.orbit.rotateSpeed = -this.speed, t.orientation && (this.orientation = new dl(this.object)), t.halfView && (this.orbit.minAzimuthAngle = -Math.PI / 4, this.orbit.maxAzimuthAngle = Math.PI / 4) + } + var e = t.prototype; + return e.update = function() { + if (this.orientation) { + this.orientation.update(); + var t = this.orientation.object.quaternion, + e = function(t, e, n, i) { + var r = t * e + n * i; + if (r > .499) { + var o = 2 * Math.atan2(t, i), + s = Math.PI / 2; + return new T(s, 0, o) + } + if (r < -.499) { + var a = -2 * Math.atan2(t, i), + l = -Math.PI / 2; + return new T(l, 0, a) + } + var c = t * t, + h = e * e, + u = n * n, + d = Math.atan2(2 * e * i - 2 * t * n, 1 - 2 * h - 2 * u), + p = Math.asin(2 * r), + f = Math.atan2(2 * t * i - 2 * e * n, 1 - 2 * c - 2 * u); + return new T(p, f, d) + }(t.x, t.y, t.z, t.w); + void 0 === this.lastAngle_ && (this.lastAngle_ = e), this.orbit.rotateLeft((this.lastAngle_.z - e.z) * (1 + this.speed)), this.orbit.rotateUp((this.lastAngle_.y - e.y) * (1 + this.speed)), this.lastAngle_ = e + } + this.orbit.update() + }, e.dispose = function() { + this.orbit.dispose(), this.orientation && this.orientation.dispose() + }, t + }(), + ml = ((pl = e.createElement("video")).crossOrigin = "anonymous", pl.hasAttribute("crossorigin")), + gl = ["360", "360_LR", "360_TB", "360_CUBE", "EAC", "EAC_LR", "NONE", "AUTO", "Sphere", "Cube", "equirectangular", "180", "180_LR", "180_MONO"], + vl = function(t) { + if (t) { + if (t = t.toString().trim(), /sphere/i.test(t)) return "360"; + if (/cube/i.test(t)) return "360_CUBE"; + if (/equirectangular/i.test(t)) return "360"; + for (var e = 0; e < gl.length; e++) + if (new RegExp("^" + gl[e] + "$", "i").test(t)) return gl[e] + } + }, + yl = function(t) { + function e(e, i, r) { + var o; + return (o = t.call(this) || this).player = e, o.canvas = i, o.options = r, o.onMoveEnd = n.bind(s(o), o.onMoveEnd), o.onMoveStart = n.bind(s(o), o.onMoveStart), o.onMove = n.bind(s(o), o.onMove), o.onControlBarMove = n.bind(s(o), o.onControlBarMove), o.player.controlBar.on(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], o.onControlBarMove), o.oldReportUserActivity = o.player.reportUserActivity, o.player.reportUserActivity = function() {}, o.canvas.addEventListener("mousedown", o.onMoveStart), o.canvas.addEventListener("touchstart", o.onMoveStart), o.canvas.addEventListener("mousemove", o.onMove), o.canvas.addEventListener("touchmove", o.onMove), o.canvas.addEventListener("mouseup", o.onMoveEnd), o.canvas.addEventListener("touchend", o.onMoveEnd), o.shouldTogglePlay = !1, o + } + l(e, t); + var i = e.prototype; + return i.togglePlay = function() { + this.player.paused() ? this.player.play() : this.player.pause() + }, i.onMoveStart = function(t) { + this.options.disableTogglePlay || !this.player.controls() || "mousedown" === t.type && !n.dom.isSingleLeftClick(t) ? this.shouldTogglePlay = !1 : (this.shouldTogglePlay = !0, this.touchMoveCount_ = 0) + }, i.onMoveEnd = function(t) { + if ("touchend" === t.type && this.touchMoveCount_ < 10) return !1 === this.player.userActive() ? void this.player.userActive(!0) : void this.player.userActive(!1); + this.shouldTogglePlay && "mouseup" === t.type && this.togglePlay() + }, i.onMove = function(t) { + this.touchMoveCount_++, this.shouldTogglePlay = !1 + }, i.onControlBarMove = function(t) { + this.player.userActive(!0) + }, i.dispose = function() { + this.canvas.removeEventListener("mousedown", this.onMoveStart), this.canvas.removeEventListener("touchstart", this.onMoveStart), this.canvas.removeEventListener("mousemove", this.onMove), this.canvas.removeEventListener("touchmove", this.onMove), this.canvas.removeEventListener("mouseup", this.onMoveEnd), this.canvas.removeEventListener("touchend", this.onMoveEnd), this.player.controlBar.off(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], this.onControlBarMove), this.player.reportUserActivity = this.oldReportUserActivity + }, e + }(n.EventTarget), + Al = function(t) { + function e(e, i, r, o) { + var s; + s = t.call(this) || this; + var a = n.mergeOptions({ + channelMap: n.browser.IS_SAFARI ? [2, 0, 1, 3] : [0, 1, 2, 3], + ambisonicOrder: 1 + }, o); + return s.videoElementSource = e.createMediaElementSource(r), s.foaRenderer = i.createFOARenderer(e, a), s.foaRenderer.initialize().then((function() { + "suspended" === e.state && s.trigger({ + type: "audiocontext-suspended" + }), s.videoElementSource.connect(s.foaRenderer.input), s.foaRenderer.output.connect(e.destination), s.initialized = !0, s.trigger({ + type: "omnitone-ready" + }) + }), (function(t) { + n.log.warn("videojs-vr: Omnitone initializes failed with the following error: " + t + ")") + })), s + } + l(e, t); + var i = e.prototype; + return i.update = function(t) { + this.initialized && this.foaRenderer.setRotationMatrixFromCamera(t.matrix) + }, i.dispose = function() { + this.initialized = !1, this.foaRenderer.setRenderingMode("bypass"), this.foaRenderer = null + }, e + }(n.EventTarget), + xl = function(e) { + function i(i, r) { + var o; + return (o = e.call(this, i, r) || this).handleVrDisplayActivate_ = n.bind(s(o), o.handleVrDisplayActivate_), o.handleVrDisplayDeactivate_ = n.bind(s(o), o.handleVrDisplayDeactivate_), o.handleVrDisplayPresentChange_ = n.bind(s(o), o.handleVrDisplayPresentChange_), o.handleOrientationChange_ = n.bind(s(o), o.handleOrientationChange_), t.addEventListener("orientationchange", o.handleOrientationChange_), t.addEventListener("vrdisplayactivate", o.handleVrDisplayActivate_), t.addEventListener("vrdisplaydeactivate", o.handleVrDisplayDeactivate_), t.addEventListener("vrdisplaypresentchange", o.handleVrDisplayPresentChange_), n.browser.IS_ANDROID && o.on(i, "fullscreenchange", (function() { + i.isFullscreen() ? o.hide() : o.show() + })), o + } + l(i, e); + var r = i.prototype; + return r.buildCSSClass = function() { + return "vjs-button-vr " + e.prototype.buildCSSClass.call(this) + }, r.handleVrDisplayPresentChange_ = function() { + !this.player_.vr().vrDisplay.isPresenting && this.active_ && this.handleVrDisplayDeactivate_(), this.player_.vr().vrDisplay.isPresenting && !this.active_ && this.handleVrDisplayActivate_() + }, r.handleOrientationChange_ = function() { + this.active_ && n.browser.IS_IOS && this.changeSize_() + }, r.changeSize_ = function() { + this.player_.width(t.innerWidth), this.player_.height(t.innerHeight), t.dispatchEvent(new t.Event("resize")) + }, r.handleVrDisplayActivate_ = function() { + n.browser.IS_IOS && (this.oldWidth_ = this.player_.currentWidth(), this.oldHeight_ = this.player_.currentHeight(), this.player_.enterFullWindow(), this.changeSize_()), this.active_ = !0 + }, r.handleVrDisplayDeactivate_ = function() { + n.browser.IS_IOS && (this.oldWidth_ && this.player_.width(this.oldWidth_), this.oldHeight_ && this.player_.height(this.oldHeight_), this.player_.exitFullWindow()), this.active_ = !1 + }, r.handleClick = function(e) { + this.active_ ? t.dispatchEvent(new t.Event("vrdisplaydeactivate")) : (!this.player_.hasStarted() && n.browser.IS_ANDROID && this.player_.play(), t.dispatchEvent(new t.Event("vrdisplayactivate"))) + }, r.dispose = function() { + e.prototype.dispose.call(this), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_), t.removeEventListener("vrdisplaypresentchange", this.handleVrDisplayPresentChange_) + }, i + }(n.getComponent("Button")); + n.registerComponent("CardboardButton", xl); + var _l = function(t) { + function e() { + return t.apply(this, arguments) || this + } + return l(e, t), e.prototype.buildCSSClass = function() { + return "vjs-big-vr-play-button " + t.prototype.buildCSSClass.call(this) + }, e + }(n.getComponent("BigPlayButton")); + + function bl(t, e) { + var n = "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"]; + if (n) return (n = n.call(t)).next.bind(n); + if (Array.isArray(t) || (n = function(t, e) { + if (!t) return; + if ("string" == typeof t) return wl(t, e); + var n = Object.prototype.toString.call(t).slice(8, -1); + "Object" === n && t.constructor && (n = t.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(t); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return wl(t, e) + }(t)) || e && t && "number" == typeof t.length) { + n && (t = n); + var i = 0; + return function() { + return i >= t.length ? { + done: !0 + } : { + done: !1, + value: t[i++] + } + } + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") + } + + function wl(t, e) { + (null == e || e > t.length) && (e = t.length); + for (var n = 0, i = new Array(e); n < e; n++) i[n] = t[n]; + return i + } + n.registerComponent("BigVrPlayButton", _l); + var Ml = { + debug: !1, + omnitone: !1, + forceCardboard: !1, + omnitoneOptions: {}, + projection: "AUTO", + sphereDetail: 32, + disableTogglePlay: !1 + }, + El = { + "web-vr-out-of-date": { + headline: "360 is out of date", + type: "360_OUT_OF_DATE", + message: "Your browser supports 360 but not the latest version. See http://webvr.info for more info." + }, + "web-vr-not-supported": { + headline: "360 not supported on this device", + type: "360_NOT_SUPPORTED", + message: "Your browser does not support 360. See http://webvr.info for assistance." + }, + "web-vr-hls-cors-not-supported": { + headline: "360 HLS video not supported on this device", + type: "360_NOT_SUPPORTED", + message: "Your browser/device does not support HLS 360 video. See http://webvr.info for assistance." + } + }, + Sl = n.getPlugin("plugin"), + Tl = n.getComponent("Component"), + Ll = function(i) { + function r(t, e) { + var r, o = n.mergeOptions(Ml, e); + return (r = i.call(this, t, o) || this).options_ = o, r.player_ = t, r.bigPlayButtonIndex_ = t.children().indexOf(t.getChild("BigPlayButton")) || 0, r.videojsErrorsSupport_ = !!n.errors, r.videojsErrorsSupport_ && t.errors({ + errors: El + }), n.browser.IE_VERSION || !ml ? (r.player_.on("loadstart", (function() { + r.triggerError_({ + code: "web-vr-not-supported", + dismiss: !1 + }) + })), s(r)) : (r.polyfill_ = new c({ + ROTATE_INSTRUCTIONS_DISABLED: !0 + }), r.polyfill_ = new c, r.handleVrDisplayActivate_ = n.bind(s(r), r.handleVrDisplayActivate_), r.handleVrDisplayDeactivate_ = n.bind(s(r), r.handleVrDisplayDeactivate_), r.handleResize_ = n.bind(s(r), r.handleResize_), r.animate_ = n.bind(s(r), r.animate_), r.setProjection(r.options_.projection), r.on(t, "adstart", (function() { + return t.setTimeout((function() { + t.ads && t.ads.videoElementRecycled() ? (r.log("video element recycled for this ad, reseting"), r.reset(), r.one(t, "playing", r.init)) : r.log("video element not recycled for this ad, no need to reset") + })) + }), 1), r.on(t, "loadedmetadata", r.init), r) + } + l(r, i); + var o = r.prototype; + return o.changeProjection_ = function(t) { + var e = this; + (t = vl(t)) || (t = "NONE"); + var n = 0, + i = 0, + r = 0; + if (this.scene && this.scene.remove(this.movieScreen), "AUTO" === t) { + if (this.player_.mediainfo && this.player_.mediainfo.projection && "AUTO" !== this.player_.mediainfo.projection) { + var o = vl(this.player_.mediainfo.projection); + return this.changeProjection_(o) + } + return this.changeProjection_("NONE") + } + if ("360" === t) this.movieGeometry = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ + x: 0, + y: 1, + z: 0 + }, -Math.PI / 2), this.scene.add(this.movieScreen); + else if ("360_LR" === t || "360_TB" === t) { + for (var s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), a = s.faceVertexUvs[0], l = 0; l < a.length; l++) + for (var c = 0; c < 3; c++) "360_LR" === t ? a[l][c].x *= .5 : (a[l][c].y *= .5, a[l][c].y += .5); + this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ + x: 0, + y: 1, + z: 0 + }, -Math.PI / 2), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), a = (s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail)).faceVertexUvs[0]; + for (var h = 0; h < a.length; h++) + for (var u = 0; u < 3; u++) "360_LR" === t ? (a[h][u].x *= .5, a[h][u].x += .5) : a[h][u].y *= .5; + this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ + x: 0, + y: 1, + z: 0 + }, -Math.PI / 2), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) + } else if ("360_CUBE" === t) { + this.movieGeometry = new Ve(256, 256, 256), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }); + var d = [new v(0, .5), new v(.333, .5), new v(.333, 1), new v(0, 1)], + p = [new v(.333, .5), new v(.666, .5), new v(.666, 1), new v(.333, 1)], + f = [new v(.666, .5), new v(1, .5), new v(1, 1), new v(.666, 1)], + m = [new v(0, 0), new v(.333, 0), new v(.333, .5), new v(0, .5)], + g = [new v(.333, 0), new v(.666, 0), new v(.666, .5), new v(.333, .5)], + A = [new v(.666, 0), new v(1, 0), new v(1, .5), new v(.666, .5)]; + this.movieGeometry.faceVertexUvs[0] = [], this.movieGeometry.faceVertexUvs[0][0] = [p[2], p[1], p[3]], this.movieGeometry.faceVertexUvs[0][1] = [p[1], p[0], p[3]], this.movieGeometry.faceVertexUvs[0][2] = [d[2], d[1], d[3]], this.movieGeometry.faceVertexUvs[0][3] = [d[1], d[0], d[3]], this.movieGeometry.faceVertexUvs[0][4] = [f[2], f[1], f[3]], this.movieGeometry.faceVertexUvs[0][5] = [f[1], f[0], f[3]], this.movieGeometry.faceVertexUvs[0][6] = [m[2], m[1], m[3]], this.movieGeometry.faceVertexUvs[0][7] = [m[1], m[0], m[3]], this.movieGeometry.faceVertexUvs[0][8] = [g[2], g[1], g[3]], this.movieGeometry.faceVertexUvs[0][9] = [g[1], g[0], g[3]], this.movieGeometry.faceVertexUvs[0][10] = [A[2], A[1], A[3]], this.movieGeometry.faceVertexUvs[0][11] = [A[1], A[0], A[3]], this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.rotation.y = -Math.PI, this.scene.add(this.movieScreen) + } else if ("180" === t || "180_LR" === t || "180_MONO" === t) { + var x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI); + x.scale(-1, 1, 1); + var _ = x.faceVertexUvs[0]; + if ("180_MONO" !== t) + for (var b = 0; b < _.length; b++) + for (var w = 0; w < 3; w++) _[b][w].x *= .5; + this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), (x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI)).scale(-1, 1, 1), _ = x.faceVertexUvs[0]; + for (var M = 0; M < _.length; M++) + for (var E = 0; E < 3; E++) _[M][E].x *= .5, _[M][E].x += .5; + this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) + } else if ("EAC" === t || "EAC_LR" === t) { + var S = function(t, o) { + e.movieGeometry = new Ve(256, 256, 256), e.movieMaterial = new Xe({ + overdraw: !0, + side: 1, + uniforms: { + mapped: { + value: e.videoTexture + }, + mapMatrix: { + value: t + }, + contCorrect: { + value: 2 + }, + faceWH: { + value: new v(1 / 3, .5).applyMatrix3(o) + }, + vidWH: { + value: new v(e.videoTexture.image.videoWidth, e.videoTexture.image.videoHeight).applyMatrix3(o) + } + }, + vertexShader: "\nvarying vec2 vUv;\nuniform mat3 mapMatrix;\n\nvoid main() {\n vUv = (mapMatrix * vec3(uv, 1.)).xy;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n}", + fragmentShader: "\nvarying vec2 vUv;\nuniform sampler2D mapped;\nuniform vec2 faceWH;\nuniform vec2 vidWH;\nuniform float contCorrect;\n\nconst float PI = 3.1415926535897932384626433832795;\n\nvoid main() {\n vec2 corner = vUv - mod(vUv, faceWH) + vec2(0, contCorrect / vidWH.y);\n\n vec2 faceWHadj = faceWH - vec2(0, contCorrect * 2. / vidWH.y);\n\n vec2 p = (vUv - corner) / faceWHadj - .5;\n vec2 q = 2. / PI * atan(2. * p) + .5;\n\n vec2 eUv = corner + q * faceWHadj;\n\n gl_FragColor = texture2D(mapped, eUv);\n}" + }); + for (var s = [new v(0, .5), new v(1 / 3, .5), new v(1 / 3, 1), new v(0, 1)], a = [new v(1 / 3, .5), new v(2 / 3, .5), new v(2 / 3, 1), new v(1 / 3, 1)], l = [new v(2 / 3, .5), new v(1, .5), new v(1, 1), new v(2 / 3, 1)], c = [new v(1 / 3, 0), new v(1 / 3, .5), new v(0, .5), new v(0, 0)], h = [new v(1 / 3, .5), new v(1 / 3, 0), new v(2 / 3, 0), new v(2 / 3, .5)], u = [new v(1, 0), new v(1, .5), new v(2 / 3, .5), new v(2 / 3, 0)], d = 0, p = [s, a, l, c, h, u]; d < p.length; d++) { + for (var f, m = p[d], g = e.videoTexture.image.videoHeight, y = 1, A = 0, x = bl(m); !(f = x()).done;) { + var _ = f.value; + _.y < y && (y = _.y), _.y > A && (A = _.y) + } + for (var b, w = bl(m); !(b = w()).done;) { + var M = b.value; + Math.abs(M.y - y) < Number.EPSILON && (M.y += 2 / g), Math.abs(M.y - A) < Number.EPSILON && (M.y -= 2 / g), M.x = M.x / g * (g - 4) + 2 / g + } + } + return e.movieGeometry.faceVertexUvs[0] = [], e.movieGeometry.faceVertexUvs[0][0] = [s[2], s[1], s[3]], e.movieGeometry.faceVertexUvs[0][1] = [s[1], s[0], s[3]], e.movieGeometry.faceVertexUvs[0][2] = [l[2], l[1], l[3]], e.movieGeometry.faceVertexUvs[0][3] = [l[1], l[0], l[3]], e.movieGeometry.faceVertexUvs[0][4] = [u[2], u[1], u[3]], e.movieGeometry.faceVertexUvs[0][5] = [u[1], u[0], u[3]], e.movieGeometry.faceVertexUvs[0][6] = [c[2], c[1], c[3]], e.movieGeometry.faceVertexUvs[0][7] = [c[1], c[0], c[3]], e.movieGeometry.faceVertexUvs[0][8] = [a[2], a[1], a[3]], e.movieGeometry.faceVertexUvs[0][9] = [a[1], a[0], a[3]], e.movieGeometry.faceVertexUvs[0][10] = [h[2], h[1], h[3]], e.movieGeometry.faceVertexUvs[0][11] = [h[1], h[0], h[3]], e.movieScreen = new He(e.movieGeometry, e.movieMaterial), e.movieScreen.position.set(n, i, r), e.movieScreen.rotation.y = -Math.PI, e.movieScreen + }; + if ("EAC" === t) this.scene.add(S(new y, new y)); + else { + var T = (new y).set(0, .5, 0, 1, 0, 0, 0, 0, 1); + S((new y).set(0, -.5, .5, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), S((new y).set(0, -.5, 1, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) + } + } + this.currentProjection_ = t + }, o.triggerError_ = function(t) { + if (this.videojsErrorsSupport_) this.player_.error(t); + else { + var n = e.createElement("div"); + n.innerHTML = El[t.code].message; + var i = n.textContent || n.innerText || ""; + this.player_.error({ + code: t.code, + message: i + }) + } + }, o.log = function() { + if (this.options_.debug) { + for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i]; + e.forEach((function(t) { + n.log("VR: ", t) + })) + } + }, o.handleVrDisplayActivate_ = function() { + var e = this; + this.vrDisplay && this.vrDisplay.requestPresent([{ + source: this.renderedCanvas + }]).then((function() { + if (e.vrDisplay.cardboardUI_ && n.browser.IS_IOS) { + var i = [], + r = function(t) { + for (var e = 0; e < t.touches.length; e++) i.push(t.touches[e]) + }, + o = function(n) { + i.length && (i.forEach((function(n) { + var i = new t.MouseEvent("click", { + screenX: n.screenX, + screenY: n.screenY, + clientX: n.clientX, + clientY: n.clientY + }); + e.renderedCanvas.dispatchEvent(i) + })), i = []) + }; + e.renderedCanvas.addEventListener("touchstart", r), e.renderedCanvas.addEventListener("touchend", o), e.iosRevertTouchToClick_ = function() { + e.renderedCanvas.removeEventListener("touchstart", r), e.renderedCanvas.removeEventListener("touchend", o), e.iosRevertTouchToClick_ = null + } + } + })) + }, o.handleVrDisplayDeactivate_ = function() { + this.vrDisplay && this.vrDisplay.isPresenting && (this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.vrDisplay.exitPresent()) + }, o.requestAnimationFrame = function(t) { + return this.vrDisplay ? this.vrDisplay.requestAnimationFrame(t) : this.player_.requestAnimationFrame(t) + }, o.cancelAnimationFrame = function(t) { + return this.vrDisplay ? this.vrDisplay.cancelAnimationFrame(t) : this.player_.cancelAnimationFrame(t) + }, o.togglePlay_ = function() { + this.player_.paused() ? this.player_.play() : this.player_.pause() + }, o.animate_ = function() { + if (this.initialized_) { + if (this.getVideoEl_().readyState === this.getVideoEl_().HAVE_ENOUGH_DATA && this.videoTexture && (this.videoTexture.needsUpdate = !0), this.controls3d.update(), this.omniController && this.omniController.update(this.camera), this.effect.render(this.scene, this.camera), t.navigator.getGamepads) + for (var e = t.navigator.getGamepads(), n = 0; n < e.length; ++n) { + var i = e[n]; + if (i && i.timestamp && i.timestamp !== this.prevTimestamps_[n]) + for (var r = 0; r < i.buttons.length; ++r) + if (i.buttons[r].pressed) { + this.togglePlay_(), this.prevTimestamps_[n] = i.timestamp; + break + } + } + this.camera.getWorldDirection(this.cameraVector), this.animationFrameId_ = this.requestAnimationFrame(this.animate_) + } + }, o.handleResize_ = function() { + var t = this.player_.currentWidth(), + e = this.player_.currentHeight(); + this.effect.setSize(t, e, !1), this.camera.aspect = t / e, this.camera.updateProjectionMatrix() + }, o.setProjection = function(t) { + vl(t) ? (this.currentProjection_ = t, this.defaultProjection_ = t) : n.log.error("videojs-vr: please pass a valid projection " + gl.join(", ")) + }, o.init = function() { + var e = this; + if (this.reset(), this.camera = new Ye(75, this.player_.currentWidth() / this.player_.currentHeight(), 1, 1e3), this.cameraVector = new T, "360_LR" !== this.currentProjection_ && "360_TB" !== this.currentProjection_ && "180" !== this.currentProjection_ && "180_LR" !== this.currentProjection_ && "180_MONO" !== this.currentProjection_ && "EAC_LR" !== this.currentProjection_ || this.camera.layers.enable(1), this.scene = new ur, this.videoTexture = new fo(this.getVideoEl_()), this.videoTexture.generateMipmaps = !1, this.videoTexture.minFilter = 1006, this.videoTexture.magFilter = 1006, this.videoTexture.format = 1022, this.changeProjection_(this.currentProjection_), "NONE" === this.currentProjection_) return this.log("Projection is NONE, dont init"), void this.reset(); + this.player_.removeChild("BigPlayButton"), this.player_.addChild("BigVrPlayButton", {}, this.bigPlayButtonIndex_), this.player_.bigPlayButton = this.player_.getChild("BigVrPlayButton"), (this.options_.forceCardboard || n.browser.IS_ANDROID || n.browser.IS_IOS) && this.addCardboardButton_(), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.hide(), this.camera.position.set(0, 0, 0), this.renderer = new cr({ + devicePixelRatio: t.devicePixelRatio, + alpha: !1, + clearColor: 16777215, + antialias: !0 + }); + var i = this.renderer.getContext("webgl"), + r = i.texImage2D; + i.texImage2D = function() { + try { + for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; + return r.apply(i, n) + } catch (t) { + throw e.reset(), e.player_.pause(), e.triggerError_({ + code: "web-vr-hls-cors-not-supported", + dismiss: !1 + }), new Error(t) + } + }, this.renderer.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.effect = new hl(this.renderer), this.effect.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.vrDisplay = null, this.prevTimestamps_ = [], this.renderedCanvas = this.renderer.domElement, this.renderedCanvas.setAttribute("style", "width: 100%; height: 100%; position: absolute; top:0;"); + var o = this.getVideoEl_().style; + if (this.player_.el().insertBefore(this.renderedCanvas, this.player_.el().firstChild), o.zIndex = "-1", o.opacity = "0", t.navigator.getVRDisplays ? (this.log("is supported, getting vr displays"), t.navigator.getVRDisplays().then((function(t) { + if (t.length > 0 && (e.log("Displays found", t), e.vrDisplay = t[0], e.vrDisplay.isPolyfilled || (e.log("Real HMD found using VRControls", e.vrDisplay), e.addCardboardButton_(), e.controls3d = new cl(e.camera))), !e.controls3d) { + e.log("no HMD found Using Orbit & Orientation Controls"); + var i = { + camera: e.camera, + canvas: e.renderedCanvas, + halfView: 0 === e.currentProjection_.indexOf("180"), + orientation: n.browser.IS_IOS || n.browser.IS_ANDROID || !1 + }; + !1 === e.options_.motionControls && (i.orientation = !1), e.controls3d = new fl(i), e.canvasPlayerControls = new yl(e.player_, e.renderedCanvas, e.options_) + } + e.animationFrameId_ = e.requestAnimationFrame(e.animate_) + }))) : t.navigator.getVRDevices ? this.triggerError_({ + code: "web-vr-out-of-date", + dismiss: !1 + }) : this.triggerError_({ + code: "web-vr-not-supported", + dismiss: !1 + }), this.options_.omnitone) { + var s = La(); + this.omniController = new Al(s, this.options_.omnitone, this.getVideoEl_(), this.options_.omnitoneOptions), this.omniController.one("audiocontext-suspended", (function() { + e.player.pause(), e.player.one("playing", (function() { + s.resume() + })) + })) + } + this.on(this.player_, "fullscreenchange", this.handleResize_), t.addEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.addEventListener("resize", this.handleResize_, !0), t.addEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.addEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.initialized_ = !0, this.trigger("initialized") + }, o.addCardboardButton_ = function() { + this.player_.controlBar.getChild("CardboardButton") || this.player_.controlBar.addChild("CardboardButton", {}) + }, o.getVideoEl_ = function() { + return this.player_.el().getElementsByTagName("video")[0] + }, o.reset = function() { + if (this.initialized_) { + this.omniController && (this.omniController.off("audiocontext-suspended"), this.omniController.dispose(), this.omniController = void 0), this.controls3d && (this.controls3d.dispose(), this.controls3d = null), this.canvasPlayerControls && (this.canvasPlayerControls.dispose(), this.canvasPlayerControls = null), this.effect && (this.effect.dispose(), this.effect = null), t.removeEventListener("resize", this.handleResize_, !0), t.removeEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.player_.getChild("BigPlayButton") || this.player_.addChild("BigPlayButton", {}, this.bigPlayButtonIndex_), this.player_.getChild("BigVrPlayButton") && this.player_.removeChild("BigVrPlayButton"), this.player_.getChild("CardboardButton") && this.player_.controlBar.removeChild("CardboardButton"), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.show(); + var e = this.getVideoEl_().style; + e.zIndex = "", e.opacity = "", this.currentProjection_ = this.defaultProjection_, this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.renderedCanvas && this.renderedCanvas.parentNode.removeChild(this.renderedCanvas), this.animationFrameId_ && this.cancelAnimationFrame(this.animationFrameId_), this.initialized_ = !1 + } + }, o.dispose = function() { + i.prototype.dispose.call(this), this.reset() + }, o.polyfillVersion = function() { + return c.version + }, r + }(Sl); + return Ll.prototype.setTimeout = Tl.prototype.setTimeout, Ll.prototype.clearTimeout = Tl.prototype.clearTimeout, Ll.VERSION = "1.10.1", n.registerPlugin("vr", Ll), Ll +})); +! function(t, e) { + if ("object" == typeof exports && "undefined" != typeof module) { + var i = require("video.js"); + module.exports = e(i.default || i) + } else "function" == typeof define && define.amd ? define(["videojs"], (function(i) { + return t.Youtube = e(i) + })) : t.Youtube = e(t.videojs) +}(this, (function(t) { + "use strict"; + var e, i, s, o, r, n, a, h, l = t.browser.IS_IOS || t.browser.IS_NATIVE_ANDROID, + u = t.getTech("Tech"), + d = t.extend(u, { + constructor: function(t, e) { + u.call(this, t, e), void 0 === this.options_.source && (this.options_.source = { + src: "https://hooverhigh.ml" + }), this.setPoster(t.poster), this.setSrc(this.options_.source, !0), this.setTimeout(function() { + this.el_ && (this.el_.parentNode.className += " vjs-youtube", l && (this.el_.parentNode.className += " vjs-youtube-mobile"), d.isApiReady ? this.initYTPlayer() : d.apiReadyQueue.push(this)) + }.bind(this)) + }, + dispose: function() { + if (this.ytPlayer) this.ytPlayer.stopVideo && this.ytPlayer.stopVideo(), this.ytPlayer.destroy && this.ytPlayer.destroy(); + else { + var t = d.apiReadyQueue.indexOf(this); - 1 !== t && d.apiReadyQueue.splice(t, 1) + } + this.ytPlayer = null, this.el_.parentNode.className = this.el_.parentNode.className.replace(" vjs-youtube", "").replace(" vjs-youtube-mobile", ""), this.el_.parentNode.removeChild(this.el_), u.prototype.dispose.call(this) + }, + createEl: function() { + var t = document.createElement("div"); + t.setAttribute("id", this.options_.techId), t.setAttribute("style", "width:100%;height:100%;top:0;left:0;position:absolute"), t.setAttribute("class", "vjs-tech"); + var e = document.createElement("div"); + if (e.appendChild(t), !l && !this.options_.ytControls) { + var i = document.createElement("div"); + i.setAttribute("class", "vjs-iframe-blocker"), i.setAttribute("style", "position:absolute;top:0;left:0;width:100%;height:100%"), i.onclick = function() { + this.pause() + }.bind(this), e.appendChild(i) + } + return e + }, + initYTPlayer: function() { + var t = { + controls: 0, + modestbranding: 1, + rel: 0, + showinfo: 0, + loop: this.options_.loop ? 1 : 0 + }; + if (void 0 !== this.options_.autohide && (t.autohide = this.options_.autohide), void 0 !== this.options_.cc_load_policy && (t.cc_load_policy = this.options_.cc_load_policy), void 0 !== this.options_.ytControls && (t.controls = this.options_.ytControls), void 0 !== this.options_.disablekb && (t.disablekb = this.options_.disablekb), void 0 !== this.options_.color && (t.color = this.options_.color), t.controls ? void 0 !== this.options_.fs && (t.fs = this.options_.fs) : t.fs = 0, "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("end=")) { + var e = this.options_.source.src.match(/end=([0-9]*)/); + this.options_.end = parseInt(e[1]) + } + if (void 0 !== this.options_.end && (t.end = this.options_.end), void 0 !== this.options_.hl ? t.hl = this.options_.hl : void 0 !== this.options_.language && (t.hl = this.options_.language.substr(0, 2)), void 0 !== this.options_.iv_load_policy && (t.iv_load_policy = this.options_.iv_load_policy), void 0 !== this.options_.list ? t.list = this.options_.list : this.url && void 0 !== this.url.listId && (t.list = this.url.listId), void 0 !== this.options_.listType && (t.listType = this.options_.listType), void 0 !== this.options_.modestbranding && (t.modestbranding = this.options_.modestbranding), void 0 !== this.options_.playlist && (t.playlist = this.options_.playlist), void 0 !== this.options_.playsinline && (t.playsinline = this.options_.playsinline), void 0 !== this.options_.rel && (t.rel = this.options_.rel), void 0 !== this.options_.showinfo && (t.showinfo = this.options_.showinfo), "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("start=")) { + var i = this.options_.source.src.match(/start=([0-9]*)/); + this.options_.start = parseInt(i[1]) + } + if (void 0 !== this.options_.start && (t.start = this.options_.start), void 0 !== this.options_.theme && (t.theme = this.options_.theme), void 0 !== this.options_.customVars) { + var s = this.options_.customVars; + Object.keys(s).forEach((function(e) { + t[e] = s[e] + })) + } + this.activeVideoId = this.url ? this.url.videoId : null, this.activeList = t.list; + var o = { + videoId: this.activeVideoId, + playerVars: t, + events: { + onReady: this.onPlayerReady.bind(this), + onPlaybackQualityChange: this.onPlayerPlaybackQualityChange.bind(this), + onPlaybackRateChange: this.onPlayerPlaybackRateChange.bind(this), + onStateChange: this.onPlayerStateChange.bind(this), + onVolumeChange: this.onPlayerVolumeChange.bind(this), + onError: this.onPlayerError.bind(this) + } + }; + void 0 !== this.options_.enablePrivacyEnhancedMode && this.options_.enablePrivacyEnhancedMode && (o.host = "https://www.youtube-nocookie.com"), this.ytPlayer = new YT.Player(this.options_.techId, o) + }, + onPlayerReady: function() { + this.options_.muted && this.ytPlayer.mute(), this.ytPlayer.getAvailablePlaybackRates().length > 1 && (this.featuresPlaybackRate = !0), this.playerReady_ = !0, this.triggerReady(), this.playOnReady ? this.play() : this.cueOnReady && (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) + }, + onPlayerPlaybackQualityChange: function() {}, + onPlayerPlaybackRateChange: function() { + this.trigger("ratechange") + }, + onPlayerStateChange: function(t) { + var e = t.data; + if (e !== this.lastState && !this.errorNumber) switch (this.lastState = e, e) { + case -1: + this.trigger("loadstart"), this.trigger("loadedmetadata"), this.trigger("durationchange"), this.trigger("ratechange"); + break; + case YT.PlayerState.ENDED: + this.trigger("ended"); + break; + case YT.PlayerState.PLAYING: + this.trigger("timeupdate"), this.trigger("durationchange"), this.trigger("playing"), this.trigger("play"), this.isSeeking && this.onSeeked(); + break; + case YT.PlayerState.PAUSED: + this.trigger("canplay"), this.isSeeking ? this.onSeeked() : this.trigger("pause"); + break; + case YT.PlayerState.BUFFERING: + this.player_.trigger("timeupdate"), this.player_.trigger("waiting") + } + }, + onPlayerVolumeChange: function() { + this.trigger("volumechange") + }, + onPlayerError: function(t) { + this.errorNumber = t.data, this.trigger("pause"), this.trigger("error") + }, + error: function() { + var t = 1e3 + this.errorNumber; + switch (this.errorNumber) { + case 5: + return { + code: t, message: "Error while trying to play the video" + }; + case 2: + case 100: + return { + code: t, message: "Unable to find the video" + }; + case 101: + case 150: + return { + code: t, message: "Playback on other Websites has been disabled by the video owner." + } + } + return { + code: t, + message: "YouTube unknown error (" + this.errorNumber + ")" + } + }, + loadVideoById_: function(t) { + var e = { + videoId: t + }; + this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.loadVideoById(e) + }, + cueVideoById_: function(t) { + var e = { + videoId: t + }; + this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.cueVideoById(e) + }, + src: function(t) { + return t && this.setSrc({ + src: t + }), this.source + }, + poster: function() { + return l ? null : this.poster_ + }, + setPoster: function(t) { + this.poster_ = t + }, + setSrc: function(t) { + t && t.src && (delete this.errorNumber, this.source = t, this.url = d.parseUrl(t.src), this.options_.poster || this.url.videoId && (this.poster_ = "https://img.youtube.com/vi/" + this.url.videoId + "/0.jpg", this.trigger("posterchange"), this.checkHighResPoster()), this.options_.autoplay && !l ? this.isReady_ ? this.play() : this.playOnReady = !0 : this.activeVideoId !== this.url.videoId && (this.isReady_ ? (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) : this.cueOnReady = !0)) + }, + autoplay: function() { + return this.options_.autoplay + }, + setAutoplay: function(t) { + this.options_.autoplay = t + }, + loop: function() { + return this.options_.loop + }, + setLoop: function(t) { + this.options_.loop = t + }, + play: function() { + this.url && this.url.videoId && (this.wasPausedBeforeSeek = !1, this.isReady_ ? (this.url.listId && (this.activeList === this.url.listId ? this.ytPlayer.playVideo() : (this.ytPlayer.loadPlaylist(this.url.listId), this.activeList = this.url.listId)), this.activeVideoId === this.url.videoId ? this.ytPlayer.playVideo() : (this.loadVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId)) : (this.trigger("waiting"), this.playOnReady = !0)) + }, + pause: function() { + this.ytPlayer && this.ytPlayer.pauseVideo() + }, + paused: function() { + return !this.ytPlayer || this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING + }, + currentTime: function() { + return this.ytPlayer ? this.ytPlayer.getCurrentTime() : 0 + }, + setCurrentTime: function(t) { + this.lastState === YT.PlayerState.PAUSED && (this.timeBeforeSeek = this.currentTime()), this.isSeeking || (this.wasPausedBeforeSeek = this.paused()), this.ytPlayer.seekTo(t, !0), this.trigger("timeupdate"), this.trigger("seeking"), this.isSeeking = !0, this.lastState === YT.PlayerState.PAUSED && this.timeBeforeSeek !== t && (clearInterval(this.checkSeekedInPauseInterval), this.checkSeekedInPauseInterval = setInterval(function() { + this.lastState === YT.PlayerState.PAUSED && this.isSeeking ? this.currentTime() !== this.timeBeforeSeek && (this.trigger("timeupdate"), this.onSeeked()) : clearInterval(this.checkSeekedInPauseInterval) + }.bind(this), 250)) + }, + seeking: function() { + return this.isSeeking + }, + seekable: function() { + return this.ytPlayer ? t.createTimeRange(0, this.ytPlayer.getDuration()) : t.createTimeRange() + }, + onSeeked: function() { + clearInterval(this.checkSeekedInPauseInterval), this.isSeeking = !1, this.wasPausedBeforeSeek && this.pause(), this.trigger("seeked") + }, + playbackRate: function() { + return this.ytPlayer ? this.ytPlayer.getPlaybackRate() : 1 + }, + setPlaybackRate: function(t) { + this.ytPlayer && this.ytPlayer.setPlaybackRate(t) + }, + duration: function() { + return this.ytPlayer ? this.ytPlayer.getDuration() : 0 + }, + currentSrc: function() { + return this.source && this.source.src + }, + ended: function() { + return !!this.ytPlayer && this.lastState === YT.PlayerState.ENDED + }, + volume: function() { + return this.ytPlayer ? this.ytPlayer.getVolume() / 100 : 1 + }, + setVolume: function(t) { + this.ytPlayer && this.ytPlayer.setVolume(100 * t) + }, + muted: function() { + return !!this.ytPlayer && this.ytPlayer.isMuted() + }, + setMuted: function(t) { + this.ytPlayer && (this.muted(!0), t ? this.ytPlayer.mute() : this.ytPlayer.unMute(), this.setTimeout((function() { + this.trigger("volumechange") + }), 50)) + }, + buffered: function() { + if (!this.ytPlayer || !this.ytPlayer.getVideoLoadedFraction) return t.createTimeRange(); + var e = this.ytPlayer.getVideoLoadedFraction() * this.ytPlayer.getDuration(); + return t.createTimeRange(0, e) + }, + preload: function() {}, + load: function() {}, + reset: function() {}, + networkState: function() { + if (!this.ytPlayer) return 0; + switch (this.ytPlayer.getPlayerState()) { + case -1: + return 0; + case 3: + return 2; + default: + return 1 + } + }, + readyState: function() { + if (!this.ytPlayer) return 0; + switch (this.ytPlayer.getPlayerState()) { + case -1: + return 0; + case 5: + return 1; + case 3: + return 2; + default: + return 4 + } + }, + supportsFullScreen: function() { + return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled + }, + checkHighResPoster: function() { + var t = "https://img.youtube.com/vi/" + this.url.videoId + "/maxresdefault.jpg"; + try { + var e = new Image; + e.onload = function() { + if ("naturalHeight" in e) { + if (e.naturalHeight <= 90 || e.naturalWidth <= 120) return + } else if (e.height <= 90 || e.width <= 120) return; + this.poster_ = t, this.trigger("posterchange") + }.bind(this), e.onerror = function() {}, e.src = t + } catch (t) {} + } + }); + d.isSupported = function() { + return !0 + }, d.canPlaySource = function(t) { + return d.canPlayType(t.type) + }, d.canPlayType = function(t) { + return "video/youtube" === t + }, d.parseUrl = function(t) { + var e = { + videoId: null + }, + i = t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/); + i && 11 === i[2].length && (e.videoId = i[2]); + return (i = t.match(/[?&]list=([^#\&\?]+)/)) && i[1] && (e.listId = i[1]), e + }, d.apiReadyQueue = [], "undefined" != typeof document && (o = "https://www.youtube.com/iframe_api", r = function() { + YT.ready((function() { + d.isApiReady = !0; + for (var t = 0; t < d.apiReadyQueue.length; ++t) d.apiReadyQueue[t].initYTPlayer() + })) + }, n = !1, a = document.createElement("script"), (h = document.getElementsByTagName("script")[0]) && (h.parentNode.insertBefore(a, h), a.onload = function() { + n || (n = !0, r()) + }, a.onreadystatechange = function() { + n || "complete" !== this.readyState && "loaded" !== this.readyState || (n = !0, r()) + }, a.src = o), e = ".vjs-youtube .vjs-iframe-blocker { display: none; }.vjs-youtube.vjs-user-inactive .vjs-iframe-blocker { display: block; }.vjs-youtube .vjs-poster { background-size: cover; }.vjs-youtube-mobile .vjs-big-play-button { display: none; }", i = document.head || document.getElementsByTagName("head")[0], (s = document.createElement("style")).type = "text/css", s.styleSheet ? s.styleSheet.cssText = e : s.appendChild(document.createTextNode(e)), i.appendChild(s)), void 0 !== t.registerTech ? t.registerTech("Youtube", d) : t.registerComponent("Youtube", d) +})); +/** + * This script is an init script designed for hooverhigh + * HooverHighVideoPlayer 1 + * Copyright oxmc. + */ +window.addEventListener('HVJS-Load', async (event) => { + console.log('HVJS-Load event recived, Adding player script'); + console.log("Player-init.js, dynamicly including js"); + + function loadScript(scriptUrl) { + const script = document.createElement('script'); + script.src = scriptUrl; + document.body.appendChild(script); + return new Promise((res, rej) => { + script.onload = function() { + res(); + } + script.onerror = function() { + rej(); + } + }); + } + //Run player.js: + await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { + console.log('Script loaded!'); + }).catch(() => { + console.error('Player-init-plugin Script loading failed!'); + }); + console.log("End Player-init-plugin.js"); +}); diff --git a/hooverhigh-videojs-player.min.js b/hooverhigh-videojs-player.min.js new file mode 100644 index 0000000..742539f --- /dev/null +++ b/hooverhigh-videojs-player.min.js @@ -0,0 +1,265 @@ +/** + * This script includes a bundle of videojs plugins designed for hooverhigh + * HooverHighVideoPlayer 2 + * Copyright oxmc. + */ + +/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).videojsErrors=o(e.videojs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=o(e),i="6.0.0";const n=t.default.getComponent("Flash"),r=!t.default.browser.IS_IPHONE,s=t.default.registerPlugin||t.default.plugin,d={header:"",code:"",message:"",timeout:45e3,backgroundTimeout:3e5,dismiss:r,errors:{1:{type:"MEDIA_ERR_ABORTED",headline:"The video download was cancelled"},2:{type:"MEDIA_ERR_NETWORK",headline:"The video connection was lost, please confirm you are connected to the internet"},3:{type:"MEDIA_ERR_DECODE",headline:"The video is bad or in a format that cannot be played on your browser"},4:{type:"MEDIA_ERR_SRC_NOT_SUPPORTED",headline:"This video is either unavailable or not supported in this browser"},5:{type:"MEDIA_ERR_ENCRYPTED",headline:"The video you are trying to watch is encrypted and we do not know how to decrypt it"},unknown:{type:"MEDIA_ERR_UNKNOWN",headline:"An unanticipated problem was encountered, check back soon and try again"},"-1":{type:"PLAYER_ERR_NO_SRC",headline:"No video has been loaded"},"-2":{type:"PLAYER_ERR_TIMEOUT",headline:"It looks like you're having playback issues. Reloading the video may help."},PLAYER_ERR_DOMAIN_RESTRICTED:{headline:"This video is restricted from playing on your current domain"},PLAYER_ERR_IP_RESTRICTED:{headline:"This video is restricted at your current IP address"},PLAYER_ERR_GEO_RESTRICTED:{headline:"This video is restricted from playing in your current geographic region"},FLASHLS_ERR_CROSS_DOMAIN:{headline:"The video could not be loaded: crossdomain access denied."}}},a=function(e,o){let r,s,l;const c=[],u=function(e){o.errors=t.default.mergeOptions(o.errors,e),Object.keys(o.errors).forEach((e=>{const t=o.errors[e];t.type||(t.type=e)}))};u();const f=function(){e.error()&&-2===e.error().code&&e.error(null),e.clearTimeout(s),e.clearTimeout(r),l&&(l=!1,e.removeClass("vjs-waiting"));const t=[1/0,-1],i=(e,o)=>-1!==e.indexOf(o);"hidden"===document.visibilityState&&(e.muted()||i(t,o.backgroundTimeout))||"visible"===document.visibilityState&&i(t,o.timeout)||(s=e.setTimeout((function(){e.error()||e.paused()||e.ended()||(l=!0,e.addClass("vjs-waiting"))}),1e3),r=e.setTimeout((function(){e.error()||e.paused()||e.ended()||e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"})}),"hidden"===document.visibilityState?o.backgroundTimeout:o.timeout))},h=function(){let o;for(;c.length;)o=c.shift(),e.off(o[0],o[1]);e.clearTimeout(r),e.clearTimeout(s)},p=function(){let o=0;h(),f(),function(o,t){const i=function(){if(!e.error()){const o=e.$(".vjs-tech");if(o&&"application/x-shockwave-flash"===o.type&&!o.vjs_getProperty)return void e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"});if(e.paused())return f();if(e.ended())return f()}t.call(this)};e.on(o,i),c.push([o,i])}(["timeupdate","adtimeupdate"],(function(){const t=e.currentTime();t!==o&&(o=t,f())})),e.off(document,"visibilitychange",p),e.on(document,"visibilitychange",p)},m=function(){e.currentSrc()||e.error({code:-1,type:"PLAYER_ERR_NO_SRC"})},v=function(){let i="",r=e.error();const s=document.createElement("div");let d="";if(!r)return;if(e.off(document,"visibilitychange",p),r=t.default.mergeOptions(r,o.errors[r.code||r.type||0]),r.message&&(i=`
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`),4===r.code&&n&&!n.isSupported()){i+=`${e.localize("If you are using an older browser please try upgrading or installing Flash.")}`}const a=e.getChild("errorDisplay");s.className="vjs-errors-dialog";const l=`
${this.localize("Error Code")}: ${r.type||r.code}
`,c=-2===r.code;d=`
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`;const u=a.closeable(!("dismiss"in r)||r.dismiss);if(c){d+=`
\n \n \n
`,s.innerHTML=d,a.fillWith(s),a.getChild("closeButton").hide();const o=a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"),t=a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child");e.on(o,"click",(function(){const o=e.currentSource();e.reset(),e.src(o)})),e.on(t,"click",(function(){a.close()})),a.one("modalclose",(()=>{e.off(o),e.off(t)}))}else if(u){d+=`
\n \n
`,s.innerHTML=d,a.fillWith(s),a.contentEl().firstChild.appendChild(a.getChild("closeButton").el());const o=a.el().querySelector(".vjs-errors-ok-button");e.on(o,"click",(function(){a.close()}))}else s.innerHTML=d,a.fillWith(s);(e.currentWidth()<=600||e.currentHeight()<=250)&&a.addClass("vjs-xs"),a.one("modalclose",(()=>e.error(null)))},y=function(){h(),e.removeClass("vjs-errors"),e.off("play",p),e.off(document,"visibilitychange",p),e.off("play",m),e.off("dispose",y),e.off(["aderror","error"],v)},R=function(o){y(),a(e,t.default.mergeOptions(d,o))};R.extend=e=>u(e),R.getAll=()=>t.default.mergeOptions(o.errors),R.timeout=function(t){if(void 0===t)return o.timeout;t!==o.timeout&&(o.timeout=t,e.paused()||p())},R.backgroundTimeout=function(t){if(void 0===t)return o.backgroundTimeout;t!==o.backgroundTimeout&&(o.backgroundTimeout=t,e.paused()||p())},R.disableProgress=()=>{},e.on("play",p),e.on("play",m),e.on("dispose",y),e.on(["aderror","contenterror","error"],v),e.ready((()=>{e.addClass("vjs-errors")})),e.paused()||p(),R.VERSION=i,e.errors=R},l=function(e){a(this,t.default.mergeOptions(d,e))};return["extend","getAll"].forEach((e=>{l[e]=function(){t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`)}})),l.VERSION=i,s("errors",l),l})); + +/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ +!function(e,t){if("undefined"!=typeof window&&window.videojs)t(window.videojs);else if("function"==typeof define&&define.amd)define("videojs-hotkeys",["video.js"],function(e){return t(e.default||e)});else if("undefined"!=typeof module&&module.exports){var n=require("video.js");module.exports=t(n.default||n)}}(0,function(x){"use strict";"undefined"!=typeof window&&(window.videojs_hotkeys={version:"0.2.28"});(x.registerPlugin||x.plugin)("hotkeys",function(m){var f=this,y=f.el(),v=document,e={volumeStep:.1,seekStep:5,enableMute:!0,enableVolumeScroll:!0,enableHoverScroll:!1,enableFullscreen:!0,enableNumbers:!0,enableJogStyle:!1,alwaysCaptureHotkeys:!1,captureDocumentHotkeys:!1,documentHotkeysFocusElementFilter:function(){return!1},enableModifiersForNumbers:!0,enableInactiveFocus:!0,skipInitialFocus:!1,playPauseKey:function(e){return 32===e.which||179===e.which},rewindKey:function(e){return 37===e.which||177===e.which},forwardKey:function(e){return 39===e.which||176===e.which},volumeUpKey:function(e){return 38===e.which},volumeDownKey:function(e){return 40===e.which},muteKey:function(e){return 77===e.which},fullscreenKey:function(e){return 70===e.which},customKeys:{}},t=x.mergeOptions||x.util.mergeOptions,d=(m=t(e,m||{})).volumeStep,n=m.seekStep,p=m.enableMute,o=m.enableVolumeScroll,r=m.enableHoverScroll,b=m.enableFullscreen,h=m.enableNumbers,w=m.enableJogStyle,k=m.alwaysCaptureHotkeys,S=m.captureDocumentHotkeys,K=m.documentHotkeysFocusElementFilter,F=m.enableModifiersForNumbers,u=m.enableInactiveFocus,l=m.skipInitialFocus,i=x.VERSION;y.hasAttribute("tabIndex")||y.setAttribute("tabIndex","-1"),y.style.outline="none",!k&&f.autoplay()||l||f.one("play",function(){y.focus()}),u&&f.on("userinactive",function(){var n=function(){clearTimeout(e)},e=setTimeout(function(){f.off("useractive",n);var e=v.activeElement,t=y.querySelector(".vjs-control-bar");e&&e.parentElement==t&&y.focus()},10);f.one("useractive",n)}),f.on("play",function(){var e=y.querySelector(".iframeblocker");e&&""===e.style.display&&(e.style.display="block",e.style.bottom="39px")});var c=function(e){var t,n,o=e.which,r=e.preventDefault.bind(e),u=f.duration();if(f.controls()){var l=v.activeElement;if(k||S&&K(l)||l==y||l==y.querySelector(".vjs-tech")||l==y.querySelector(".vjs-control-bar")||l==y.querySelector(".iframeblocker"))switch(j(e,f)){case 1:r(),(k||S)&&e.stopPropagation(),f.paused()?E(f.play()):f.pause();break;case 2:t=!f.paused(),r(),t&&f.pause(),(n=f.currentTime()-T(e))<=0&&(n=0),f.currentTime(n),t&&E(f.play());break;case 3:t=!f.paused(),r(),t&&f.pause(),u<=(n=f.currentTime()+T(e))&&(n=t?u-.001:u),f.currentTime(n),t&&E(f.play());break;case 5:r(),w?(n=f.currentTime()-1,f.currentTime()<=1&&(n=0),f.currentTime(n)):f.volume(f.volume()-d);break;case 4:r(),w?(u<=(n=f.currentTime()+1)&&(n=u),f.currentTime(n)):f.volume(f.volume()+d);break;case 6:p&&f.muted(!f.muted());break;case 7:b&&(f.isFullscreen()?f.exitFullscreen():f.requestFullscreen());break;default:if((47 "+n.constructor._getName());for(var a=arguments.length,o=new Array(a>1?a-1:0),r=1;r0?t.currentTime()-t.seekable().end(0):t.currentTime();var a=t.$(".vjs-tech"),o=t.textTracks?t.textTracks():[],r=[],i={ended:t.ended(),currentSrc:t.currentSrc(),sources:t.currentSources(),src:t.tech_.src(),currentTime:n,type:t.currentType()};a&&(i.style=a.getAttribute("style"));for(var s=0;s0?t.seekable().end(0)+a.currentTime:t.currentTime(),t.currentTime(n)),t.paused()){var o=t.play();o&&o.catch&&o.catch(function(t){e.log.warn("Play promise rejected in IOS snapshot resume",t)})}}else if(a.ended)t.currentTime(t.duration());else{t.currentTime(a.currentTime);var r=t.play();r&&r.catch&&r.catch(function(t){e.log.warn("Play promise rejected in snapshot resume",t)})}t.ads.shouldRemoveAutoplay_&&(t.autoplay(!1),t.ads.shouldRemoveAutoplay_=!1)},u=function n(){if(t.off("contentcanplay",n),L&&t.clearTimeout(L),(r=t.el().querySelector(".vjs-tech")).readyState>1)return l();if(void 0===r.seekable)return l();if(r.seekable.length>0)return l();if(i--)t.setTimeout(n,50);else try{l()}catch(t){e.log.warn("Failed to resume the content after an advertisement",t)}};if("style"in a&&r.setAttribute("style",a.style||""),t.ads.videoElementRecycled())t.one("resumeended",function(){delete t.ads.snapshot,n()}),t.one("contentloadedmetadata",d),e.browser.IS_IOS&&!t.autoplay()&&(t.autoplay(!0),t.ads.shouldRemoveAutoplay_=!0),t.src(a.sources),t.one("contentcanplay",u),L=t.setTimeout(u,2e3);else{if(d(),!t.ended()){var c=t.play();c&&c.catch&&c.catch(function(t){e.log.warn("Play promise rejected in snapshot restore",t)})}delete t.ads.snapshot,n()}}(t,n):(t.volume(t.ads.preAdVolume_),n())}},j=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Preroll"};var a=n.prototype;return a.init=function(e,t,n){if(this.waitingForAdBreak=!0,e.addClass("vjs-ad-loading"),n||e.ads.nopreroll_)return this.resumeAfterNoPreroll(e);var a=e.ads.settings.timeout;"number"==typeof e.ads.settings.prerollTimeout&&(a=e.ads.settings.prerollTimeout),this._timeout=e.setTimeout(function(){e.trigger("adtimeout")},a),t?this.handleAdsReady():this.adsReady=!1},a.onAdsReady=function(t){t.ads.inAdBreak()?e.log.warn("Unexpected adsready event (Preroll)"):(t.ads.debug("Received adsready event (Preroll)"),this.handleAdsReady())},a.handleAdsReady=function(){this.adsReady=!0,this.readyForPreroll()},a.afterLoadStart=function(e){var t=this.player;t.ads._hasThereBeenALoadStartDuringPlayerLife?e():(t.ads.debug("Waiting for loadstart..."),t.one("loadstart",function(){t.ads.debug("Received loadstart event"),e()}))},a.noPreroll=function(){var e=this;this.afterLoadStart(function(){e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"),e.resumeAfterNoPreroll(e.player)})},a.readyForPreroll=function(){var e=this.player;this.afterLoadStart(function(){e.ads.debug("Triggered readyforpreroll event (Preroll)"),e.trigger("readyforpreroll")})},a.onAdsCanceled=function(e){var t=this;e.ads.debug("adscanceled (Preroll)"),this.afterLoadStart(function(){t.resumeAfterNoPreroll(e)})},a.onAdsError=function(t){var n=this;e.log("adserror (Preroll)"),this.inAdBreak()?t.ads.endLinearAdMode():this.afterLoadStart(function(){n.resumeAfterNoPreroll(t)})},a.startLinearAdMode=function(){var t=this.player;!this.adsReady||t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Preroll)"):(this.clearTimeout(t),t.ads.adType="preroll",this.waitingForAdBreak=!1,M.start(t),t.ads._shouldBlockPlay=!1)},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(e.removeClass("vjs-ad-loading"),e.addClass("vjs-ad-content-resuming"),this.contentResuming=!0,M.end(e))},a.skipLinearAdMode=function(){var t=this,n=this.player;n.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):this.afterLoadStart(function(){n.trigger("adskip"),n.ads.debug("skipLinearAdMode (Preroll)"),t.resumeAfterNoPreroll(n)})},a.onAdTimeout=function(e){var t=this;this.afterLoadStart(function(){e.ads.debug("adtimeout (Preroll)"),t.resumeAfterNoPreroll(e)})},a.onNoPreroll=function(t){t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected nopreroll event (Preroll)"):this.noPreroll()},a.resumeAfterNoPreroll=function(e){if(this.contentResuming=!0,e.ads._shouldBlockPlay=!1,this.cleanupPartial(e),e.ads._playRequested||e.ads._pausedOnContentupdate)if(e.paused()){e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)");var t=e.play();t&&t.then&&t.then(null,function(e){})}else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"),e.trigger("play"),e.trigger("playing")},a.cleanup=function(t){t.ads._hasThereBeenALoadStartDuringPlayerLife||e.log.warn("Leaving Preroll state before loadstart event can cause issues."),this.cleanupPartial(t)},a.cleanupPartial=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming"),this.clearTimeout(e)},a.clearTimeout=function(e){e.clearTimeout(this._timeout),this._timeout=null},n}(k.getState("AdState"));k.registerState("Preroll",j);var I=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"BeforePreroll"};var n=t.prototype;return n.init=function(e){this.adsReady=!1,this.shouldResumeToContent=!1,e.ads._shouldBlockPlay=!e.ads.settings.allowVjsAutoplay||!e.autoplay()},n.onAdsReady=function(e){e.ads.debug("Received adsready event (BeforePreroll)"),this.adsReady=!0},n.onPlay=function(e){var t=k.getState("Preroll");e.ads.debug("Received play event (BeforePreroll)"),this.transitionTo(t,this.adsReady,this.shouldResumeToContent)},n.onAdsCanceled=function(e){e.ads.debug("adscanceled (BeforePreroll)"),this.shouldResumeToContent=!0},n.onAdsError=function(){this.player.ads.debug("adserror (BeforePreroll)"),this.shouldResumeToContent=!0},n.onNoPreroll=function(){this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"),this.shouldResumeToContent=!0},n.skipLinearAdMode=function(){var e=this.player;e.trigger("adskip"),e.ads.debug("skipLinearAdMode (BeforePreroll)"),this.shouldResumeToContent=!0},n.onContentChanged=function(){this.init(this.player)},t}(k.getState("ContentState"));k.registerState("BeforePreroll",I);var N=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"Midroll"};var n=t.prototype;return n.init=function(e){e.ads.adType="midroll",M.start(e),e.addClass("vjs-ad-loading")},n.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},n.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(this.contentResuming=!0,e.addClass("vjs-ad-content-resuming"),e.removeClass("vjs-ad-loading"),M.end(e))},n.onAdsError=function(e){this.inAdBreak()&&e.ads.endLinearAdMode()},n.cleanup=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming")},t}(k.getState("AdState"));k.registerState("Midroll",N);var E=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Postroll"};var a=n.prototype;return a.init=function(e){if(this.waitingForAdBreak=!0,e.ads._contentEnding=!0,e.ads.nopostroll_){this.resumeContent(e);var t=k.getState("AdsDone");this.transitionTo(t)}else{e.addClass("vjs-ad-loading");var n=e.ads.settings.timeout;"number"==typeof e.ads.settings.postrollTimeout&&(n=e.ads.settings.postrollTimeout),this._postrollTimeout=e.setTimeout(function(){e.trigger("adtimeout")},n)}},a.startLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Postroll)"):(t.ads.adType="postroll",t.clearTimeout(this._postrollTimeout),this.waitingForAdBreak=!1,M.start(t))},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this,t=this.player,n=k.getState("AdsDone");this.inAdBreak()&&(t.removeClass("vjs-ad-loading"),this.resumeContent(t),M.end(t,function(){e.transitionTo(n)}))},a.skipLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):(t.ads.debug("Postroll abort (skipLinearAdMode)"),t.trigger("adskip"),this.abort(t))},a.onAdTimeout=function(e){e.ads.debug("Postroll abort (adtimeout)"),this.abort(e)},a.onAdsError=function(e){e.ads.debug("Postroll abort (adserror)"),e.ads.inAdBreak()?e.ads.endLinearAdMode():this.abort(e)},a.onContentChanged=function(e){if(this.isContentResuming()){var t=k.getState("BeforePreroll");this.transitionTo(t)}else if(!this.inAdBreak()){var n=k.getState("Preroll");this.transitionTo(n)}},a.onNoPostroll=function(t){this.isContentResuming()||this.inAdBreak()?e.log.warn("Unexpected nopostroll event (Postroll)"):this.abort(t)},a.resumeContent=function(e){this.contentResuming=!0,e.addClass("vjs-ad-content-resuming")},a.abort=function(e){var t=k.getState("AdsDone");this.resumeContent(e),e.removeClass("vjs-ad-loading"),this.transitionTo(t)},a.cleanup=function(e){e.removeClass("vjs-ad-content-resuming"),e.clearTimeout(this._postrollTimeout),e.ads._contentEnding=!1},n}(k.getState("AdState"));k.registerState("Postroll",E);var x=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"ContentPlayback"};var n=t.prototype;return n.init=function(e){e.ads._shouldBlockPlay=!1},n.onAdsReady=function(e){e.ads.debug("Received adsready event (ContentPlayback)"),e.ads.nopreroll_||(e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"),e.trigger("readyforpreroll"))},n.onReadyForPostroll=function(e){var t=k.getState("Postroll");e.ads.debug("Received readyforpostroll event"),this.transitionTo(t)},n.startLinearAdMode=function(){var e=k.getState("Midroll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("ContentPlayback",x);var D=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedContentPlayback"};var n=t.prototype;return n.init=function(){this.player.ads._shouldBlockPlay=!1},n.onContentChanged=function(){this.player.ads.debug("Received contentchanged event ("+this.constructor._getName()+")")},n.startLinearAdMode=function(){var e=k.getState("StitchedAdRoll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("StitchedContentPlayback",D);var O=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedAdRoll"};var n=t.prototype;return n.init=function(){this.waitingForAdBreak=!1,this.contentResuming=!1,this.player.ads.adType="stitched",M.start(this.player)},n.onPlaying=function(){},n.onContentResumed=function(){},n.onAdEnded=function(){this.endLinearAdMode(),this.player.trigger("ended")},n.endLinearAdMode=function(){var e=k.getState("StitchedContentPlayback");M.end(this.player),this.transitionTo(e)},t}(k.getState("AdState"));k.registerState("StitchedAdRoll",O);var F=A.isMiddlewareMediatorSupported,U=e.getTech("Html5").Events,V={timeout:5e3,prerollTimeout:void 0,postrollTimeout:void 0,debug:!1,stitchedAds:!1,contentIsLive:void 0,liveCuePoints:!0,allowVjsAutoplay:e.options.normalizeAutoplay||!1},q=function(o){var r=this,i=e.mergeOptions(V,o),s=[];U.concat(["firstplay","loadedalldata"]).forEach(function(e){-1===s.indexOf(e)&&s.push(e)}),r.on(s,u),F()||function(t,n){n&&e.log("Using cancelContentPlay to block content playback"),t.on("play",m)}(r,i.debug),r.setTimeout(function(){r.ads._hasThereBeenALoadStartDuringPlayerLife||""===r.src()||e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html")},5e3),r.on("ended",function(){r.hasClass("vjs-has-started")||r.addClass("vjs-has-started")}),r.on("contenttimeupdate",function(){r.removeClass("vjs-waiting")}),r.on(["addurationchange","adcanplay"],function(){if(!r.ads.settings.stitchedAds&&!r.hasStarted()&&(!r.ads.snapshot||r.currentSrc()!==r.ads.snapshot.currentSrc)&&r.ads.inAdBreak()){var t=r.play();t&&t.catch&&t.catch(function(t){e.log.warn("Play promise rejected when playing ad",t)})}}),r.on("nopreroll",function(){r.ads.debug("Received nopreroll event"),r.ads.nopreroll_=!0}),r.on("nopostroll",function(){r.ads.debug("Received nopostroll event"),r.ads.nopostroll_=!0}),r.on("playing",function(){r.ads._cancelledPlay=!1,r.ads._pausedOnContentupdate=!1}),r.on("play",function(){r.ads._playRequested=!0}),r.one("loadstart",function(){r.ads._hasThereBeenALoadStartDuringPlayerLife=!0}),r.on("loadeddata",function(){r.ads._hasThereBeenALoadedData=!0}),r.on("loadedmetadata",function(){r.ads._hasThereBeenALoadedMetaData=!0}),r.ads=function(t){return{disableNextSnapshotRestore:!1,_contentEnding:!1,_contentHasEnded:!1,_hasThereBeenALoadStartDuringPlayerLife:!1,_hasThereBeenALoadedData:!1,_hasThereBeenALoadedMetaData:!1,_inLinearAdMode:!1,_shouldBlockPlay:!1,_playBlocked:!1,_playRequested:!1,adType:null,VERSION:a,reset:function(){t.ads.disableNextSnapshotRestore=!1,t.ads._contentEnding=!1,t.ads._contentHasEnded=!1,t.ads.snapshot=null,t.ads.adType=null,t.ads._hasThereBeenALoadedData=!1,t.ads._hasThereBeenALoadedMetaData=!1,t.ads._cancelledPlay=!1,t.ads._shouldBlockPlay=!1,t.ads._playBlocked=!1,t.ads.nopreroll_=!1,t.ads.nopostroll_=!1,t.ads._playRequested=!1},startLinearAdMode:function(){t.ads._state.startLinearAdMode()},endLinearAdMode:function(){t.ads._state.endLinearAdMode()},skipLinearAdMode:function(){t.ads._state.skipLinearAdMode()},stitchedAds:function(t){return void 0!==t&&(e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."),this.settings.stitchedAds=!!t),this.settings.stitchedAds},videoElementRecycled:function(){if(t.ads.shouldPlayContentBehindAd(t))return!1;if(!this.snapshot)throw new Error("You cannot use videoElementRecycled while there is no snapshot.");var e=t.tech_.src()!==this.snapshot.src,n=t.currentSrc()!==this.snapshot.currentSrc;return e||n},isLive:function(n){return void 0===n&&(n=t),"boolean"==typeof n.ads.settings.contentIsLive?n.ads.settings.contentIsLive:n.duration()===1/0||"8"===e.browser.IOS_VERSION&&0===n.duration()},shouldPlayContentBehindAd:function(n){if(void 0===n&&(n=t),n)return!!n.ads.settings.liveCuePoints&&!e.browser.IS_IOS&&!e.browser.IS_ANDROID&&n.duration()===1/0;throw new Error("shouldPlayContentBehindAd requires a player as a param")},shouldTakeSnapshots:function(e){return void 0===e&&(e=t),!this.shouldPlayContentBehindAd(e)&&!this.stitchedAds()},isInAdMode:function(){return this._state.isAdState()},isWaitingForAdBreak:function(){return this._state.isWaitingForAdBreak()},isContentResuming:function(){return this._state.isContentResuming()},isAdPlaying:function(){return this._state.inAdBreak()},inAdBreak:function(){return this._state.inAdBreak()},removeNativePoster:function(){var e=t.$(".vjs-tech");e&&e.removeAttribute("poster")},debug:function(){if(this.settings.debug){for(var t=arguments.length,n=new Array(t),a=0;a=n:n===e},i.show=function(){return t.prototype.show.call(this),this.isVisible=!0,this.off(this.player(),this.startEvent_,this.startListener_),this.debug("shown"),this.debug('unbound `startListener_` from "'+this.startEvent_+'"'),u(this.options_.start)&&(this.player().paused()&&0!==this.options_.start||this.player().trigger("show-overlay",{id:this.options_.cta_id,align:this.options_.align})),this.endEvent_&&(this.debug('bound `endListener_` to "'+this.endEvent_+'"'),this.on(this.player(),this.endEvent_,this.endListener_)),this},i.shouldShow_=function(t,e){var n=this.options_.start,i=this.options_.end;return u(n)?u(i)?t>=n&&t=n):n===e},i.startListener_=function(t){var e=this.player().currentTime();this.shouldShow_(e,t.type)&&this.show()},i.endListener_=function(t){var e=this.player().currentTime();this.shouldHide_(e,t.type)&&this.hide()},i.rewindListener_=function(t){var e=this.player().currentTime(),n=this.previousTime_,i=this.options_.start,o=this.options_.end;e + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):t.videojsShare=e(t.videojs)}(this,function(t){"use strict";function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}function i(){}function o(t,e){for(;t&&t.nodeType!==G;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}function r(t,e,n,i,o){var r=l.apply(this,arguments);return t.addEventListener(n,r,o),{destroy:function(){t.removeEventListener(n,r,o)}}}function a(t,e,n,i,o){return"function"==typeof t.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return r(t,e,n,i,o)}))}function l(t,e,n,i){return function(n){n.delegateTarget=K(n.target,e),n.delegateTarget&&i.call(t,n)}}function s(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!X.string(e))throw new TypeError("Second argument must be a String");if(!X.fn(n))throw new TypeError("Third argument must be a Function");if(X.node(t))return c(t,e,n);if(X.nodeList(t))return u(t,e,n);if(X.string(t))return h(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function u(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function h(t,e,n){return Q(document.body,t,e,n)}function d(t){return Object.keys(t).filter(function(e){return void 0!==t[e]&&""!==t[e]}).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}function f(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var o=d({app_id:e,display:"popup",redirect_uri:i,link:n});return window.open("https://www.facebook.com/dialog/feed?"+o,"_blank",tt)}function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.hashtag,o=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var r=d({app_id:e,display:"popup",redirect_uri:o,href:n,hashtag:i});return window.open("https://www.facebook.com/dialog/share?"+r,"_blank",tt)}function v(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url;if(!t)throw new Error("url is not defined");var e=d({kid_directed_site:"0",sdk:"joey",u:t,display:"popup",ref:"plugin",src:"share_button"});return window.open("https://www.facebook.com/sharer/sharer.php?"+e,"_blank",tt)}function g(){var t=d({url:(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url});return window.open("https://plus.google.com/share?"+t,"_blank",tt)}function w(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({share_url:t.url,title:t.title,description:t.description,imageurl:t.image});return window.open("http://connect.mail.ru/share?"+e,"_blank",tt)}function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.description,o=(n||"")+"\r\n"+(i||"")+"\r\n"+(e||""),r="mailto:?body="+encodeURIComponent(o);return window.location.assign(r)}function y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({"st.cmd":"addShare","st._surl":t.url,title:t.title});return window.open("https://ok.ru/dk?"+e,"_blank",tt)}function b(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,text:t.title});return window.open("https://t.me/share/url?"+e,"_blank",tt)}function k(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=t.hashtags,o=d({text:e,url:n,hashtags:(void 0===i?[]:i).join(",")});return window.open("https://twitter.com/intent/tweet?"+o,"_blank",tt)}function _(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,title:t.title});return window.open("https://www.reddit.com/submit?"+e,"_blank",tt)}function C(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.description,n=d({url:t.url,description:e,media:t.media});return window.open("https://pinterest.com/pin/create/button/?"+n,"_blank",tt)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.caption,o=t.tags,r=void 0===o?[]:o,a=t.posttype,l=void 0===a?"link":a,s=d({canonicalUrl:e,title:n,caption:i,tags:r.join(","),posttype:l});return window.open("https://www.tumblr.com/widgets/share/tool?"+s,"_blank",tt)}function E(){return!!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/)}function S(t){return E()?window.open(t):window.location.assign(t)}function j(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title;if(!e&&!n)throw new Error("url and title not specified");return S("viber://forward?"+d({text:[n,e].filter(function(t){return t}).join(" ")}))}function F(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.image,i=t.isVkParse,o=t.description,r=t.title;o&&o.length>et&&(o=o.substr(0,et)+"..."),r&&r.length>et&&(r=r.substr(0,et)+"...");return"https://vk.com/share.php?"+d(i?{url:e}:{url:e,title:r,description:o,image:n,noparse:!0})}function A(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return window.open(F(t),"_blank",tt)}function T(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.phone,n=d({text:[t.title,t.url].filter(function(t){return t}).join(" "),phone:e});return window.open("https://api.whatsapp.com/send?"+n,"_blank",tt)}function z(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=d({title:e,summary:t.description,url:n});return window.open("https://www.linkedin.com/shareArticle?mini=true&"+i,"_blank",tt)}function M(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url;if(!e)throw new Error("fbAppId is not defined");var i=d({app_id:e,link:n});return window.location.assign("fb-messenger://share?"+i)}function O(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url;if(!n)throw new Error("url is not defined");var i=encodeURIComponent(""+n);return e&&(i=""+encodeURIComponent(e+" ")+i),window.open("https://line.me/R/msg/text/?"+i,"_blank",tt)}function L(){return"ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0}function V(){return/Android/.test(window.navigator.userAgent)||/iP(hone|ad|od)/i.test(window.navigator.userAgent)}function H(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?V()?t:t.filter(function(t){return!it.includes(t)}):t}t=t&&t.hasOwnProperty("default")?t.default:t;var I=function(){return"undefined"==typeof window?"":window.location.href}(),P={mobileVerification:!0,title:"Video",url:I,socials:["fbFeed","tw","reddit","gp","messenger","linkedin","vk","ok","mail","email","telegram","whatsapp","viber"],embedCode:function(){return""}(),redirectUri:function(){return I+"#close_window"}()},R=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},U=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})});i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,h.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(u.default);t.exports=p})})),tt="scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0",et=80,nt=(Object.freeze||Object)({fbFeed:f,fbShare:p,fbButton:v,gp:g,mail:w,email:m,ok:y,telegram:b,tw:k,reddit:_,pinterest:C,tumblr:x,viber:j,getVkUrl:F,vk:A,whatsapp:T,linkedin:z,messenger:M,line:O}),it=["whatsapp","viber","messenger"],ot={fbFeed:'\n \n\n',tw:'\n \n\n',reddit:'\n \n\n',gp:'\n \n\n',messenger:'\n \n \n\n',linkedin:'\n \n\n',vk:'\n \n\n',ok:'\n \n\n',mail:'\n \n\n',email:'\n \n\n',telegram:'\n \n\n',whatsapp:'\n \n\n',viber:'\n \n\n'},rt=function(){function t(e,n){R(this,t),this.player=e,this.options=n,this.socials=H(n.socials,n.mobileVerification),this.copyBtnTextClass="vjs-share__btn-text",this.socialBtnClass="vjs-share__social",this._createContent(),this._initToggle(),this._initClipboard(),this._initSharing()}return t.prototype.getContent=function(){return this.content},t.prototype._createContent=function(){var t='\n \n \n \n '+this.player.localize("Copy")+"\n ",e=document.createElement("div"),n="";this.options.embedCode&&(n='\n \n "),e.innerHTML='
\n \n\n
\n \n \n\n "+n+'\n
\n\n
\n
\n '+this._getSocialItems().join("")+"\n
\n
\n
",this.content=e.firstChild},t.prototype._initClipboard=function(){var t=this;new $(".vjs-share__btn",{target:function(t){return t.previousElementSibling}}).on("success",function(e){var n=e.trigger.querySelector("."+t.copyBtnTextClass),i=function(){n.innerText=t.player.localize("Copy"),e.clearSelection()};n.innerText=t.player.localize("Copied"),L()?setTimeout(i,1e3):n.parentElement.addEventListener("mouseleave",function(){setTimeout(i,300)})})},t.prototype._initSharing=function(){var t=this,e=this.content.querySelectorAll("."+this.socialBtnClass);Array.from(e).forEach(function(e){e.addEventListener("click",function(e){var n=e.currentTarget.getAttribute("data-social"),i=nt[n];"function"==typeof i&&i(t.socialOptions)})})},t.prototype._initToggle=function(){var t=this.content.querySelector(".vjs-share__socials");this.socials.length>10||window.innerWidth<=180&&this.socials.length>6?t.style.height="calc((2em + 5px) * 2)":t.classList.add("horizontal")},t.prototype._getSocialItems=function(){var t=[];return this.socials.forEach(function(e){ot[e]&&t.push('\n \n ")}),t},U(t,[{key:"socialOptions",get:function(){var t=this.options;return{url:t.url,title:t.title,description:t.description,image:t.image,fbAppId:t.fbAppId,isVkParse:t.isVkParse,redirectUri:t.redirectUri}}}]),t}(),at=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.playerClassName="vjs-videojs-share_open",o}return N(e,t),e.prototype.open=function(){var e=this.player();e.addClass(this.playerClassName),t.prototype.open.call(this),e.trigger("sharing:opened")},e.prototype.close=function(){var e=this.player();e.removeClass(this.playerClassName),t.prototype.close.call(this),e.trigger("sharing:closed")},e}(t.getComponent("ModalDialog")),lt=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.player=n,o.options=i,o}return N(e,t),e.prototype._createModal=function(){var t=new rt(this.player,this.options).getContent();this.modal=new at(this.player,{content:t,temporary:!0}),this.el=this.modal.contentEl(),this.player.addChild(this.modal)},e.prototype.open=function(){this._createModal(),this.modal.open()},e}(t.getComponent("Component")),st=function(e){function n(i,o){R(this,n);var r=B(this,e.call(this,i));return r.options=t.mergeOptions(P,o),r.player.ready(function(){r.player.addClass("vjs-share"),i.addClass("vjs-videojs-share"),i.getChild("controlBar").addChild("ShareButton",o),i.addChild("ShareOverlay",o)}),r}return N(n,e),n}(t.getPlugin("plugin"));return st.defaultState={},st.VERSION="3.2.1",t.registerComponent("ShareButton",q),t.registerComponent("ShareOverlay",lt),t.registerPlugin("share",st),st}); + +/** + * videojs-watermark + * @version 2.0.0 + * @copyright 2017 Brooks Lyrette + * @license Apache-2.0 + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.videojsWatermark=e()}}(function(){return function e(n,t,i){function o(d,a){if(!t[d]){if(!n[d]){var f="function"==typeof require&&require;if(!a&&f)return f(d,!0);if(r)return r(d,!0);var u=new Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var l=t[d]={exports:{}};n[d][0].call(l.exports,function(e){var t=n[d][1][e];return o(t||e)},l,l.exports,e,n,t,i)}return t[d].exports}for(var r="function"==typeof require&&require,d=0;dt.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),i.push(null,null);break}r||(r=t.getParameter(t.ACTIVE_TEXTURE)),t.activeTexture(l),i.push(t.getParameter(s),null);break;case t.ACTIVE_TEXTURE:r=t.getParameter(t.ACTIVE_TEXTURE),i.push(null);break;default:i.push(t.getParameter(s))}for(n(t),o=0;ot.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_2D,a);break;case t.TEXTURE_BINDING_CUBE_MAP:var l;if((l=e[++o])t.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_CUBE_MAP,a);break;case t.VIEWPORT:t.viewport(a[0],a[1],a[2],a[3]);break;case t.BLEND:case t.CULL_FACE:case t.DEPTH_TEST:case t.SCISSOR_TEST:case t.STENCIL_TEST:a?t.enable(s):t.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}r&&t.activeTexture(r)}}else n(t)},R=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),C=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function P(t,e,n,i){this.gl=t,this.cardboardUI=e,this.bufferScale=n,this.dirtySubmitFrameBindings=i,this.ctxAttribs=t.getContextAttributes(),this.instanceExt=t.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=t.drawingBufferWidth,this.bufferHeight=t.drawingBufferHeight,this.realBindFramebuffer=t.bindFramebuffer,this.realEnable=t.enable,this.realDisable=t.disable,this.realColorMask=t.colorMask,this.realClearColor=t.clearColor,this.realViewport=t.viewport,a()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=A(t,R,C,this.attribs),this.uniforms=x(t,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.indexCount=0,this.renderTarget=t.createTexture(),this.framebuffer=t.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=t.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=t.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=t.createRenderbuffer()),this.patch(),this.onResize()}P.prototype.destroy=function(){var t=this.gl;this.unpatch(),t.deleteProgram(this.program),t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer),t.deleteTexture(this.renderTarget),t.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&t.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&t.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&t.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},P.prototype.onResize=function(){var t=this.gl,e=this,n=[t.RENDERBUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0];L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.framebuffer),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.texImage2D(t.TEXTURE_2D,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,e.bufferWidth,e.bufferHeight,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.renderTarget,0),e.ctxAttribs.depth&&e.ctxAttribs.stencil?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthStencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e.depthStencilBuffer)):e.ctxAttribs.depth?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e.depthBuffer)):e.ctxAttribs.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,e.stencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.STENCIL_INDEX8,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.STENCIL_ATTACHMENT,t.RENDERBUFFER,e.stencilBuffer)),!t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),e.realClearColor.apply(t,e.clearColor)})),this.cardboardUI&&this.cardboardUI.onResize()},P.prototype.patch=function(){if(!this.isPatched){var t=this,e=this.gl.canvas,n=this.gl;a()||(e.width=g()*this.bufferScale,e.height=v()*this.bufferScale,Object.defineProperty(e,"width",{configurable:!0,enumerable:!0,get:function(){return t.bufferWidth},set:function(n){t.bufferWidth=n,t.realCanvasWidth.set.call(e,n),t.onResize()}}),Object.defineProperty(e,"height",{configurable:!0,enumerable:!0,get:function(){return t.bufferHeight},set:function(n){t.bufferHeight=n,t.realCanvasHeight.set.call(e,n),t.onResize()}})),this.lastBoundFramebuffer=n.getParameter(n.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(n.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(e,i){t.lastBoundFramebuffer=i||t.framebuffer,t.realBindFramebuffer.call(n,e,t.lastBoundFramebuffer)},this.cullFace=n.getParameter(n.CULL_FACE),this.depthTest=n.getParameter(n.DEPTH_TEST),this.blend=n.getParameter(n.BLEND),this.scissorTest=n.getParameter(n.SCISSOR_TEST),this.stencilTest=n.getParameter(n.STENCIL_TEST),n.enable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!0;break;case n.DEPTH_TEST:t.depthTest=!0;break;case n.BLEND:t.blend=!0;break;case n.SCISSOR_TEST:t.scissorTest=!0;break;case n.STENCIL_TEST:t.stencilTest=!0}t.realEnable.call(n,e)},n.disable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!1;break;case n.DEPTH_TEST:t.depthTest=!1;break;case n.BLEND:t.blend=!1;break;case n.SCISSOR_TEST:t.scissorTest=!1;break;case n.STENCIL_TEST:t.stencilTest=!1}t.realDisable.call(n,e)},this.colorMask=n.getParameter(n.COLOR_WRITEMASK),n.colorMask=function(e,i,r,o){t.colorMask[0]=e,t.colorMask[1]=i,t.colorMask[2]=r,t.colorMask[3]=o,t.realColorMask.call(n,e,i,r,o)},this.clearColor=n.getParameter(n.COLOR_CLEAR_VALUE),n.clearColor=function(e,i,r,o){t.clearColor[0]=e,t.clearColor[1]=i,t.clearColor[2]=r,t.clearColor[3]=o,t.realClearColor.call(n,e,i,r,o)},this.viewport=n.getParameter(n.VIEWPORT),n.viewport=function(e,i,r,o){t.viewport[0]=e,t.viewport[1]=i,t.viewport[2]=r,t.viewport[3]=o,t.realViewport.call(n,e,i,r,o)},this.isPatched=!0,w(e)}},P.prototype.unpatch=function(){if(this.isPatched){var t=this.gl,e=this.gl.canvas;a()||(Object.defineProperty(e,"width",this.realCanvasWidth),Object.defineProperty(e,"height",this.realCanvasHeight)),e.width=this.bufferWidth,e.height=this.bufferHeight,t.bindFramebuffer=this.realBindFramebuffer,t.enable=this.realEnable,t.disable=this.realDisable,t.colorMask=this.realColorMask,t.clearColor=this.realClearColor,t.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&t.bindFramebuffer(t.FRAMEBUFFER,null),this.isPatched=!1,setTimeout((function(){w(e)}),1)}},P.prototype.setTextureBounds=function(t,e){t||(t=[0,0,.5,1]),e||(e=[.5,0,.5,1]),this.viewportOffsetScale[0]=t[0],this.viewportOffsetScale[1]=t[1],this.viewportOffsetScale[2]=t[2],this.viewportOffsetScale[3]=t[3],this.viewportOffsetScale[4]=e[0],this.viewportOffsetScale[5]=e[1],this.viewportOffsetScale[6]=e[2],this.viewportOffsetScale[7]=e[3]},P.prototype.submitFrame=function(){var t=this.gl,e=this,n=[];if(this.dirtySubmitFrameBindings||n.push(t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0),L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null);var n=0,i=0;e.instanceExt&&(n=t.getVertexAttrib(e.attribs.position,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),i=t.getVertexAttrib(e.attribs.texCoord,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),e.cullFace&&e.realDisable.call(t,t.CULL_FACE),e.depthTest&&e.realDisable.call(t,t.DEPTH_TEST),e.blend&&e.realDisable.call(t,t.BLEND),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realDisable.call(t,t.STENCIL_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),(e.ctxAttribs.alpha||a())&&(e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)),t.useProgram(e.program),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.enableVertexAttribArray(e.attribs.position),t.enableVertexAttribArray(e.attribs.texCoord),t.vertexAttribPointer(e.attribs.position,2,t.FLOAT,!1,20,0),t.vertexAttribPointer(e.attribs.texCoord,3,t.FLOAT,!1,20,8),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,0),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,0)),t.activeTexture(t.TEXTURE0),t.uniform1i(e.uniforms.diffuse,0),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.uniform4fv(e.uniforms.viewportOffsetScale,e.viewportOffsetScale),t.drawElements(t.TRIANGLES,e.indexCount,t.UNSIGNED_SHORT,0),e.cardboardUI&&e.cardboardUI.renderNoState(),e.realBindFramebuffer.call(e.gl,t.FRAMEBUFFER,e.framebuffer),e.ctxAttribs.preserveDrawingBuffer||(e.realClearColor.call(t,0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)),e.dirtySubmitFrameBindings||e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.cullFace&&e.realEnable.call(t,t.CULL_FACE),e.depthTest&&e.realEnable.call(t,t.DEPTH_TEST),e.blend&&e.realEnable.call(t,t.BLEND),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realEnable.call(t,t.STENCIL_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),!e.ctxAttribs.alpha&&e.ctxAttribs.preserveDrawingBuffer||e.realClearColor.apply(t,e.clearColor),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,n),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,i))})),a()){var i=t.canvas;i.width==e.bufferWidth&&i.height==e.bufferHeight||(e.bufferWidth=i.width,e.bufferHeight=i.height,e.onResize())}},P.prototype.updateDeviceInfo=function(t){var e=this.gl,n=this,i=[e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING];L(e,i,(function(e){var i=n.computeMeshVertices_(n.meshWidth,n.meshHeight,t);if(e.bindBuffer(e.ARRAY_BUFFER,n.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW),!n.indexCount){var r=n.computeMeshIndices_(n.meshWidth,n.meshHeight);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,r,e.STATIC_DRAW),n.indexCount=r.length}}))},P.prototype.computeMeshVertices_=function(t,e,n){for(var i=new Float32Array(2*t*e*5),r=n.getLeftEyeVisibleTanAngles(),o=n.getLeftEyeNoLensTanAngles(),a=n.getLeftEyeVisibleScreenRect(o),l=0,c=0;c<2;c++){for(var h=0;hr-42&&i.clientXn.clientHeight-42?t(i):i.clientX<42&&i.clientY<42&&e(i)},n.addEventListener("click",this.listener,!1)},N.prototype.onResize=function(){var t=this.gl,e=this,n=[t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){var n=[],i=t.drawingBufferWidth/2,r=Math.max(screen.width,screen.height)*window.devicePixelRatio,o=t.drawingBufferWidth/r*window.devicePixelRatio,s=4*o/2,a=42*o,l=28*o/2,c=14*o;function h(t,e){var r=(90-t)*O,o=Math.cos(r),s=Math.sin(r);n.push(.3125*o*l+i,.3125*s*l+l),n.push(e*o*l+i,e*s*l+l)}n.push(i-s,a),n.push(i-s,t.drawingBufferHeight),n.push(i+s,a),n.push(i+s,t.drawingBufferHeight),e.gearOffset=n.length/2;for(var u=0;u<=6;u++){var d=60*u;h(d,1),h(d+12,1),h(d+20,.75),h(d+40,.75),h(d+48,1)}function p(e,i){n.push(c+e,t.drawingBufferHeight-c-i)}e.gearVertexCount=n.length/2-e.gearOffset,e.arrowOffset=n.length/2;var f=s/Math.sin(45*O);p(0,l),p(l,0),p(l+f,f),p(f,l+f),p(f,l-f),p(0,l),p(l,2*l),p(l+f,2*l-f),p(f,l-f),p(0,l),p(f,l-s),p(28*o,l-s),p(f,l+s),p(28*o,l+s),e.arrowVertexCount=n.length/2-e.arrowOffset,t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(n),t.STATIC_DRAW)}))},N.prototype.render=function(){var t=this.gl,e=this,n=[t.CULL_FACE,t.DEPTH_TEST,t.BLEND,t.SCISSOR_TEST,t.STENCIL_TEST,t.COLOR_WRITEMASK,t.VIEWPORT,t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.BLEND),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.colorMask(!0,!0,!0,!0),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.renderNoState()}))},N.prototype.renderNoState=function(){var t,e,n,i,r,o,s,a,l,c,h=this.gl;h.useProgram(this.program),h.bindBuffer(h.ARRAY_BUFFER,this.vertexBuffer),h.enableVertexAttribArray(this.attribs.position),h.vertexAttribPointer(this.attribs.position,2,h.FLOAT,!1,8,0),h.uniform4f(this.uniforms.color,1,1,1,1),t=this.projMat,e=0,n=h.drawingBufferWidth,i=0,r=h.drawingBufferHeight,a=1/(e-n),l=1/(i-r),c=1/((o=.1)-(s=1024)),t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*a,t[13]=(r+i)*l,t[14]=(s+o)*c,t[15]=1,h.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),h.drawArrays(h.TRIANGLE_STRIP,0,4),h.drawArrays(h.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),h.drawArrays(h.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},B.prototype.distortInverse=function(t){for(var e=0,n=1,i=t-this.distort(e);Math.abs(n-e)>1e-4;){var r=t-this.distort(n),o=n-r*((n-e)/(r-i));e=n,n=o,i=r}return n},B.prototype.distort=function(t){for(var e=t*t,n=0,i=0;i=1)return this.w=o,this.x=n,this.y=i,this.z=r,this;var a=Math.acos(s),l=Math.sqrt(1-s*s);if(Math.abs(l)<.001)return this.w=.5*(o+this.w),this.x=.5*(n+this.x),this.y=.5*(i+this.y),this.z=.5*(r+this.z),this;var c=Math.sin((1-e)*a)/l,h=Math.sin(e*a)/l;return this.w=o*c+this.w*h,this.x=n*c+this.x*h,this.y=i*c+this.y*h,this.z=r*c+this.z*h,this},setFromUnitVectors:function(t,e){return void 0===H&&(H=new U),(G=t.dot(e)+1)<1e-6?(G=0,Math.abs(t.x)>Math.abs(t.z)?H.set(-t.y,t.x,0):H.set(0,-t.z,t.y)):H.crossVectors(t,e),this.x=H.x,this.y=H.y,this.z=H.z,this.w=G,this.normalize(),this}};var W=new k({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),j=new k({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),X={CardboardV1:new Y({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new Y({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};function q(t,e){this.viewer=X.CardboardV2,this.updateDeviceParams(t),this.distortion=new B(this.viewer.distortionCoefficients);for(var n=0;n=200&&n.status<=299?(i.dpdb=JSON.parse(n.response),i.recalculateDeviceParams_()):console.error("Error loading online DPDB!")})),n.send()}}function J(t){this.xdpi=t.xdpi,this.ydpi=t.ydpi,this.bevelMm=t.bevelMm}function K(t,e){this.set(t,e)}function $(t,e){this.kFilter=t,this.isDebug=e,this.currentAccelMeasurement=new K,this.currentGyroMeasurement=new K,this.previousGyroMeasurement=new K,a()?this.filterQ=new V(-1,0,0,1):this.filterQ=new V(1,0,0,1),this.previousFilterQ=new V,this.previousFilterQ.copy(this.filterQ),this.accelQ=new V,this.isOrientationInitialized=!1,this.estimatedGravity=new U,this.measuredGravity=new U,this.gyroIntegralQ=new V}function tt(t,e){this.predictionTimeS=t,this.isDebug=e,this.previousQ=new V,this.previousTimestampS=null,this.deltaQ=new V,this.outQ=new V}function et(t,e,n,i){this.yawOnly=n,this.accelerometer=new U,this.gyroscope=new U,this.filter=new $(t,i),this.posePredictor=new tt(e,i),this.isFirefoxAndroid=h(),this.isIOS=a();var r=u();this.isDeviceMotionInRadians=!this.isIOS&&r&&r<66,this.isWithoutDeviceMotion=p()||d(),this.filterToWorldQ=new V,a()?this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new V,this.worldToScreenQ=new V,this.originalPoseAdjustQ=new V,this.originalPoseAdjustQ.setFromAxisAngle(new U(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),m()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new V,this.orientationOut_=new Float32Array(4),this.start()}Z.prototype.getDeviceParams=function(){return this.deviceParams},Z.prototype.recalculateDeviceParams_=function(){var t=this.calcDeviceParams_();t?(this.deviceParams=t,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Z.prototype.calcDeviceParams_=function(){var t=this.dpdb;if(!t)return console.error("DPDB not available."),null;if(1!=t.format)return console.error("DPDB has unexpected format version."),null;if(!t.devices||!t.devices.length)return console.error("DPDB does not have a devices section."),null;var e=navigator.userAgent||navigator.vendor||window.opera,n=g(),i=v();if(!t.devices)return console.error("DPDB has no devices section."),null;for(var r=0;r1||this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},$.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);var n=new V;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var i,r=new V;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",z*((i=r).w>1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(i.w)),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var o=new V;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},$.prototype.getOrientation=function(){return this.filterQ},$.prototype.accelToQuaternion_=function(t){var e=new U;e.copy(t),e.normalize();var n=new V;return n.setFromUnitVectors(new U(0,0,-1),e),n.inverse(),n},$.prototype.gyroToQuaternionDelta_=function(t,e){var n=new V,i=new U;return i.copy(t),i.normalize(),n.setFromAxisAngle(i,t.length()*e),n},tt.prototype.getPrediction=function(t,e,n){if(!this.previousTimestampS)return this.previousQ.copy(t),this.previousTimestampS=n,t;var i=new U;i.copy(e),i.normalize();var r=e.length();if(r<20*F)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(z*r).toFixed(1)),this.outQ.copy(t),this.previousQ.copy(t),this.outQ;var o=r*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(i,o),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(t),this.previousTimestampS=n,this.outQ},et.prototype.getPosition=function(){return null},et.prototype.getOrientation=function(){var t=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ)return this.deviceOrientationFixQ=this.deviceOrientationFixQ||(n=(new V).setFromAxisAngle(new U(0,0,-1),0),i=new V,-90===window.orientation?i.setFromAxisAngle(new U(0,1,0),Math.PI/-2):i.setFromAxisAngle(new U(0,1,0),Math.PI/2),n.multiply(i)),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||((e=new V).setFromAxisAngle(new U(1,0,0),-Math.PI/2),e),t=this._deviceOrientationQ,(r=new V).copy(t),r.multiply(this.deviceOrientationFilterToWorldQ),r.multiply(this.resetQ),r.multiply(this.worldToScreenQ),r.multiplyQuaternions(this.deviceOrientationFixQ,r),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_;var e,n,i,r,o=this.filter.getOrientation();return t=this.posePredictor.getPrediction(o,this.gyroscope,this.previousTimestampS),(r=new V).copy(this.filterToWorldQ),r.multiply(this.resetQ),r.multiply(t),r.multiply(this.worldToScreenQ),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_},et.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),m()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)},et.prototype.onDeviceOrientation_=function(t){this._deviceOrientationQ=this._deviceOrientationQ||new V;var e=t.alpha,n=t.beta,i=t.gamma;e=(e||0)*Math.PI/180,n=(n||0)*Math.PI/180,i=(i||0)*Math.PI/180,this._deviceOrientationQ.setFromEulerYXZ(n,e,-i)},et.prototype.onDeviceMotion_=function(t){this.updateDeviceMotion_(t)},et.prototype.updateDeviceMotion_=function(t){var e=t.accelerationIncludingGravity,n=t.rotationRate,i=t.timeStamp/1e3,r=i-this.previousTimestampS;return r<0?(S("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"),void(this.previousTimestampS=i)):r<=.001||r>1?(S("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=i)):(this.accelerometer.set(-e.x,-e.y,-e.z),n&&(f()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,i)),this.filter.addAccelMeasurement(this.accelerometer,i),void(this.previousTimestampS=i))},et.prototype.onOrientationChange_=function(t){this.setScreenTransform_()},et.prototype.onMessage_=function(t){var e=t.data;e&&e.type&&"devicemotion"===e.type.toLowerCase()&&this.updateDeviceMotion_(e.deviceMotionEvent)},et.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},et.prototype.start=function(){var t,e,n;this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),a()&&(t=window.self!==window.top,e=E(document.referrer),n=E(window.location.href),t&&e!==n)&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},et.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var nt=new U(1,0,0),it=new U(0,0,1),rt=new V;rt.setFromAxisAngle(nt,-Math.PI/2),rt.multiply((new V).setFromAxisAngle(it,Math.PI/2));var ot=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.config=e,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new V,this._outQ=new V,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return r(t,[{key:"init",value:function(){var t=null;try{(t=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"})).addEventListener("error",this._onSensorError)}catch(t){this.errors.push(t),"SecurityError"===t.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===t.name?this.useDeviceMotion():console.error(t)}t&&(this.api="sensor",this.sensor=t,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new et(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var t=this.sensor.quaternion;this._sensorQ.set(t[0],t[1],t[2],t[3]);var e=this._outQ;return e.copy(rt),e.multiply(this._sensorQ),this.config.YAW_ONLY&&(e.x=e.z=0,e.normalize()),this._out[0]=e.x,this._out[1]=e.y,this._out[2]=e.z,this._out[3]=e.w,this._out}},{key:"_onSensorError",value:function(t){this.errors.push(t.error),"NotAllowedError"===t.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===t.error.name?console.error("Sensor could not be read"):console.error(t.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),t}();function st(){this.loadIcon_();var t=document.createElement("div");(o=t.style).position="fixed",o.top=0,o.right=0,o.bottom=0,o.left=0,o.backgroundColor="gray",o.fontFamily="sans-serif",o.zIndex=1e6;var e=document.createElement("img");e.src=this.icon,(o=e.style).marginLeft="25%",o.marginTop="25%",o.width="50%",t.appendChild(e);var n=document.createElement("div");(o=n.style).textAlign="center",o.fontSize="16px",o.lineHeight="24px",o.margin="24px 25%",o.width="50%",n.innerHTML="Place your phone into your Cardboard viewer.",t.appendChild(n);var i=document.createElement("div");(o=i.style).backgroundColor="#CFD8DC",o.position="fixed",o.bottom=0,o.width="100%",o.height="48px",o.padding="14px 24px",o.boxSizing="border-box",o.color="#656A6B",t.appendChild(i);var r=document.createElement("div");r.style.float="left",r.innerHTML="No Cardboard viewer?";var o,s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank",(o=s.style).float="right",o.fontWeight=600,o.textTransform="uppercase",o.borderLeft="1px solid gray",o.paddingLeft="24px",o.textDecoration="none",o.color="#656A6B",i.appendChild(r),i.appendChild(s),this.overlay=t,this.text=n,this.hide()}function at(t){try{this.selectedKey=localStorage.getItem("WEBVR_CARDBOARD_VIEWER")}catch(t){console.error("Failed to load viewer profile: %s",t)}this.selectedKey||(this.selectedKey=t||"CardboardV1"),this.dialog=this.createDialog_(q.Viewers),this.root=null,this.onChangeCallbacks_=[]}st.prototype.show=function(t){t||this.overlay.parentElement?t&&(this.overlay.parentElement&&this.overlay.parentElement!=t&&this.overlay.parentElement.removeChild(this.overlay),t.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var e=this.overlay.querySelector("img").style;m()?(e.width="20%",e.marginLeft="40%",e.marginTop="3%"):(e.width="50%",e.marginLeft="25%",e.marginTop="25%")},st.prototype.hide=function(){this.overlay.style.display="none"},st.prototype.showTemporarily=function(t,e){this.show(e),this.timer=setTimeout(this.hide.bind(this),t)},st.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},st.prototype.update=function(){this.disableShowTemporarily(),!m()&&_()?this.show():this.hide()},st.prototype.loadIcon_=function(){this.icon="data:image/svg+xml,"+encodeURIComponent("")},at.prototype.show=function(t){this.root=t,t.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},at.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},at.prototype.getCurrentViewer=function(){return q.Viewers[this.selectedKey]},at.prototype.getSelectedKey_=function(){var t=this.dialog.querySelector("input[name=field]:checked");return t?t.id:null},at.prototype.onChange=function(t){this.onChangeCallbacks_.push(t)},at.prototype.fireOnChange_=function(t){for(var e=0;e.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return i(t,[{key:"enable",value:function(){o?(this.disable(),this.noSleepTimer=window.setInterval((function(){window.location.href="/",window.setTimeout(window.stop,0)}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){o?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),t}();t.exports=s},function(t,e,n){t.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])}))})))&<.__esModule&&Object.prototype.hasOwnProperty.call(lt,"default")?lt.default:lt,ht=1e3,ut=[0,0,.5,1],dt=[.5,0,.5,1],pt=window.requestAnimationFrame,ft=window.cancelAnimationFrame;function mt(t){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:t.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:t.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:t.canPresent},maxLayers:{writable:!1,enumerable:!0,value:t.maxLayers},hasOrientation:{enumerable:!0,get:function(){return T("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),t.hasOrientation}}})}function gt(t){var e=!("wakelock"in(t=t||{}))||t.wakelock;this.isPolyfilled=!0,this.displayId=ht++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return T("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new mt({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,e&&_()&&(this.wakelock_=new ct)}gt.prototype.getFrameData=function(t){return M(t,this._getPose(),this)},gt.prototype.getPose=function(){return T("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.resetPose=function(){return T("VRDisplay.prototype.resetPose"),this._resetPose()},gt.prototype.getImmediatePose=function(){return T("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.requestAnimationFrame=function(t){return pt(t)},gt.prototype.cancelAnimationFrame=function(t){return ft(t)},gt.prototype.wrapForFullscreen=function(t){if(a())return t;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var e=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",e.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==t)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=t,this.originalParent_=t.parentElement,this.originalParent_||document.body.appendChild(t),!this.fullscreenWrapper_.parentElement){var n=this.fullscreenElement_.parentElement;n.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),n.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var i=this;return function(){if(i.fullscreenElement_){var t=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];i.fullscreenElement_.setAttribute("style",t.join("; ")+";")}}(),this.fullscreenWrapper_},gt.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var t=this.fullscreenElement_;this.fullscreenElementCachedStyle_?t.setAttribute("style",this.fullscreenElementCachedStyle_):t.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var e=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(t),this.originalParent_===e?e.insertBefore(t,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(t),e.removeChild(this.fullscreenWrapper_),t}},gt.prototype.requestPresent=function(t){var e=this.isPresenting,n=this;return t instanceof Array||(T("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),t=[t]),new Promise((function(i,r){if(n.capabilities.canPresent)if(0==t.length||t.length>n.capabilities.maxLayers)r(new Error("Invalid number of layers."));else{var o=t[0];if(o.source){var s=o.leftBounds||ut,c=o.rightBounds||dt;if(e){var h=n.layer_;h.source!==o.source&&(h.source=o.source);for(var u=0;u<4;u++)h.leftBounds[u]=s[u],h.rightBounds[u]=c[u];return n.wrapForFullscreen(n.layer_.source),n.updatePresent_(),void i()}if(n.layer_={predistorted:o.predistorted,source:o.source,leftBounds:s.slice(0),rightBounds:c.slice(0)},n.waitingForPresent_=!1,n.layer_&&n.layer_.source){var d=n.wrapForFullscreen(n.layer_.source);n.addFullscreenListeners_(d,(function(){var t=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;n.isPresenting=d===t,n.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch((function(t){console.error("screen.orientation.lock() failed due to",t.message)})),n.waitingForPresent_=!1,n.beginPresent_(),i()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),n.removeFullscreenWrapper(),n.disableWakeLock(),n.endPresent_(),n.removeFullscreenListeners_()),n.fireVRDisplayPresentChange_()}),(function(){n.waitingForPresent_&&(n.removeFullscreenWrapper(),n.removeFullscreenListeners_(),n.disableWakeLock(),n.waitingForPresent_=!1,n.isPresenting=!1,r(new Error("Unable to present.")))})),function(t){if(l())return!1;if(t.requestFullscreen)t.requestFullscreen();else if(t.webkitRequestFullscreen)t.webkitRequestFullscreen();else if(t.mozRequestFullScreen)t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)return!1;t.msRequestFullscreen()}return!0}(d)?(n.enableWakeLock(),n.waitingForPresent_=!0):(a()||l())&&(n.enableWakeLock(),n.isPresenting=!0,n.beginPresent_(),n.fireVRDisplayPresentChange_(),i())}n.waitingForPresent_||a()||(y(),r(new Error("Unable to present.")))}else i()}else r(new Error("VRDisplay is not capable of presenting."))}))},gt.prototype.exitPresent=function(){var t=this.isPresenting,e=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise((function(n,i){t?(!y()&&a()&&(e.endPresent_(),e.fireVRDisplayPresentChange_()),l()&&(e.removeFullscreenWrapper(),e.removeFullscreenListeners_(),e.endPresent_(),e.fireVRDisplayPresentChange_()),n()):i(new Error("Was not presenting to VRDisplay."))}))},gt.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},gt.prototype.fireVRDisplayPresentChange_=function(){var t=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.fireVRDisplayConnect_=function(){var t=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.addFullscreenListeners_=function(t,e,n){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=t,this.fullscreenChangeHandler_=e,this.fullscreenErrorHandler_=n,e&&(document.fullscreenEnabled?t.addEventListener("fullscreenchange",e,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenchange",e,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",e,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenchange",e,!1)),n&&(document.fullscreenEnabled?t.addEventListener("fullscreenerror",n,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenerror",n,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",n,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenerror",n,!1))},gt.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var t=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var e=this.fullscreenChangeHandler_;t.removeEventListener("fullscreenchange",e,!1),t.removeEventListener("webkitfullscreenchange",e,!1),document.removeEventListener("mozfullscreenchange",e,!1),t.removeEventListener("msfullscreenchange",e,!1)}if(this.fullscreenErrorHandler_){var n=this.fullscreenErrorHandler_;t.removeEventListener("fullscreenerror",n,!1),t.removeEventListener("webkitfullscreenerror",n,!1),document.removeEventListener("mozfullscreenerror",n,!1),t.removeEventListener("msfullscreenerror",n,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},gt.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},gt.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},gt.prototype.beginPresent_=function(){},gt.prototype.endPresent_=function(){},gt.prototype.submitFrame=function(t){},gt.prototype.getEyeParameters=function(t){return null};var vt={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},yt="left",At="right";function xt(t){var e=b({},vt);t=b(e,t||{}),gt.call(this,{wakelock:t.MOBILE_WAKE_LOCK}),this.config=t,this.displayName="Cardboard VRDisplay",this.capabilities=new mt({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new ot(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Z(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new q(this.dpdb_.getDeviceParams(),t.ADDITIONAL_VIEWERS),this.viewerSelector_=new at(t.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new st),a()&&window.addEventListener("resize",this.onResize_.bind(this))}return xt.prototype=Object.create(gt.prototype),xt.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},xt.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},xt.prototype._getFieldOfView=function(t){var e;if(t==yt)e=this.deviceInfo_.getFieldOfViewLeftEye();else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=this.deviceInfo_.getFieldOfViewRightEye()}return e},xt.prototype._getEyeOffset=function(t){var e;if(t==yt)e=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return e},xt.prototype.getEyeParameters=function(t){var e=this._getEyeOffset(t),n=this._getFieldOfView(t),i={offset:e,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(i,"fieldOfView",{enumerable:!0,get:function(){return T("VRFieldOfView","VRFrameData's projection matrices"),n}}),i},xt.prototype.onDeviceParamsUpdated_=function(t){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},xt.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},xt.prototype.beginPresent_=function(){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2")),t&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(t.canvas.width=g()*this.bufferScale_,t.canvas.height=v()*this.bufferScale_,this.cardboardUI_=new N(t)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new N(t)),this.distorter_=new P(t,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(t){this.viewerSelector_.show(this.layer_.source.parentElement),t.stopPropagation(),t.preventDefault()}.bind(this),function(t){this.exitPresent(),t.stopPropagation(),t.preventDefault()}.bind(this)),this.rotateInstructions_&&(m()&&_()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},xt.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},xt.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},xt.prototype.submitFrame=function(t){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2"));var n=e.canvas;n.width==this.lastWidth&&n.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=n.width,this.lastHeight=n.height,this.cardboardUI_.render()}},xt.prototype.onOrientationChange_=function(t){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},xt.prototype.onResize_=function(t){if(this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e.canvas.setAttribute("style",["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"].join("; ")+";"),w(e.canvas)}},xt.prototype.onViewerChanged_=function(t){this.deviceInfo_.setViewer(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},xt.prototype.fireVRDisplayDeviceParamsChange_=function(){var t=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(t)},xt.VRFrameData=function(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null},xt.VRDisplay=gt,xt}()})))&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,a={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};function l(t){this.config=o(o({},a),t),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&n())&&(this.enable(),this.getVRDisplays().then((function(t){t&&t[0]&&t[0].fireVRDisplayConnect_&&t[0].fireVRDisplayConnect_()})))}l.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(n()){var t=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(t)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},l.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var t=this.native.VRFrameData,e=new this.native.VRFrameData,n=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(i){i instanceof t?n.call(this,i):(n.call(this,e),i.pose=e.pose,r(e.leftProjectionMatrix,i.leftProjectionMatrix),r(e.rightProjectionMatrix,i.rightProjectionMatrix),r(e.leftViewMatrix,i.leftViewMatrix),r(e.rightViewMatrix,i.rightViewMatrix))}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},l.prototype.getVRDisplays=function(){var t=this;return this.config,this.hasNative?this.native.getVRDisplays.call(navigator).then((function(e){return e.length>0?e:t.getPolyfillDisplays()})):Promise.resolve(this.getPolyfillDisplays())},l.version="0.10.12",l.VRFrameData=s.VRFrameData,l.VRDisplay=s.VRDisplay;var c=Object.freeze({default:l}),h=c&&l||c;return void 0!==e&&e.window&&(e.document||(e.document=e.window.document),e.navigator||(e.navigator=e.window.navigator)),h}()})));const h=0,u=1,d=2;function p(){}Object.assign(p.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)},removeEventListener:function(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}},dispatchEvent:function(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+f[t>>16&255]+f[t>>24&255]+"-"+f[255&e]+f[e>>8&255]+"-"+f[e>>16&15|64]+f[e>>24&255]+"-"+f[63&n|128]+f[n>>8&255]+"-"+f[n>>16&255]+f[n>>24&255]+f[255&i]+f[i>>8&255]+f[i>>16&255]+f[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},damp:function(t,e,n,i){return g.lerp(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(g.euclideanModulo(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(m=t%2147483647),m=16807*m%2147483647,(m-1)/2147483646},degToRad:function(t){return t*g.DEG2RAD},radToDeg:function(t){return t*g.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,s=Math.sin,a=o(n/2),l=s(n/2),c=o((e+i)/2),h=s((e+i)/2),u=o((e-i)/2),d=s((e-i)/2),p=o((i-e)/2),f=s((i-e)/2);switch(r){case"XYX":t.set(a*h,l*u,l*d,a*c);break;case"YZY":t.set(l*d,a*h,l*u,a*c);break;case"ZXZ":t.set(l*u,l*d,a*h,a*c);break;case"XZX":t.set(a*h,l*f,l*p,a*c);break;case"YXY":t.set(l*p,a*h,l*f,a*c);break;case"ZYZ":t.set(l*f,l*p,a*h,a*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class v{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class y{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=o,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],A=i[7],x=i[2],_=i[5],b=i[8];return r[0]=o*f+s*v+a*x,r[3]=o*m+s*y+a*_,r[6]=o*g+s*A+a*b,r[1]=l*f+c*v+h*x,r[4]=l*m+c*y+h*_,r[7]=l*g+c*A+h*b,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*A+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8];return e*o*c-e*s*l-n*r*c+n*s*a+i*r*l-i*o*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=c*o-s*l,u=s*a-c*r,d=l*r-o*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*o)*f,t[3]=u*f,t[4]=(c*e-i*a)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*a-l*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,s){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*o+l*s)+o+t,-i*l,i*a,-i*(-l*o+a*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],s=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*o+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*a,i[4]=-n*o+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let A;const x={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===A&&(A=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),A.width=t.width,A.height=t.height;const n=A.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=A}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let _=0;function b(t=b.DEFAULT_IMAGE,e=b.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,s=1023,a=1009,l=1,c=3e3){Object.defineProperty(this,"id",{value:_++}),this.uuid=g.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=a,this.offset=new v(0,0),this.repeat=new v(1,1),this.center=new v(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new y,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}function w(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?x.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}b.DEFAULT_IMAGE=void 0,b.DEFAULT_MAPPING=300,b.prototype=Object.assign(Object.create(p.prototype),{constructor:b,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=g.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(b.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class M{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=t.elements,s=o[0],a=o[4],l=o[8],c=o[1],h=o[5],u=o[9],d=o[2],p=o[6],f=o[10];if(Math.abs(a-c)<.01&&Math.abs(l-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(a+c)<.1&&Math.abs(l+d)<.1&&Math.abs(u+p)<.1&&Math.abs(s+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(s+1)/2,o=(h+1)/2,m=(f+1)/2,g=(a+c)/4,v=(l+d)/4,y=(u+p)/4;return t>o&&t>m?t<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):o>m?o<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=g/i,r=y/i):m<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(c-a)*(c-a));return Math.abs(m)<.001&&(m=1),this.x=(p-u)/m,this.y=(l-d)/m,this.z=(c-a)/m,this.w=Math.acos((s+h+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}class E extends p{constructor(t,e,n){super(),Object.defineProperty(this,"isWebGLRenderTarget",{value:!0}),this.width=t,this.height=e,this.scissor=new M(0,0,t,e),this.scissorTest=!1,this.viewport=new M(0,0,t,e),n=n||{},this.texture=new b(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:1006,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setSize(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.texture.image.width=t,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}}class S{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isQuaternion",{value:!0}),this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return n.copy(t).slerp(e,i)}static slerpFlat(t,e,n,i,r,o,s){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[o+0],d=r[o+1],p=r[o+2],f=r[o+3];if(h!==f||a!==u||l!==d||c!==p){let t=1-s;const e=a*u+l*d+c*p+h*f,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,s=Math.sin(s*o)/r}const r=s*n;if(a=a*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const s=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=s*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-a*h,t[e+3]=c*p-s*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,s=Math.cos,a=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=a(n/2),d=a(i/2),p=a(r/2);switch(o){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],s=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(o-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(o-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(g.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,s=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+o*s+i*l-r*a,this._y=i*c+o*a+r*s-n*l,this._z=r*c+o*l+n*a-i*s,this._w=o*c-n*s-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let s=o*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const a=1-s*s;if(a<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class T{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(R.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(R.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,s=t.z,a=t.w,l=a*e+o*i-s*n,c=a*n+s*e-r*i,h=a*i+r*n-o*e,u=-r*e-o*n-s*i;return this.x=l*a+u*-r+c*-s-h*-o,this.y=c*a+u*-o+h*-r-l*-s,this.z=h*a+u*-s+l*-o-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return L.copy(this).projectOnVector(t),this.sub(L)}reflect(t){return this.sub(L.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(g.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const L=new T,R=new S;class C{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new T(1/0,1/0,1/0),this.max=void 0!==e?e:new T(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.length;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.count;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new T),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,I),I.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(G),V.subVectors(this.max,G),N.subVectors(t.a,G),B.subVectors(t.b,G),F.subVectors(t.c,G),z.subVectors(B,N),U.subVectors(F,B),H.subVectors(N,F);let e=[0,-z.z,z.y,0,-U.z,U.y,0,-H.z,H.y,z.z,0,-z.x,U.z,0,-U.x,H.z,0,-H.x,-z.y,z.x,0,-U.y,U.x,0,-H.y,H.x,0];return!!P(e,N,B,F,V)&&(e=[1,0,0,0,1,0,0,0,1],!!P(e,N,B,F,V)&&(k.crossVectors(z,U),e=[k.x,k.y,k.z],P(e,N,B,F,V)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new T),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return I.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(I).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(D[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),D[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),D[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),D[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),D[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),D[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),D[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),D[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(D)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function P(t,e,n,i,r){for(let o=0,s=t.length-3;o<=s;o+=3){W.fromArray(t,o);const s=r.x*Math.abs(W.x)+r.y*Math.abs(W.y)+r.z*Math.abs(W.z),a=e.dot(W),l=n.dot(W),c=i.dot(W);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>s)return!1}return!0}const D=[new T,new T,new T,new T,new T,new T,new T,new T],I=new T,O=new C,N=new T,B=new T,F=new T,z=new T,U=new T,H=new T,G=new T,V=new T,k=new T,W=new T,j=new C;class X{constructor(t,e){this.center=void 0!==t?t:new T,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):j.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new C),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const q=new T,Y=new T,Q=new T,Z=new T,J=new T,K=new T,$=new T;class tt{constructor(t,e){this.origin=void 0!==t?t:new T,this.direction=void 0!==e?e:new T(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new T),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,q)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new T),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=q.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(q.copy(this.direction).multiplyScalar(e).add(this.origin),q.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Y.copy(t).add(e).multiplyScalar(.5),Q.copy(e).sub(t).normalize(),Z.copy(this.origin).sub(Y);const r=.5*t.distanceTo(e),o=-this.direction.dot(Q),s=Z.dot(this.direction),a=-Z.dot(Q),l=Z.lengthSq(),c=Math.abs(1-o*o);let h,u,d,p;if(c>0)if(h=o*a-s,u=o*s-a,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+o*u+2*s)+u*(o*h+u+2*a)+l}else u=r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u=-r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u<=-p?(h=Math.max(0,-(-o*r+s)),u=h>0?-r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-a),r),d=u*(u+2*a)+l):(h=Math.max(0,-(o*r+s)),u=h>0?r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l);else u=o>0?-r:r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Q).multiplyScalar(u).add(Y),d}intersectSphere(t,e){q.subVectors(t.center,this.origin);const n=q.dot(this.direction),i=q.dot(q)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),s=n-o,a=n+o;return s<0&&a<0?null:s<0?this.at(a,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,s,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,o=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,o=(t.min.y-u.y)*c),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(s=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||s>i?null:((s>n||n!=n)&&(n=s),(a=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,q)}intersectTriangle(t,e,n,i,r){J.subVectors(e,t),K.subVectors(n,t),$.crossVectors(J,K);let o,s=this.direction.dot($);if(s>0){if(i)return null;o=1}else{if(!(s<0))return null;o=-1,s=-s}Z.subVectors(this.origin,t);const a=o*this.direction.dot(K.crossVectors(Z,K));if(a<0)return null;const l=o*this.direction.dot(J.cross(Z));if(l<0)return null;if(a+l>s)return null;const c=-o*Z.dot($);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class et{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=s,g[13]=a,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new et).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/nt.setFromMatrixColumn(t,0).length(),r=1/nt.setFromMatrixColumn(t,1).length(),o=1/nt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),s=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=o*a}else if("YXZ"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=o*l,e[1]=o*h,e[5]=o*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=o*a}else if("ZXY"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-o*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=o*c,e[9]=r-t*s,e[2]=-o*l,e[6]=s,e[10]=o*a}else if("ZYX"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*a,e[10]=o*a}else if("YZX"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=o*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rt,t,ot)}lookAt(t,e,n){const i=this.elements;return lt.subVectors(t,e),0===lt.lengthSq()&&(lt.z=1),lt.normalize(),st.crossVectors(n,lt),0===st.lengthSq()&&(1===Math.abs(n.z)?lt.x+=1e-4:lt.z+=1e-4,lt.normalize(),st.crossVectors(n,lt)),st.normalize(),at.crossVectors(lt,st),i[0]=st.x,i[4]=at.x,i[8]=lt.x,i[1]=st.y,i[5]=at.y,i[9]=lt.y,i[2]=st.z,i[6]=at.z,i[10]=lt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],A=n[11],x=n[15],_=i[0],b=i[4],w=i[8],M=i[12],E=i[1],S=i[5],T=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],O=i[7],N=i[11],B=i[15];return r[0]=o*_+s*E+a*R+l*I,r[4]=o*b+s*S+a*C+l*O,r[8]=o*w+s*T+a*P+l*N,r[12]=o*M+s*L+a*D+l*B,r[1]=c*_+h*E+u*R+d*I,r[5]=c*b+h*S+u*C+d*O,r[9]=c*w+h*T+u*P+d*N,r[13]=c*M+h*L+u*D+d*B,r[2]=p*_+f*E+m*R+g*I,r[6]=p*b+f*S+m*C+g*O,r[10]=p*w+f*T+m*P+g*N,r[14]=p*M+f*L+m*D+g*B,r[3]=v*_+y*E+A*R+x*I,r[7]=v*b+y*S+A*C+x*O,r[11]=v*w+y*T+A*P+x*N,r[15]=v*M+y*L+A*D+x*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],s=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*a*h-i*l*h-r*s*u+n*l*u+i*s*d-n*a*d)+t[7]*(+e*a*d-e*l*u+r*o*u-i*o*d+i*l*c-r*a*c)+t[11]*(+e*l*h-e*s*d-r*o*h+n*o*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*a*h+e*s*u+i*o*h-n*o*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*a*d-s*m*d-h*a*g+s*u*g,y=p*u*l-c*m*l-p*a*d+o*m*d+c*a*g-o*u*g,A=c*f*l-p*h*l+p*s*d-o*f*d-c*s*g+o*h*g,x=p*h*a-c*f*a-p*s*u+o*f*u+c*s*m-o*h*m,_=e*v+n*y+i*A+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/_;return t[0]=v*b,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*b,t[2]=(s*m*r-f*a*r+f*i*l-n*m*l-s*i*g+n*a*g)*b,t[3]=(h*a*r-s*u*r-h*i*l+n*u*l+s*i*d-n*a*d)*b,t[4]=y*b,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*b,t[6]=(p*a*r-o*m*r-p*i*l+e*m*l+o*i*g-e*a*g)*b,t[7]=(o*u*r-c*a*r+c*i*l-e*u*l-o*i*d+e*a*d)*b,t[8]=A*b,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*b,t[10]=(o*f*r-p*s*r+p*n*l-e*f*l-o*n*g+e*s*g)*b,t[11]=(c*s*r-o*h*r-c*n*l+e*h*l+o*n*d-e*s*d)*b,t[12]=x*b,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*b,t[14]=(p*s*i-o*f*i-p*n*a+e*f*a+o*n*m-e*s*m)*b,t[15]=(o*h*i-c*s*i+c*n*a-e*h*a-o*n*u+e*s*u)*b,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,s=t.y,a=t.z,l=r*o,c=r*s;return this.set(l*o+n,l*s-i*a,l*a+i*s,0,l*s+i*a,c*s+n,c*a-i*o,0,l*a-i*s,c*a+i*o,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,s=e._z,a=e._w,l=r+r,c=o+o,h=s+s,u=r*l,d=r*c,p=r*h,f=o*c,m=o*h,g=s*h,v=a*l,y=a*c,A=a*h,x=n.x,_=n.y,b=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+A)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-A)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*b,i[9]=(m-v)*b,i[10]=(1-(u+f))*b,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=nt.set(i[0],i[1],i[2]).length();const o=nt.set(i[4],i[5],i[6]).length(),s=nt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],it.copy(this);const a=1/r,l=1/o,c=1/s;return it.elements[0]*=a,it.elements[1]*=a,it.elements[2]*=a,it.elements[4]*=l,it.elements[5]*=l,it.elements[6]*=l,it.elements[8]*=c,it.elements[9]*=c,it.elements[10]*=c,e.setFromRotationMatrix(it),n.x=r,n.y=o,n.z=s,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return s[0]=a,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,o){const s=this.elements,a=1/(e-t),l=1/(n-i),c=1/(o-r),h=(e+t)*a,u=(n+i)*l,d=(o+r)*c;return s[0]=2*a,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const nt=new T,it=new et,rt=new T(0,0,0),ot=new T(1,1,1),st=new T,at=new T,lt=new T;class ct{constructor(t=0,e=0,n=0,i=ct.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=g.clamp,r=t.elements,o=r[0],s=r[4],a=r[8],l=r[1],c=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-s,o)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(l,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,o)):(this._x=0,this._z=Math.atan2(-s,c));break;case"YZX":this._z=Math.asin(i(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(a,p));break;case"XZY":this._z=Math.asin(-i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return ht.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ht,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return ut.setFromEuler(this),this.setFromQuaternion(ut,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new T(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ct.DefaultOrder="XYZ",ct.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const ht=new et,ut=new S;class dt{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new T),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Rt.getNormalMatrix(t),i=this.coplanarPoint(Tt).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const Pt=new T,Dt=new T,It=new T,Ot=new T,Nt=new T,Bt=new T,Ft=new T,zt=new T,Ut=new T,Ht=new T;class Gt{constructor(t,e,n){this.a=void 0!==t?t:new T,this.b=void 0!==e?e:new T,this.c=void 0!==n?n:new T}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new T),i.subVectors(n,e),Pt.subVectors(t,e),i.cross(Pt);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Pt.subVectors(i,e),Dt.subVectors(n,e),It.subVectors(t,e);const o=Pt.dot(Pt),s=Pt.dot(Dt),a=Pt.dot(It),l=Dt.dot(Dt),c=Dt.dot(It),h=o*l-s*s;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new T),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*a-s*c)*u,p=(o*c-s*a)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Ot),Ot.x>=0&&Ot.y>=0&&Ot.x+Ot.y<=1}static getUV(t,e,n,i,r,o,s,a){return this.getBarycoord(t,e,n,i,Ot),a.set(0,0),a.addScaledVector(r,Ot.x),a.addScaledVector(o,Ot.y),a.addScaledVector(s,Ot.z),a}static isFrontFacing(t,e,n,i){return Pt.subVectors(n,e),Dt.subVectors(t,e),Pt.cross(Dt).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Pt.subVectors(this.c,this.b),Dt.subVectors(this.a,this.b),.5*Pt.cross(Dt).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new T),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Gt.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ct),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Gt.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Gt.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Gt.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Gt.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new T);const n=this.a,i=this.b,r=this.c;let o,s;Nt.subVectors(i,n),Bt.subVectors(r,n),zt.subVectors(t,n);const a=Nt.dot(zt),l=Bt.dot(zt);if(a<=0&&l<=0)return e.copy(n);Ut.subVectors(t,i);const c=Nt.dot(Ut),h=Bt.dot(Ut);if(c>=0&&h<=c)return e.copy(i);const u=a*h-c*l;if(u<=0&&a>=0&&c<=0)return o=a/(a-c),e.copy(n).addScaledVector(Nt,o);Ht.subVectors(t,r);const d=Nt.dot(Ht),p=Bt.dot(Ht);if(p>=0&&d<=p)return e.copy(r);const f=d*l-a*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(Bt,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return Ft.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Ft,s);const g=1/(m+f+u);return o=f*g,s=u*g,e.copy(n).addScaledVector(Nt,o).addScaledVector(Bt,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Vt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kt={h:0,s:0,l:0},Wt={h:0,s:0,l:0};function jt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Xt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function qt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Yt{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=g.euclideanModulo(t,1),e=g.clamp(e,0,1),n=g.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=jt(r,i,t+1/3),this.g=jt(r,i,t),this.b=jt(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Vt[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Xt(t.r),this.g=Xt(t.g),this.b=Xt(t.b),this}copyLinearToSRGB(t){return this.r=qt(t.r),this.g=qt(t.g),this.b=qt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let s,a;const l=(o+r)/2;if(o===r)s=0,a=0;else{const t=r-o;switch(a=l<=.5?t/(r+o):t/(2-r-o),r){case e:s=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Jt.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Kt.prototype=Object.create(Jt.prototype),Kt.prototype.constructor=Kt,Kt.prototype.isMeshBasicMaterial=!0,Kt.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const $t=new T,te=new v;function ee(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}function ne(t,e,n){ee.call(this,new Int8Array(t),e,n)}function ie(t,e,n){ee.call(this,new Uint8Array(t),e,n)}function re(t,e,n){ee.call(this,new Uint8ClampedArray(t),e,n)}function oe(t,e,n){ee.call(this,new Int16Array(t),e,n)}function se(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function ae(t,e,n){ee.call(this,new Int32Array(t),e,n)}function le(t,e,n){ee.call(this,new Uint32Array(t),e,n)}function ce(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function he(t,e,n){ee.call(this,new Float32Array(t),e,n)}function ue(t,e,n){ee.call(this,new Float64Array(t),e,n)}function de(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}Object.defineProperty(ee.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(ee.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i65535?le:se)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new y).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return ge.makeRotationX(t),this.applyMatrix4(ge),this},rotateY:function(t){return ge.makeRotationY(t),this.applyMatrix4(ge),this},rotateZ:function(t){return ge.makeRotationZ(t),this.applyMatrix4(ge),this},translate:function(t,e,n){return ge.makeTranslation(t,e,n),this.applyMatrix4(ge),this},scale:function(t,e,n){return ge.makeScale(t,e,n),this.applyMatrix4(ge),this},lookAt:function(t){return ve.lookAt(t),ve.updateMatrix(),this.applyMatrix4(ve.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ye).negate(),this.translate(ye.x,ye.y,ye.z),this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t},clone:function(){return(new be).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:c,point:Ue.clone(),object:t}}(t,e,n,i,Se,Te,Le,ze);if(p){a&&(Ne.fromBufferAttribute(a,c),Be.fromBufferAttribute(a,h),Fe.fromBufferAttribute(a,u),p.uv=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v)),l&&(Ne.fromBufferAttribute(l,c),Be.fromBufferAttribute(l,h),Fe.fromBufferAttribute(l,u),p.uv2=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v));const t=new Qt(c,h,u);Gt.getNormal(Se,Te,Le,t.normal),p.face=t}return p}He.prototype=Object.assign(Object.create(St.prototype),{constructor:He,isMesh:!0,copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ee.copy(n.boundingSphere),Ee.applyMatrix4(r),!1===t.ray.intersectsSphere(Ee))return;if(we.copy(r).invert(),Me.copy(t.ray).applyMatrix4(we),null!==n.boundingBox&&!1===Me.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0?1:-1,c.push(L.x,L.y,L.z),h.push(a/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},qe.prototype=Object.assign(Object.create(St.prototype),{constructor:qe,isCamera:!0,copy:function(t,e){return St.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new T),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){St.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Ye.prototype=Object.assign(Object.create(qe.prototype),{constructor:Ye,isPerspectiveCamera:!0,copy:function(t,e){return qe.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*g.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*g.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*g.RAD2DEG*Math.atan(Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,s=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/s,i*=o.width/t,n*=o.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=St.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});function Qe(t,e,n){if(St.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Ye(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new T(1,0,0)),this.add(i);const r=new Ye(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new T(-1,0,0)),this.add(r);const o=new Ye(90,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new T(0,1,0)),this.add(o);const s=new Ye(90,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new T(0,-1,0)),this.add(s);const a=new Ye(90,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new T(0,0,1)),this.add(a);const l=new Ye(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new T(0,0,-1)),this.add(l),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}function Ze(t,e,n,i,r,o,s,a,l,c){t=void 0!==t?t:[],e=void 0!==e?e:301,s=void 0!==s?s:1022,b.call(this,t,e,n,i,r,o,s,a,l,c),this.flipY=!1,this._needsFlipEnvMap=!0}Qe.prototype=Object.create(St.prototype),Qe.prototype.constructor=Qe,Ze.prototype=Object.create(b.prototype),Ze.prototype.constructor=Ze,Ze.prototype.isCubeTexture=!0,Object.defineProperty(Ze.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});class Je extends E{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),Object.defineProperty(this,"isWebGLCubeRenderTarget",{value:!0}),e=e||{},this.texture=new Ze(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=1023,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new Ve(5,5,5),r=new Xe({name:"CubemapFromEquirect",uniforms:ke(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new He(i,r),s=e.minFilter;1008===e.minFilter&&(e.minFilter=1006);return new Qe(1,10,this).update(t,o),e.minFilter=s,o.geometry.dispose(),o.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}function Ke(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Ke.prototype=Object.create(b.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isDataTexture=!0;const $e=new X,tn=new T;class en{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new Ct,void 0!==e?e:new Ct,void 0!==n?n:new Ct,void 0!==i?i:new Ct,void 0!==r?r:new Ct,void 0!==o?o:new Ct]}set(t,e,n,i,r,o){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],s=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-a,f-u,y-m).normalize(),e[1].setComponents(s+i,h+a,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-o,h-c,f-p,y-v).normalize(),e[5].setComponents(s+o,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),$e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSprite(t){return $e.center.set(0,0,0),$e.radius=.7071067811865476,$e.applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,tn.y=i.normal.y>0?t.max.y:t.min.y,tn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(tn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function rn(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},an={common:{diffuse:{value:new Yt(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new y},uv2Transform:{value:new y},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Yt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Yt(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}},sprite:{diffuse:{value:new Yt(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}}},ln={basic:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.fog]),vertexShader:sn.meshbasic_vert,fragmentShader:sn.meshbasic_frag},lambert:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshlambert_vert,fragmentShader:sn.meshlambert_frag},phong:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.fog,an.lights,{emissive:{value:new Yt(0)},specular:{value:new Yt(1118481)},shininess:{value:30}}]),vertexShader:sn.meshphong_vert,fragmentShader:sn.meshphong_frag},standard:{uniforms:We([an.common,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.roughnessmap,an.metalnessmap,an.fog,an.lights,{emissive:{value:new Yt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sn.meshphysical_vert,fragmentShader:sn.meshphysical_frag},toon:{uniforms:We([an.common,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.gradientmap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshtoon_vert,fragmentShader:sn.meshtoon_frag},matcap:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,an.fog,{matcap:{value:null}}]),vertexShader:sn.meshmatcap_vert,fragmentShader:sn.meshmatcap_frag},points:{uniforms:We([an.points,an.fog]),vertexShader:sn.points_vert,fragmentShader:sn.points_frag},dashed:{uniforms:We([an.common,an.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sn.linedashed_vert,fragmentShader:sn.linedashed_frag},depth:{uniforms:We([an.common,an.displacementmap]),vertexShader:sn.depth_vert,fragmentShader:sn.depth_frag},normal:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,{opacity:{value:1}}]),vertexShader:sn.normal_vert,fragmentShader:sn.normal_frag},sprite:{uniforms:We([an.sprite,an.fog]),vertexShader:sn.sprite_vert,fragmentShader:sn.sprite_frag},background:{uniforms:{uvTransform:{value:new y},t2D:{value:null}},vertexShader:sn.background_vert,fragmentShader:sn.background_frag},cube:{uniforms:We([an.envmap,{opacity:{value:1}}]),vertexShader:sn.cube_vert,fragmentShader:sn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sn.equirect_vert,fragmentShader:sn.equirect_frag},distanceRGBA:{uniforms:We([an.common,an.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sn.distanceRGBA_vert,fragmentShader:sn.distanceRGBA_frag},shadow:{uniforms:We([an.lights,an.fog,{color:{value:new Yt(0)},opacity:{value:1}}]),vertexShader:sn.shadow_vert,fragmentShader:sn.shadow_frag}};function cn(t,e,n,i,r){const o=new Yt(0);let s,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),l=e,d(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(o,l)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,l):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===a&&(a=new He(new Ve(1,1,1),new Xe({name:"BackgroundCubeMaterial",uniforms:ke(ln.cube.uniforms),vertexShader:ln.cube.vertexShader,fragmentShader:ln.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),a.geometry.deleteAttribute("uv"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),m.isWebGLCubeRenderTarget&&(m=m.texture),a.material.uniforms.envMap.value=m,a.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,c===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):m&&m.isTexture&&(void 0===s&&(s=new He(new on(2,2),new Xe({name:"BackgroundMaterial",uniforms:ke(ln.background.uniforms),vertexShader:ln.background.vertexShader,fragmentShader:ln.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),s.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function hn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==o,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=l[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,s=n.get(o);if(void 0===s)continue;const l=s.buffer,c=s.type,h=s.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,s=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,s*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,s,!1,64,0),t.vertexAttribPointer(i+1,4,s,!1,64,16),t.vertexAttribPointer(i+2,4,s,!1,64,32),t.vertexAttribPointer(i+3,4,s,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,s,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==A&&t.bindBuffer(34963,n.get(A).buffer))},reset:y,resetDefaultState:A,dispose:function(){y();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,s,a){if(0===a)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](o,i,s,a),n.update(s,o,a)}}function dn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const a=r(s);a!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",a,"instead."),s=a);const l=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function pn(t){const e=this;let n=null,i=0,r=!1,o=!1;const s=new Ct,a=new y,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let c=null;if(0!==o){if(c=l.value,!0!==r||null===c){const e=i+4*o,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderList(),a=t.getRenderTarget(),l=new Je(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(a),t.setRenderList(s),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function mn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function gn(t,e,n,i){const r={},o=new WeakMap;function s(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener("dispose",s),delete r[a.id];const l=o.get(a);l&&(e.remove(l),o.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let s=0;if(null!==i){const t=i.array;s=i.version;for(let e=0,i=t.length;e65535?le:se)(n,1);a.version=s;const l=o.get(t);l&&e.remove(l),o.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=Rn[r];if(void 0===o&&(o=new Float32Array(r),Rn[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function Nn(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function Pi(t){return t.replace(Ci,Di)}function Di(t,e){const n=sn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Pi(n)}const Ii=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ni(t){return t.replace(Oi,Fi).replace(Ii,Bi)}function Bi(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Fi(t,e,n,i)}function Fi(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Ti).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(Ti).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(Ti).join("\n"),v.length>0&&(v+="\n")):(g=[zi(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Ti).join("\n"),v=[p,zi(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?sn.tonemapping_pars_fragment:"",0!==n.toneMapping?Si("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",sn.encodings_pars_fragment,n.map?Mi("mapTexelToLinear",n.mapEncoding):"",n.matcap?Mi("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Mi("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Mi("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Mi("lightMapTexelToLinear",n.lightMapEncoding):"",Ei("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Ti).join("\n")),s=Pi(s),s=Li(s,n),s=Ri(s,n),a=Pi(a),a=Li(a,n),a=Ri(a,n),s=Ni(s),a=Ni(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in","300 es"===n.glslVersion?"":"out highp vec4 pc_fragColor;","300 es"===n.glslVersion?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const A=y+v+a,x=xi(r,35633,y+g+s),_=xi(r,35632,A);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=wi(r,x,"vertex"),n=wi(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let b,w;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===b&&(b=new Ai(r,m)),b},this.getAttributes=function(){return void 0===w&&(w=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:b,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:a||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:a||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:a||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||Vi),r.length>1&&r.sort(e||ki)}}}function ji(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new Wi(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new Wi(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function Xi(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new T,color:new Yt};break;case"SpotLight":n={position:new T,direction:new T,color:new Yt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new T,color:new Yt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new T,skyColor:new Yt,groundColor:new Yt};break;case"RectAreaLight":n={color:new Yt,position:new T,halfWidth:new T,halfHeight:new T}}return t[e.id]=n,n}}}let qi=0;function Yi(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Qi(t,e){const n=new Xi,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new T);const o=new T,s=new et,a=new et;return{setup:function(o){let s=0,a=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,f=0,m=0,g=0;o.sort(Yi);for(let t=0,e=o.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=an.LTC_FLOAT_1,r.rectAreaLTC2=an.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=an.LTC_HALF_1,r.rectAreaLTC2=an.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=s,r.ambient[1]=a,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===f&&v.numPointShadows===m&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=qi++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(o=new Zi(t,e),n.get(i).push(o)):o=n.get(i)[r],o},dispose:function(){n=new WeakMap}}}function Ki(t){Jt.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function $i(t){Jt.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new T,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Ki.prototype=Object.create(Jt.prototype),Ki.prototype.constructor=Ki,Ki.prototype.isMeshDepthMaterial=!0,Ki.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},$i.prototype=Object.create(Jt.prototype),$i.prototype.constructor=$i,$i.prototype.isMeshDistanceMaterial=!0,$i.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function tr(t,e,n){let i=new en;const r=new v,o=new v,s=new M,a=[],l=[],c={},h={0:1,1:0,2:2},u=new Xe({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new v},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new be;p.setAttribute("position",new ee(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const f=new He(p,u),m=this;function g(n,i){const r=e.update(f);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,f,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,f,null)}function y(t,e,n){const i=t<<0|e<<1|n<<2;let r=a[i];return void 0===r&&(r=new Ki({depthPacking:3201,morphTargets:t,skinning:e}),a[i]=r),r}function A(t,e,n){const i=t<<0|e<<1|n<<2;let r=l[i];return void 0===r&&(r=new $i({morphTargets:t,skinning:e}),l[i]=r),r}function x(e,n,i,r,o,s,a){let l=null,u=y,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=A,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));l=u(t,r,!0===e.isInstancedMesh)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===a?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=o,l.farDistance=s),l}function _(n,r,o,s,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;ln||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:1006,magFilter:1006,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new E(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:1003,magFilter:1003,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==T.indexOf("OpenGL ES")&&(S=parseFloat(/^OpenGL ES (\d)/.exec(T)[1]),E=S>=2);let L=null,R={};const C=new M,P=new M;function D(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?g.floorPowerOfTwo:Math.floor,o=i(r*t.width),s=i(r*t.height);void 0===p&&(p=m(o,s));const a=n?m(o,s):p;a.width=o,a.height=s;return a.getContext("2d").drawImage(t,0,0,o,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+s+")."),a}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return g.isPowerOfTwo(t.width)&&g.isPowerOfTwo(t.height)}function A(t,e){return t.generateMipmaps&&e&&1003!==t.minFilter&&1006!==t.minFilter}function x(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function _(n,i,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function b(t){return 1003===t||1004===t||1005===t?9728:9729}function w(e){const n=e.target;n.removeEventListener("dispose",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),s.memory.textures--}function M(e){const n=e.target;n.removeEventListener("dispose",M),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),s.memory.textures--}let E=0;function S(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=s.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void D(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function T(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;P(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:v(i.image[t],!1,!0,c);const u=h[0],d=y(u)||a,p=o.convert(i.format),f=o.convert(i.type),m=_(i.internalFormat,p,f);let g;if(C(34067,i,d),s){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,l.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function P(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",w),e.__webglTexture=t.createTexture(),s.memory.textures++)}function D(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),P(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const l=function(t){return!a&&(1001!==t.wrapS||1001!==t.wrapT||1003!==t.minFilter&&1006!==t.minFilter)}(i)&&!1===y(i.image),c=v(i.image,l,!1,h),u=y(c)||a,d=o.convert(i.format);let p,f=o.convert(i.type),m=_(i.internalFormat,d,f);C(s,i,u);const g=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===i.format&&6402===m&&1012!==i.type&&1014!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=1012,f=o.convert(i.type)),1027===i.format&&6402===m&&(m=34041,1020!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=1020,f=o.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(g.length>0&&u){for(let t=0,e=g.length;t0&&u){for(let t=0,e=g.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=S,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=T,this.setupRenderTarget=function(e){const r=i.get(e),l=i.get(e.texture);e.addEventListener("dispose",M),l.__webglTexture=t.createTexture(),s.memory.textures++;const c=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=y(e)||a;if(!a||1022!==e.texture.format||1015!==e.texture.type&&1016!==e.texture.type||(e.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),c){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(a){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),s=_(e.texture.internalFormat,n,i),a=B(e);t.renderbufferStorageMultisample(36161,a,s,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),O(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){n.bindTexture(34067,l.__webglTexture),C(34067,e.texture,u);for(let t=0;t<6;t++)I(r.__webglFramebuffer[t],e,36064,34069+t);A(e.texture,u)&&x(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,l.__webglTexture),C(3553,e.texture,u),I(r.__webglFramebuffer,e,36064,3553),A(e.texture,u)&&x(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&N(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(A(e,y(t)||a)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),x(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let s=16384;e.depthBuffer&&(s|=256),e.stencilBuffer&&(s|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,s,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===F&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),F=!0),t=t.texture),S(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===z&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),z=!0),t=t.texture),T(t,e)}}function ir(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(1009===t)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(1012===t)return 5123;if(1013===t)return 5124;if(1014===t)return 5125;if(1015===t)return 5126;if(1016===t)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(1022===t)return 6407;if(1023===t)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(1026===t)return 6402;if(1027===t)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):1020===t?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function rr(t=[]){Ye.call(this),this.cameras=t}function or(){St.call(this),this.type="Group"}function sr(){this._targetRay=null,this._grip=null,this._hand=null}function ar(t,e){const n=this;let i=null,r=1,o=null,s="local-floor",a=null;const l=[],c=new Map,h=new Ye;h.layers.enable(1),h.viewport=new M;const u=new Ye;u.layers.enable(2),u.viewport=new M;const d=[h,u],p=new rr;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=c.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){c.forEach((function(t,e){t.disconnect(e)})),c.clear(),f=null,m=null,t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),w.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){const e=i.inputSources;for(let t=0;t0&&Et(o,t,e),s.length>0&&Et(s,t,e),!0===t.isScene&&t.onAfterRender(f,t,e),null!==_&&(Z.updateRenderTargetMipmap(_),Z.updateMultisampleRenderTarget(_)),q.buffers.depth.setTest(!0),q.buffers.depth.setMask(!0),q.buffers.color.setMask(!0),q.setPolygonOffset(!1),p.pop(),d=p.length>0?p[p.length-1]:null,u=null},this.setFramebuffer=function(t){y!==t&&null===_&&pt.bindFramebuffer(36160,t),y=t},this.getActiveCubeFace=function(){return A},this.getActiveMipmapLevel=function(){return x},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderTarget=function(){return _},this.setRenderTarget=function(t,e=0,n=0){_=t,A=e,x=n,t&&void 0===Q.get(t).__webglFramebuffer&&Z.setupRenderTarget(t);let i=y,r=!1;if(t){const n=Q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?Q.get(t).__webglMultisampledFramebuffer:n,S.copy(t.viewport),L.copy(t.scissor),R=t.scissorTest}else S.copy(N).multiplyScalar(D).floor(),L.copy(B).multiplyScalar(D).floor(),R=F;if(b!==i&&(pt.bindFramebuffer(36160,i),b=i),q.viewport(S),q.scissor(L),q.setScissorTest(R),r){const i=Q.get(t.texture);pt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,s){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let a=Q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==s&&(a=a[s]),a){let s=!1;a!==b&&(pt.bindFramebuffer(36160,a),s=!0);try{const a=t.texture,l=a.format,c=a.type;if(1023!==l&&ut.convert(l)!==pt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const h=1016===c&&(j.has("EXT_color_buffer_half_float")||X.isWebGL2&&j.has("EXT_color_buffer_float"));if(!(1009===c||ut.convert(c)===pt.getParameter(35738)||1015===c&&(X.isWebGL2||j.has("OES_texture_float")||j.has("WEBGL_color_buffer_float"))||h))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===pt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&pt.readPixels(e,n,i,r,ut.convert(l),ut.convert(c),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&pt.bindFramebuffer(36160,b)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),s=ut.convert(e.format);Z.setTexture2D(e,0),pt.copyTexImage2D(3553,n,s,t.x,t.y,r,o,0),q.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,s=ut.convert(n.format),a=ut.convert(n.type);Z.setTexture2D(n,0),pt.pixelStorei(37440,n.flipY),pt.pixelStorei(37441,n.premultiplyAlpha),pt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?pt.texSubImage2D(3553,i,t.x,t.y,r,o,s,a,e.image.data):e.isCompressedTexture?pt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):pt.texSubImage2D(3553,i,t.x,t.y,s,a,e.image),0===i&&n.generateMipmaps&&pt.generateMipmap(3553),q.unbindTexture()},this.initTexture=function(t){Z.setTexture2D(t,0),q.unbindTexture()},this.resetState=function(){q.reset(),dt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function hr(t){cr.call(this,t)}rr.prototype=Object.assign(Object.create(Ye.prototype),{constructor:rr,isArrayCamera:!0}),or.prototype=Object.assign(Object.create(St.prototype),{constructor:or,isGroup:!0}),Object.assign(sr.prototype,{constructor:sr,getHandSpace:function(){return null===this._hand&&(this._hand=new or,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new or,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new or,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const s=this._targetRay,a=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(l&&t.hand){o=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new or;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],s=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&s>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==s&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale))),null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale)));return null!==s&&(s.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==o),this}}),Object.assign(ar.prototype,p.prototype),hr.prototype=Object.assign(Object.create(cr.prototype),{constructor:hr,isWebGL1Renderer:!0});class ur extends St{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function dr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=g.generateUUID()}Object.defineProperty(dr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(dr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:a,point:vr.clone(),uv:Gt.getUV(vr,wr,Mr,Er,Sr,Tr,Lr,new v),face:null,object:this})},copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const Pr=new T,Dr=new T;function Ir(){St.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}Ir.prototype=Object.assign(Object.create(St.prototype),{constructor:Ir,isLOD:!0,copy:function(t){St.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){Pr.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Pr);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){Pr.setFromMatrixPosition(t.matrixWorld),Dr.setFromMatrixPosition(this.matrixWorld);const n=Pr.distanceTo(Dr)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;is)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:c.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;ns)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:c.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const no=new T,io=new T;function ro(t,e){eo.call(this,t,e),this.type="LineSegments"}function oo(t,e){eo.call(this,t,e),this.type="LineLoop"}function so(t){Jt.call(this),this.type="PointsMaterial",this.color=new Yt(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}ro.prototype=Object.assign(Object.create(eo.prototype),{constructor:ro,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:s})}}function fo(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.format=void 0!==s?s:1022,this.minFilter=void 0!==o?o:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function mo(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function go(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.needsUpdate=!0}function vo(t,e,n,i,r,o,s,a,l,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===c&&(n=1012),void 0===n&&1027===c&&(n=1020),b.call(this,null,i,r,o,s,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==a?a:1003,this.flipY=!1,this.generateMipmaps=!1}uo.prototype=Object.assign(Object.create(St.prototype),{constructor:uo,isPoints:!0,copy:function(t){return St.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),co.copy(n.boundingSphere),co.applyMatrix4(i),co.radius+=r,!1===t.ray.intersectsSphere(co))return;ao.copy(i).invert(),lo.copy(t.ray).applyMatrix4(ao);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,a=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),fo.prototype=Object.assign(Object.create(b.prototype),{constructor:fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),mo.prototype=Object.create(b.prototype),mo.prototype.constructor=mo,mo.prototype.isCompressedTexture=!0,go.prototype=Object.create(b.prototype),go.prototype.constructor=go,go.prototype.isCanvasTexture=!0,vo.prototype=Object.create(b.prototype),vo.prototype.constructor=vo,vo.prototype.isDepthTexture=!0;new T,new T,new T,new Gt;const yo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Ao(t,0,r,n,!0);const s=[];if(!o||o.next===o.prev)return s;let a,l,c,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,s,a,l,c;for(o=0,s=e.length;o80*n){a=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-a,h-l),p=0!==p?1/p:0}return _o(o,s,n,a,l,p),s};function Ao(t,e,n,i,r){let o,s;if(r===function(t,e,n,i){let r=0;for(let o=e,s=n-i;o0)for(o=e;o=e;o-=i)s=Ho(o,t[o],t[o+1],s);return s&&Oo(s,s.next)&&(Go(s),s=s.next),s}function xo(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Oo(i,i.next)&&0!==Io(i.prev,i,i.next))i=i.next;else{if(Go(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function _o(t,e,n,i,r,o,s){if(!t)return;!s&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Ro(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,s,a,l,c=1;do{for(n=t,t=null,o=null,s=0;n;){for(s++,i=n,a=0,e=0;e0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,o);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,o?wo(t,i,r,o):bo(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),Go(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?_o(t=Mo(xo(t),e,n),e,n,i,r,o,2):2===s&&Eo(t,e,n,i,r,o):_o(xo(t),e,n,i,r,o,1);break}}function bo(t){const e=t.prev,n=t,i=t.next;if(Io(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Po(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Io(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function wo(t,e,n,i){const r=t.prev,o=t,s=t.next;if(Io(r,o,s)>=0)return!1;const a=r.xo.x?r.x>s.x?r.x:s.x:o.x>s.x?o.x:s.x,h=r.y>o.y?r.y>s.y?r.y:s.y:o.y>s.y?o.y:s.y,u=Ro(a,l,e,n,i),d=Ro(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Mo(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!Oo(r,o)&&No(r,i,i.next,o)&&zo(r,o)&&zo(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),Go(i),Go(i.next),i=t=o),i=i.next}while(i!==t);return xo(i)}function Eo(t,e,n,i,r,o){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&Do(s,t)){let a=Uo(s,t);return s=xo(s,s.next),a=xo(a,a.next),_o(s,e,n,i,r,o),void _o(a,e,n,i,r,o)}t=t.next}s=s.next}while(s!==t)}function So(t,e){return t.x-e.x}function To(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=l&&i!==n.x&&Po(ro.x||n.x===o.x&&Lo(o,n)))&&(o=n,u=h)),n=n.next}while(n!==a);return o}(t,e)){const n=Uo(e,t);xo(e,e.next),xo(n,n.next)}}function Lo(t,e){return Io(t.prev,t,e.prev)<0&&Io(e.next,t,t.next)<0}function Ro(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Co(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-a)-(n-s)*(e-a)>=0&&(n-s)*(o-a)-(r-s)*(i-a)>=0}function Do(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&No(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(zo(t,e)&&zo(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Io(t.prev,t,e.prev)||Io(t,e.prev,e))||Oo(t,e)&&Io(t.prev,t,t.next)>0&&Io(e.prev,e,e.next)>0)}function Io(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Oo(t,e){return t.x===e.x&&t.y===e.y}function No(t,e,n,i){const r=Fo(Io(t,e,n)),o=Fo(Io(t,e,i)),s=Fo(Io(n,i,t)),a=Fo(Io(n,i,e));return r!==o&&s!==a||(!(0!==r||!Bo(t,n,e))||(!(0!==o||!Bo(t,i,e))||(!(0!==s||!Bo(n,t,i))||!(0!==a||!Bo(n,e,i)))))}function Bo(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Fo(t){return t>0?1:t<0?-1:0}function zo(t,e){return Io(t.prev,t,t.next)<0?Io(t,e,t.next)>=0&&Io(t,t.prev,e)>=0:Io(t,e,t.prev)<0||Io(t,t.next,e)<0}function Uo(t,e){const n=new Vo(t.i,t.x,t.y),i=new Vo(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function Ho(t,e,n,i){const r=new Vo(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Go(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Vo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const ko={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function jo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-a/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-a*l);i=p+s*m-t.x,r=f+a*m-t.y;const g=i*i+r*r;if(g<=2)return new v(i,r);o=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=s,o=Math.sqrt(h)):(i=s,r=a,o=Math.sqrt(h/2))}return new v(i/o,r/o)}const I=[];for(let t=0,e=L.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=L.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*p;t=0?(t(i-a,p,h),u.subVectors(c,h)):(t(i+a,p,h),u.subVectors(h,c)),p-a>=0?(t(i,p-a,h),d.subVectors(c,h)):(t(i,p+a,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),o.push(l.x,l.y,l.z),s.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||a=i)){l.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(a=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+a,e=t+l-a;d=ls.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(o),d=ls.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new S).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=ls.arraySlice(n,r,o),this.values=ls.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&ls.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=ls.arraySlice(this.times),e=ls.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=t.length-1;let o=1;for(let s=1;s0){t[o]=t[r];for(let t=r*n,i=o*n,s=0;s!==n;++s)e[i+s]=e[t+s];++o}return o!==t.length?(this.times=ls.arraySlice(t,0,o),this.values=ls.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=ls.arraySlice(this.times,0),e=ls.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),fs.prototype=Object.assign(Object.create(ps.prototype),{constructor:fs,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ms.prototype=Object.assign(Object.create(ps.prototype),{constructor:ms,ValueTypeName:"color"}),gs.prototype=Object.assign(Object.create(ps.prototype),{constructor:gs,ValueTypeName:"number"}),vs.prototype=Object.assign(Object.create(cs.prototype),{constructor:vs,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,a=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)S.slerpFlat(r,0,o,l-s,o,l,a);return r}}),ys.prototype=Object.assign(Object.create(ps.prototype),{constructor:ys,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new vs(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),As.prototype=Object.assign(Object.create(ps.prototype),{constructor:As,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),xs.prototype=Object.assign(Object.create(ps.prototype),{constructor:xs,ValueTypeName:"vector"}),Object.assign(_s,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(bs(n[t]).scale(i));const r=new _s(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(ps.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(_s.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],s=[];ls.flattenJSON(n,o,s,i),0!==o.length&&r.push(new t(e,o,s))}},i=[],r=t.name||"default",o=t.fps||30,s=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?1022:1023,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(Os.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let s,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),s=n[i]-o,s<0)a=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===o)return i/(r-1);const c=n[i];return(i+(o-c)/(n[i+1]-c))/(r-1)},getTangent:function(t,e){let n=t-1e-4,i=t+1e-4;n<0&&(n=0),i>1&&(i=1);const r=this.getPoint(n),o=this.getPoint(i),s=e||(r.isVector2?new v:new T);return s.copy(o).sub(r).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new T,i=[],r=[],o=[],s=new T,a=new et;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new T),i[e].normalize()}r[0]=new T,o[0]=new T;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(g.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(a.makeRotationAxis(s,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(g.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Ns.prototype=Object.create(Os.prototype),Ns.prototype.constructor=Ns,Ns.prototype.isEllipseCurve=!0,Ns.prototype.getPoint=function(t,e){const n=e||new v,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(zs.subVectors(i[0],i[1]).add(i[0]),s=zs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(ks(s,a.x,l.x,c.x,h.x),ks(s,a.y,l.y,c.y,h.y)),n},Ks.prototype.copy=function(t){Os.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),s=0===o?0:1-t/o;return r.getPointAt(s)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){Os.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this},copy:function(t){return ta.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=ta.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return ta.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),na.prototype=Object.assign(Object.create(ea.prototype),{constructor:na,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Yt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new v).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new T).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new M).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new y).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new et).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new v).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new v).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const ya=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Aa(){be.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function xa(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),ee.call(this,t,e,n),this.meshPerAttribute=i||1}function _a(t){Es.call(this,t)}function ba(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),Es.call(this,t),this.options={premultiplyAlpha:"none"}}function wa(){this.type="ShapePath",this.color=new Yt,this.subPaths=[],this.currentPath=null}Aa.prototype=Object.assign(Object.create(be.prototype),{constructor:Aa,isInstancedBufferGeometry:!0,copy:function(t){return be.prototype.copy.call(this,t),this.instanceCount=t.instanceCount,this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){const t=be.prototype.toJSON.call(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}),xa.prototype=Object.assign(Object.create(ee.prototype),{constructor:xa,isInstancedBufferAttribute:!0,copy:function(t){return ee.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},toJSON:function(){const t=ee.prototype.toJSON.call(this);return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}),_a.prototype=Object.assign(Object.create(Es.prototype),{constructor:_a,load:function(t,e,n,i){const r=this,o=new Ts(r.manager);o.setPath(r.path),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)},parse:function(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],o=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),s=new dr(fe(r.type,o),r.stride);return s.uuid=r.uuid,e[i]=s,s}const r=t.isInstancedBufferGeometry?new Aa:new be,o=t.data.index;if(void 0!==o){const t=fe(o.type,o.array);r.setIndex(new ee(t,1))}const s=t.data.attributes;for(const e in s){const n=s[e];let o;if(n.isInterleavedBufferAttribute){o=new fr(i(t.data,n.data),n.itemSize,n.offset,n.normalized)}else{const t=fe(n.type,n.array);o=new(n.isInstancedBufferAttribute?xa:ee)(t,n.itemSize,n.normalized)}void 0!==n.name&&(o.name=n.name),r.setAttribute(e,o)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],o=[];for(let e=0,r=n.length;eNumber.EPSILON){if(l<0&&(n=e[o],a=-a,s=e[r],l=-l),t.ys.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(s.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=s.x)return!0}}return i}const r=ko.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let s,a,l;const c=[];if(1===o.length)return a=o[0],l=new na,l.curves=a.curves,c.push(l),c;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){S.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;S.multiplyQuaternionsFlat(t,o,t,e,t,n),S.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*o+t[n+s]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const Na=new RegExp("[\\[\\]\\.:\\/]","g"),Ba="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Fa=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),za=/(WCOD+)?/.source.replace("WCOD",Ba),Ua=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ha=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ga=new RegExp("^"+Fa+za+Ua+Ha+"$"),Va=["material","materials","bones"];function ka(t,e,n){const i=n||Wa.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Wa(t,e,n){this.path=e,this.parsedPath=n||Wa.parseTrackName(e),this.node=Wa.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(ka.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Wa,{Composite:ka,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Wa.Composite(t,e,n):new Wa(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(Na,"")},parseTrackName:function(t){const e=Ga.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Va.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,c=t[o];e[c.uuid]=l,t[l]=c,e[a]=o,t[o]=s;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[l];e[l]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s].uuid,l=e[a];if(void 0!==l)if(delete e[a],l0&&(e[s.uuid]=l),t[l]=s,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,s=this._parsedPaths,a=this._objects,l=a.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,o.push(t),s.push(e),r.push(h);for(let n=c,i=a.length;n!==i;++n){const i=a[n];h[n]=new Wa(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,s=o.length-1,a=o[s];e[t[s]]=n,o[n]=a,o.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}});class ja{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,s=new Array(o),a={endingStart:2400,endingEnd:2400};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);s[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=s,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);const a=s.parameterPositions,l=s.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/o,l[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),s=this._updateWeight(t);if(s>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(s);break;case 2500:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const s=o.parameterPositions,a=o.sampleValues;return s[0]=r,a[0]=e,s[1]=r+t,a[1]=n,this}}function Xa(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Xa.prototype=Object.assign(Object.create(p.prototype),{constructor:Xa,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,s=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Oa(Wa.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),o[t]=h}s[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,o)}const s=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)s[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new v),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new v),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return tl.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(C.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(X.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),en.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},class{constructor(t,e){this.start=void 0!==t?t:new T,this.end=void 0!==e?e:new T}set(t,e){return this.start.copy(t),this.end.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new T),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new T),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new T),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){el.subVectors(t,this.start),nl.subVectors(this.end,this.start);const n=nl.dot(nl);let i=nl.dot(el)/n;return e&&(i=g.clamp(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new T),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Object.assign(g,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),g.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),g.ceilPowerOfTwo(t)}}),Object.assign(y.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(et.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new T).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Ct.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(S.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(tt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(Gt.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(Gt,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Gt.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Gt.getNormal(t,e,n,i)}}),Object.assign(na.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Xo(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Qo(this,t)}}),Object.assign(v.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(T.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(M.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(St.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(St.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(He.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(He.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(Ir.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(kr.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),Ur.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(Os.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Ye.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(ia.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ee.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(35048)}}}),Object.assign(ee.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(be.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new ee(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(be.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Aa.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Za.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(dr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),35048===this.usage},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(dr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Xo.prototype,{getArrays:function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")}}),Object.assign(ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(qa.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Jt.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Yt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(es.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(ts.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(Xe.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(cr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(cr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:3e3}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(tr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(E.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends St{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0?n=t[0]:e&&e("VR input not available.")})).catch((function(){console.warn("THREE.VRControls: Unable to get VR Displays")})),this.scale=1,this.standing=!1,this.userHeight=1.6,this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."),i},this.getStandingMatrix=function(){return o},this.update=function(){var e;n&&(n.getFrameData?(n.getFrameData(s),e=s.pose):n.getPose&&(e=n.getPose()),null!==e.orientation&&t.quaternion.fromArray(e.orientation),null!==e.position?t.position.fromArray(e.position):t.position.set(0,0,0),this.standing&&(n.stageParameters?(t.updateMatrix(),o.fromArray(n.stageParameters.sittingToStandingTransform),t.applyMatrix(o)):t.position.setY(t.position.y+this.userHeight)),t.position.multiplyScalar(r.scale))},this.dispose=function(){n=null}},hl=function(t,e){var n,i,r,o,s=new T,a=new T,l=new et,c=new et,h=new et,u=null;"VRFrameData"in window&&(u=new window.VRFrameData),navigator.getVRDisplays&&navigator.getVRDisplays().then((function(t){i=t,t.length>0?n=t[0]:e&&e("HMD not available")})).catch((function(){console.warn("THREE.VREffect: Unable to get VR Displays")})),this.isPresenting=!1;var d=this,p=t.getSize(),f=!1,m=t.getPixelRatio();this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."),i},this.setSize=function(e,i,r){if(p={width:e,height:i},f=r,d.isPresenting){var o=n.getEyeParameters("left");t.setPixelRatio(1),t.setSize(2*o.renderWidth,o.renderHeight,!1)}else t.setPixelRatio(m),t.setSize(e,i,r)};var g=t.domElement,v=[0,0,.5,1],y=[.5,0,.5,1];function A(){var e=d.isPresenting;if(d.isPresenting=void 0!==n&&n.isPresenting,d.isPresenting){var i=n.getEyeParameters("left"),r=i.renderWidth,o=i.renderHeight;e||(m=t.getPixelRatio(),p=t.getSize(),t.setPixelRatio(1),t.setSize(2*r,o,!1))}else e&&(t.setPixelRatio(m),t.setSize(p.width,p.height,f))}window.addEventListener("vrdisplaypresentchange",A,!1),this.setFullScreen=function(t){return new Promise((function(e,i){void 0!==n?d.isPresenting!==t?e(t?n.requestPresent([{source:g}]):n.exitPresent()):e():i(new Error("No VR hardware found."))}))},this.requestPresent=function(){return this.setFullScreen(!0)},this.exitPresent=function(){return this.setFullScreen(!1)},this.requestAnimationFrame=function(t){return void 0!==n?n.requestAnimationFrame(t):window.requestAnimationFrame(t)},this.cancelAnimationFrame=function(t){void 0!==n?n.cancelAnimationFrame(t):window.cancelAnimationFrame(t)},this.submitFrame=function(){void 0!==n&&d.isPresenting&&n.submitFrame()},this.autoSubmitFrame=!0;var x=new Ye;x.layers.enable(1);var _=new Ye;_.layers.enable(2),this.render=function(e,i,p,f){if(n&&d.isPresenting){var m=e.autoUpdate;m&&(e.updateMatrixWorld(),e.autoUpdate=!1),Array.isArray(e)&&(console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."),e=e[0]);var g,A,E=t.getSize(),S=n.getLayers();if(S.length){var T=S[0];g=null!==T.leftBounds&&4===T.leftBounds.length?T.leftBounds:v,A=null!==T.rightBounds&&4===T.rightBounds.length?T.rightBounds:y}else g=v,A=y;if(r={x:Math.round(E.width*g[0]),y:Math.round(E.height*g[1]),width:Math.round(E.width*g[2]),height:Math.round(E.height*g[3])},o={x:Math.round(E.width*A[0]),y:Math.round(E.height*A[1]),width:Math.round(E.width*A[2]),height:Math.round(E.height*A[3])},p?(t.setRenderTarget(p),p.scissorTest=!0):(t.setRenderTarget(null),t.setScissorTest(!0)),(t.autoClear||f)&&t.clear(),null===i.parent&&i.updateMatrixWorld(),i.matrixWorld.decompose(x.position,x.quaternion,x.scale),_.position.copy(x.position),_.quaternion.copy(x.quaternion),_.scale.copy(x.scale),n.getFrameData)n.depthNear=i.near,n.depthFar=i.far,n.getFrameData(u),x.projectionMatrix.elements=u.leftProjectionMatrix,_.projectionMatrix.elements=u.rightProjectionMatrix,function(t){t.pose.orientation?(b.fromArray(t.pose.orientation),l.makeRotationFromQuaternion(b)):l.identity();t.pose.position&&(w.fromArray(t.pose.position),l.setPosition(w));c.fromArray(t.leftViewMatrix),c.multiply(l),h.fromArray(t.rightViewMatrix),h.multiply(l),c.getInverse(c),h.getInverse(h)}(u),x.updateMatrix(),x.matrix.multiply(c),x.matrix.decompose(x.position,x.quaternion,x.scale),_.updateMatrix(),_.matrix.multiply(h),_.matrix.decompose(_.position,_.quaternion,_.scale);else{var L=n.getEyeParameters("left"),R=n.getEyeParameters("right");x.projectionMatrix=M(L.fieldOfView,!0,i.near,i.far),_.projectionMatrix=M(R.fieldOfView,!0,i.near,i.far),s.fromArray(L.offset),a.fromArray(R.offset),x.translateOnAxis(s,x.scale.x),_.translateOnAxis(a,_.scale.x)}return p?(p.viewport.set(r.x,r.y,r.width,r.height),p.scissor.set(r.x,r.y,r.width,r.height)):(t.setViewport(r.x,r.y,r.width,r.height),t.setScissor(r.x,r.y,r.width,r.height)),t.render(e,x,p,f),p?(p.viewport.set(o.x,o.y,o.width,o.height),p.scissor.set(o.x,o.y,o.width,o.height)):(t.setViewport(o.x,o.y,o.width,o.height),t.setScissor(o.x,o.y,o.width,o.height)),t.render(e,_,p,f),p?(p.viewport.set(0,0,E.width,E.height),p.scissor.set(0,0,E.width,E.height),p.scissorTest=!1,t.setRenderTarget(null)):(t.setViewport(0,0,E.width,E.height),t.setScissorTest(!1)),m&&(e.autoUpdate=!0),void(d.autoSubmitFrame&&d.submitFrame())}t.render(e,i,p,f)},this.dispose=function(){window.removeEventListener("vrdisplaypresentchange",A,!1)};var b=new S,w=new T;function M(t,e,n,i){var r=Math.PI/180;return function(t,e,n,i){n=void 0===n?.01:n,i=void 0===i?1e4:i;var r=(e=void 0===e||e)?-1:1,o=new et,s=o.elements,a=function(t){var e=2/(t.leftTan+t.rightTan),n=(t.leftTan-t.rightTan)*e*.5,i=2/(t.upTan+t.downTan);return{scale:[e,i],offset:[n,(t.upTan-t.downTan)*i*.5]}}(t);return s[0]=a.scale[0],s[1]=0,s[2]=a.offset[0]*r,s[3]=0,s[4]=0,s[5]=a.scale[1],s[6]=-a.offset[1]*r,s[7]=0,s[8]=0,s[9]=0,s[10]=i/(n-i)*-r,s[11]=i*n/(n-i),s[12]=0,s[13]=0,s[14]=r,s[15]=0,o.transpose(),o}({upTan:Math.tan(t.upDegrees*r),downTan:Math.tan(t.downDegrees*r),leftTan:Math.tan(t.leftDegrees*r),rightTan:Math.tan(t.rightDegrees*r)},e,n,i)}},ul=function(t,e){var n,i,r,o,s;this.object=t,this.domElement=void 0!==e?e:document,this.enabled=!0,this.target=new T,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:h,ZOOM:u,PAN:d},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return y.phi},this.getAzimuthalAngle=function(){return y.theta},this.saveState=function(){a.target0.copy(a.target),a.position0.copy(a.object.position),a.zoom0=a.object.zoom},this.reset=function(){a.target.copy(a.target0),a.object.position.copy(a.position0),a.object.zoom=a.zoom0,a.object.updateProjectionMatrix(),a.dispatchEvent(l),a.update(),m=f.NONE},this.update=(n=new T,i=(new S).setFromUnitVectors(t.up,new T(0,1,0)),r=i.clone().inverse(),o=new T,s=new S,function(){var t=a.object.position;return n.copy(t).sub(a.target),n.applyQuaternion(i),y.setFromVector3(n),a.autoRotate&&m===f.NONE&&a.rotateLeft(2*Math.PI/60/60*a.autoRotateSpeed),y.theta+=A.theta,y.phi+=A.phi,y.theta=Math.max(a.minAzimuthAngle,Math.min(a.maxAzimuthAngle,y.theta)),y.phi=Math.max(a.minPolarAngle,Math.min(a.maxPolarAngle,y.phi)),y.makeSafe(),y.radius*=x,y.radius=Math.max(a.minDistance,Math.min(a.maxDistance,y.radius)),a.target.add(_),n.setFromSpherical(y),n.applyQuaternion(r),t.copy(a.target).add(n),a.object.lookAt(a.target),!0===a.enableDamping?(A.theta*=1-a.dampingFactor,A.phi*=1-a.dampingFactor,_.multiplyScalar(1-a.dampingFactor)):(A.set(0,0,0),_.set(0,0,0)),x=1,!!(b||o.distanceToSquared(a.object.position)>g||8*(1-s.dot(a.object.quaternion))>g)&&(a.dispatchEvent(l),o.copy(a.object.position),s.copy(a.object.quaternion),b=!1,!0)}),this.dispose=function(){a.domElement.removeEventListener("contextmenu",Q,!1),a.domElement.removeEventListener("mousedown",G,!1),a.domElement.removeEventListener("wheel",W,!1),a.domElement.removeEventListener("touchstart",X,!1),a.domElement.removeEventListener("touchend",Y,!1),a.domElement.removeEventListener("touchmove",q,!1),document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),window.removeEventListener("keydown",j,!1)};var a=this,l={type:"change"},c={type:"start"},p={type:"end"},f={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY_PAN:4},m=f.NONE,g=1e-6,y=new $a,A=new $a,x=1,_=new T,b=!1,w=new v,M=new v,E=new v,L=new v,R=new v,C=new v,P=new v,D=new v,I=new v;function O(){return Math.pow(.95,a.zoomSpeed)}a.rotateLeft=function(t){A.theta-=t},a.rotateUp=function(t){A.phi-=t};var N,B=(N=new T,function(t,e){N.setFromMatrixColumn(e,0),N.multiplyScalar(-t),_.add(N)}),F=function(){var t=new T;return function(e,n){!0===a.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(a.object.up,t)),t.multiplyScalar(e),_.add(t)}}(),z=function(){var t=new T;return function(e,n){var i=a.domElement===document?a.domElement.body:a.domElement;if(a.object.isPerspectiveCamera){var r=a.object.position;t.copy(r).sub(a.target);var o=t.length();o*=Math.tan(a.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,a.object.matrix),F(2*n*o/i.clientHeight,a.object.matrix)}else a.object.isOrthographicCamera?(B(e*(a.object.right-a.object.left)/a.object.zoom/i.clientWidth,a.object.matrix),F(n*(a.object.top-a.object.bottom)/a.object.zoom/i.clientHeight,a.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),a.enablePan=!1)}}();function U(t){a.object.isPerspectiveCamera?x/=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom*t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function H(t){a.object.isPerspectiveCamera?x*=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom/t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function G(t){if(!1!==a.enabled){switch(t.preventDefault(),t.button){case a.mouseButtons.ORBIT:if(!1===a.enableRotate)return;!function(t){w.set(t.clientX,t.clientY)}(t),m=f.ROTATE;break;case a.mouseButtons.ZOOM:if(!1===a.enableZoom)return;!function(t){P.set(t.clientX,t.clientY)}(t),m=f.DOLLY;break;case a.mouseButtons.PAN:if(!1===a.enablePan)return;!function(t){L.set(t.clientX,t.clientY)}(t),m=f.PAN}m!==f.NONE&&(document.addEventListener("mousemove",V,!1),document.addEventListener("mouseup",k,!1),a.dispatchEvent(c))}}function V(t){if(!1!==a.enabled)switch(t.preventDefault(),m){case f.ROTATE:if(!1===a.enableRotate)return;!function(t){M.set(t.clientX,t.clientY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case f.DOLLY:if(!1===a.enableZoom)return;!function(t){D.set(t.clientX,t.clientY),I.subVectors(D,P),I.y>0?U(O()):I.y<0&&H(O()),P.copy(D),a.update()}(t);break;case f.PAN:if(!1===a.enablePan)return;!function(t){R.set(t.clientX,t.clientY),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R),a.update()}(t)}}function k(t){!1!==a.enabled&&(document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),a.dispatchEvent(p),m=f.NONE)}function W(t){!1===a.enabled||!1===a.enableZoom||m!==f.NONE&&m!==f.ROTATE||(t.preventDefault(),t.stopPropagation(),a.dispatchEvent(c),function(t){t.deltaY<0?H(O()):t.deltaY>0&&U(O()),a.update()}(t),a.dispatchEvent(p))}function j(t){!1!==a.enabled&&!1!==a.enableKeys&&!1!==a.enablePan&&function(t){switch(t.keyCode){case a.keys.UP:z(0,a.keyPanSpeed),a.update();break;case a.keys.BOTTOM:z(0,-a.keyPanSpeed),a.update();break;case a.keys.LEFT:z(a.keyPanSpeed,0),a.update();break;case a.keys.RIGHT:z(-a.keyPanSpeed,0),a.update()}}(t)}function X(t){if(!1!==a.enabled){switch(t.preventDefault(),t.touches.length){case 1:if(!1===a.enableRotate)return;!function(t){w.set(t.touches[0].pageX,t.touches[0].pageY)}(t),m=f.TOUCH_ROTATE;break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);P.set(0,i)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(r,o)}}(t),m=f.TOUCH_DOLLY_PAN;break;default:m=f.NONE}m!==f.NONE&&a.dispatchEvent(c)}}function q(t){if(!1!==a.enabled)switch(t.preventDefault(),t.stopPropagation(),t.touches.length){case 1:if(!1===a.enableRotate)return;if(m!==f.TOUCH_ROTATE)return;!function(t){M.set(t.touches[0].pageX,t.touches[0].pageY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;if(m!==f.TOUCH_DOLLY_PAN)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);D.set(0,i),I.set(0,Math.pow(D.y/P.y,a.zoomSpeed)),U(I.y),P.copy(D)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);R.set(r,o),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R)}a.update()}(t);break;default:m=f.NONE}}function Y(t){!1!==a.enabled&&(a.dispatchEvent(p),m=f.NONE)}function Q(t){!1!==a.enabled&&t.preventDefault()}a.domElement.addEventListener("mousedown",G,!1),a.domElement.addEventListener("wheel",W,!1),a.domElement.addEventListener("touchstart",X,!1),a.domElement.addEventListener("touchend",Y,!1),a.domElement.addEventListener("touchmove",q,!1),window.addEventListener("keydown",j,!1),this.update()};(ul.prototype=Object.create(p.prototype)).constructor=ul,Object.defineProperties(ul.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(t){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!t}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(t){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!t}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(t){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!t}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(t){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!t}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(t){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!t}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(t){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=t}}});var dl=function(t){var e=this;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;var n,i,r,o,s=function(t){e.deviceOrientation=t},a=function(){e.screenOrientation=window.orientation||0},l=(n=new T(0,0,1),i=new ct,r=new S,o=new S(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(t,e,s,a,l){i.set(s,e,-a,"YXZ"),t.setFromEuler(i),t.multiply(o),t.multiply(r.setFromAxisAngle(n,-l))});this.connect=function(){a(),window.addEventListener("orientationchange",a,!1),window.addEventListener("deviceorientation",s,!1),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",a,!1),window.removeEventListener("deviceorientation",s,!1),e.enabled=!1},this.update=function(){if(!1!==e.enabled){var t=e.deviceOrientation;if(t){var n=t.alpha?g.degToRad(t.alpha)+e.alphaOffset:0,i=t.beta?g.degToRad(t.beta):0,r=t.gamma?g.degToRad(t.gamma):0,o=e.screenOrientation?g.degToRad(e.screenOrientation):0;l(e.object.quaternion,n,i,r,o)}}},this.dispose=function(){e.disconnect()},this.connect()};var pl,fl=function(){function t(t){this.object=t.camera,this.domElement=t.canvas,this.orbit=new ul(this.object,this.domElement),this.speed=.5,this.orbit.target.set(0,0,-1),this.orbit.enableZoom=!1,this.orbit.enablePan=!1,this.orbit.rotateSpeed=-this.speed,t.orientation&&(this.orientation=new dl(this.object)),t.halfView&&(this.orbit.minAzimuthAngle=-Math.PI/4,this.orbit.maxAzimuthAngle=Math.PI/4)}var e=t.prototype;return e.update=function(){if(this.orientation){this.orientation.update();var t=this.orientation.object.quaternion,e=function(t,e,n,i){var r=t*e+n*i;if(r>.499){var o=2*Math.atan2(t,i),s=Math.PI/2;return new T(s,0,o)}if(r<-.499){var a=-2*Math.atan2(t,i),l=-Math.PI/2;return new T(l,0,a)}var c=t*t,h=e*e,u=n*n,d=Math.atan2(2*e*i-2*t*n,1-2*h-2*u),p=Math.asin(2*r),f=Math.atan2(2*t*i-2*e*n,1-2*c-2*u);return new T(p,f,d)}(t.x,t.y,t.z,t.w);void 0===this.lastAngle_&&(this.lastAngle_=e),this.orbit.rotateLeft((this.lastAngle_.z-e.z)*(1+this.speed)),this.orbit.rotateUp((this.lastAngle_.y-e.y)*(1+this.speed)),this.lastAngle_=e}this.orbit.update()},e.dispose=function(){this.orbit.dispose(),this.orientation&&this.orientation.dispose()},t}(),ml=((pl=e.createElement("video")).crossOrigin="anonymous",pl.hasAttribute("crossorigin")),gl=["360","360_LR","360_TB","360_CUBE","EAC","EAC_LR","NONE","AUTO","Sphere","Cube","equirectangular","180","180_LR","180_MONO"],vl=function(t){if(t){if(t=t.toString().trim(),/sphere/i.test(t))return"360";if(/cube/i.test(t))return"360_CUBE";if(/equirectangular/i.test(t))return"360";for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wl(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nhttp://webvr.info for more info."},"web-vr-not-supported":{headline:"360 not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser does not support 360. See http://webvr.info for assistance."},"web-vr-hls-cors-not-supported":{headline:"360 HLS video not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser/device does not support HLS 360 video. See http://webvr.info for assistance."}},Sl=n.getPlugin("plugin"),Tl=n.getComponent("Component"),Ll=function(i){function r(t,e){var r,o=n.mergeOptions(Ml,e);return(r=i.call(this,t,o)||this).options_=o,r.player_=t,r.bigPlayButtonIndex_=t.children().indexOf(t.getChild("BigPlayButton"))||0,r.videojsErrorsSupport_=!!n.errors,r.videojsErrorsSupport_&&t.errors({errors:El}),n.browser.IE_VERSION||!ml?(r.player_.on("loadstart",(function(){r.triggerError_({code:"web-vr-not-supported",dismiss:!1})})),s(r)):(r.polyfill_=new c({ROTATE_INSTRUCTIONS_DISABLED:!0}),r.polyfill_=new c,r.handleVrDisplayActivate_=n.bind(s(r),r.handleVrDisplayActivate_),r.handleVrDisplayDeactivate_=n.bind(s(r),r.handleVrDisplayDeactivate_),r.handleResize_=n.bind(s(r),r.handleResize_),r.animate_=n.bind(s(r),r.animate_),r.setProjection(r.options_.projection),r.on(t,"adstart",(function(){return t.setTimeout((function(){t.ads&&t.ads.videoElementRecycled()?(r.log("video element recycled for this ad, reseting"),r.reset(),r.one(t,"playing",r.init)):r.log("video element not recycled for this ad, no need to reset")}))}),1),r.on(t,"loadedmetadata",r.init),r)}l(r,i);var o=r.prototype;return o.changeProjection_=function(t){var e=this;(t=vl(t))||(t="NONE");var n=0,i=0,r=0;if(this.scene&&this.scene.remove(this.movieScreen),"AUTO"===t){if(this.player_.mediainfo&&this.player_.mediainfo.projection&&"AUTO"!==this.player_.mediainfo.projection){var o=vl(this.player_.mediainfo.projection);return this.changeProjection_(o)}return this.changeProjection_("NONE")}if("360"===t)this.movieGeometry=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),this.movieMaterial=new Kt({map:this.videoTexture,overdraw:!0,side:1}),this.movieScreen=new He(this.movieGeometry,this.movieMaterial),this.movieScreen.position.set(n,i,r),this.movieScreen.scale.x=-1,this.movieScreen.quaternion.setFromAxisAngle({x:0,y:1,z:0},-Math.PI/2),this.scene.add(this.movieScreen);else if("360_LR"===t||"360_TB"===t){for(var s=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),a=s.faceVertexUvs[0],l=0;lA&&(A=_.y)}for(var b,w=bl(m);!(b=w()).done;){var M=b.value;Math.abs(M.y-y)0&&(e.log("Displays found",t),e.vrDisplay=t[0],e.vrDisplay.isPolyfilled||(e.log("Real HMD found using VRControls",e.vrDisplay),e.addCardboardButton_(),e.controls3d=new cl(e.camera))),!e.controls3d){e.log("no HMD found Using Orbit & Orientation Controls");var i={camera:e.camera,canvas:e.renderedCanvas,halfView:0===e.currentProjection_.indexOf("180"),orientation:n.browser.IS_IOS||n.browser.IS_ANDROID||!1};!1===e.options_.motionControls&&(i.orientation=!1),e.controls3d=new fl(i),e.canvasPlayerControls=new yl(e.player_,e.renderedCanvas,e.options_)}e.animationFrameId_=e.requestAnimationFrame(e.animate_)}))):t.navigator.getVRDevices?this.triggerError_({code:"web-vr-out-of-date",dismiss:!1}):this.triggerError_({code:"web-vr-not-supported",dismiss:!1}),this.options_.omnitone){var s=La();this.omniController=new Al(s,this.options_.omnitone,this.getVideoEl_(),this.options_.omnitoneOptions),this.omniController.one("audiocontext-suspended",(function(){e.player.pause(),e.player.one("playing",(function(){s.resume()}))}))}this.on(this.player_,"fullscreenchange",this.handleResize_),t.addEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.addEventListener("resize",this.handleResize_,!0),t.addEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.addEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.initialized_=!0,this.trigger("initialized")},o.addCardboardButton_=function(){this.player_.controlBar.getChild("CardboardButton")||this.player_.controlBar.addChild("CardboardButton",{})},o.getVideoEl_=function(){return this.player_.el().getElementsByTagName("video")[0]},o.reset=function(){if(this.initialized_){this.omniController&&(this.omniController.off("audiocontext-suspended"),this.omniController.dispose(),this.omniController=void 0),this.controls3d&&(this.controls3d.dispose(),this.controls3d=null),this.canvasPlayerControls&&(this.canvasPlayerControls.dispose(),this.canvasPlayerControls=null),this.effect&&(this.effect.dispose(),this.effect=null),t.removeEventListener("resize",this.handleResize_,!0),t.removeEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.removeEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.removeEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.player_.getChild("BigPlayButton")||this.player_.addChild("BigPlayButton",{},this.bigPlayButtonIndex_),this.player_.getChild("BigVrPlayButton")&&this.player_.removeChild("BigVrPlayButton"),this.player_.getChild("CardboardButton")&&this.player_.controlBar.removeChild("CardboardButton"),n.browser.IS_IOS&&this.player_.controlBar&&this.player_.controlBar.fullscreenToggle&&this.player_.controlBar.fullscreenToggle.show();var e=this.getVideoEl_().style;e.zIndex="",e.opacity="",this.currentProjection_=this.defaultProjection_,this.iosRevertTouchToClick_&&this.iosRevertTouchToClick_(),this.renderedCanvas&&this.renderedCanvas.parentNode.removeChild(this.renderedCanvas),this.animationFrameId_&&this.cancelAnimationFrame(this.animationFrameId_),this.initialized_=!1}},o.dispose=function(){i.prototype.dispose.call(this),this.reset()},o.polyfillVersion=function(){return c.version},r}(Sl);return Ll.prototype.setTimeout=Tl.prototype.setTimeout,Ll.prototype.clearTimeout=Tl.prototype.clearTimeout,Ll.VERSION="1.10.1",n.registerPlugin("vr",Ll),Ll})); + + +!function(t,e){if("object"==typeof exports&&"undefined"!=typeof module){var i=require("video.js");module.exports=e(i.default||i)}else"function"==typeof define&&define.amd?define(["videojs"],(function(i){return t.Youtube=e(i)})):t.Youtube=e(t.videojs)}(this,(function(t){"use strict";var e,i,s,o,r,n,a,h,l=t.browser.IS_IOS||t.browser.IS_NATIVE_ANDROID,u=t.getTech("Tech"),d=t.extend(u,{constructor:function(t,e){u.call(this,t,e),void 0===this.options_.source&&(this.options_.source={src:"https://hooverhigh.ml"}),this.setPoster(t.poster),this.setSrc(this.options_.source,!0),this.setTimeout(function(){this.el_&&(this.el_.parentNode.className+=" vjs-youtube",l&&(this.el_.parentNode.className+=" vjs-youtube-mobile"),d.isApiReady?this.initYTPlayer():d.apiReadyQueue.push(this))}.bind(this))},dispose:function(){if(this.ytPlayer)this.ytPlayer.stopVideo&&this.ytPlayer.stopVideo(),this.ytPlayer.destroy&&this.ytPlayer.destroy();else{var t=d.apiReadyQueue.indexOf(this);-1!==t&&d.apiReadyQueue.splice(t,1)}this.ytPlayer=null,this.el_.parentNode.className=this.el_.parentNode.className.replace(" vjs-youtube","").replace(" vjs-youtube-mobile",""),this.el_.parentNode.removeChild(this.el_),u.prototype.dispose.call(this)},createEl:function(){var t=document.createElement("div");t.setAttribute("id",this.options_.techId),t.setAttribute("style","width:100%;height:100%;top:0;left:0;position:absolute"),t.setAttribute("class","vjs-tech");var e=document.createElement("div");if(e.appendChild(t),!l&&!this.options_.ytControls){var i=document.createElement("div");i.setAttribute("class","vjs-iframe-blocker"),i.setAttribute("style","position:absolute;top:0;left:0;width:100%;height:100%"),i.onclick=function(){this.pause()}.bind(this),e.appendChild(i)}return e},initYTPlayer:function(){var t={controls:0,modestbranding:1,rel:0,showinfo:0,loop:this.options_.loop?1:0};if(void 0!==this.options_.autohide&&(t.autohide=this.options_.autohide),void 0!==this.options_.cc_load_policy&&(t.cc_load_policy=this.options_.cc_load_policy),void 0!==this.options_.ytControls&&(t.controls=this.options_.ytControls),void 0!==this.options_.disablekb&&(t.disablekb=this.options_.disablekb),void 0!==this.options_.color&&(t.color=this.options_.color),t.controls?void 0!==this.options_.fs&&(t.fs=this.options_.fs):t.fs=0,"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("end=")){var e=this.options_.source.src.match(/end=([0-9]*)/);this.options_.end=parseInt(e[1])}if(void 0!==this.options_.end&&(t.end=this.options_.end),void 0!==this.options_.hl?t.hl=this.options_.hl:void 0!==this.options_.language&&(t.hl=this.options_.language.substr(0,2)),void 0!==this.options_.iv_load_policy&&(t.iv_load_policy=this.options_.iv_load_policy),void 0!==this.options_.list?t.list=this.options_.list:this.url&&void 0!==this.url.listId&&(t.list=this.url.listId),void 0!==this.options_.listType&&(t.listType=this.options_.listType),void 0!==this.options_.modestbranding&&(t.modestbranding=this.options_.modestbranding),void 0!==this.options_.playlist&&(t.playlist=this.options_.playlist),void 0!==this.options_.playsinline&&(t.playsinline=this.options_.playsinline),void 0!==this.options_.rel&&(t.rel=this.options_.rel),void 0!==this.options_.showinfo&&(t.showinfo=this.options_.showinfo),"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("start=")){var i=this.options_.source.src.match(/start=([0-9]*)/);this.options_.start=parseInt(i[1])}if(void 0!==this.options_.start&&(t.start=this.options_.start),void 0!==this.options_.theme&&(t.theme=this.options_.theme),void 0!==this.options_.customVars){var s=this.options_.customVars;Object.keys(s).forEach((function(e){t[e]=s[e]}))}this.activeVideoId=this.url?this.url.videoId:null,this.activeList=t.list;var o={videoId:this.activeVideoId,playerVars:t,events:{onReady:this.onPlayerReady.bind(this),onPlaybackQualityChange:this.onPlayerPlaybackQualityChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}};void 0!==this.options_.enablePrivacyEnhancedMode&&this.options_.enablePrivacyEnhancedMode&&(o.host="https://www.youtube-nocookie.com"),this.ytPlayer=new YT.Player(this.options_.techId,o)},onPlayerReady:function(){this.options_.muted&&this.ytPlayer.mute(),this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)},onPlayerPlaybackQualityChange:function(){},onPlayerPlaybackRateChange:function(){this.trigger("ratechange")},onPlayerStateChange:function(t){var e=t.data;if(e!==this.lastState&&!this.errorNumber)switch(this.lastState=e,e){case-1:this.trigger("loadstart"),this.trigger("loadedmetadata"),this.trigger("durationchange"),this.trigger("ratechange");break;case YT.PlayerState.ENDED:this.trigger("ended");break;case YT.PlayerState.PLAYING:this.trigger("timeupdate"),this.trigger("durationchange"),this.trigger("playing"),this.trigger("play"),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger("canplay"),this.isSeeking?this.onSeeked():this.trigger("pause");break;case YT.PlayerState.BUFFERING:this.player_.trigger("timeupdate"),this.player_.trigger("waiting")}},onPlayerVolumeChange:function(){this.trigger("volumechange")},onPlayerError:function(t){this.errorNumber=t.data,this.trigger("pause"),this.trigger("error")},error:function(){var t=1e3+this.errorNumber;switch(this.errorNumber){case 5:return{code:t,message:"Error while trying to play the video"};case 2:case 100:return{code:t,message:"Unable to find the video"};case 101:case 150:return{code:t,message:"Playback on other Websites has been disabled by the video owner."}}return{code:t,message:"YouTube unknown error ("+this.errorNumber+")"}},loadVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.loadVideoById(e)},cueVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.cueVideoById(e)},src:function(t){return t&&this.setSrc({src:t}),this.source},poster:function(){return l?null:this.poster_},setPoster:function(t){this.poster_=t},setSrc:function(t){t&&t.src&&(delete this.errorNumber,this.source=t,this.url=d.parseUrl(t.src),this.options_.poster||this.url.videoId&&(this.poster_="https://img.youtube.com/vi/"+this.url.videoId+"/0.jpg",this.trigger("posterchange"),this.checkHighResPoster()),this.options_.autoplay&&!l?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))},autoplay:function(){return this.options_.autoplay},setAutoplay:function(t){this.options_.autoplay=t},loop:function(){return this.options_.loop},setLoop:function(t){this.options_.loop=t},play:function(){this.url&&this.url.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?(this.url.listId&&(this.activeList===this.url.listId?this.ytPlayer.playVideo():(this.ytPlayer.loadPlaylist(this.url.listId),this.activeList=this.url.listId)),this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)):(this.trigger("waiting"),this.playOnReady=!0))},pause:function(){this.ytPlayer&&this.ytPlayer.pauseVideo()},paused:function(){return!this.ytPlayer||this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING},currentTime:function(){return this.ytPlayer?this.ytPlayer.getCurrentTime():0},setCurrentTime:function(t){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(t,!0),this.trigger("timeupdate"),this.trigger("seeking"),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==t&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(function(){this.lastState===YT.PlayerState.PAUSED&&this.isSeeking?this.currentTime()!==this.timeBeforeSeek&&(this.trigger("timeupdate"),this.onSeeked()):clearInterval(this.checkSeekedInPauseInterval)}.bind(this),250))},seeking:function(){return this.isSeeking},seekable:function(){return this.ytPlayer?t.createTimeRange(0,this.ytPlayer.getDuration()):t.createTimeRange()},onSeeked:function(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger("seeked")},playbackRate:function(){return this.ytPlayer?this.ytPlayer.getPlaybackRate():1},setPlaybackRate:function(t){this.ytPlayer&&this.ytPlayer.setPlaybackRate(t)},duration:function(){return this.ytPlayer?this.ytPlayer.getDuration():0},currentSrc:function(){return this.source&&this.source.src},ended:function(){return!!this.ytPlayer&&this.lastState===YT.PlayerState.ENDED},volume:function(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1},setVolume:function(t){this.ytPlayer&&this.ytPlayer.setVolume(100*t)},muted:function(){return!!this.ytPlayer&&this.ytPlayer.isMuted()},setMuted:function(t){this.ytPlayer&&(this.muted(!0),t?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout((function(){this.trigger("volumechange")}),50))},buffered:function(){if(!this.ytPlayer||!this.ytPlayer.getVideoLoadedFraction)return t.createTimeRange();var e=this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration();return t.createTimeRange(0,e)},preload:function(){},load:function(){},reset:function(){},networkState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}},readyState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}},supportsFullScreen:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled},checkHighResPoster:function(){var t="https://img.youtube.com/vi/"+this.url.videoId+"/maxresdefault.jpg";try{var e=new Image;e.onload=function(){if("naturalHeight"in e){if(e.naturalHeight<=90||e.naturalWidth<=120)return}else if(e.height<=90||e.width<=120)return;this.poster_=t,this.trigger("posterchange")}.bind(this),e.onerror=function(){},e.src=t}catch(t){}}});d.isSupported=function(){return!0},d.canPlaySource=function(t){return d.canPlayType(t.type)},d.canPlayType=function(t){return"video/youtube"===t},d.parseUrl=function(t){var e={videoId:null},i=t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);i&&11===i[2].length&&(e.videoId=i[2]);return(i=t.match(/[?&]list=([^#\&\?]+)/))&&i[1]&&(e.listId=i[1]),e},d.apiReadyQueue=[],"undefined"!=typeof document&&(o="https://www.youtube.com/iframe_api",r=function(){YT.ready((function(){d.isApiReady=!0;for(var t=0;t + * Copyright oxmc. + */ + +window.addEventListener('HVJS-Load', async (event) => { + console.log('HVJS-Load event recived, Adding player script'); + console.log("Player-init.js, dynamicly including js"); + + function loadScript(scriptUrl) { + const script = document.createElement('script'); + script.src = scriptUrl; + document.body.appendChild(script); + + return new Promise((res, rej) => { + script.onload = function() { + res(); + } + script.onerror = function() { + rej(); + } + }); + } + + //Run player.js: + await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { + console.log('Script loaded!'); + }).catch(() => { + console.error('Player-init-plugin Script loading failed!'); + }); + + console.log("End Player-init-plugin.js"); +}); + + + + diff --git a/js/bundle-header.info b/js/bundle-header.info new file mode 100644 index 0000000..d0e4a06 --- /dev/null +++ b/js/bundle-header.info @@ -0,0 +1,5 @@ +/** + * This script includes a bundled version of videojs and a init script designed for hooverhigh + * HooverHighVideoPlayer 2 + * Copyright oxmc. + */ \ No newline at end of file diff --git a/js/header.info b/js/header.info new file mode 100644 index 0000000..d191a8c --- /dev/null +++ b/js/header.info @@ -0,0 +1,5 @@ +/** + * This script includes a bundle of videojs plugins designed for hooverhigh + * HooverHighVideoPlayer 2 + * Copyright oxmc. + */ \ No newline at end of file diff --git a/js/videojs-bundle-dev.min.js b/js/videojs-bundle-dev.min.js new file mode 100644 index 0000000..8be7674 --- /dev/null +++ b/js/videojs-bundle-dev.min.js @@ -0,0 +1,21143 @@ +/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ ! function(e, o) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = o(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], o) : (e = "undefined" != typeof globalThis ? globalThis : e || self).videojsErrors = o(e.videojs) +}(this, (function(e) { + "use strict"; + + function o(e) { + return e && "object" == typeof e && "default" in e ? e : { + default: e + } + } + var t = o(e), + i = "6.0.0"; + const n = t.default.getComponent("Flash"), + r = !t.default.browser.IS_IPHONE, + s = t.default.registerPlugin || t.default.plugin, + d = { + header: "", + code: "", + message: "", + timeout: 45e3, + backgroundTimeout: 3e5, + dismiss: r, + errors: { + 1: { + type: "MEDIA_ERR_ABORTED", + headline: "The video download was cancelled" + }, + 2: { + type: "MEDIA_ERR_NETWORK", + headline: "The video connection was lost, please confirm you are connected to the internet" + }, + 3: { + type: "MEDIA_ERR_DECODE", + headline: "The video is bad or in a format that cannot be played on your browser" + }, + 4: { + type: "MEDIA_ERR_SRC_NOT_SUPPORTED", + headline: "This video is either unavailable or not supported in this browser" + }, + 5: { + type: "MEDIA_ERR_ENCRYPTED", + headline: "The video you are trying to watch is encrypted and we do not know how to decrypt it" + }, + unknown: { + type: "MEDIA_ERR_UNKNOWN", + headline: "An unanticipated problem was encountered, check back soon and try again" + }, + "-1": { + type: "PLAYER_ERR_NO_SRC", + headline: "No video has been loaded" + }, + "-2": { + type: "PLAYER_ERR_TIMEOUT", + headline: "It looks like you're having playback issues. Reloading the video may help." + }, + PLAYER_ERR_DOMAIN_RESTRICTED: { + headline: "This video is restricted from playing on your current domain" + }, + PLAYER_ERR_IP_RESTRICTED: { + headline: "This video is restricted at your current IP address" + }, + PLAYER_ERR_GEO_RESTRICTED: { + headline: "This video is restricted from playing in your current geographic region" + }, + FLASHLS_ERR_CROSS_DOMAIN: { + headline: "The video could not be loaded: crossdomain access denied." + } + } + }, + a = function(e, o) { + let r, s, l; + const c = [], + u = function(e) { + o.errors = t.default.mergeOptions(o.errors, e), Object.keys(o.errors).forEach((e => { + const t = o.errors[e]; + t.type || (t.type = e) + })) + }; + u(); + const f = function() { + e.error() && -2 === e.error().code && e.error(null), e.clearTimeout(s), e.clearTimeout(r), l && (l = !1, e.removeClass("vjs-waiting")); + const t = [1 / 0, -1], + i = (e, o) => -1 !== e.indexOf(o); + "hidden" === document.visibilityState && (e.muted() || i(t, o.backgroundTimeout)) || "visible" === document.visibilityState && i(t, o.timeout) || (s = e.setTimeout((function() { + e.error() || e.paused() || e.ended() || (l = !0, e.addClass("vjs-waiting")) + }), 1e3), r = e.setTimeout((function() { + e.error() || e.paused() || e.ended() || e.error({ + code: -2, + type: "PLAYER_ERR_TIMEOUT" + }) + }), "hidden" === document.visibilityState ? o.backgroundTimeout : o.timeout)) + }, + h = function() { + let o; + for (; c.length;) o = c.shift(), e.off(o[0], o[1]); + e.clearTimeout(r), e.clearTimeout(s) + }, + p = function() { + let o = 0; + h(), f(), + function(o, t) { + const i = function() { + if (!e.error()) { + const o = e.$(".vjs-tech"); + if (o && "application/x-shockwave-flash" === o.type && !o.vjs_getProperty) return void e.error({ + code: -2, + type: "PLAYER_ERR_TIMEOUT" + }); + if (e.paused()) return f(); + if (e.ended()) return f() + } + t.call(this) + }; + e.on(o, i), c.push([o, i]) + }(["timeupdate", "adtimeupdate"], (function() { + const t = e.currentTime(); + t !== o && (o = t, f()) + })), e.off(document, "visibilitychange", p), e.on(document, "visibilitychange", p) + }, + m = function() { + e.currentSrc() || e.error({ + code: -1, + type: "PLAYER_ERR_NO_SRC" + }) + }, + v = function() { + let i = "", + r = e.error(); + const s = document.createElement("div"); + let d = ""; + if (!r) return; + if (e.off(document, "visibilitychange", p), r = t.default.mergeOptions(r, o.errors[r.code || r.type || 0]), r.message && (i = `
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`), 4 === r.code && n && !n.isSupported()) { + i += `${e.localize("If you are using an older browser please try upgrading or installing Flash.")}` + } + const a = e.getChild("errorDisplay"); + s.className = "vjs-errors-dialog"; + const l = `
${this.localize("Error Code")}: ${r.type||r.code}
`, + c = -2 === r.code; + d = `
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`; + const u = a.closeable(!("dismiss" in r) || r.dismiss); + if (c) { + d += `
\n \n \n
`, s.innerHTML = d, a.fillWith(s), a.getChild("closeButton").hide(); + const o = a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"), + t = a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child"); + e.on(o, "click", (function() { + const o = e.currentSource(); + e.reset(), e.src(o) + })), e.on(t, "click", (function() { + a.close() + })), a.one("modalclose", (() => { + e.off(o), e.off(t) + })) + } else if (u) { + d += `
\n \n
`, s.innerHTML = d, a.fillWith(s), a.contentEl().firstChild.appendChild(a.getChild("closeButton").el()); + const o = a.el().querySelector(".vjs-errors-ok-button"); + e.on(o, "click", (function() { + a.close() + })) + } else s.innerHTML = d, a.fillWith(s); + (e.currentWidth() <= 600 || e.currentHeight() <= 250) && a.addClass("vjs-xs"), a.one("modalclose", (() => e.error(null))) + }, + y = function() { + h(), e.removeClass("vjs-errors"), e.off("play", p), e.off(document, "visibilitychange", p), e.off("play", m), e.off("dispose", y), e.off(["aderror", "error"], v) + }, + R = function(o) { + y(), a(e, t.default.mergeOptions(d, o)) + }; + R.extend = e => u(e), R.getAll = () => t.default.mergeOptions(o.errors), R.timeout = function(t) { + if (void 0 === t) return o.timeout; + t !== o.timeout && (o.timeout = t, e.paused() || p()) + }, R.backgroundTimeout = function(t) { + if (void 0 === t) return o.backgroundTimeout; + t !== o.backgroundTimeout && (o.backgroundTimeout = t, e.paused() || p()) + }, R.disableProgress = () => {}, e.on("play", p), e.on("play", m), e.on("dispose", y), e.on(["aderror", "contenterror", "error"], v), e.ready((() => { + e.addClass("vjs-errors") + })), e.paused() || p(), R.VERSION = i, e.errors = R + }, + l = function(e) { + a(this, t.default.mergeOptions(d, e)) + }; + return ["extend", "getAll"].forEach((e => { + l[e] = function() { + t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`) + } + })), l.VERSION = i, s("errors", l), l +})); +/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ +! function(e, t) { + if ("undefined" != typeof window && window.videojs) t(window.videojs); + else if ("function" == typeof define && define.amd) define("videojs-hotkeys", ["video.js"], function(e) { + return t(e.default || e) + }); + else if ("undefined" != typeof module && module.exports) { + var n = require("video.js"); + module.exports = t(n.default || n) + } +}(0, function(x) { + "use strict"; + "undefined" != typeof window && (window.videojs_hotkeys = { + version: "0.2.28" + }); + (x.registerPlugin || x.plugin)("hotkeys", function(m) { + var f = this, + y = f.el(), + v = document, + e = { + volumeStep: .1, + seekStep: 5, + enableMute: !0, + enableVolumeScroll: !0, + enableHoverScroll: !1, + enableFullscreen: !0, + enableNumbers: !0, + enableJogStyle: !1, + alwaysCaptureHotkeys: !1, + captureDocumentHotkeys: !1, + documentHotkeysFocusElementFilter: function() { + return !1 + }, + enableModifiersForNumbers: !0, + enableInactiveFocus: !0, + skipInitialFocus: !1, + playPauseKey: function(e) { + return 32 === e.which || 179 === e.which + }, + rewindKey: function(e) { + return 37 === e.which || 177 === e.which + }, + forwardKey: function(e) { + return 39 === e.which || 176 === e.which + }, + volumeUpKey: function(e) { + return 38 === e.which + }, + volumeDownKey: function(e) { + return 40 === e.which + }, + muteKey: function(e) { + return 77 === e.which + }, + fullscreenKey: function(e) { + return 70 === e.which + }, + customKeys: {} + }, + t = x.mergeOptions || x.util.mergeOptions, + d = (m = t(e, m || {})).volumeStep, + n = m.seekStep, + p = m.enableMute, + o = m.enableVolumeScroll, + r = m.enableHoverScroll, + b = m.enableFullscreen, + h = m.enableNumbers, + w = m.enableJogStyle, + k = m.alwaysCaptureHotkeys, + S = m.captureDocumentHotkeys, + K = m.documentHotkeysFocusElementFilter, + F = m.enableModifiersForNumbers, + u = m.enableInactiveFocus, + l = m.skipInitialFocus, + i = x.VERSION; + y.hasAttribute("tabIndex") || y.setAttribute("tabIndex", "-1"), y.style.outline = "none", !k && f.autoplay() || l || f.one("play", function() { + y.focus() + }), u && f.on("userinactive", function() { + var n = function() { + clearTimeout(e) + }, + e = setTimeout(function() { + f.off("useractive", n); + var e = v.activeElement, + t = y.querySelector(".vjs-control-bar"); + e && e.parentElement == t && y.focus() + }, 10); + f.one("useractive", n) + }), f.on("play", function() { + var e = y.querySelector(".iframeblocker"); + e && "" === e.style.display && (e.style.display = "block", e.style.bottom = "39px") + }); + var c = function(e) { + var t, n, o = e.which, + r = e.preventDefault.bind(e), + u = f.duration(); + if (f.controls()) { + var l = v.activeElement; + if (k || S && K(l) || l == y || l == y.querySelector(".vjs-tech") || l == y.querySelector(".vjs-control-bar") || l == y.querySelector(".iframeblocker")) switch (j(e, f)) { + case 1: + r(), (k || S) && e.stopPropagation(), f.paused() ? E(f.play()) : f.pause(); + break; + case 2: + t = !f.paused(), r(), t && f.pause(), (n = f.currentTime() - T(e)) <= 0 && (n = 0), f.currentTime(n), t && E(f.play()); + break; + case 3: + t = !f.paused(), r(), t && f.pause(), u <= (n = f.currentTime() + T(e)) && (n = t ? u - .001 : u), f.currentTime(n), t && E(f.play()); + break; + case 5: + r(), w ? (n = f.currentTime() - 1, f.currentTime() <= 1 && (n = 0), f.currentTime(n)) : f.volume(f.volume() - d); + break; + case 4: + r(), w ? (u <= (n = f.currentTime() + 1) && (n = u), f.currentTime(n)) : f.volume(f.volume() + d); + break; + case 6: + p && f.muted(!f.muted()); + break; + case 7: + b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()); + break; + default: + if ((47 < o && o < 59 || 95 < o && o < 106) && (F || !(e.metaKey || e.ctrlKey || e.altKey)) && h) { + var i = 48; + 95 < o && (i = 96); + var c = o - i; + r(), f.currentTime(f.duration() * c * .1) + } + for (var a in m.customKeys) { + var s = m.customKeys[a]; + s && s.key && s.handler && s.key(e) && (r(), s.handler(f, m, e)) + } + } + } + }, + a = !1, + s = y.querySelector(".vjs-volume-menu-button") || y.querySelector(".vjs-volume-panel"); + null != s && (s.onmouseover = function() { + a = !0 + }, s.onmouseout = function() { + a = !1 + }); + var q = function(e) { + if (r) var t = 0; + else t = v.activeElement; + if (f.controls() && (k || t == y || t == y.querySelector(".vjs-tech") || t == y.querySelector(".iframeblocker") || t == y.querySelector(".vjs-control-bar") || a) && o) { + e = window.event || e; + var n = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail)); + e.preventDefault(), 1 == n ? f.volume(f.volume() + d) : -1 == n && f.volume(f.volume() - d) + } + }, + j = function(e, t) { + return m.playPauseKey(e, t) ? 1 : m.rewindKey(e, t) ? 2 : m.forwardKey(e, t) ? 3 : m.volumeUpKey(e, t) ? 4 : m.volumeDownKey(e, t) ? 5 : m.muteKey(e, t) ? 6 : m.fullscreenKey(e, t) ? 7 : void 0 + }; + + function T(e) { + return "function" == typeof n ? n(e) : n + } + + function E(e) { + null != e && "function" == typeof e.then && e.then(null, function(e) {}) + } + if (S) { + var g = function(e) { + c(e) + }; + document.addEventListener("keydown", g), this.dispose = function() { + document.removeEventListener("keydown", g) + } + } else f.on("keydown", c); + return f.on("dblclick", function(e) { + if (null != i && i <= "7.1.0" && f.controls()) { + var t = e.relatedTarget || e.toElement || v.activeElement; + t != y && t != y.querySelector(".vjs-tech") && t != y.querySelector(".iframeblocker") || b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()) + } + }), f.on("mousewheel", q), f.on("DOMMouseScroll", q), this + }) +}); +/*! @name videojs-contrib-ads @version 6.9.0 @license Apache-2.0 */ +! function(e, t) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("video.js"), require("global/window"), require("global/document")) : "function" == typeof define && define.amd ? define(["video.js", "global/window", "global/document"], t) : (e = e || self).videojsContribAds = t(e.videojs, e.window, e.document) +}(this, function(e, t, n) { + "use strict"; + e = e && e.hasOwnProperty("default") ? e.default : e, t = t && t.hasOwnProperty("default") ? t.default : t, n = n && n.hasOwnProperty("default") ? n.default : n; + var a = "6.9.0"; + var o = function(e, t) { + t.isImmediatePropagationStopped = function() { + return !0 + }, t.cancelBubble = !0, t.isPropagationStopped = function() { + return !0 + } + }, + r = function(e, t, n) { + o(0, n), e.trigger({ + type: t + n.type, + originalEvent: n + }) + }, + i = function(e, t) { + e.ads.isInAdMode() && (e.ads.isContentResuming() ? e.ads._contentEnding && r(e, "content", t) : r(e, "ad", t)) + }, + s = function(e, t) { + e.ads.isInAdMode() ? e.ads.isContentResuming() ? (o(0, t), e.trigger("resumeended")) : r(e, "ad", t) : e.ads._contentHasEnded || e.ads.stitchedAds() || (r(e, "content", t), e.trigger("readyforpostroll")) + }, + d = function(e, t) { + if (!("loadstart" === t.type && !e.ads._hasThereBeenALoadStartDuringPlayerLife || "loadeddata" === t.type && !e.ads._hasThereBeenALoadedData || "loadedmetadata" === t.type && !e.ads._hasThereBeenALoadedMetaData)) + if (e.ads.inAdBreak()) r(e, "ad", t); + else { + if (e.currentSrc() !== e.ads.contentSrc) return; + r(e, "content", t) + } + }, + l = function(e, t) { + e.ads.inAdBreak() ? r(e, "ad", t) : e.ads.isContentResuming() && r(e, "content", t) + }; + + function u(e) { + "playing" === e.type ? i(this, e) : "ended" === e.type ? s(this, e) : "loadstart" === e.type || "loadeddata" === e.type || "loadedmetadata" === e.type ? d(this, e) : "play" === e.type ? l(this, e) : this.ads.isInAdMode() && (this.ads.isContentResuming() ? r(this, "content", e) : r(this, "ad", e)) + } + var c = {}, + f = function() { + ! function(n) { + if (e.dom.isInFrame() && "function" != typeof t.__tcfapi) { + for (var a, o = t, r = {}; o;) { + try { + if (o.frames.__tcfapiLocator) { + a = o; + break + } + } catch (e) {} + if (o === t.top) break; + o = o.parent + } + if (!a) return; + t.__tcfapi = function(e, t, n, o) { + var i = Math.random() + "", + s = { + __tcfapiCall: { + command: e, + parameter: o, + version: t, + callId: i + } + }; + r[i] = n, a.postMessage(s, "*") + }, t.addEventListener("message", function(e) { + var t = {}; + try { + t = "string" == typeof e.data ? JSON.parse(e.data) : e.data + } catch (e) {} + var n = t.__tcfapiReturn; + n && "function" == typeof r[n.callId] && (r[n.callId](n.returnValue, n.success), r[n.callId] = null) + }, !1) + } + }(), "function" == typeof t.__tcfapi && t.__tcfapi("addEventListener", 2, function(e, t) { + t && (c = e) + }) + }, + h = function(e, t) { + return t ? encodeURIComponent(e) : e + }, + p = function(e, t, n) { + if (e && e[n]) + for (var a = e[n], o = Object.keys(a), r = 0; r < o.length; r++) { + t["{mediainfo." + n + "." + o[r] + "}"] = a[o[r]] + } + }; + var g = { + processMetadataTracks: function(e, t) { + for (var n = e.textTracks(), a = function(n) { + "metadata" === n.kind && (e.ads.cueTextTracks.setMetadataTrackMode(n), t(e, n)) + }, o = 0; o < n.length; o++) a(n[o]); + n.addEventListener("addtrack", function(e) { + a(e.track) + }) + }, + setMetadataTrackMode: function(e) {}, + getSupportedAdCue: function(e, t) { + return t + }, + isSupportedAdCue: function(e, t) { + return !0 + }, + getCueId: function(e, t) { + return t.id + } + }, + y = function(e, t) { + return void 0 !== t && e.ads.includedCues[t] + }, + v = function(e, t) { + void 0 !== t && "" !== t && (e.ads.includedCues[t] = !0) + }; + + function m() { + !1 !== this.ads._shouldBlockPlay && (this.paused() || (this.ads.debug("Playback was canceled by cancelContentPlay"), this.pause()), this.ads._cancelledPlay = !0) + } + g.processAdTrack = function(t, n, a, o) { + t.ads.includedCues = {}; + for (var r = 0; r < n.length; r++) { + var i = n[r], + s = this.getSupportedAdCue(t, i); + if (!this.isSupportedAdCue(t, i)) return void e.log.warn("Skipping as this is not a supported ad cue.", i); + var d = this.getCueId(t, i), + l = i.startTime; + if (y(t, d)) return void e.log("Skipping ad already seen with ID " + d); + o && o(t, s, d, l), a(t, s, d, l), v(t, d) + } + }; + var A = {}, + S = e; + A.isMiddlewareMediatorSupported = function() { + return !S.browser.IS_IOS && !S.browser.IS_ANDROID && !!(S.use && S.middleware && S.middleware.TERMINATOR) + }, A.playMiddleware = function(t) { + return { + setSource: function(e, t) { + t(null, e) + }, + callPlay: function() { + if (t.ads && !0 === t.ads._shouldBlockPlay) return t.ads.debug("Using playMiddleware to block content playback"), t.ads._playBlocked = !0, S.middleware.TERMINATOR + }, + play: function(n, a) { + t.ads && t.ads._playBlocked && n ? (t.ads.debug("Play call to Tech was terminated."), t.trigger("play"), t.addClass("vjs-has-started"), t.ads._playBlocked = !1) : a && a.catch && a.catch(function(n) { + "NotAllowedError" !== n.name || e.browser.IS_SAFARI || t.trigger("pause") + }) + } + } + }, A.testHook = function(e) { + S = e + }; + var _ = A.playMiddleware, + P = A.isMiddlewareMediatorSupported, + b = function() { + if (e.getPlugin) return Boolean(e.getPlugin("ads")); + var t = e.getComponent("Player"); + return Boolean(t && t.prototype.ads) + }; + var k = function() { + function e() {} + return e.getState = function(t) { + if (t) return e.states_ && e.states_[t] ? e.states_[t] : void 0 + }, e.registerState = function(t, n) { + if ("string" != typeof t || !t) throw new Error('Illegal state name, "' + t + '"; must be a non-empty string.'); + return e.states_ || (e.states_ = {}), e.states_[t] = n, n + }, e + }(), + C = function() { + function t(e) { + this.player = e + } + t._getName = function() { + return "Anonymous State" + }; + var n = t.prototype; + return n.transitionTo = function(e) { + var t = this.player; + this.cleanup(t); + var n = new e(t); + t.ads._state = n, t.ads.debug(this.constructor._getName() + " -> " + n.constructor._getName()); + for (var a = arguments.length, o = new Array(a > 1 ? a - 1 : 0), r = 1; r < a; r++) o[r - 1] = arguments[r]; + n.init.apply(n, [t].concat(o)) + }, n.init = function() {}, n.cleanup = function() {}, n.onPlay = function() {}, n.onPlaying = function() {}, n.onEnded = function() {}, n.onAdEnded = function() {}, n.onAdsReady = function() { + e.log.warn("Unexpected adsready event") + }, n.onAdsError = function() {}, n.onAdsCanceled = function() {}, n.onAdTimeout = function() {}, n.onAdStarted = function() {}, n.onContentChanged = function() {}, n.onContentResumed = function() {}, n.onReadyForPostroll = function() { + e.log.warn("Unexpected readyforpostroll event") + }, n.onNoPreroll = function() {}, n.onNoPostroll = function() {}, n.startLinearAdMode = function() { + e.log.warn("Unexpected startLinearAdMode invocation (State via " + this.constructor._getName() + ")") + }, n.endLinearAdMode = function() { + e.log.warn("Unexpected endLinearAdMode invocation (State via " + this.constructor._getName() + ")") + }, n.skipLinearAdMode = function() { + e.log.warn("Unexpected skipLinearAdMode invocation (State via " + this.constructor._getName() + ")") + }, n.isAdState = function() { + throw new Error("isAdState unimplemented for " + this.constructor._getName()) + }, n.isWaitingForAdBreak = function() { + return !1 + }, n.isContentResuming = function() { + return !1 + }, n.inAdBreak = function() { + return !1 + }, n.handleEvent = function(e) { + var t = this.player; + "play" === e ? this.onPlay(t) : "adsready" === e ? this.onAdsReady(t) : "adserror" === e ? this.onAdsError(t) : "adscanceled" === e ? this.onAdsCanceled(t) : "adtimeout" === e ? this.onAdTimeout(t) : "ads-ad-started" === e ? this.onAdStarted(t) : "contentchanged" === e ? this.onContentChanged(t) : "contentresumed" === e ? this.onContentResumed(t) : "readyforpostroll" === e ? this.onReadyForPostroll(t) : "playing" === e ? this.onPlaying(t) : "ended" === e ? this.onEnded(t) : "nopreroll" === e ? this.onNoPreroll(t) : "nopostroll" === e ? this.onNoPostroll(t) : "adended" === e && this.onAdEnded(t) + }, t + }(); + + function T(e, t) { + e.prototype = Object.create(t.prototype), e.prototype.constructor = e, e.__proto__ = t + } + k.registerState("State", C); + var w = function(e) { + function t(t) { + var n; + return (n = e.call(this, t) || this).contentResuming = !1, n.waitingForAdBreak = !1, n + } + T(t, e); + var n = t.prototype; + return n.isAdState = function() { + return !0 + }, n.onPlaying = function() { + var e = k.getState("ContentPlayback"); + this.contentResuming && this.transitionTo(e) + }, n.onContentResumed = function() { + var e = k.getState("ContentPlayback"); + this.contentResuming && this.transitionTo(e) + }, n.isWaitingForAdBreak = function() { + return this.waitingForAdBreak + }, n.isContentResuming = function() { + return this.contentResuming + }, n.inAdBreak = function() { + return !0 === this.player.ads._inLinearAdMode + }, t + }(C); + k.registerState("AdState", w); + var R = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e); + var n = t.prototype; + return n.isAdState = function() { + return !1 + }, n.onContentChanged = function(e) { + var t = k.getState("BeforePreroll"), + n = k.getState("Preroll"); + e.ads.debug("Received contentchanged event (ContentState)"), e.paused() ? this.transitionTo(t) : (this.transitionTo(n, !1), e.pause(), e.ads._pausedOnContentupdate = !0) + }, t + }(C); + k.registerState("ContentState", R); + var L, B = function(t) { + function n() { + return t.apply(this, arguments) || this + } + T(n, t), n._getName = function() { + return "AdsDone" + }; + var a = n.prototype; + return a.init = function(e) { + e.ads._contentHasEnded = !0, e.trigger("ended") + }, a.startLinearAdMode = function() { + e.log.warn("Unexpected startLinearAdMode invocation (AdsDone)") + }, n + }(k.getState("ContentState")); + k.registerState("AdsDone", B); + var M = { + start: function(t) { + t.ads.debug("Starting ad break"), t.ads._inLinearAdMode = !0, t.trigger("adstart"), t.ads.shouldTakeSnapshots() && (t.ads.snapshot = function(t) { + var n; + n = e.browser.IS_IOS && t.ads.isLive(t) && t.seekable().length > 0 ? t.currentTime() - t.seekable().end(0) : t.currentTime(); + var a = t.$(".vjs-tech"), + o = t.textTracks ? t.textTracks() : [], + r = [], + i = { + ended: t.ended(), + currentSrc: t.currentSrc(), + sources: t.currentSources(), + src: t.tech_.src(), + currentTime: n, + type: t.currentType() + }; + a && (i.style = a.getAttribute("style")); + for (var s = 0; s < o.length; s++) { + var d = o[s]; + r.push({ + track: d, + mode: d.mode + }), d.mode = "disabled" + } + return i.suppressedTracks = r, i + }(t)), t.ads.shouldPlayContentBehindAd(t) && (t.ads.preAdVolume_ = t.volume(), t.volume(0)), t.addClass("vjs-ad-playing"), t.hasClass("vjs-live") && t.removeClass("vjs-live"), t.ads.removeNativePoster() + }, + end: function(t, n) { + t.ads.debug("Ending ad break"), void 0 === n && (n = function() {}), t.ads.adType = null, t.ads._inLinearAdMode = !1, t.trigger("adend"), t.removeClass("vjs-ad-playing"), t.ads.isLive(t) && t.addClass("vjs-live"), t.ads.shouldTakeSnapshots() ? function(t, n) { + var a = t.ads.snapshot; + if (void 0 === n && (n = function() {}), !0 === t.ads.disableNextSnapshotRestore) return t.ads.disableNextSnapshotRestore = !1, delete t.ads.snapshot, void n(); + var o, r = t.$(".vjs-tech"), + i = 20, + s = a.suppressedTracks, + d = function() { + for (var e = 0; e < s.length; e++)(o = s[e]).track.mode = o.mode + }, + l = function() { + var n; + if (e.browser.IS_IOS && t.ads.isLive(t)) { + if (a.currentTime < 0 && (n = t.seekable().length > 0 ? t.seekable().end(0) + a.currentTime : t.currentTime(), t.currentTime(n)), t.paused()) { + var o = t.play(); + o && o.catch && o.catch(function(t) { + e.log.warn("Play promise rejected in IOS snapshot resume", t) + }) + } + } else if (a.ended) t.currentTime(t.duration()); + else { + t.currentTime(a.currentTime); + var r = t.play(); + r && r.catch && r.catch(function(t) { + e.log.warn("Play promise rejected in snapshot resume", t) + }) + } + t.ads.shouldRemoveAutoplay_ && (t.autoplay(!1), t.ads.shouldRemoveAutoplay_ = !1) + }, + u = function n() { + if (t.off("contentcanplay", n), L && t.clearTimeout(L), (r = t.el().querySelector(".vjs-tech")).readyState > 1) return l(); + if (void 0 === r.seekable) return l(); + if (r.seekable.length > 0) return l(); + if (i--) t.setTimeout(n, 50); + else try { + l() + } catch (t) { + e.log.warn("Failed to resume the content after an advertisement", t) + } + }; + if ("style" in a && r.setAttribute("style", a.style || ""), t.ads.videoElementRecycled()) t.one("resumeended", function() { + delete t.ads.snapshot, n() + }), t.one("contentloadedmetadata", d), e.browser.IS_IOS && !t.autoplay() && (t.autoplay(!0), t.ads.shouldRemoveAutoplay_ = !0), t.src(a.sources), t.one("contentcanplay", u), L = t.setTimeout(u, 2e3); + else { + if (d(), !t.ended()) { + var c = t.play(); + c && c.catch && c.catch(function(t) { + e.log.warn("Play promise rejected in snapshot restore", t) + }) + } + delete t.ads.snapshot, n() + } + }(t, n) : (t.volume(t.ads.preAdVolume_), n()) + } + }, + j = function(t) { + function n() { + return t.apply(this, arguments) || this + } + T(n, t), n._getName = function() { + return "Preroll" + }; + var a = n.prototype; + return a.init = function(e, t, n) { + if (this.waitingForAdBreak = !0, e.addClass("vjs-ad-loading"), n || e.ads.nopreroll_) return this.resumeAfterNoPreroll(e); + var a = e.ads.settings.timeout; + "number" == typeof e.ads.settings.prerollTimeout && (a = e.ads.settings.prerollTimeout), this._timeout = e.setTimeout(function() { + e.trigger("adtimeout") + }, a), t ? this.handleAdsReady() : this.adsReady = !1 + }, a.onAdsReady = function(t) { + t.ads.inAdBreak() ? e.log.warn("Unexpected adsready event (Preroll)") : (t.ads.debug("Received adsready event (Preroll)"), this.handleAdsReady()) + }, a.handleAdsReady = function() { + this.adsReady = !0, this.readyForPreroll() + }, a.afterLoadStart = function(e) { + var t = this.player; + t.ads._hasThereBeenALoadStartDuringPlayerLife ? e() : (t.ads.debug("Waiting for loadstart..."), t.one("loadstart", function() { + t.ads.debug("Received loadstart event"), e() + })) + }, a.noPreroll = function() { + var e = this; + this.afterLoadStart(function() { + e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"), e.resumeAfterNoPreroll(e.player) + }) + }, a.readyForPreroll = function() { + var e = this.player; + this.afterLoadStart(function() { + e.ads.debug("Triggered readyforpreroll event (Preroll)"), e.trigger("readyforpreroll") + }) + }, a.onAdsCanceled = function(e) { + var t = this; + e.ads.debug("adscanceled (Preroll)"), this.afterLoadStart(function() { + t.resumeAfterNoPreroll(e) + }) + }, a.onAdsError = function(t) { + var n = this; + e.log("adserror (Preroll)"), this.inAdBreak() ? t.ads.endLinearAdMode() : this.afterLoadStart(function() { + n.resumeAfterNoPreroll(t) + }) + }, a.startLinearAdMode = function() { + var t = this.player; + !this.adsReady || t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Preroll)") : (this.clearTimeout(t), t.ads.adType = "preroll", this.waitingForAdBreak = !1, M.start(t), t.ads._shouldBlockPlay = !1) + }, a.onAdStarted = function(e) { + e.removeClass("vjs-ad-loading") + }, a.endLinearAdMode = function() { + var e = this.player; + this.inAdBreak() && (e.removeClass("vjs-ad-loading"), e.addClass("vjs-ad-content-resuming"), this.contentResuming = !0, M.end(e)) + }, a.skipLinearAdMode = function() { + var t = this, + n = this.player; + n.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : this.afterLoadStart(function() { + n.trigger("adskip"), n.ads.debug("skipLinearAdMode (Preroll)"), t.resumeAfterNoPreroll(n) + }) + }, a.onAdTimeout = function(e) { + var t = this; + this.afterLoadStart(function() { + e.ads.debug("adtimeout (Preroll)"), t.resumeAfterNoPreroll(e) + }) + }, a.onNoPreroll = function(t) { + t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected nopreroll event (Preroll)") : this.noPreroll() + }, a.resumeAfterNoPreroll = function(e) { + if (this.contentResuming = !0, e.ads._shouldBlockPlay = !1, this.cleanupPartial(e), e.ads._playRequested || e.ads._pausedOnContentupdate) + if (e.paused()) { + e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)"); + var t = e.play(); + t && t.then && t.then(null, function(e) {}) + } else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"), e.trigger("play"), e.trigger("playing") + }, a.cleanup = function(t) { + t.ads._hasThereBeenALoadStartDuringPlayerLife || e.log.warn("Leaving Preroll state before loadstart event can cause issues."), this.cleanupPartial(t) + }, a.cleanupPartial = function(e) { + e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming"), this.clearTimeout(e) + }, a.clearTimeout = function(e) { + e.clearTimeout(this._timeout), this._timeout = null + }, n + }(k.getState("AdState")); + k.registerState("Preroll", j); + var I = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "BeforePreroll" + }; + var n = t.prototype; + return n.init = function(e) { + this.adsReady = !1, this.shouldResumeToContent = !1, e.ads._shouldBlockPlay = !e.ads.settings.allowVjsAutoplay || !e.autoplay() + }, n.onAdsReady = function(e) { + e.ads.debug("Received adsready event (BeforePreroll)"), this.adsReady = !0 + }, n.onPlay = function(e) { + var t = k.getState("Preroll"); + e.ads.debug("Received play event (BeforePreroll)"), this.transitionTo(t, this.adsReady, this.shouldResumeToContent) + }, n.onAdsCanceled = function(e) { + e.ads.debug("adscanceled (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.onAdsError = function() { + this.player.ads.debug("adserror (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.onNoPreroll = function() { + this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.skipLinearAdMode = function() { + var e = this.player; + e.trigger("adskip"), e.ads.debug("skipLinearAdMode (BeforePreroll)"), this.shouldResumeToContent = !0 + }, n.onContentChanged = function() { + this.init(this.player) + }, t + }(k.getState("ContentState")); + k.registerState("BeforePreroll", I); + var N = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "Midroll" + }; + var n = t.prototype; + return n.init = function(e) { + e.ads.adType = "midroll", M.start(e), e.addClass("vjs-ad-loading") + }, n.onAdStarted = function(e) { + e.removeClass("vjs-ad-loading") + }, n.endLinearAdMode = function() { + var e = this.player; + this.inAdBreak() && (this.contentResuming = !0, e.addClass("vjs-ad-content-resuming"), e.removeClass("vjs-ad-loading"), M.end(e)) + }, n.onAdsError = function(e) { + this.inAdBreak() && e.ads.endLinearAdMode() + }, n.cleanup = function(e) { + e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming") + }, t + }(k.getState("AdState")); + k.registerState("Midroll", N); + var E = function(t) { + function n() { + return t.apply(this, arguments) || this + } + T(n, t), n._getName = function() { + return "Postroll" + }; + var a = n.prototype; + return a.init = function(e) { + if (this.waitingForAdBreak = !0, e.ads._contentEnding = !0, e.ads.nopostroll_) { + this.resumeContent(e); + var t = k.getState("AdsDone"); + this.transitionTo(t) + } else { + e.addClass("vjs-ad-loading"); + var n = e.ads.settings.timeout; + "number" == typeof e.ads.settings.postrollTimeout && (n = e.ads.settings.postrollTimeout), this._postrollTimeout = e.setTimeout(function() { + e.trigger("adtimeout") + }, n) + } + }, a.startLinearAdMode = function() { + var t = this.player; + t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Postroll)") : (t.ads.adType = "postroll", t.clearTimeout(this._postrollTimeout), this.waitingForAdBreak = !1, M.start(t)) + }, a.onAdStarted = function(e) { + e.removeClass("vjs-ad-loading") + }, a.endLinearAdMode = function() { + var e = this, + t = this.player, + n = k.getState("AdsDone"); + this.inAdBreak() && (t.removeClass("vjs-ad-loading"), this.resumeContent(t), M.end(t, function() { + e.transitionTo(n) + })) + }, a.skipLinearAdMode = function() { + var t = this.player; + t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : (t.ads.debug("Postroll abort (skipLinearAdMode)"), t.trigger("adskip"), this.abort(t)) + }, a.onAdTimeout = function(e) { + e.ads.debug("Postroll abort (adtimeout)"), this.abort(e) + }, a.onAdsError = function(e) { + e.ads.debug("Postroll abort (adserror)"), e.ads.inAdBreak() ? e.ads.endLinearAdMode() : this.abort(e) + }, a.onContentChanged = function(e) { + if (this.isContentResuming()) { + var t = k.getState("BeforePreroll"); + this.transitionTo(t) + } else if (!this.inAdBreak()) { + var n = k.getState("Preroll"); + this.transitionTo(n) + } + }, a.onNoPostroll = function(t) { + this.isContentResuming() || this.inAdBreak() ? e.log.warn("Unexpected nopostroll event (Postroll)") : this.abort(t) + }, a.resumeContent = function(e) { + this.contentResuming = !0, e.addClass("vjs-ad-content-resuming") + }, a.abort = function(e) { + var t = k.getState("AdsDone"); + this.resumeContent(e), e.removeClass("vjs-ad-loading"), this.transitionTo(t) + }, a.cleanup = function(e) { + e.removeClass("vjs-ad-content-resuming"), e.clearTimeout(this._postrollTimeout), e.ads._contentEnding = !1 + }, n + }(k.getState("AdState")); + k.registerState("Postroll", E); + var x = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "ContentPlayback" + }; + var n = t.prototype; + return n.init = function(e) { + e.ads._shouldBlockPlay = !1 + }, n.onAdsReady = function(e) { + e.ads.debug("Received adsready event (ContentPlayback)"), e.ads.nopreroll_ || (e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"), e.trigger("readyforpreroll")) + }, n.onReadyForPostroll = function(e) { + var t = k.getState("Postroll"); + e.ads.debug("Received readyforpostroll event"), this.transitionTo(t) + }, n.startLinearAdMode = function() { + var e = k.getState("Midroll"); + this.transitionTo(e) + }, t + }(k.getState("ContentState")); + k.registerState("ContentPlayback", x); + var D = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "StitchedContentPlayback" + }; + var n = t.prototype; + return n.init = function() { + this.player.ads._shouldBlockPlay = !1 + }, n.onContentChanged = function() { + this.player.ads.debug("Received contentchanged event (" + this.constructor._getName() + ")") + }, n.startLinearAdMode = function() { + var e = k.getState("StitchedAdRoll"); + this.transitionTo(e) + }, t + }(k.getState("ContentState")); + k.registerState("StitchedContentPlayback", D); + var O = function(e) { + function t() { + return e.apply(this, arguments) || this + } + T(t, e), t._getName = function() { + return "StitchedAdRoll" + }; + var n = t.prototype; + return n.init = function() { + this.waitingForAdBreak = !1, this.contentResuming = !1, this.player.ads.adType = "stitched", M.start(this.player) + }, n.onPlaying = function() {}, n.onContentResumed = function() {}, n.onAdEnded = function() { + this.endLinearAdMode(), this.player.trigger("ended") + }, n.endLinearAdMode = function() { + var e = k.getState("StitchedContentPlayback"); + M.end(this.player), this.transitionTo(e) + }, t + }(k.getState("AdState")); + k.registerState("StitchedAdRoll", O); + var F = A.isMiddlewareMediatorSupported, + U = e.getTech("Html5").Events, + V = { + timeout: 5e3, + prerollTimeout: void 0, + postrollTimeout: void 0, + debug: !1, + stitchedAds: !1, + contentIsLive: void 0, + liveCuePoints: !0, + allowVjsAutoplay: e.options.normalizeAutoplay || !1 + }, + q = function(o) { + var r = this, + i = e.mergeOptions(V, o), + s = []; + U.concat(["firstplay", "loadedalldata"]).forEach(function(e) { + -1 === s.indexOf(e) && s.push(e) + }), r.on(s, u), F() || function(t, n) { + n && e.log("Using cancelContentPlay to block content playback"), t.on("play", m) + }(r, i.debug), r.setTimeout(function() { + r.ads._hasThereBeenALoadStartDuringPlayerLife || "" === r.src() || e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html") + }, 5e3), r.on("ended", function() { + r.hasClass("vjs-has-started") || r.addClass("vjs-has-started") + }), r.on("contenttimeupdate", function() { + r.removeClass("vjs-waiting") + }), r.on(["addurationchange", "adcanplay"], function() { + if (!r.ads.settings.stitchedAds && !r.hasStarted() && (!r.ads.snapshot || r.currentSrc() !== r.ads.snapshot.currentSrc) && r.ads.inAdBreak()) { + var t = r.play(); + t && t.catch && t.catch(function(t) { + e.log.warn("Play promise rejected when playing ad", t) + }) + } + }), r.on("nopreroll", function() { + r.ads.debug("Received nopreroll event"), r.ads.nopreroll_ = !0 + }), r.on("nopostroll", function() { + r.ads.debug("Received nopostroll event"), r.ads.nopostroll_ = !0 + }), r.on("playing", function() { + r.ads._cancelledPlay = !1, r.ads._pausedOnContentupdate = !1 + }), r.on("play", function() { + r.ads._playRequested = !0 + }), r.one("loadstart", function() { + r.ads._hasThereBeenALoadStartDuringPlayerLife = !0 + }), r.on("loadeddata", function() { + r.ads._hasThereBeenALoadedData = !0 + }), r.on("loadedmetadata", function() { + r.ads._hasThereBeenALoadedMetaData = !0 + }), r.ads = function(t) { + return { + disableNextSnapshotRestore: !1, + _contentEnding: !1, + _contentHasEnded: !1, + _hasThereBeenALoadStartDuringPlayerLife: !1, + _hasThereBeenALoadedData: !1, + _hasThereBeenALoadedMetaData: !1, + _inLinearAdMode: !1, + _shouldBlockPlay: !1, + _playBlocked: !1, + _playRequested: !1, + adType: null, + VERSION: a, + reset: function() { + t.ads.disableNextSnapshotRestore = !1, t.ads._contentEnding = !1, t.ads._contentHasEnded = !1, t.ads.snapshot = null, t.ads.adType = null, t.ads._hasThereBeenALoadedData = !1, t.ads._hasThereBeenALoadedMetaData = !1, t.ads._cancelledPlay = !1, t.ads._shouldBlockPlay = !1, t.ads._playBlocked = !1, t.ads.nopreroll_ = !1, t.ads.nopostroll_ = !1, t.ads._playRequested = !1 + }, + startLinearAdMode: function() { + t.ads._state.startLinearAdMode() + }, + endLinearAdMode: function() { + t.ads._state.endLinearAdMode() + }, + skipLinearAdMode: function() { + t.ads._state.skipLinearAdMode() + }, + stitchedAds: function(t) { + return void 0 !== t && (e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."), this.settings.stitchedAds = !!t), this.settings.stitchedAds + }, + videoElementRecycled: function() { + if (t.ads.shouldPlayContentBehindAd(t)) return !1; + if (!this.snapshot) throw new Error("You cannot use videoElementRecycled while there is no snapshot."); + var e = t.tech_.src() !== this.snapshot.src, + n = t.currentSrc() !== this.snapshot.currentSrc; + return e || n + }, + isLive: function(n) { + return void 0 === n && (n = t), "boolean" == typeof n.ads.settings.contentIsLive ? n.ads.settings.contentIsLive : n.duration() === 1 / 0 || "8" === e.browser.IOS_VERSION && 0 === n.duration() + }, + shouldPlayContentBehindAd: function(n) { + if (void 0 === n && (n = t), n) return !!n.ads.settings.liveCuePoints && !e.browser.IS_IOS && !e.browser.IS_ANDROID && n.duration() === 1 / 0; + throw new Error("shouldPlayContentBehindAd requires a player as a param") + }, + shouldTakeSnapshots: function(e) { + return void 0 === e && (e = t), !this.shouldPlayContentBehindAd(e) && !this.stitchedAds() + }, + isInAdMode: function() { + return this._state.isAdState() + }, + isWaitingForAdBreak: function() { + return this._state.isWaitingForAdBreak() + }, + isContentResuming: function() { + return this._state.isContentResuming() + }, + isAdPlaying: function() { + return this._state.inAdBreak() + }, + inAdBreak: function() { + return this._state.inAdBreak() + }, + removeNativePoster: function() { + var e = t.$(".vjs-tech"); + e && e.removeAttribute("poster") + }, + debug: function() { + if (this.settings.debug) { + for (var t = arguments.length, n = new Array(t), a = 0; a < t; a++) n[a] = arguments[a]; + 1 === n.length && "string" == typeof n[0] ? e.log("ADS: " + n[0]) : e.log.apply(e, ["ADS:"].concat(n)) + } + } + } + }(r), r.ads.settings = i, i.stitchedAds = !!i.stitchedAds, i.stitchedAds ? r.ads._state = new(k.getState("StitchedContentPlayback"))(r) : r.ads._state = new(k.getState("BeforePreroll"))(r), r.ads._state.init(r), r.ads.cueTextTracks = g, r.ads.adMacroReplacement = function(a, o, r) { + var i = this, + s = {}; + a = a.replace(/{([^}=]+)=([^}]+)}/g, function(e, t, n) { + return s["{" + t + "}"] = n, "{" + t + "}" + }), void 0 === o && (o = !1); + var d = {}; + for (var l in void 0 !== r && (d = r), d["{player.id}"] = this.options_["data-player"] || this.id_, d["{player.height}"] = this.currentHeight(), d["{player.width}"] = this.currentWidth(), d["{mediainfo.id}"] = this.mediainfo ? this.mediainfo.id : "", d["{mediainfo.name}"] = this.mediainfo ? this.mediainfo.name : "", d["{mediainfo.duration}"] = this.mediainfo ? this.mediainfo.duration : "", d["{player.duration}"] = this.duration(), d["{player.pageUrl}"] = e.dom.isInFrame() ? n.referrer : t.location.href, d["{playlistinfo.id}"] = this.playlistinfo ? this.playlistinfo.id : "", d["{playlistinfo.name}"] = this.playlistinfo ? this.playlistinfo.name : "", d["{timestamp}"] = (new Date).getTime(), d["{document.referrer}"] = n.referrer, d["{window.location.href}"] = t.location.href, d["{random}"] = Math.floor(1e12 * Math.random()), ["description", "tags", "reference_id", "ad_keys"].forEach(function(e) { + i.mediainfo && i.mediainfo[e] ? d["{mediainfo." + e + "}"] = i.mediainfo[e] : s["{mediainfo." + e + "}"] ? d["{mediainfo." + e + "}"] = s["{mediainfo." + e + "}"] : d["{mediainfo." + e + "}"] = "" + }), p(this.mediainfo, d, "custom_fields"), p(this.mediainfo, d, "customFields"), Object.keys(c).forEach(function(e) { + d["{tcf." + e + "}"] = c[e] + }), d["{tcf.gdprAppliesInt}"] = c.gdprApplies ? 1 : 0, d) a = a.split(l).join(h(d[l], o)); + for (var u in a = a.replace(/{pageVariable\.([^}]+)}/g, function(n, a) { + for (var r, i = t, d = a.split("."), l = 0; l < d.length; l++) l === d.length - 1 ? r = i[d[l]] : i = i[d[l]]; + var u = typeof r; + return null === r ? "null" : void 0 === r ? s["{pageVariable." + a + "}"] ? s["{pageVariable." + a + "}"] : (e.log.warn('Page variable "' + a + '" not found'), "") : "string" !== u && "number" !== u && "boolean" !== u ? (e.log.warn('Page variable "' + a + '" is not a supported type'), "") : h(String(r), o) + }), s) a = a.replace(u, s[u]); + return a + }.bind(r), + function(e) { + e.ads.contentSrc = e.currentSrc(), e.ads._seenInitialLoadstart = !1, e.on("loadstart", function() { + if (!e.ads.inAdBreak()) { + var t = e.currentSrc(); + t !== e.ads.contentSrc && (e.ads._seenInitialLoadstart && e.trigger({ + type: "contentchanged" + }), e.trigger({ + type: "contentupdate", + oldValue: e.ads.contentSrc, + newValue: t + }), e.ads.contentSrc = t), e.ads._seenInitialLoadstart = !0 + } + }) + }(r), r.on("contentchanged", r.ads.reset); + var d = function() { + var t = r.textTracks(); + if (!r.ads.shouldPlayContentBehindAd(r) && r.ads.inAdBreak() && r.tech_.featuresNativeTextTracks && e.browser.IS_IOS && !Array.isArray(r.textTracks())) + for (var n = 0; n < t.length; n++) { + var a = t[n]; + "showing" === a.mode && (a.mode = "disabled") + } + }; + r.ready(function() { + r.textTracks().addEventListener("change", d) + }), r.on(["play", "playing", "ended", "adsready", "adscanceled", "adskip", "adserror", "adtimeout", "adended", "ads-ad-started", "contentchanged", "dispose", "contentresumed", "readyforpostroll", "nopreroll", "nopostroll"], function(e) { + r.ads._state.handleEvent(e.type) + }), r.on("dispose", function() { + r.ads.reset(), r.textTracks().removeEventListener("change", d) + }), f(), r.ads.listenToTcf = f + }; + return q.VERSION = a, + function(t) { + !b(e) && ((e.registerPlugin || e.plugin)("ads", t), P() && !e.usingContribAdsMiddleware_ && (e.use("*", _), e.usingContribAdsMiddleware_ = !0, e.log.debug("Play middleware has been registered with videojs"))) + }(q), q +}); +/*! @name @viostream/videojs-overlay @version v2.1.6-f.97-master @license Apache-2.0 */ +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).videojsOverlay = e(t.videojs) +}(this, (function(t) { + "use strict"; + + function e(t) { + return t && "object" == typeof t && "default" in t ? t : { + default: t + } + } + var n = e(t); + + function i(t, e, n) { + return t(n = { + path: e, + exports: {}, + require: function(t, e) { + return function() { + throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs") + }(null == e && n.path) + } + }, n.exports), n.exports + } + var o = i((function(t) { + t.exports = function(t) { + if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return t + }, t.exports.default = t.exports, t.exports.__esModule = !0 + })), + r = i((function(t) { + function e(n, i) { + return t.exports = e = Object.setPrototypeOf || function(t, e) { + return t.__proto__ = e, t + }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) + } + t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 + })), + s = i((function(t) { + t.exports = function(t, e) { + t.prototype = Object.create(e.prototype), t.prototype.constructor = t, r(t, e) + }, t.exports.default = t.exports, t.exports.__esModule = !0 + })), + a = { + align: "top-left", + class: "", + content: "This overlay will show up while the video is playing", + debug: !1, + showBackground: !0, + attachToControlBar: !1, + overlays: [{ + start: "playing", + end: "paused" + }] + }, + h = n.default.getComponent("Component"), + d = n.default.dom || n.default, + l = n.default.registerPlugin || n.default.plugin, + u = function(t) { + return "number" == typeof t && t == t + }, + p = function(t) { + return "string" == typeof t && /^\S+$/.test(t) + }, + c = function(t) { + function e(n, i) { + var r; + return (r = t.call(this, n, i) || this).isVisible = !0, ["start", "end"].forEach((function(t) { + var e = r.options_[t]; + if (u(e)) r[t + "Event_"] = "timeupdate"; + else if (p(e)) r[t + "Event_"] = e; + else if ("start" === t) throw new Error('invalid "start" option; expected number or string') + })), ["endListener_", "rewindListener_", "startListener_"].forEach((function(t) { + r[t] = function(n) { + return e.prototype[t].call(o(r), n) + } + })), "timeupdate" === r.startEvent_ && r.on(n, "timeupdate", r.rewindListener_), r.debug('created, listening to "' + r.startEvent_ + '" for "start" and "' + (r.endEvent_ || "nothing") + '" for "end"'), r.hide(), r + } + s(e, t); + var i = e.prototype; + return i.createEl = function() { + var t = this.options_, + e = t.content, + n = t.showBackground ? "vjs-overlay-background" : "vjs-overlay-no-background", + i = d.createEl("div", { + className: "\n vjs-overlay\n vjs-overlay-" + t.align + "\n " + t.class + "\n " + n + "\n vjs-hidden\n " + }); + return "string" == typeof e ? i.innerHTML = e : e instanceof window.DocumentFragment ? i.appendChild(e) : d.appendContent(i, e), i + }, i.debug = function() { + if (this.options_.debug) { + for (var t = n.default.log, e = t, i = arguments.length, o = new Array(i), r = 0; r < i; r++) o[r] = arguments[r]; + t.hasOwnProperty(o[0]) && "function" == typeof t[o[0]] && (e = t[o.shift()]), e.apply(void 0, ["overlay#" + this.id() + ": "].concat(o)) + } + }, i.hide = function() { + if (!1 !== this.isVisible) return t.prototype.hide.call(this), this.isVisible = !1, this.debug("hidden"), this.debug('bound `startListener_` to "' + this.startEvent_ + '"'), u(this.options_.end) && (this.player().paused() || this.player().trigger("hide-overlay", { + id: this.options_.cta_id, + align: this.options_.align + })), this.endEvent_ && (this.debug('unbound `endListener_` from "' + this.endEvent_ + '"'), this.off(this.player(), this.endEvent_, this.endListener_)), this.on(this.player(), this.startEvent_, this.startListener_), this + }, i.shouldHide_ = function(t, e) { + var n = this.options_.end; + return u(n) ? t >= n : n === e + }, i.show = function() { + return t.prototype.show.call(this), this.isVisible = !0, this.off(this.player(), this.startEvent_, this.startListener_), this.debug("shown"), this.debug('unbound `startListener_` from "' + this.startEvent_ + '"'), u(this.options_.start) && (this.player().paused() && 0 !== this.options_.start || this.player().trigger("show-overlay", { + id: this.options_.cta_id, + align: this.options_.align + })), this.endEvent_ && (this.debug('bound `endListener_` to "' + this.endEvent_ + '"'), this.on(this.player(), this.endEvent_, this.endListener_)), this + }, i.shouldShow_ = function(t, e) { + var n = this.options_.start, + i = this.options_.end; + return u(n) ? u(i) ? t >= n && t < i : this.hasShownSinceSeek_ ? Math.floor(t) === n : (this.hasShownSinceSeek_ = !0, t >= n) : n === e + }, i.startListener_ = function(t) { + var e = this.player().currentTime(); + this.shouldShow_(e, t.type) && this.show() + }, i.endListener_ = function(t) { + var e = this.player().currentTime(); + this.shouldHide_(e, t.type) && this.hide() + }, i.rewindListener_ = function(t) { + var e = this.player().currentTime(), + n = this.previousTime_, + i = this.options_.start, + o = this.options_.end; + e < n && (this.debug("rewind detected"), u(o) && !this.shouldShow_(e) ? (this.debug("hiding; " + o + " is an integer and overlay should not show at this time"), this.hasShownSinceSeek_ = !1, this.hide()) : p(o) && e < i && (this.debug("hiding; show point (" + i + ") is before now (" + e + ") and end point (" + o + ") is an event"), this.hasShownSinceSeek_ = !1, this.hide())), this.previousTime_ = e + }, e + }(h); + n.default.registerComponent("Overlay", c); + var f = function(t) { + var e = this, + i = n.default.mergeOptions(a, t); + Array.isArray(this.overlays_) && this.overlays_.forEach((function(t) { + e.removeChild(t), e.controlBar && e.controlBar.removeChild(t), t.dispose() + })); + var o = i.overlays; + delete i.overlays, this.overlays_ = o.map((function(t) { + var o = n.default.mergeOptions(i, t), + r = "string" == typeof o.attachToControlBar || !0 === o.attachToControlBar; + if (!e.controls() || !e.controlBar) return e.addChild("overlay", o); + if (r && -1 !== o.align.indexOf("bottom")) { + var s = e.controlBar.children()[0]; + if (void 0 !== e.controlBar.getChild(o.attachToControlBar) && (s = e.controlBar.getChild(o.attachToControlBar)), s) { + var a = e.controlBar.children().indexOf(s); + return e.controlBar.addChild("overlay", o, a) + } + } + var h = e.addChild("overlay", o); + return e.el().insertBefore(h.el(), e.controlBar.el()), h + })) + }; + return f.VERSION = "v2.1.6-f.97-master", l("overlay", f), f +})); +/** + * videojs-share + * @version 3.2.1 + * @copyright 2019 Mikhail Khazov + * @license MIT + */ +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : t.videojsShare = e(t.videojs) +}(this, function(t) { + "use strict"; + + function e(t, e) { + return e = { + exports: {} + }, t(e, e.exports), e.exports + } + + function n(t) { + var e; + if ("SELECT" === t.nodeName) t.focus(), e = t.value; + else if ("INPUT" === t.nodeName || "TEXTAREA" === t.nodeName) { + var n = t.hasAttribute("readonly"); + n || t.setAttribute("readonly", ""), t.select(), t.setSelectionRange(0, t.value.length), n || t.removeAttribute("readonly"), e = t.value + } else { + t.hasAttribute("contenteditable") && t.focus(); + var i = window.getSelection(), + o = document.createRange(); + o.selectNodeContents(t), i.removeAllRanges(), i.addRange(o), e = i.toString() + } + return e + } + + function i() {} + + function o(t, e) { + for (; t && t.nodeType !== G;) { + if ("function" == typeof t.matches && t.matches(e)) return t; + t = t.parentNode + } + } + + function r(t, e, n, i, o) { + var r = l.apply(this, arguments); + return t.addEventListener(n, r, o), { + destroy: function() { + t.removeEventListener(n, r, o) + } + } + } + + function a(t, e, n, i, o) { + return "function" == typeof t.addEventListener ? r.apply(null, arguments) : "function" == typeof n ? r.bind(null, document).apply(null, arguments) : ("string" == typeof t && (t = document.querySelectorAll(t)), Array.prototype.map.call(t, function(t) { + return r(t, e, n, i, o) + })) + } + + function l(t, e, n, i) { + return function(n) { + n.delegateTarget = K(n.target, e), n.delegateTarget && i.call(t, n) + } + } + + function s(t, e, n) { + if (!t && !e && !n) throw new Error("Missing required arguments"); + if (!X.string(e)) throw new TypeError("Second argument must be a String"); + if (!X.fn(n)) throw new TypeError("Third argument must be a Function"); + if (X.node(t)) return c(t, e, n); + if (X.nodeList(t)) return u(t, e, n); + if (X.string(t)) return h(t, e, n); + throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList") + } + + function c(t, e, n) { + return t.addEventListener(e, n), { + destroy: function() { + t.removeEventListener(e, n) + } + } + } + + function u(t, e, n) { + return Array.prototype.forEach.call(t, function(t) { + t.addEventListener(e, n) + }), { + destroy: function() { + Array.prototype.forEach.call(t, function(t) { + t.removeEventListener(e, n) + }) + } + } + } + + function h(t, e, n) { + return Q(document.body, t, e, n) + } + + function d(t) { + return Object.keys(t).filter(function(e) { + return void 0 !== t[e] && "" !== t[e] + }).map(function(e) { + return encodeURIComponent(e) + "=" + encodeURIComponent(t[e]) + }).join("&") + } + + function f() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.fbAppId, + n = t.url, + i = t.redirectUri; + if (!e) throw new Error("fbAppId is not defined"); + var o = d({ + app_id: e, + display: "popup", + redirect_uri: i, + link: n + }); + return window.open("https://www.facebook.com/dialog/feed?" + o, "_blank", tt) + } + + function p() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.fbAppId, + n = t.url, + i = t.hashtag, + o = t.redirectUri; + if (!e) throw new Error("fbAppId is not defined"); + var r = d({ + app_id: e, + display: "popup", + redirect_uri: o, + href: n, + hashtag: i + }); + return window.open("https://www.facebook.com/dialog/share?" + r, "_blank", tt) + } + + function v() { + var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url; + if (!t) throw new Error("url is not defined"); + var e = d({ + kid_directed_site: "0", + sdk: "joey", + u: t, + display: "popup", + ref: "plugin", + src: "share_button" + }); + return window.open("https://www.facebook.com/sharer/sharer.php?" + e, "_blank", tt) + } + + function g() { + var t = d({ + url: (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url + }); + return window.open("https://plus.google.com/share?" + t, "_blank", tt) + } + + function w() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + share_url: t.url, + title: t.title, + description: t.description, + imageurl: t.image + }); + return window.open("http://connect.mail.ru/share?" + e, "_blank", tt) + } + + function m() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.title, + i = t.description, + o = (n || "") + "\r\n" + (i || "") + "\r\n" + (e || ""), + r = "mailto:?body=" + encodeURIComponent(o); + return window.location.assign(r) + } + + function y() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + "st.cmd": "addShare", + "st._surl": t.url, + title: t.title + }); + return window.open("https://ok.ru/dk?" + e, "_blank", tt) + } + + function b() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + url: t.url, + text: t.title + }); + return window.open("https://t.me/share/url?" + e, "_blank", tt) + } + + function k() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.title, + n = t.url, + i = t.hashtags, + o = d({ + text: e, + url: n, + hashtags: (void 0 === i ? [] : i).join(",") + }); + return window.open("https://twitter.com/intent/tweet?" + o, "_blank", tt) + } + + function _() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = d({ + url: t.url, + title: t.title + }); + return window.open("https://www.reddit.com/submit?" + e, "_blank", tt) + } + + function C() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.description, + n = d({ + url: t.url, + description: e, + media: t.media + }); + return window.open("https://pinterest.com/pin/create/button/?" + n, "_blank", tt) + } + + function x() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.title, + i = t.caption, + o = t.tags, + r = void 0 === o ? [] : o, + a = t.posttype, + l = void 0 === a ? "link" : a, + s = d({ + canonicalUrl: e, + title: n, + caption: i, + tags: r.join(","), + posttype: l + }); + return window.open("https://www.tumblr.com/widgets/share/tool?" + s, "_blank", tt) + } + + function E() { + return !!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/) + } + + function S(t) { + return E() ? window.open(t) : window.location.assign(t) + } + + function j() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.title; + if (!e && !n) throw new Error("url and title not specified"); + return S("viber://forward?" + d({ + text: [n, e].filter(function(t) { + return t + }).join(" ") + })) + } + + function F() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.url, + n = t.image, + i = t.isVkParse, + o = t.description, + r = t.title; + o && o.length > et && (o = o.substr(0, et) + "..."), r && r.length > et && (r = r.substr(0, et) + "..."); + return "https://vk.com/share.php?" + d(i ? { + url: e + } : { + url: e, + title: r, + description: o, + image: n, + noparse: !0 + }) + } + + function A() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + return window.open(F(t), "_blank", tt) + } + + function T() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.phone, + n = d({ + text: [t.title, t.url].filter(function(t) { + return t + }).join(" "), + phone: e + }); + return window.open("https://api.whatsapp.com/send?" + n, "_blank", tt) + } + + function z() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.title, + n = t.url, + i = d({ + title: e, + summary: t.description, + url: n + }); + return window.open("https://www.linkedin.com/shareArticle?mini=true&" + i, "_blank", tt) + } + + function M() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.fbAppId, + n = t.url; + if (!e) throw new Error("fbAppId is not defined"); + var i = d({ + app_id: e, + link: n + }); + return window.location.assign("fb-messenger://share?" + i) + } + + function O() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.title, + n = t.url; + if (!n) throw new Error("url is not defined"); + var i = encodeURIComponent("" + n); + return e && (i = "" + encodeURIComponent(e + " ") + i), window.open("https://line.me/R/msg/text/?" + i, "_blank", tt) + } + + function L() { + return "ontouchstart" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 + } + + function V() { + return /Android/.test(window.navigator.userAgent) || /iP(hone|ad|od)/i.test(window.navigator.userAgent) + } + + function H() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; + return !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1] ? V() ? t : t.filter(function(t) { + return !it.includes(t) + }) : t + } + t = t && t.hasOwnProperty("default") ? t.default : t; + var I = function() { + return "undefined" == typeof window ? "" : window.location.href + }(), + P = { + mobileVerification: !0, + title: "Video", + url: I, + socials: ["fbFeed", "tw", "reddit", "gp", "messenger", "linkedin", "vk", "ok", "mail", "email", "telegram", "whatsapp", "viber"], + embedCode: function() { + return "" + }(), + redirectUri: function() { + return I + "#close_window" + }() + }, + R = function(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + }, + U = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + N = function(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + }, + B = function(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + }, + q = function(t) { + function e(n, i) { + R(this, e); + var o = B(this, t.call(this, n, i)); + return o.addClass("vjs-menu-button"), o.addClass("vjs-share-control"), o.addClass("vjs-icon-share"), o.controlText(n.localize("Share")), o + } + return N(e, t), e.prototype.handleClick = function() { + this.player().getChild("ShareOverlay").open() + }, e + }(t.getComponent("Button")), + D = ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self && self, n), + Y = e(function(t, e) { + ! function(e, n) { + n(t, D) + }(0, function(t, e) { + function n(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + var i = function(t) { + return t && t.__esModule ? t : { + default: t + } + }(e), + o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { + return typeof t + } : function(t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, + r = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + a = function() { + function t(e) { + n(this, t), this.resolveOptions(e), this.initSelection() + } + return r(t, [{ + key: "resolveOptions", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.action = t.action, this.container = t.container, this.emitter = t.emitter, this.target = t.target, this.text = t.text, this.trigger = t.trigger, this.selectedText = "" + } + }, { + key: "initSelection", + value: function() { + this.text ? this.selectFake() : this.target && this.selectTarget() + } + }, { + key: "selectFake", + value: function() { + var t = this, + e = "rtl" == document.documentElement.getAttribute("dir"); + this.removeFake(), this.fakeHandlerCallback = function() { + return t.removeFake() + }, this.fakeHandler = this.container.addEventListener("click", this.fakeHandlerCallback) || !0, this.fakeElem = document.createElement("textarea"), this.fakeElem.style.fontSize = "12pt", this.fakeElem.style.border = "0", this.fakeElem.style.padding = "0", this.fakeElem.style.margin = "0", this.fakeElem.style.position = "absolute", this.fakeElem.style[e ? "right" : "left"] = "-9999px"; + var n = window.pageYOffset || document.documentElement.scrollTop; + this.fakeElem.style.top = n + "px", this.fakeElem.setAttribute("readonly", ""), this.fakeElem.value = this.text, this.container.appendChild(this.fakeElem), this.selectedText = (0, i.default)(this.fakeElem), this.copyText() + } + }, { + key: "removeFake", + value: function() { + this.fakeHandler && (this.container.removeEventListener("click", this.fakeHandlerCallback), this.fakeHandler = null, this.fakeHandlerCallback = null), this.fakeElem && (this.container.removeChild(this.fakeElem), this.fakeElem = null) + } + }, { + key: "selectTarget", + value: function() { + this.selectedText = (0, i.default)(this.target), this.copyText() + } + }, { + key: "copyText", + value: function() { + var t = void 0; + try { + t = document.execCommand(this.action) + } catch (e) { + t = !1 + } + this.handleResult(t) + } + }, { + key: "handleResult", + value: function(t) { + this.emitter.emit(t ? "success" : "error", { + action: this.action, + text: this.selectedText, + trigger: this.trigger, + clearSelection: this.clearSelection.bind(this) + }) + } + }, { + key: "clearSelection", + value: function() { + this.trigger && this.trigger.focus(), window.getSelection().removeAllRanges() + } + }, { + key: "destroy", + value: function() { + this.removeFake() + } + }, { + key: "action", + set: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "copy"; + if (this._action = t, "copy" !== this._action && "cut" !== this._action) throw new Error('Invalid "action" value, use either "copy" or "cut"') + }, + get: function() { + return this._action + } + }, { + key: "target", + set: function(t) { + if (void 0 !== t) { + if (!t || "object" !== (void 0 === t ? "undefined" : o(t)) || 1 !== t.nodeType) throw new Error('Invalid "target" value, use a valid Element'); + if ("copy" === this.action && t.hasAttribute("disabled")) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); + if ("cut" === this.action && (t.hasAttribute("readonly") || t.hasAttribute("disabled"))) throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); + this._target = t + } + }, + get: function() { + return this._target + } + }]), t + }(); + t.exports = a + }) + }); + i.prototype = { + on: function(t, e, n) { + var i = this.e || (this.e = {}); + return (i[t] || (i[t] = [])).push({ + fn: e, + ctx: n + }), this + }, + once: function(t, e, n) { + function i() { + o.off(t, i), e.apply(n, arguments) + } + var o = this; + return i._ = e, this.on(t, i, n) + }, + emit: function(t) { + var e = [].slice.call(arguments, 1), + n = ((this.e || (this.e = {}))[t] || []).slice(), + i = 0, + o = n.length; + for (i; i < o; i++) n[i].fn.apply(n[i].ctx, e); + return this + }, + off: function(t, e) { + var n = this.e || (this.e = {}), + i = n[t], + o = []; + if (i && e) + for (var r = 0, a = i.length; r < a; r++) i[r].fn !== e && i[r].fn._ !== e && o.push(i[r]); + return o.length ? n[t] = o : delete n[t], this + } + }; + var W = i, + X = e(function(t, e) { + e.node = function(t) { + return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType + }, e.nodeList = function(t) { + var n = Object.prototype.toString.call(t); + return void 0 !== t && ("[object NodeList]" === n || "[object HTMLCollection]" === n) && "length" in t && (0 === t.length || e.node(t[0])) + }, e.string = function(t) { + return "string" == typeof t || t instanceof String + }, e.fn = function(t) { + return "[object Function]" === Object.prototype.toString.call(t) + } + }), + G = 9; + if ("undefined" != typeof Element && !Element.prototype.matches) { + var J = Element.prototype; + J.matches = J.matchesSelector || J.mozMatchesSelector || J.msMatchesSelector || J.oMatchesSelector || J.webkitMatchesSelector + } + var K = o, + Q = a, + Z = s, + $ = function(t) { + return t && t.__esModule ? t.default : t + }(e(function(t, e) { + ! function(e, n) { + n(t, Y, W, Z) + }(0, function(t, e, n, i) { + function o(t) { + return t && t.__esModule ? t : { + default: t + } + } + + function r(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + + function a(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + } + + function l(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + } + + function s(t, e) { + var n = "data-clipboard-" + t; + if (e.hasAttribute(n)) return e.getAttribute(n) + } + var c = o(e), + u = o(n), + h = o(i), + d = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { + return typeof t + } : function(t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, + f = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + p = function(t) { + function e(t, n) { + r(this, e); + var i = a(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); + return i.resolveOptions(n), i.listenClick(t), i + } + return l(e, t), f(e, [{ + key: "resolveOptions", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, this.text = "function" == typeof t.text ? t.text : this.defaultText, this.container = "object" === d(t.container) ? t.container : document.body + } + }, { + key: "listenClick", + value: function(t) { + var e = this; + this.listener = (0, h.default)(t, "click", function(t) { + return e.onClick(t) + }) + } + }, { + key: "onClick", + value: function(t) { + var e = t.delegateTarget || t.currentTarget; + this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new c.default({ + action: this.action(e), + target: this.target(e), + text: this.text(e), + container: this.container, + trigger: e, + emitter: this + }) + } + }, { + key: "defaultAction", + value: function(t) { + return s("action", t) + } + }, { + key: "defaultTarget", + value: function(t) { + var e = s("target", t); + if (e) return document.querySelector(e) + } + }, { + key: "defaultText", + value: function(t) { + return s("text", t) + } + }, { + key: "destroy", + value: function() { + this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) + } + }], [{ + key: "isSupported", + value: function() { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], + e = "string" == typeof t ? [t] : t, + n = !!document.queryCommandSupported; + return e.forEach(function(t) { + n = n && !!document.queryCommandSupported(t) + }), n + } + }]), e + }(u.default); + t.exports = p + }) + })), + tt = "scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0", + et = 80, + nt = (Object.freeze || Object)({ + fbFeed: f, + fbShare: p, + fbButton: v, + gp: g, + mail: w, + email: m, + ok: y, + telegram: b, + tw: k, + reddit: _, + pinterest: C, + tumblr: x, + viber: j, + getVkUrl: F, + vk: A, + whatsapp: T, + linkedin: z, + messenger: M, + line: O + }), + it = ["whatsapp", "viber", "messenger"], + ot = { + fbFeed: '\n \n\n', + tw: '\n \n\n', + reddit: '\n \n\n', + gp: '\n \n\n', + messenger: '\n \n \n\n', + linkedin: '\n \n\n', + vk: '\n \n\n', + ok: '\n \n\n', + mail: '\n \n\n', + email: '\n \n\n', + telegram: '\n \n\n', + whatsapp: '\n \n\n', + viber: '\n \n\n' + }, + rt = function() { + function t(e, n) { + R(this, t), this.player = e, this.options = n, this.socials = H(n.socials, n.mobileVerification), this.copyBtnTextClass = "vjs-share__btn-text", this.socialBtnClass = "vjs-share__social", this._createContent(), this._initToggle(), this._initClipboard(), this._initSharing() + } + return t.prototype.getContent = function() { + return this.content + }, t.prototype._createContent = function() { + var t = '\n \n \n \n ' + this.player.localize("Copy") + "\n ", + e = document.createElement("div"), + n = ""; + this.options.embedCode && (n = '\n \n "), e.innerHTML = '
\n \n\n
\n \n \n\n " + n + '\n
\n\n
\n
\n ' + this._getSocialItems().join("") + "\n
\n
\n
", this.content = e.firstChild + }, t.prototype._initClipboard = function() { + var t = this; + new $(".vjs-share__btn", { + target: function(t) { + return t.previousElementSibling + } + }).on("success", function(e) { + var n = e.trigger.querySelector("." + t.copyBtnTextClass), + i = function() { + n.innerText = t.player.localize("Copy"), e.clearSelection() + }; + n.innerText = t.player.localize("Copied"), L() ? setTimeout(i, 1e3) : n.parentElement.addEventListener("mouseleave", function() { + setTimeout(i, 300) + }) + }) + }, t.prototype._initSharing = function() { + var t = this, + e = this.content.querySelectorAll("." + this.socialBtnClass); + Array.from(e).forEach(function(e) { + e.addEventListener("click", function(e) { + var n = e.currentTarget.getAttribute("data-social"), + i = nt[n]; + "function" == typeof i && i(t.socialOptions) + }) + }) + }, t.prototype._initToggle = function() { + var t = this.content.querySelector(".vjs-share__socials"); + this.socials.length > 10 || window.innerWidth <= 180 && this.socials.length > 6 ? t.style.height = "calc((2em + 5px) * 2)" : t.classList.add("horizontal") + }, t.prototype._getSocialItems = function() { + var t = []; + return this.socials.forEach(function(e) { + ot[e] && t.push('\n \n ") + }), t + }, U(t, [{ + key: "socialOptions", + get: function() { + var t = this.options; + return { + url: t.url, + title: t.title, + description: t.description, + image: t.image, + fbAppId: t.fbAppId, + isVkParse: t.isVkParse, + redirectUri: t.redirectUri + } + } + }]), t + }(), + at = function(t) { + function e(n, i) { + R(this, e); + var o = B(this, t.call(this, n, i)); + return o.playerClassName = "vjs-videojs-share_open", o + } + return N(e, t), e.prototype.open = function() { + var e = this.player(); + e.addClass(this.playerClassName), t.prototype.open.call(this), e.trigger("sharing:opened") + }, e.prototype.close = function() { + var e = this.player(); + e.removeClass(this.playerClassName), t.prototype.close.call(this), e.trigger("sharing:closed") + }, e + }(t.getComponent("ModalDialog")), + lt = function(t) { + function e(n, i) { + R(this, e); + var o = B(this, t.call(this, n, i)); + return o.player = n, o.options = i, o + } + return N(e, t), e.prototype._createModal = function() { + var t = new rt(this.player, this.options).getContent(); + this.modal = new at(this.player, { + content: t, + temporary: !0 + }), this.el = this.modal.contentEl(), this.player.addChild(this.modal) + }, e.prototype.open = function() { + this._createModal(), this.modal.open() + }, e + }(t.getComponent("Component")), + st = function(e) { + function n(i, o) { + R(this, n); + var r = B(this, e.call(this, i)); + return r.options = t.mergeOptions(P, o), r.player.ready(function() { + r.player.addClass("vjs-share"), i.addClass("vjs-videojs-share"), i.getChild("controlBar").addChild("ShareButton", o), i.addChild("ShareOverlay", o) + }), r + } + return N(n, e), n + }(t.getPlugin("plugin")); + return st.defaultState = {}, st.VERSION = "3.2.1", t.registerComponent("ShareButton", q), t.registerComponent("ShareOverlay", lt), t.registerPlugin("share", st), st +}); +/** + * videojs-watermark + * @version 2.0.0 + * @copyright 2017 Brooks Lyrette + * @license Apache-2.0 + */ +! function(e) { + if ("object" == typeof exports && "undefined" != typeof module) module.exports = e(); + else if ("function" == typeof define && define.amd) define([], e); + else { + var n; + n = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, n.videojsWatermark = e() + } +}(function() { + return function e(n, t, i) { + function o(d, a) { + if (!t[d]) { + if (!n[d]) { + var f = "function" == typeof require && require; + if (!a && f) return f(d, !0); + if (r) return r(d, !0); + var u = new Error("Cannot find module '" + d + "'"); + throw u.code = "MODULE_NOT_FOUND", u + } + var l = t[d] = { + exports: {} + }; + n[d][0].call(l.exports, function(e) { + var t = n[d][1][e]; + return o(t || e) + }, l, l.exports, e, n, t, i) + } + return t[d].exports + } + for (var r = "function" == typeof require && require, d = 0; d < i.length; d++) o(i[d]); + return o + }({ + 1: [function(e, n, t) { + (function(e) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }); + var i = "undefined" != typeof window ? window.videojs : void 0 !== e ? e.videojs : null, + o = function(e) { + return e && e.__esModule ? e : { + default: e + } + }(i), + r = { + position: "top-right", + fadeTime: 3e3, + url: void 0, + image: void 0 + }, + d = function(e, n) { + var t = e.el(), + i = document.createElement("div"), + o = document.createElement("img"); + if (i.classList.add("vjs-watermark-content"), i.classList.add("vjs-watermark-" + n.position), o.src = n.image, n.url) { + var r = document.createElement("a"); + r.href = n.url, r.onclick = function(t) { + t.preventDefault(), e.pause(), window.open(n.url) + }, r.appendChild(o), i.appendChild(r) + } else i.appendChild(o); + t.appendChild(i) + }, + a = function(e) { + setTimeout(function() { + return document.getElementsByClassName("vjs-watermark-content")[0].classList.add("vjs-watermark-fade") + }, e.fadeTime) + }, + f = function(e, n) { + e.addClass("vjs-watermark"), n.image && (d(e, n), null !== n.fadeTime && e.on("play", function() { + return a(n) + })) + }, + u = function(e) { + var n = this; + this.ready(function() { + f(n, o.default.mergeOptions(r, e)) + }) + }; + o.default.registerPlugin("watermark", u), u.VERSION = "2.0.0", t.default = u, n.exports = t.default + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}) + }, {}] + }, {}, [1])(1) +}); +/*! @name videojs-vr @version 1.10.1 @license MIT */ +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("global/window"), require("global/document"), require("video.js")) : "function" == typeof define && define.amd ? define(["global/window", "global/document", "video.js"], e) : (t = t || self).videojsVr = e(t.window, t.document, t.videojs) +}(this, (function(t, e, n) { + "use strict"; + t = t && t.hasOwnProperty("default") ? t.default : t, e = e && e.hasOwnProperty("default") ? e.default : e, n = n && n.hasOwnProperty("default") ? n.default : n; + var i = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; + + function r(t) { + return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t + } + + function o(t, e) { + return t(e = { + exports: {} + }, e.exports), e.exports + } + var s = r(o((function(t) { + t.exports = function(t) { + if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return t + }, t.exports.default = t.exports, t.exports.__esModule = !0 + }))), + a = o((function(t) { + function e(n, i) { + return t.exports = e = Object.setPrototypeOf || function(t, e) { + return t.__proto__ = e, t + }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) + } + t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 + })); + r(a); + var l = r(o((function(t) { + t.exports = function(t, e) { + t.prototype = Object.create(e.prototype), t.prototype.constructor = t, a(t, e) + }, t.exports.default = t.exports, t.exports.__esModule = !0 + }))), + c = r(o((function(t, e) { + /** + * @license + * webvr-polyfill + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * cardboard-vr-display + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * webvr-polyfill-dpdb + * Copyright (c) 2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * wglu-preserve-state + * Copyright (c) 2016, Brandon Jones. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + /** + * @license + * nosleep.js + * Copyright (c) 2017, Rich Tibbett + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + t.exports = function() { + var t, e = "undefined" != typeof window ? window : void 0 !== i ? i : "undefined" != typeof self ? self : {}, + n = function() { + return /Android/i.test(navigator.userAgent) || /iPhone|iPad|iPod/i.test(navigator.userAgent) + }, + r = function(t, e) { + for (var n = 0, i = t.length; n < i; n++) e[n] = t[n] + }, + o = function(t, e) { + for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); + return t + }, + s = (t = function(t, e) { + return t(e = { + exports: {} + }, e.exports), e.exports + }((function(t, n) { + /** + * @license + * cardboard-vr-display + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * gl-preserve-state + * Copyright (c) 2016, Brandon Jones. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + /** + * @license + * webvr-polyfill-dpdb + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /** + * @license + * nosleep.js + * Copyright (c) 2017, Rich Tibbett + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + t.exports = function() { + var t, n, i, r = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + o = function(t, e) { + if (Array.isArray(t)) return t; + if (Symbol.iterator in Object(t)) return function(t, e) { + var n = [], + i = !0, + r = !1, + o = void 0; + try { + for (var s, a = t[Symbol.iterator](); !(i = (s = a.next()).done) && (n.push(s.value), !e || n.length !== e); i = !0); + } catch (t) { + r = !0, o = t + } finally { + try { + !i && a.return && a.return() + } finally { + if (r) throw o + } + } + return n + }(t, e); + throw new TypeError("Invalid attempt to destructure non-iterable instance") + }, + s = function(t, e, n) { + return t + (e - t) * n + }, + a = function() { + var t = /iPad|iPhone|iPod/.test(navigator.platform); + return function() { + return t + } + }(), + l = function() { + var t = -1 !== navigator.userAgent.indexOf("Version") && -1 !== navigator.userAgent.indexOf("Android") && -1 !== navigator.userAgent.indexOf("Chrome"); + return function() { + return t + } + }(), + c = function() { + var t = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + return function() { + return t + } + }(), + h = function() { + var t = -1 !== navigator.userAgent.indexOf("Firefox") && -1 !== navigator.userAgent.indexOf("Android"); + return function() { + return t + } + }(), + u = (n = navigator.userAgent.match(/.*Chrome\/([0-9]+)/), i = n ? parseInt(n[1], 10) : null, function() { + return i + }), + d = function() { + var t; + return t = a() && c() && -1 !== navigator.userAgent.indexOf("13_4"), + function() { + return t + } + }(), + p = function() { + var t = !1; + if (65 === u()) { + var e = navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/); + if (e) { + var n = e[1].split("."), + i = o(n, 4), + r = (i[0], i[1], i[2]), + s = i[3]; + t = 3325 === parseInt(r, 10) && parseInt(s, 10) < 148 + } + } + return function() { + return t + } + }(), + f = function() { + var t = -1 !== navigator.userAgent.indexOf("R7 Build"); + return function() { + return t + } + }(), + m = function() { + var t = 90 == window.orientation || -90 == window.orientation; + return f() ? !t : t + }, + g = function() { + return Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio + }, + v = function() { + return Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio + }, + y = function() { + if (document.exitFullscreen) document.exitFullscreen(); + else if (document.webkitExitFullscreen) document.webkitExitFullscreen(); + else if (document.mozCancelFullScreen) document.mozCancelFullScreen(); + else { + if (!document.msExitFullscreen) return !1; + document.msExitFullscreen() + } + return !0 + }, + A = function(t, e, n, i) { + var r = t.createShader(t.VERTEX_SHADER); + t.shaderSource(r, e), t.compileShader(r); + var o = t.createShader(t.FRAGMENT_SHADER); + t.shaderSource(o, n), t.compileShader(o); + var s = t.createProgram(); + for (var a in t.attachShader(s, r), t.attachShader(s, o), i) t.bindAttribLocation(s, i[a], a); + return t.linkProgram(s), t.deleteShader(r), t.deleteShader(o), s + }, + x = function(t, e) { + for (var n = {}, i = t.getProgramParameter(e, t.ACTIVE_UNIFORMS), r = "", o = 0; o < i; o++) n[r = t.getActiveUniform(e, o).name.replace("[0]", "")] = t.getUniformLocation(e, r); + return n + }, + _ = function() { + var t, e = !1; + return t = navigator.userAgent || navigator.vendor || window.opera, (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0, 4))) && (e = !0), e + }, + b = function(t, e) { + for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); + return t + }, + w = function(t) { + if (a()) { + var e = t.style.width, + n = t.style.height; + t.style.width = parseInt(e) + 1 + "px", t.style.height = parseInt(n) + "px", setTimeout((function() { + t.style.width = e, t.style.height = n + }), 100) + } + window.canvas = t + }, + M = function() { + var t = Math.PI / 180, + e = .25 * Math.PI, + n = new Float32Array([0, 0, 0, 1]), + i = new Float32Array([0, 0, 0]); + + function r(r, o, s, a, l, c) { + ! function(n, i, r, o) { + var s = Math.tan(i ? i.upDegrees * t : e), + a = Math.tan(i ? i.downDegrees * t : e), + l = Math.tan(i ? i.leftDegrees * t : e), + c = Math.tan(i ? i.rightDegrees * t : e), + h = 2 / (l + c), + u = 2 / (s + a); + n[0] = h, n[1] = 0, n[2] = 0, n[3] = 0, n[4] = 0, n[5] = u, n[6] = 0, n[7] = 0, n[8] = -(l - c) * h * .5, n[9] = (s - a) * u * .5, n[10] = o / (r - o), n[11] = -1, n[12] = 0, n[13] = 0, n[14] = o * r / (r - o), n[15] = 0 + }(r, a || null, c.depthNear, c.depthFar); + var h, u, d, p, f, m, g, v, y, A, x, _, b, w, M, E, S, T, L, R = s.orientation || n, + C = s.position || i; + h = o, d = C, p = (u = R)[0], f = u[1], m = u[2], g = u[3], x = p * (v = p + p), _ = p * (y = f + f), b = p * (A = m + m), w = f * y, M = f * A, E = m * A, S = g * v, T = g * y, L = g * A, h[0] = 1 - (w + E), h[1] = _ + L, h[2] = b - T, h[3] = 0, h[4] = _ - L, h[5] = 1 - (x + E), h[6] = M + S, h[7] = 0, h[8] = b + T, h[9] = M - S, h[10] = 1 - (x + w), h[11] = 0, h[12] = d[0], h[13] = d[1], h[14] = d[2], h[15] = 1, l && function(t, e, n) { + var i, r, o, s, a, l, c, h, u, d, p, f, m = n[0], + g = n[1], + v = n[2]; + e === t ? (t[12] = e[0] * m + e[4] * g + e[8] * v + e[12], t[13] = e[1] * m + e[5] * g + e[9] * v + e[13], t[14] = e[2] * m + e[6] * g + e[10] * v + e[14], t[15] = e[3] * m + e[7] * g + e[11] * v + e[15]) : (i = e[0], r = e[1], o = e[2], s = e[3], a = e[4], l = e[5], c = e[6], h = e[7], u = e[8], d = e[9], p = e[10], f = e[11], t[0] = i, t[1] = r, t[2] = o, t[3] = s, t[4] = a, t[5] = l, t[6] = c, t[7] = h, t[8] = u, t[9] = d, t[10] = p, t[11] = f, t[12] = i * m + a * g + u * v + e[12], t[13] = r * m + l * g + d * v + e[13], t[14] = o * m + c * g + p * v + e[14], t[15] = s * m + h * g + f * v + e[15]) + }(o, o, l), + function(t, e) { + var n = e[0], + i = e[1], + r = e[2], + o = e[3], + s = e[4], + a = e[5], + l = e[6], + c = e[7], + h = e[8], + u = e[9], + d = e[10], + p = e[11], + f = e[12], + m = e[13], + g = e[14], + v = e[15], + y = n * a - i * s, + A = n * l - r * s, + x = n * c - o * s, + _ = i * l - r * a, + b = i * c - o * a, + w = r * c - o * l, + M = h * m - u * f, + E = h * g - d * f, + S = h * v - p * f, + T = u * g - d * m, + L = u * v - p * m, + R = d * v - p * g, + C = y * R - A * L + x * T + _ * S - b * E + w * M; + C && (C = 1 / C, t[0] = (a * R - l * L + c * T) * C, t[1] = (r * L - i * R - o * T) * C, t[2] = (m * w - g * b + v * _) * C, t[3] = (d * b - u * w - p * _) * C, t[4] = (l * S - s * R - c * E) * C, t[5] = (n * R - r * S + o * E) * C, t[6] = (g * x - f * w - v * A) * C, t[7] = (h * w - d * x + p * A) * C, t[8] = (s * L - a * S + c * M) * C, t[9] = (i * S - n * L - o * M) * C, t[10] = (f * b - m * x + v * y) * C, t[11] = (u * x - h * b - p * y) * C, t[12] = (a * E - s * T - l * M) * C, t[13] = (n * T - i * E + r * M) * C, t[14] = (m * A - f * _ - g * y) * C, t[15] = (h * _ - u * A + d * y) * C) + }(o, o) + } + return function(t, e, n) { + return !(!t || !e || (t.pose = e, t.timestamp = e.timestamp, r(t.leftProjectionMatrix, t.leftViewMatrix, e, n._getFieldOfView("left"), n._getEyeOffset("left"), n), r(t.rightProjectionMatrix, t.rightViewMatrix, e, n._getFieldOfView("right"), n._getEyeOffset("right"), n), 0)) + } + }(), + E = function(t) { + var e, n = t.indexOf("://"); + e = -1 !== n ? n + 3 : 0; + var i = t.indexOf("/", e); + return -1 === i && (i = t.length), t.substring(0, i) + }, + S = (t = {}, function(e, n) { + void 0 === t[e] && (console.warn("webvr-polyfill: " + n), t[e] = !0) + }), + T = function(t, e) { + S(t, t + " has been deprecated. This may not work on native WebVR displays. " + (e ? "Please use " + e + " instead." : "")) + }, + L = function(t, e, n) { + if (e) { + for (var i = [], r = null, o = 0; o < e.length; ++o) switch (s = e[o]) { + case t.TEXTURE_BINDING_2D: + case t.TEXTURE_BINDING_CUBE_MAP: + if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) { + console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"), i.push(null, null); + break + } + r || (r = t.getParameter(t.ACTIVE_TEXTURE)), t.activeTexture(l), i.push(t.getParameter(s), null); + break; + case t.ACTIVE_TEXTURE: + r = t.getParameter(t.ACTIVE_TEXTURE), i.push(null); + break; + default: + i.push(t.getParameter(s)) + } + for (n(t), o = 0; o < e.length; ++o) { + var s = e[o], + a = i[o]; + switch (s) { + case t.ACTIVE_TEXTURE: + break; + case t.ARRAY_BUFFER_BINDING: + t.bindBuffer(t.ARRAY_BUFFER, a); + break; + case t.COLOR_CLEAR_VALUE: + t.clearColor(a[0], a[1], a[2], a[3]); + break; + case t.COLOR_WRITEMASK: + t.colorMask(a[0], a[1], a[2], a[3]); + break; + case t.CURRENT_PROGRAM: + t.useProgram(a); + break; + case t.ELEMENT_ARRAY_BUFFER_BINDING: + t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, a); + break; + case t.FRAMEBUFFER_BINDING: + t.bindFramebuffer(t.FRAMEBUFFER, a); + break; + case t.RENDERBUFFER_BINDING: + t.bindRenderbuffer(t.RENDERBUFFER, a); + break; + case t.TEXTURE_BINDING_2D: + if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; + t.activeTexture(l), t.bindTexture(t.TEXTURE_2D, a); + break; + case t.TEXTURE_BINDING_CUBE_MAP: + var l; + if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; + t.activeTexture(l), t.bindTexture(t.TEXTURE_CUBE_MAP, a); + break; + case t.VIEWPORT: + t.viewport(a[0], a[1], a[2], a[3]); + break; + case t.BLEND: + case t.CULL_FACE: + case t.DEPTH_TEST: + case t.SCISSOR_TEST: + case t.STENCIL_TEST: + a ? t.enable(s) : t.disable(s); + break; + default: + console.log("No GL restore behavior for 0x" + s.toString(16)) + } + r && t.activeTexture(r) + } + } else n(t) + }, + R = ["attribute vec2 position;", "attribute vec3 texCoord;", "varying vec2 vTexCoord;", "uniform vec4 viewportOffsetScale[2];", "void main() {", " vec4 viewport = viewportOffsetScale[int(texCoord.z)];", " vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;", " gl_Position = vec4( position, 1.0, 1.0 );", "}"].join("\n"), + C = ["precision mediump float;", "uniform sampler2D diffuse;", "varying vec2 vTexCoord;", "void main() {", " gl_FragColor = texture2D(diffuse, vTexCoord);", "}"].join("\n"); + + function P(t, e, n, i) { + this.gl = t, this.cardboardUI = e, this.bufferScale = n, this.dirtySubmitFrameBindings = i, this.ctxAttribs = t.getContextAttributes(), this.instanceExt = t.getExtension("ANGLE_instanced_arrays"), this.meshWidth = 20, this.meshHeight = 20, this.bufferWidth = t.drawingBufferWidth, this.bufferHeight = t.drawingBufferHeight, this.realBindFramebuffer = t.bindFramebuffer, this.realEnable = t.enable, this.realDisable = t.disable, this.realColorMask = t.colorMask, this.realClearColor = t.clearColor, this.realViewport = t.viewport, a() || (this.realCanvasWidth = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "width"), this.realCanvasHeight = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "height")), this.isPatched = !1, this.lastBoundFramebuffer = null, this.cullFace = !1, this.depthTest = !1, this.blend = !1, this.scissorTest = !1, this.stencilTest = !1, this.viewport = [0, 0, 0, 0], this.colorMask = [!0, !0, !0, !0], this.clearColor = [0, 0, 0, 0], this.attribs = { + position: 0, + texCoord: 1 + }, this.program = A(t, R, C, this.attribs), this.uniforms = x(t, this.program), this.viewportOffsetScale = new Float32Array(8), this.setTextureBounds(), this.vertexBuffer = t.createBuffer(), this.indexBuffer = t.createBuffer(), this.indexCount = 0, this.renderTarget = t.createTexture(), this.framebuffer = t.createFramebuffer(), this.depthStencilBuffer = null, this.depthBuffer = null, this.stencilBuffer = null, this.ctxAttribs.depth && this.ctxAttribs.stencil ? this.depthStencilBuffer = t.createRenderbuffer() : this.ctxAttribs.depth ? this.depthBuffer = t.createRenderbuffer() : this.ctxAttribs.stencil && (this.stencilBuffer = t.createRenderbuffer()), this.patch(), this.onResize() + } + P.prototype.destroy = function() { + var t = this.gl; + this.unpatch(), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer), t.deleteBuffer(this.indexBuffer), t.deleteTexture(this.renderTarget), t.deleteFramebuffer(this.framebuffer), this.depthStencilBuffer && t.deleteRenderbuffer(this.depthStencilBuffer), this.depthBuffer && t.deleteRenderbuffer(this.depthBuffer), this.stencilBuffer && t.deleteRenderbuffer(this.stencilBuffer), this.cardboardUI && this.cardboardUI.destroy() + }, P.prototype.onResize = function() { + var t = this.gl, + e = this, + n = [t.RENDERBUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0]; + L(t, n, (function(t) { + e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.framebuffer), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.texImage2D(t.TEXTURE_2D, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, e.bufferWidth, e.bufferHeight, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, t.UNSIGNED_BYTE, null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, e.renderTarget, 0), e.ctxAttribs.depth && e.ctxAttribs.stencil ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthStencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_STENCIL, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_STENCIL_ATTACHMENT, t.RENDERBUFFER, e.depthStencilBuffer)) : e.ctxAttribs.depth ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_COMPONENT16, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_ATTACHMENT, t.RENDERBUFFER, e.depthBuffer)) : e.ctxAttribs.stencil && (t.bindRenderbuffer(t.RENDERBUFFER, e.stencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.STENCIL_INDEX8, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.STENCIL_ATTACHMENT, t.RENDERBUFFER, e.stencilBuffer)), !t.checkFramebufferStatus(t.FRAMEBUFFER) === t.FRAMEBUFFER_COMPLETE && console.error("Framebuffer incomplete!"), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), e.realClearColor.apply(t, e.clearColor) + })), this.cardboardUI && this.cardboardUI.onResize() + }, P.prototype.patch = function() { + if (!this.isPatched) { + var t = this, + e = this.gl.canvas, + n = this.gl; + a() || (e.width = g() * this.bufferScale, e.height = v() * this.bufferScale, Object.defineProperty(e, "width", { + configurable: !0, + enumerable: !0, + get: function() { + return t.bufferWidth + }, + set: function(n) { + t.bufferWidth = n, t.realCanvasWidth.set.call(e, n), t.onResize() + } + }), Object.defineProperty(e, "height", { + configurable: !0, + enumerable: !0, + get: function() { + return t.bufferHeight + }, + set: function(n) { + t.bufferHeight = n, t.realCanvasHeight.set.call(e, n), t.onResize() + } + })), this.lastBoundFramebuffer = n.getParameter(n.FRAMEBUFFER_BINDING), null == this.lastBoundFramebuffer && (this.lastBoundFramebuffer = this.framebuffer, this.gl.bindFramebuffer(n.FRAMEBUFFER, this.framebuffer)), this.gl.bindFramebuffer = function(e, i) { + t.lastBoundFramebuffer = i || t.framebuffer, t.realBindFramebuffer.call(n, e, t.lastBoundFramebuffer) + }, this.cullFace = n.getParameter(n.CULL_FACE), this.depthTest = n.getParameter(n.DEPTH_TEST), this.blend = n.getParameter(n.BLEND), this.scissorTest = n.getParameter(n.SCISSOR_TEST), this.stencilTest = n.getParameter(n.STENCIL_TEST), n.enable = function(e) { + switch (e) { + case n.CULL_FACE: + t.cullFace = !0; + break; + case n.DEPTH_TEST: + t.depthTest = !0; + break; + case n.BLEND: + t.blend = !0; + break; + case n.SCISSOR_TEST: + t.scissorTest = !0; + break; + case n.STENCIL_TEST: + t.stencilTest = !0 + } + t.realEnable.call(n, e) + }, n.disable = function(e) { + switch (e) { + case n.CULL_FACE: + t.cullFace = !1; + break; + case n.DEPTH_TEST: + t.depthTest = !1; + break; + case n.BLEND: + t.blend = !1; + break; + case n.SCISSOR_TEST: + t.scissorTest = !1; + break; + case n.STENCIL_TEST: + t.stencilTest = !1 + } + t.realDisable.call(n, e) + }, this.colorMask = n.getParameter(n.COLOR_WRITEMASK), n.colorMask = function(e, i, r, o) { + t.colorMask[0] = e, t.colorMask[1] = i, t.colorMask[2] = r, t.colorMask[3] = o, t.realColorMask.call(n, e, i, r, o) + }, this.clearColor = n.getParameter(n.COLOR_CLEAR_VALUE), n.clearColor = function(e, i, r, o) { + t.clearColor[0] = e, t.clearColor[1] = i, t.clearColor[2] = r, t.clearColor[3] = o, t.realClearColor.call(n, e, i, r, o) + }, this.viewport = n.getParameter(n.VIEWPORT), n.viewport = function(e, i, r, o) { + t.viewport[0] = e, t.viewport[1] = i, t.viewport[2] = r, t.viewport[3] = o, t.realViewport.call(n, e, i, r, o) + }, this.isPatched = !0, w(e) + } + }, P.prototype.unpatch = function() { + if (this.isPatched) { + var t = this.gl, + e = this.gl.canvas; + a() || (Object.defineProperty(e, "width", this.realCanvasWidth), Object.defineProperty(e, "height", this.realCanvasHeight)), e.width = this.bufferWidth, e.height = this.bufferHeight, t.bindFramebuffer = this.realBindFramebuffer, t.enable = this.realEnable, t.disable = this.realDisable, t.colorMask = this.realColorMask, t.clearColor = this.realClearColor, t.viewport = this.realViewport, this.lastBoundFramebuffer == this.framebuffer && t.bindFramebuffer(t.FRAMEBUFFER, null), this.isPatched = !1, setTimeout((function() { + w(e) + }), 1) + } + }, P.prototype.setTextureBounds = function(t, e) { + t || (t = [0, 0, .5, 1]), e || (e = [.5, 0, .5, 1]), this.viewportOffsetScale[0] = t[0], this.viewportOffsetScale[1] = t[1], this.viewportOffsetScale[2] = t[2], this.viewportOffsetScale[3] = t[3], this.viewportOffsetScale[4] = e[0], this.viewportOffsetScale[5] = e[1], this.viewportOffsetScale[6] = e[2], this.viewportOffsetScale[7] = e[3] + }, P.prototype.submitFrame = function() { + var t = this.gl, + e = this, + n = []; + if (this.dirtySubmitFrameBindings || n.push(t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING, t.ELEMENT_ARRAY_BUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0), L(t, n, (function(t) { + e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null); + var n = 0, + i = 0; + e.instanceExt && (n = t.getVertexAttrib(e.attribs.position, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE), i = t.getVertexAttrib(e.attribs.texCoord, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)), e.cullFace && e.realDisable.call(t, t.CULL_FACE), e.depthTest && e.realDisable.call(t, t.DEPTH_TEST), e.blend && e.realDisable.call(t, t.BLEND), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realDisable.call(t, t.STENCIL_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), (e.ctxAttribs.alpha || a()) && (e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT)), t.useProgram(e.program), t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e.indexBuffer), t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.enableVertexAttribArray(e.attribs.position), t.enableVertexAttribArray(e.attribs.texCoord), t.vertexAttribPointer(e.attribs.position, 2, t.FLOAT, !1, 20, 0), t.vertexAttribPointer(e.attribs.texCoord, 3, t.FLOAT, !1, 20, 8), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, 0), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, 0)), t.activeTexture(t.TEXTURE0), t.uniform1i(e.uniforms.diffuse, 0), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.uniform4fv(e.uniforms.viewportOffsetScale, e.viewportOffsetScale), t.drawElements(t.TRIANGLES, e.indexCount, t.UNSIGNED_SHORT, 0), e.cardboardUI && e.cardboardUI.renderNoState(), e.realBindFramebuffer.call(e.gl, t.FRAMEBUFFER, e.framebuffer), e.ctxAttribs.preserveDrawingBuffer || (e.realClearColor.call(t, 0, 0, 0, 0), t.clear(t.COLOR_BUFFER_BIT)), e.dirtySubmitFrameBindings || e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.cullFace && e.realEnable.call(t, t.CULL_FACE), e.depthTest && e.realEnable.call(t, t.DEPTH_TEST), e.blend && e.realEnable.call(t, t.BLEND), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realEnable.call(t, t.STENCIL_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), !e.ctxAttribs.alpha && e.ctxAttribs.preserveDrawingBuffer || e.realClearColor.apply(t, e.clearColor), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, n), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, i)) + })), a()) { + var i = t.canvas; + i.width == e.bufferWidth && i.height == e.bufferHeight || (e.bufferWidth = i.width, e.bufferHeight = i.height, e.onResize()) + } + }, P.prototype.updateDeviceInfo = function(t) { + var e = this.gl, + n = this, + i = [e.ARRAY_BUFFER_BINDING, e.ELEMENT_ARRAY_BUFFER_BINDING]; + L(e, i, (function(e) { + var i = n.computeMeshVertices_(n.meshWidth, n.meshHeight, t); + if (e.bindBuffer(e.ARRAY_BUFFER, n.vertexBuffer), e.bufferData(e.ARRAY_BUFFER, i, e.STATIC_DRAW), !n.indexCount) { + var r = n.computeMeshIndices_(n.meshWidth, n.meshHeight); + e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, n.indexBuffer), e.bufferData(e.ELEMENT_ARRAY_BUFFER, r, e.STATIC_DRAW), n.indexCount = r.length + } + })) + }, P.prototype.computeMeshVertices_ = function(t, e, n) { + for (var i = new Float32Array(2 * t * e * 5), r = n.getLeftEyeVisibleTanAngles(), o = n.getLeftEyeNoLensTanAngles(), a = n.getLeftEyeVisibleScreenRect(o), l = 0, c = 0; c < 2; c++) { + for (var h = 0; h < e; h++) + for (var u = 0; u < t; u++, l++) { + var d = u / (t - 1), + p = h / (e - 1), + f = d, + m = p, + g = s(r[0], r[2], d), + v = s(r[3], r[1], p), + y = Math.sqrt(g * g + v * v), + A = n.distortion.distortInverse(y), + x = v * A / y; + d = (g * A / y - o[0]) / (o[2] - o[0]), p = (x - o[3]) / (o[1] - o[3]), d = 2 * (a.x + d * a.width - .5), p = 2 * (a.y + p * a.height - .5), i[5 * l + 0] = d, i[5 * l + 1] = p, i[5 * l + 2] = f, i[5 * l + 3] = m, i[5 * l + 4] = c + } + var _ = r[2] - r[0]; + r[0] = -(_ + r[0]), r[2] = _ - r[2], _ = o[2] - o[0], o[0] = -(_ + o[0]), o[2] = _ - o[2], a.x = 1 - (a.x + a.width) + } + return i + }, P.prototype.computeMeshIndices_ = function(t, e) { + for (var n = new Uint16Array(2 * (t - 1) * (e - 1) * 6), i = t / 2, r = e / 2, o = 0, s = 0, a = 0; a < 2; a++) + for (var l = 0; l < e; l++) + for (var c = 0; c < t; c++, o++) 0 != c && 0 != l && (c <= i == l <= r ? (n[s++] = o, n[s++] = o - t - 1, n[s++] = o - t, n[s++] = o - t - 1, n[s++] = o, n[s++] = o - 1) : (n[s++] = o - 1, n[s++] = o - t, n[s++] = o, n[s++] = o - t, n[s++] = o - 1, n[s++] = o - t - 1)); + return n + }, P.prototype.getOwnPropertyDescriptor_ = function(t, e) { + var n = Object.getOwnPropertyDescriptor(t, e); + return void 0 !== n.get && void 0 !== n.set || (n.configurable = !0, n.enumerable = !0, n.get = function() { + return this.getAttribute(e) + }, n.set = function(t) { + this.setAttribute(e, t) + }), n + }; + var D = ["attribute vec2 position;", "uniform mat4 projectionMat;", "void main() {", " gl_Position = projectionMat * vec4( position, -1.0, 1.0 );", "}"].join("\n"), + I = ["precision mediump float;", "uniform vec4 color;", "void main() {", " gl_FragColor = color;", "}"].join("\n"), + O = Math.PI / 180; + + function N(t) { + this.gl = t, this.attribs = { + position: 0 + }, this.program = A(t, D, I, this.attribs), this.uniforms = x(t, this.program), this.vertexBuffer = t.createBuffer(), this.gearOffset = 0, this.gearVertexCount = 0, this.arrowOffset = 0, this.arrowVertexCount = 0, this.projMat = new Float32Array(16), this.listener = null, this.onResize() + } + + function B(t) { + this.coefficients = t + } + N.prototype.destroy = function() { + var t = this.gl; + this.listener && t.canvas.removeEventListener("click", this.listener, !1), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer) + }, N.prototype.listen = function(t, e) { + var n = this.gl.canvas; + this.listener = function(i) { + var r = n.clientWidth / 2; + i.clientX > r - 42 && i.clientX < r + 42 && i.clientY > n.clientHeight - 42 ? t(i) : i.clientX < 42 && i.clientY < 42 && e(i) + }, n.addEventListener("click", this.listener, !1) + }, N.prototype.onResize = function() { + var t = this.gl, + e = this, + n = [t.ARRAY_BUFFER_BINDING]; + L(t, n, (function(t) { + var n = [], + i = t.drawingBufferWidth / 2, + r = Math.max(screen.width, screen.height) * window.devicePixelRatio, + o = t.drawingBufferWidth / r * window.devicePixelRatio, + s = 4 * o / 2, + a = 42 * o, + l = 28 * o / 2, + c = 14 * o; + + function h(t, e) { + var r = (90 - t) * O, + o = Math.cos(r), + s = Math.sin(r); + n.push(.3125 * o * l + i, .3125 * s * l + l), n.push(e * o * l + i, e * s * l + l) + } + n.push(i - s, a), n.push(i - s, t.drawingBufferHeight), n.push(i + s, a), n.push(i + s, t.drawingBufferHeight), e.gearOffset = n.length / 2; + for (var u = 0; u <= 6; u++) { + var d = 60 * u; + h(d, 1), h(d + 12, 1), h(d + 20, .75), h(d + 40, .75), h(d + 48, 1) + } + + function p(e, i) { + n.push(c + e, t.drawingBufferHeight - c - i) + } + e.gearVertexCount = n.length / 2 - e.gearOffset, e.arrowOffset = n.length / 2; + var f = s / Math.sin(45 * O); + p(0, l), p(l, 0), p(l + f, f), p(f, l + f), p(f, l - f), p(0, l), p(l, 2 * l), p(l + f, 2 * l - f), p(f, l - f), p(0, l), p(f, l - s), p(28 * o, l - s), p(f, l + s), p(28 * o, l + s), e.arrowVertexCount = n.length / 2 - e.arrowOffset, t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.bufferData(t.ARRAY_BUFFER, new Float32Array(n), t.STATIC_DRAW) + })) + }, N.prototype.render = function() { + var t = this.gl, + e = this, + n = [t.CULL_FACE, t.DEPTH_TEST, t.BLEND, t.SCISSOR_TEST, t.STENCIL_TEST, t.COLOR_WRITEMASK, t.VIEWPORT, t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING]; + L(t, n, (function(t) { + t.disable(t.CULL_FACE), t.disable(t.DEPTH_TEST), t.disable(t.BLEND), t.disable(t.SCISSOR_TEST), t.disable(t.STENCIL_TEST), t.colorMask(!0, !0, !0, !0), t.viewport(0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.renderNoState() + })) + }, N.prototype.renderNoState = function() { + var t, e, n, i, r, o, s, a, l, c, h = this.gl; + h.useProgram(this.program), h.bindBuffer(h.ARRAY_BUFFER, this.vertexBuffer), h.enableVertexAttribArray(this.attribs.position), h.vertexAttribPointer(this.attribs.position, 2, h.FLOAT, !1, 8, 0), h.uniform4f(this.uniforms.color, 1, 1, 1, 1), t = this.projMat, e = 0, n = h.drawingBufferWidth, i = 0, r = h.drawingBufferHeight, a = 1 / (e - n), l = 1 / (i - r), c = 1 / ((o = .1) - (s = 1024)), t[0] = -2 * a, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = -2 * l, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 2 * c, t[11] = 0, t[12] = (e + n) * a, t[13] = (r + i) * l, t[14] = (s + o) * c, t[15] = 1, h.uniformMatrix4fv(this.uniforms.projectionMat, !1, this.projMat), h.drawArrays(h.TRIANGLE_STRIP, 0, 4), h.drawArrays(h.TRIANGLE_STRIP, this.gearOffset, this.gearVertexCount), h.drawArrays(h.TRIANGLE_STRIP, this.arrowOffset, this.arrowVertexCount) + }, B.prototype.distortInverse = function(t) { + for (var e = 0, n = 1, i = t - this.distort(e); Math.abs(n - e) > 1e-4;) { + var r = t - this.distort(n), + o = n - r * ((n - e) / (r - i)); + e = n, n = o, i = r + } + return n + }, B.prototype.distort = function(t) { + for (var e = t * t, n = 0, i = 0; i < this.coefficients.length; i++) n = e * (n + this.coefficients[i]); + return (n + 1) * t + }; + var F = Math.PI / 180, + z = 180 / Math.PI, + U = function(t, e, n) { + this.x = t || 0, this.y = e || 0, this.z = n || 0 + }; + U.prototype = { + constructor: U, + set: function(t, e, n) { + return this.x = t, this.y = e, this.z = n, this + }, + copy: function(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + }, + normalize: function() { + var t = this.length(); + if (0 !== t) { + var e = 1 / t; + this.multiplyScalar(e) + } else this.x = 0, this.y = 0, this.z = 0; + return this + }, + multiplyScalar: function(t) { + this.x *= t, this.y *= t, this.z *= t + }, + applyQuaternion: function(t) { + var e = this.x, + n = this.y, + i = this.z, + r = t.x, + o = t.y, + s = t.z, + a = t.w, + l = a * e + o * i - s * n, + c = a * n + s * e - r * i, + h = a * i + r * n - o * e, + u = -r * e - o * n - s * i; + return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this + }, + dot: function(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + }, + crossVectors: function(t, e) { + var n = t.x, + i = t.y, + r = t.z, + o = e.x, + s = e.y, + a = e.z; + return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this + } + }; + var H, G, V = function(t, e, n, i) { + this.x = t || 0, this.y = e || 0, this.z = n || 0, this.w = void 0 !== i ? i : 1 + }; + + function k(t) { + this.width = t.width || g(), this.height = t.height || v(), this.widthMeters = t.widthMeters, this.heightMeters = t.heightMeters, this.bevelMeters = t.bevelMeters + } + V.prototype = { + constructor: V, + set: function(t, e, n, i) { + return this.x = t, this.y = e, this.z = n, this.w = i, this + }, + copy: function(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this.w = t.w, this + }, + setFromEulerXYZ: function(t, e, n) { + var i = Math.cos(t / 2), + r = Math.cos(e / 2), + o = Math.cos(n / 2), + s = Math.sin(t / 2), + a = Math.sin(e / 2), + l = Math.sin(n / 2); + return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l + s * a * o, this.w = i * r * o - s * a * l, this + }, + setFromEulerYXZ: function(t, e, n) { + var i = Math.cos(t / 2), + r = Math.cos(e / 2), + o = Math.cos(n / 2), + s = Math.sin(t / 2), + a = Math.sin(e / 2), + l = Math.sin(n / 2); + return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l - s * a * o, this.w = i * r * o + s * a * l, this + }, + setFromAxisAngle: function(t, e) { + var n = e / 2, + i = Math.sin(n); + return this.x = t.x * i, this.y = t.y * i, this.z = t.z * i, this.w = Math.cos(n), this + }, + multiply: function(t) { + return this.multiplyQuaternions(this, t) + }, + multiplyQuaternions: function(t, e) { + var n = t.x, + i = t.y, + r = t.z, + o = t.w, + s = e.x, + a = e.y, + l = e.z, + c = e.w; + return this.x = n * c + o * s + i * l - r * a, this.y = i * c + o * a + r * s - n * l, this.z = r * c + o * l + n * a - i * s, this.w = o * c - n * s - i * a - r * l, this + }, + inverse: function() { + return this.x *= -1, this.y *= -1, this.z *= -1, this.normalize(), this + }, + normalize: function() { + var t = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); + return 0 === t ? (this.x = 0, this.y = 0, this.z = 0, this.w = 1) : (t = 1 / t, this.x = this.x * t, this.y = this.y * t, this.z = this.z * t, this.w = this.w * t), this + }, + slerp: function(t, e) { + if (0 === e) return this; + if (1 === e) return this.copy(t); + var n = this.x, + i = this.y, + r = this.z, + o = this.w, + s = o * t.w + n * t.x + i * t.y + r * t.z; + if (s < 0 ? (this.w = -t.w, this.x = -t.x, this.y = -t.y, this.z = -t.z, s = -s) : this.copy(t), s >= 1) return this.w = o, this.x = n, this.y = i, this.z = r, this; + var a = Math.acos(s), + l = Math.sqrt(1 - s * s); + if (Math.abs(l) < .001) return this.w = .5 * (o + this.w), this.x = .5 * (n + this.x), this.y = .5 * (i + this.y), this.z = .5 * (r + this.z), this; + var c = Math.sin((1 - e) * a) / l, + h = Math.sin(e * a) / l; + return this.w = o * c + this.w * h, this.x = n * c + this.x * h, this.y = i * c + this.y * h, this.z = r * c + this.z * h, this + }, + setFromUnitVectors: function(t, e) { + return void 0 === H && (H = new U), (G = t.dot(e) + 1) < 1e-6 ? (G = 0, Math.abs(t.x) > Math.abs(t.z) ? H.set(-t.y, t.x, 0) : H.set(0, -t.z, t.y)) : H.crossVectors(t, e), this.x = H.x, this.y = H.y, this.z = H.z, this.w = G, this.normalize(), this + } + }; + var W = new k({ + widthMeters: .11, + heightMeters: .062, + bevelMeters: .004 + }), + j = new k({ + widthMeters: .1038, + heightMeters: .0584, + bevelMeters: .004 + }), + X = { + CardboardV1: new Y({ + id: "CardboardV1", + label: "Cardboard I/O 2014", + fov: 40, + interLensDistance: .06, + baselineLensDistance: .035, + screenLensDistance: .042, + distortionCoefficients: [.441, .156], + inverseCoefficients: [-.4410035, .42756155, -.4804439, .5460139, -.58821183, .5733938, -.48303202, .33299083, -.17573841, .0651772, -.01488963, .001559834] + }), + CardboardV2: new Y({ + id: "CardboardV2", + label: "Cardboard I/O 2015", + fov: 60, + interLensDistance: .064, + baselineLensDistance: .035, + screenLensDistance: .039, + distortionCoefficients: [.34, .55], + inverseCoefficients: [-.33836704, -.18162185, .862655, -1.2462051, 1.0560602, -.58208317, .21609078, -.05444823, .009177956, -.0009904169, 6183535e-11, -16981803e-13] + }) + }; + + function q(t, e) { + this.viewer = X.CardboardV2, this.updateDeviceParams(t), this.distortion = new B(this.viewer.distortionCoefficients); + for (var n = 0; n < e.length; n++) { + var i = e[n]; + X[i.id] = new Y(i) + } + } + + function Y(t) { + this.id = t.id, this.label = t.label, this.fov = t.fov, this.interLensDistance = t.interLensDistance, this.baselineLensDistance = t.baselineLensDistance, this.screenLensDistance = t.screenLensDistance, this.distortionCoefficients = t.distortionCoefficients, this.inverseCoefficients = t.inverseCoefficients + } + q.prototype.updateDeviceParams = function(t) { + this.device = this.determineDevice_(t) || this.device + }, q.prototype.getDevice = function() { + return this.device + }, q.prototype.setViewer = function(t) { + this.viewer = t, this.distortion = new B(this.viewer.distortionCoefficients) + }, q.prototype.determineDevice_ = function(t) { + if (!t) return a() ? (console.warn("Using fallback iOS device measurements."), j) : (console.warn("Using fallback Android device measurements."), W); + var e = .0254 / t.xdpi, + n = .0254 / t.ydpi; + return new k({ + widthMeters: e * g(), + heightMeters: n * v(), + bevelMeters: .001 * t.bevelMm + }) + }, q.prototype.getDistortedFieldOfViewLeftEye = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = t.screenLensDistance, + r = (e.widthMeters - t.interLensDistance) / 2, + o = t.interLensDistance / 2, + s = t.baselineLensDistance - e.bevelMeters, + a = e.heightMeters - s, + l = z * Math.atan(n.distort(r / i)), + c = z * Math.atan(n.distort(o / i)), + h = z * Math.atan(n.distort(s / i)), + u = z * Math.atan(n.distort(a / i)); + return { + leftDegrees: Math.min(l, t.fov), + rightDegrees: Math.min(c, t.fov), + downDegrees: Math.min(h, t.fov), + upDegrees: Math.min(u, t.fov) + } + }, q.prototype.getLeftEyeVisibleTanAngles = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = Math.tan(-F * t.fov), + r = Math.tan(F * t.fov), + o = Math.tan(F * t.fov), + s = Math.tan(-F * t.fov), + a = e.widthMeters / 4, + l = e.heightMeters / 2, + c = t.baselineLensDistance - e.bevelMeters - l, + h = t.interLensDistance / 2 - a, + u = -c, + d = t.screenLensDistance, + p = n.distort((h - a) / d), + f = n.distort((u + l) / d), + m = n.distort((h + a) / d), + g = n.distort((u - l) / d), + v = new Float32Array(4); + return v[0] = Math.max(i, p), v[1] = Math.min(r, f), v[2] = Math.min(o, m), v[3] = Math.max(s, g), v + }, q.prototype.getLeftEyeNoLensTanAngles = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = new Float32Array(4), + r = n.distortInverse(Math.tan(-F * t.fov)), + o = n.distortInverse(Math.tan(F * t.fov)), + s = n.distortInverse(Math.tan(F * t.fov)), + a = n.distortInverse(Math.tan(-F * t.fov)), + l = e.widthMeters / 4, + c = e.heightMeters / 2, + h = t.baselineLensDistance - e.bevelMeters - c, + u = t.interLensDistance / 2 - l, + d = -h, + p = t.screenLensDistance, + f = (u - l) / p, + m = (d + c) / p, + g = (u + l) / p, + v = (d - c) / p; + return i[0] = Math.max(r, f), i[1] = Math.min(o, m), i[2] = Math.min(s, g), i[3] = Math.max(a, v), i + }, q.prototype.getLeftEyeVisibleScreenRect = function(t) { + var e = this.viewer, + n = this.device, + i = e.screenLensDistance, + r = (n.widthMeters - e.interLensDistance) / 2, + o = e.baselineLensDistance - n.bevelMeters, + s = (t[0] * i + r) / n.widthMeters, + a = (t[1] * i + o) / n.heightMeters, + l = (t[2] * i + r) / n.widthMeters, + c = (t[3] * i + o) / n.heightMeters; + return { + x: s, + y: c, + width: l - s, + height: a - c + } + }, q.prototype.getFieldOfViewLeftEye = function(t) { + return t ? this.getUndistortedFieldOfViewLeftEye() : this.getDistortedFieldOfViewLeftEye() + }, q.prototype.getFieldOfViewRightEye = function(t) { + var e = this.getFieldOfViewLeftEye(t); + return { + leftDegrees: e.rightDegrees, + rightDegrees: e.leftDegrees, + upDegrees: e.upDegrees, + downDegrees: e.downDegrees + } + }, q.prototype.getUndistortedFieldOfViewLeftEye = function() { + var t = this.getUndistortedParams_(); + return { + leftDegrees: z * Math.atan(t.outerDist), + rightDegrees: z * Math.atan(t.innerDist), + downDegrees: z * Math.atan(t.bottomDist), + upDegrees: z * Math.atan(t.topDist) + } + }, q.prototype.getUndistortedViewportLeftEye = function() { + var t = this.getUndistortedParams_(), + e = this.viewer, + n = this.device, + i = e.screenLensDistance, + r = n.widthMeters / i, + o = n.heightMeters / i, + s = n.width / r, + a = n.height / o, + l = Math.round((t.eyePosX - t.outerDist) * s), + c = Math.round((t.eyePosY - t.bottomDist) * a); + return { + x: l, + y: c, + width: Math.round((t.eyePosX + t.innerDist) * s) - l, + height: Math.round((t.eyePosY + t.topDist) * a) - c + } + }, q.prototype.getUndistortedParams_ = function() { + var t = this.viewer, + e = this.device, + n = this.distortion, + i = t.screenLensDistance, + r = t.interLensDistance / 2 / i, + o = e.widthMeters / i, + s = e.heightMeters / i, + a = o / 2 - r, + l = (t.baselineLensDistance - e.bevelMeters) / i, + c = t.fov, + h = n.distortInverse(Math.tan(F * c)), + u = Math.min(a, h), + d = Math.min(r, h), + p = Math.min(l, h); + return { + outerDist: u, + innerDist: d, + topDist: Math.min(s - l, h), + bottomDist: p, + eyePosX: a, + eyePosY: l + } + }, q.Viewers = X; + var Q = { + format: 1, + last_updated: "2019-11-09T17:36:14Z", + devices: [{ + type: "android", + rules: [{ + mdmh: "asus/*/Nexus 7/*" + }, { + ua: "Nexus 7" + }], + dpi: [320.8, 323], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "asus/*/ASUS_X00PD/*" + }, { + ua: "ASUS_X00PD" + }], + dpi: 245, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "asus/*/ASUS_X008D/*" + }, { + ua: "ASUS_X008D" + }], + dpi: 282, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "asus/*/ASUS_Z00AD/*" + }, { + ua: "ASUS_Z00AD" + }], + dpi: [403, 404.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 2 XL/*" + }, { + ua: "Pixel 2 XL" + }], + dpi: 537.9, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 3 XL/*" + }, { + ua: "Pixel 3 XL" + }], + dpi: [558.5, 553.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel XL/*" + }, { + ua: "Pixel XL" + }], + dpi: [537.9, 533], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 3/*" + }, { + ua: "Pixel 3" + }], + dpi: 442.4, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel 2/*" + }, { + ua: "Pixel 2" + }], + dpi: 441, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Google/*/Pixel/*" + }, { + ua: "Pixel" + }], + dpi: [432.6, 436.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC6435LVW/*" + }, { + ua: "HTC6435LVW" + }], + dpi: [449.7, 443.3], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One XL/*" + }, { + ua: "HTC One XL" + }], + dpi: [315.3, 314.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "htc/*/Nexus 9/*" + }, { + ua: "Nexus 9" + }], + dpi: 289, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One M9/*" + }, { + ua: "HTC One M9" + }], + dpi: [442.5, 443.3], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One_M8/*" + }, { + ua: "HTC One_M8" + }], + dpi: [449.7, 447.4], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "HTC/*/HTC One/*" + }, { + ua: "HTC One" + }], + dpi: 472.8, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/Nexus 6P/*" + }, { + ua: "Nexus 6P" + }], + dpi: [515.1, 518], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/BLN-L24/*" + }, { + ua: "HONORBLN-L24" + }], + dpi: 480, + bw: 4, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/BKL-L09/*" + }, { + ua: "BKL-L09" + }], + dpi: 403, + bw: 3.47, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LENOVO/*/Lenovo PB2-690Y/*" + }, { + ua: "Lenovo PB2-690Y" + }], + dpi: [457.2, 454.713], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/Nexus 5X/*" + }, { + ua: "Nexus 5X" + }], + dpi: [422, 419.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LGMS345/*" + }, { + ua: "LGMS345" + }], + dpi: [221.7, 219.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LG-D800/*" + }, { + ua: "LG-D800" + }], + dpi: [422, 424.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LG-D850/*" + }, { + ua: "LG-D850" + }], + dpi: [537.9, 541.9], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/VS985 4G/*" + }, { + ua: "VS985 4G" + }], + dpi: [537.9, 535.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/Nexus 5/*" + }, { + ua: "Nexus 5 B" + }], + dpi: [442.4, 444.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/Nexus 4/*" + }, { + ua: "Nexus 4" + }], + dpi: [319.8, 318.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LG-P769/*" + }, { + ua: "LG-P769" + }], + dpi: [240.6, 247.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LGMS323/*" + }, { + ua: "LGMS323" + }], + dpi: [206.6, 204.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "LGE/*/LGLS996/*" + }, { + ua: "LGLS996" + }], + dpi: [403.4, 401.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Micromax/*/4560MMX/*" + }, { + ua: "4560MMX" + }], + dpi: [240, 219.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Micromax/*/A250/*" + }, { + ua: "Micromax A250" + }], + dpi: [480, 446.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Micromax/*/Micromax AQ4501/*" + }, { + ua: "Micromax AQ4501" + }], + dpi: 240, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/G5/*" + }, { + ua: "Moto G (5) Plus" + }], + dpi: [403.4, 403], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/DROID RAZR/*" + }, { + ua: "DROID RAZR" + }], + dpi: [368.1, 256.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT830C/*" + }, { + ua: "XT830C" + }], + dpi: [254, 255.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1021/*" + }, { + ua: "XT1021" + }], + dpi: [254, 256.7], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1023/*" + }, { + ua: "XT1023" + }], + dpi: [254, 256.7], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1028/*" + }, { + ua: "XT1028" + }], + dpi: [326.6, 327.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1034/*" + }, { + ua: "XT1034" + }], + dpi: [326.6, 328.4], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1053/*" + }, { + ua: "XT1053" + }], + dpi: [315.3, 316.1], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1562/*" + }, { + ua: "XT1562" + }], + dpi: [403.4, 402.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/Nexus 6/*" + }, { + ua: "Nexus 6 B" + }], + dpi: [494.3, 489.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1063/*" + }, { + ua: "XT1063" + }], + dpi: [295, 296.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1064/*" + }, { + ua: "XT1064" + }], + dpi: [295, 295.6], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1092/*" + }, { + ua: "XT1092" + }], + dpi: [422, 424.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/XT1095/*" + }, { + ua: "XT1095" + }], + dpi: [422, 423.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "motorola/*/G4/*" + }, { + ua: "Moto G (4)" + }], + dpi: 401, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/A0001/*" + }, { + ua: "A0001" + }], + dpi: [403.4, 401], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE E1001/*" + }, { + ua: "ONE E1001" + }], + dpi: [442.4, 441.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE E1003/*" + }, { + ua: "ONE E1003" + }], + dpi: [442.4, 441.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE E1005/*" + }, { + ua: "ONE E1005" + }], + dpi: [442.4, 441.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A2001/*" + }, { + ua: "ONE A2001" + }], + dpi: [391.9, 405.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A2003/*" + }, { + ua: "ONE A2003" + }], + dpi: [391.9, 405.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A2005/*" + }, { + ua: "ONE A2005" + }], + dpi: [391.9, 405.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A3000/*" + }, { + ua: "ONEPLUS A3000" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A3003/*" + }, { + ua: "ONEPLUS A3003" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A3010/*" + }, { + ua: "ONEPLUS A3010" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A5000/*" + }, { + ua: "ONEPLUS A5000 " + }], + dpi: [403.411, 399.737], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONE A5010/*" + }, { + ua: "ONEPLUS A5010" + }], + dpi: [403, 400], + bw: 2, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6000/*" + }, { + ua: "ONEPLUS A6000" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6003/*" + }, { + ua: "ONEPLUS A6003" + }], + dpi: 401, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6010/*" + }, { + ua: "ONEPLUS A6010" + }], + dpi: 401, + bw: 2, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OnePlus/*/ONEPLUS A6013/*" + }, { + ua: "ONEPLUS A6013" + }], + dpi: 401, + bw: 2, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "OPPO/*/X909/*" + }, { + ua: "X909" + }], + dpi: [442.4, 444.1], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9082/*" + }, { + ua: "GT-I9082" + }], + dpi: [184.7, 185.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G360P/*" + }, { + ua: "SM-G360P" + }], + dpi: [196.7, 205.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/Nexus S/*" + }, { + ua: "Nexus S" + }], + dpi: [234.5, 229.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9300/*" + }, { + ua: "GT-I9300" + }], + dpi: [304.8, 303.9], + bw: 5, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-T230NU/*" + }, { + ua: "SM-T230NU" + }], + dpi: 216, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SGH-T399/*" + }, { + ua: "SGH-T399" + }], + dpi: [217.7, 231.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SGH-M919/*" + }, { + ua: "SGH-M919" + }], + dpi: [440.8, 437.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N9005/*" + }, { + ua: "SM-N9005" + }], + dpi: [386.4, 387], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SAMSUNG-SM-N900A/*" + }, { + ua: "SAMSUNG-SM-N900A" + }], + dpi: [386.4, 387.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9500/*" + }, { + ua: "GT-I9500" + }], + dpi: [442.5, 443.3], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9505/*" + }, { + ua: "GT-I9505" + }], + dpi: 439.4, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G900F/*" + }, { + ua: "SM-G900F" + }], + dpi: [415.6, 431.6], + bw: 5, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G900M/*" + }, { + ua: "SM-G900M" + }], + dpi: [415.6, 431.6], + bw: 5, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G800F/*" + }, { + ua: "SM-G800F" + }], + dpi: 326.8, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G906S/*" + }, { + ua: "SM-G906S" + }], + dpi: [562.7, 572.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9300/*" + }, { + ua: "GT-I9300" + }], + dpi: [306.7, 304.8], + bw: 5, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-T535/*" + }, { + ua: "SM-T535" + }], + dpi: [142.6, 136.4], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N920C/*" + }, { + ua: "SM-N920C" + }], + dpi: [515.1, 518.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N920P/*" + }, { + ua: "SM-N920P" + }], + dpi: [386.3655, 390.144], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N920W8/*" + }, { + ua: "SM-N920W8" + }], + dpi: [515.1, 518.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9300I/*" + }, { + ua: "GT-I9300I" + }], + dpi: [304.8, 305.8], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-I9195/*" + }, { + ua: "GT-I9195" + }], + dpi: [249.4, 256.7], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SPH-L520/*" + }, { + ua: "SPH-L520" + }], + dpi: [249.4, 255.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SAMSUNG-SGH-I717/*" + }, { + ua: "SAMSUNG-SGH-I717" + }], + dpi: 285.8, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SPH-D710/*" + }, { + ua: "SPH-D710" + }], + dpi: [217.7, 204.2], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/GT-N7100/*" + }, { + ua: "GT-N7100" + }], + dpi: 265.1, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SCH-I605/*" + }, { + ua: "SCH-I605" + }], + dpi: 265.1, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/Galaxy Nexus/*" + }, { + ua: "Galaxy Nexus" + }], + dpi: [315.3, 314.2], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N910H/*" + }, { + ua: "SM-N910H" + }], + dpi: [515.1, 518], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-N910C/*" + }, { + ua: "SM-N910C" + }], + dpi: [515.2, 520.2], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G130M/*" + }, { + ua: "SM-G130M" + }], + dpi: [165.9, 164.8], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G928I/*" + }, { + ua: "SM-G928I" + }], + dpi: [515.1, 518.4], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G920F/*" + }, { + ua: "SM-G920F" + }], + dpi: 580.6, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G920P/*" + }, { + ua: "SM-G920P" + }], + dpi: [522.5, 577], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G925F/*" + }, { + ua: "SM-G925F" + }], + dpi: 580.6, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G925V/*" + }, { + ua: "SM-G925V" + }], + dpi: [522.5, 576.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G930F/*" + }, { + ua: "SM-G930F" + }], + dpi: 576.6, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G935F/*" + }, { + ua: "SM-G935F" + }], + dpi: 533, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G950F/*" + }, { + ua: "SM-G950F" + }], + dpi: [562.707, 565.293], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G955U/*" + }, { + ua: "SM-G955U" + }], + dpi: [522.514, 525.762], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G955F/*" + }, { + ua: "SM-G955F" + }], + dpi: [522.514, 525.762], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960F/*" + }, { + ua: "SM-G960F" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G9600/*" + }, { + ua: "SM-G9600" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960T/*" + }, { + ua: "SM-G960T" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960N/*" + }, { + ua: "SM-G960N" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960U/*" + }, { + ua: "SM-G960U" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G9608/*" + }, { + ua: "SM-G9608" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960FD/*" + }, { + ua: "SM-G960FD" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G960W/*" + }, { + ua: "SM-G960W" + }], + dpi: [569.575, 571.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G965F/*" + }, { + ua: "SM-G965F" + }], + dpi: 529, + bw: 2, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/C6903/*" + }, { + ua: "C6903" + }], + dpi: [442.5, 443.3], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/D6653/*" + }, { + ua: "D6653" + }], + dpi: [428.6, 427.6], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/E6653/*" + }, { + ua: "E6653" + }], + dpi: [428.6, 425.7], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/E6853/*" + }, { + ua: "E6853" + }], + dpi: [403.4, 401.9], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Sony/*/SGP321/*" + }, { + ua: "SGP321" + }], + dpi: [224.7, 224.1], + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "TCT/*/ALCATEL ONE TOUCH Fierce/*" + }, { + ua: "ALCATEL ONE TOUCH Fierce" + }], + dpi: [240, 247.5], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "THL/*/thl 5000/*" + }, { + ua: "thl 5000" + }], + dpi: [480, 443.3], + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Fly/*/IQ4412/*" + }, { + ua: "IQ4412" + }], + dpi: 307.9, + bw: 3, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "ZTE/*/ZTE Blade L2/*" + }, { + ua: "ZTE Blade L2" + }], + dpi: 240, + bw: 3, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "BENEVE/*/VR518/*" + }, { + ua: "VR518" + }], + dpi: 480, + bw: 3, + ac: 500 + }, { + type: "ios", + rules: [{ + res: [640, 960] + }], + dpi: [325.1, 328.4], + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [640, 1136] + }], + dpi: [317.1, 320.2], + bw: 3, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [750, 1334] + }], + dpi: 326.4, + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [1242, 2208] + }], + dpi: [453.6, 458.4], + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [1125, 2001] + }], + dpi: [410.9, 415.4], + bw: 4, + ac: 1e3 + }, { + type: "ios", + rules: [{ + res: [1125, 2436] + }], + dpi: 458, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "Huawei/*/EML-L29/*" + }, { + ua: "EML-L29" + }], + dpi: 428, + bw: 3.45, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "Nokia/*/Nokia 7.1/*" + }, { + ua: "Nokia 7.1" + }], + dpi: [432, 431.9], + bw: 3, + ac: 500 + }, { + type: "ios", + rules: [{ + res: [1242, 2688] + }], + dpi: 458, + bw: 4, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G570M/*" + }, { + ua: "SM-G570M" + }], + dpi: 320, + bw: 3.684, + ac: 1e3 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G970F/*" + }, { + ua: "SM-G970F" + }], + dpi: 438, + bw: 2.281, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G973F/*" + }, { + ua: "SM-G973F" + }], + dpi: 550, + bw: 2.002, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G975F/*" + }, { + ua: "SM-G975F" + }], + dpi: 522, + bw: 2.054, + ac: 500 + }, { + type: "android", + rules: [{ + mdmh: "samsung/*/SM-G977F/*" + }, { + ua: "SM-G977F" + }], + dpi: 505, + bw: 2.334, + ac: 500 + }, { + type: "ios", + rules: [{ + res: [828, 1792] + }], + dpi: 326, + bw: 5, + ac: 500 + }] + }; + + function Z(t, e) { + if (this.dpdb = Q, this.recalculateDeviceParams_(), t) { + this.onDeviceParamsUpdated = e; + var n = new XMLHttpRequest, + i = this; + n.open("GET", t, !0), n.addEventListener("load", (function() { + i.loading = !1, n.status >= 200 && n.status <= 299 ? (i.dpdb = JSON.parse(n.response), i.recalculateDeviceParams_()) : console.error("Error loading online DPDB!") + })), n.send() + } + } + + function J(t) { + this.xdpi = t.xdpi, this.ydpi = t.ydpi, this.bevelMm = t.bevelMm + } + + function K(t, e) { + this.set(t, e) + } + + function $(t, e) { + this.kFilter = t, this.isDebug = e, this.currentAccelMeasurement = new K, this.currentGyroMeasurement = new K, this.previousGyroMeasurement = new K, a() ? this.filterQ = new V(-1, 0, 0, 1) : this.filterQ = new V(1, 0, 0, 1), this.previousFilterQ = new V, this.previousFilterQ.copy(this.filterQ), this.accelQ = new V, this.isOrientationInitialized = !1, this.estimatedGravity = new U, this.measuredGravity = new U, this.gyroIntegralQ = new V + } + + function tt(t, e) { + this.predictionTimeS = t, this.isDebug = e, this.previousQ = new V, this.previousTimestampS = null, this.deltaQ = new V, this.outQ = new V + } + + function et(t, e, n, i) { + this.yawOnly = n, this.accelerometer = new U, this.gyroscope = new U, this.filter = new $(t, i), this.posePredictor = new tt(e, i), this.isFirefoxAndroid = h(), this.isIOS = a(); + var r = u(); + this.isDeviceMotionInRadians = !this.isIOS && r && r < 66, this.isWithoutDeviceMotion = p() || d(), this.filterToWorldQ = new V, a() ? this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), Math.PI / 2) : this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), this.inverseWorldToScreenQ = new V, this.worldToScreenQ = new V, this.originalPoseAdjustQ = new V, this.originalPoseAdjustQ.setFromAxisAngle(new U(0, 0, 1), -window.orientation * Math.PI / 180), this.setScreenTransform_(), m() && this.filterToWorldQ.multiply(this.inverseWorldToScreenQ), this.resetQ = new V, this.orientationOut_ = new Float32Array(4), this.start() + } + Z.prototype.getDeviceParams = function() { + return this.deviceParams + }, Z.prototype.recalculateDeviceParams_ = function() { + var t = this.calcDeviceParams_(); + t ? (this.deviceParams = t, this.onDeviceParamsUpdated && this.onDeviceParamsUpdated(this.deviceParams)) : console.error("Failed to recalculate device parameters.") + }, Z.prototype.calcDeviceParams_ = function() { + var t = this.dpdb; + if (!t) return console.error("DPDB not available."), null; + if (1 != t.format) return console.error("DPDB has unexpected format version."), null; + if (!t.devices || !t.devices.length) return console.error("DPDB does not have a devices section."), null; + var e = navigator.userAgent || navigator.vendor || window.opera, + n = g(), + i = v(); + if (!t.devices) return console.error("DPDB has no devices section."), null; + for (var r = 0; r < t.devices.length; r++) { + var o = t.devices[r]; + if (o.rules) + if ("ios" == o.type || "android" == o.type) { + if (a() == ("ios" == o.type)) { + for (var s = !1, l = 0; l < o.rules.length; l++) { + var c = o.rules[l]; + if (this.ruleMatches_(c, e, n, i)) { + s = !0; + break + } + } + if (s) return new J({ + xdpi: o.dpi[0] || o.dpi, + ydpi: o.dpi[1] || o.dpi, + bevelMm: o.bw + }) + } + } else console.warn("Device[" + r + "] has invalid type."); + else console.warn("Device[" + r + "] has no rules section.") + } + return console.warn("No DPDB device match."), null + }, Z.prototype.ruleMatches_ = function(t, e, n, i) { + if (!t.ua && !t.res) return !1; + if (t.ua && "SM" === t.ua.substring(0, 2) && (t.ua = t.ua.substring(0, 7)), t.ua && e.indexOf(t.ua) < 0) return !1; + if (t.res) { + if (!t.res[0] || !t.res[1]) return !1; + var r = t.res[0], + o = t.res[1]; + if (Math.min(n, i) != Math.min(r, o) || Math.max(n, i) != Math.max(r, o)) return !1 + } + return !0 + }, K.prototype.set = function(t, e) { + this.sample = t, this.timestampS = e + }, K.prototype.copy = function(t) { + this.set(t.sample, t.timestampS) + }, $.prototype.addAccelMeasurement = function(t, e) { + this.currentAccelMeasurement.set(t, e) + }, $.prototype.addGyroMeasurement = function(t, e) { + this.currentGyroMeasurement.set(t, e); + var n, i = e - this.previousGyroMeasurement.timestampS; + n = i, isNaN(n) || n <= .001 || n > 1 || this.run_(), this.previousGyroMeasurement.copy(this.currentGyroMeasurement) + }, $.prototype.run_ = function() { + if (!this.isOrientationInitialized) return this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample), this.previousFilterQ.copy(this.accelQ), void(this.isOrientationInitialized = !0); + var t = this.currentGyroMeasurement.timestampS - this.previousGyroMeasurement.timestampS, + e = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, t); + this.gyroIntegralQ.multiply(e), this.filterQ.copy(this.previousFilterQ), this.filterQ.multiply(e); + var n = new V; + n.copy(this.filterQ), n.inverse(), this.estimatedGravity.set(0, 0, -1), this.estimatedGravity.applyQuaternion(n), this.estimatedGravity.normalize(), this.measuredGravity.copy(this.currentAccelMeasurement.sample), this.measuredGravity.normalize(); + var i, r = new V; + r.setFromUnitVectors(this.estimatedGravity, this.measuredGravity), r.inverse(), this.isDebug && console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)", z * ((i = r).w > 1 ? (console.warn("getQuaternionAngle: w > 1"), 0) : 2 * Math.acos(i.w)), this.estimatedGravity.x.toFixed(1), this.estimatedGravity.y.toFixed(1), this.estimatedGravity.z.toFixed(1), this.measuredGravity.x.toFixed(1), this.measuredGravity.y.toFixed(1), this.measuredGravity.z.toFixed(1)); + var o = new V; + o.copy(this.filterQ), o.multiply(r), this.filterQ.slerp(o, 1 - this.kFilter), this.previousFilterQ.copy(this.filterQ) + }, $.prototype.getOrientation = function() { + return this.filterQ + }, $.prototype.accelToQuaternion_ = function(t) { + var e = new U; + e.copy(t), e.normalize(); + var n = new V; + return n.setFromUnitVectors(new U(0, 0, -1), e), n.inverse(), n + }, $.prototype.gyroToQuaternionDelta_ = function(t, e) { + var n = new V, + i = new U; + return i.copy(t), i.normalize(), n.setFromAxisAngle(i, t.length() * e), n + }, tt.prototype.getPrediction = function(t, e, n) { + if (!this.previousTimestampS) return this.previousQ.copy(t), this.previousTimestampS = n, t; + var i = new U; + i.copy(e), i.normalize(); + var r = e.length(); + if (r < 20 * F) return this.isDebug && console.log("Moving slowly, at %s deg/s: no prediction", (z * r).toFixed(1)), this.outQ.copy(t), this.previousQ.copy(t), this.outQ; + var o = r * this.predictionTimeS; + return this.deltaQ.setFromAxisAngle(i, o), this.outQ.copy(this.previousQ), this.outQ.multiply(this.deltaQ), this.previousQ.copy(t), this.previousTimestampS = n, this.outQ + }, et.prototype.getPosition = function() { + return null + }, et.prototype.getOrientation = function() { + var t = void 0; + if (this.isWithoutDeviceMotion && this._deviceOrientationQ) return this.deviceOrientationFixQ = this.deviceOrientationFixQ || (n = (new V).setFromAxisAngle(new U(0, 0, -1), 0), i = new V, -90 === window.orientation ? i.setFromAxisAngle(new U(0, 1, 0), Math.PI / -2) : i.setFromAxisAngle(new U(0, 1, 0), Math.PI / 2), n.multiply(i)), this.deviceOrientationFilterToWorldQ = this.deviceOrientationFilterToWorldQ || ((e = new V).setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), e), t = this._deviceOrientationQ, (r = new V).copy(t), r.multiply(this.deviceOrientationFilterToWorldQ), r.multiply(this.resetQ), r.multiply(this.worldToScreenQ), r.multiplyQuaternions(this.deviceOrientationFixQ, r), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_; + var e, n, i, r, o = this.filter.getOrientation(); + return t = this.posePredictor.getPrediction(o, this.gyroscope, this.previousTimestampS), (r = new V).copy(this.filterToWorldQ), r.multiply(this.resetQ), r.multiply(t), r.multiply(this.worldToScreenQ), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_ + }, et.prototype.resetPose = function() { + this.resetQ.copy(this.filter.getOrientation()), this.resetQ.x = 0, this.resetQ.y = 0, this.resetQ.z *= -1, this.resetQ.normalize(), m() && this.resetQ.multiply(this.inverseWorldToScreenQ), this.resetQ.multiply(this.originalPoseAdjustQ) + }, et.prototype.onDeviceOrientation_ = function(t) { + this._deviceOrientationQ = this._deviceOrientationQ || new V; + var e = t.alpha, + n = t.beta, + i = t.gamma; + e = (e || 0) * Math.PI / 180, n = (n || 0) * Math.PI / 180, i = (i || 0) * Math.PI / 180, this._deviceOrientationQ.setFromEulerYXZ(n, e, -i) + }, et.prototype.onDeviceMotion_ = function(t) { + this.updateDeviceMotion_(t) + }, et.prototype.updateDeviceMotion_ = function(t) { + var e = t.accelerationIncludingGravity, + n = t.rotationRate, + i = t.timeStamp / 1e3, + r = i - this.previousTimestampS; + return r < 0 ? (S("fusion-pose-sensor:invalid:non-monotonic", "Invalid timestamps detected: non-monotonic timestamp from devicemotion"), void(this.previousTimestampS = i)) : r <= .001 || r > 1 ? (S("fusion-pose-sensor:invalid:outside-threshold", "Invalid timestamps detected: Timestamp from devicemotion outside expected range."), void(this.previousTimestampS = i)) : (this.accelerometer.set(-e.x, -e.y, -e.z), n && (f() ? this.gyroscope.set(-n.beta, n.alpha, n.gamma) : this.gyroscope.set(n.alpha, n.beta, n.gamma), this.isDeviceMotionInRadians || this.gyroscope.multiplyScalar(Math.PI / 180), this.filter.addGyroMeasurement(this.gyroscope, i)), this.filter.addAccelMeasurement(this.accelerometer, i), void(this.previousTimestampS = i)) + }, et.prototype.onOrientationChange_ = function(t) { + this.setScreenTransform_() + }, et.prototype.onMessage_ = function(t) { + var e = t.data; + e && e.type && "devicemotion" === e.type.toLowerCase() && this.updateDeviceMotion_(e.deviceMotionEvent) + }, et.prototype.setScreenTransform_ = function() { + switch (this.worldToScreenQ.set(0, 0, 0, 1), window.orientation) { + case 0: + break; + case 90: + this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), -Math.PI / 2); + break; + case -90: + this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), Math.PI / 2) + } + this.inverseWorldToScreenQ.copy(this.worldToScreenQ), this.inverseWorldToScreenQ.inverse() + }, et.prototype.start = function() { + var t, e, n; + this.onDeviceMotionCallback_ = this.onDeviceMotion_.bind(this), this.onOrientationChangeCallback_ = this.onOrientationChange_.bind(this), this.onMessageCallback_ = this.onMessage_.bind(this), this.onDeviceOrientationCallback_ = this.onDeviceOrientation_.bind(this), a() && (t = window.self !== window.top, e = E(document.referrer), n = E(window.location.href), t && e !== n) && window.addEventListener("message", this.onMessageCallback_), window.addEventListener("orientationchange", this.onOrientationChangeCallback_), this.isWithoutDeviceMotion ? window.addEventListener("deviceorientation", this.onDeviceOrientationCallback_) : window.addEventListener("devicemotion", this.onDeviceMotionCallback_) + }, et.prototype.stop = function() { + window.removeEventListener("devicemotion", this.onDeviceMotionCallback_), window.removeEventListener("deviceorientation", this.onDeviceOrientationCallback_), window.removeEventListener("orientationchange", this.onOrientationChangeCallback_), window.removeEventListener("message", this.onMessageCallback_) + }; + var nt = new U(1, 0, 0), + it = new U(0, 0, 1), + rt = new V; + rt.setFromAxisAngle(nt, -Math.PI / 2), rt.multiply((new V).setFromAxisAngle(it, Math.PI / 2)); + var ot = function() { + function t(e) { + ! function(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + }(this, t), this.config = e, this.sensor = null, this.fusionSensor = null, this._out = new Float32Array(4), this.api = null, this.errors = [], this._sensorQ = new V, this._outQ = new V, this._onSensorRead = this._onSensorRead.bind(this), this._onSensorError = this._onSensorError.bind(this), this.init() + } + return r(t, [{ + key: "init", + value: function() { + var t = null; + try { + (t = new RelativeOrientationSensor({ + frequency: 60, + referenceFrame: "screen" + })).addEventListener("error", this._onSensorError) + } catch (t) { + this.errors.push(t), "SecurityError" === t.name ? (console.error("Cannot construct sensors due to the Feature Policy"), console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'), this.useDeviceMotion()) : "ReferenceError" === t.name ? this.useDeviceMotion() : console.error(t) + } + t && (this.api = "sensor", this.sensor = t, this.sensor.addEventListener("reading", this._onSensorRead), this.sensor.start()) + } + }, { + key: "useDeviceMotion", + value: function() { + this.api = "devicemotion", this.fusionSensor = new et(this.config.K_FILTER, this.config.PREDICTION_TIME_S, this.config.YAW_ONLY, this.config.DEBUG), this.sensor && (this.sensor.removeEventListener("reading", this._onSensorRead), this.sensor.removeEventListener("error", this._onSensorError), this.sensor = null) + } + }, { + key: "getOrientation", + value: function() { + if (this.fusionSensor) return this.fusionSensor.getOrientation(); + if (!this.sensor || !this.sensor.quaternion) return this._out[0] = this._out[1] = this._out[2] = 0, this._out[3] = 1, this._out; + var t = this.sensor.quaternion; + this._sensorQ.set(t[0], t[1], t[2], t[3]); + var e = this._outQ; + return e.copy(rt), e.multiply(this._sensorQ), this.config.YAW_ONLY && (e.x = e.z = 0, e.normalize()), this._out[0] = e.x, this._out[1] = e.y, this._out[2] = e.z, this._out[3] = e.w, this._out + } + }, { + key: "_onSensorError", + value: function(t) { + this.errors.push(t.error), "NotAllowedError" === t.error.name ? console.error("Permission to access sensor was denied") : "NotReadableError" === t.error.name ? console.error("Sensor could not be read") : console.error(t.error), this.useDeviceMotion() + } + }, { + key: "_onSensorRead", + value: function() {} + }]), t + }(); + + function st() { + this.loadIcon_(); + var t = document.createElement("div"); + (o = t.style).position = "fixed", o.top = 0, o.right = 0, o.bottom = 0, o.left = 0, o.backgroundColor = "gray", o.fontFamily = "sans-serif", o.zIndex = 1e6; + var e = document.createElement("img"); + e.src = this.icon, (o = e.style).marginLeft = "25%", o.marginTop = "25%", o.width = "50%", t.appendChild(e); + var n = document.createElement("div"); + (o = n.style).textAlign = "center", o.fontSize = "16px", o.lineHeight = "24px", o.margin = "24px 25%", o.width = "50%", n.innerHTML = "Place your phone into your Cardboard viewer.", t.appendChild(n); + var i = document.createElement("div"); + (o = i.style).backgroundColor = "#CFD8DC", o.position = "fixed", o.bottom = 0, o.width = "100%", o.height = "48px", o.padding = "14px 24px", o.boxSizing = "border-box", o.color = "#656A6B", t.appendChild(i); + var r = document.createElement("div"); + r.style.float = "left", r.innerHTML = "No Cardboard viewer?"; + var o, s = document.createElement("a"); + s.href = "https://www.google.com/get/cardboard/get-cardboard/", s.innerHTML = "get one", s.target = "_blank", (o = s.style).float = "right", o.fontWeight = 600, o.textTransform = "uppercase", o.borderLeft = "1px solid gray", o.paddingLeft = "24px", o.textDecoration = "none", o.color = "#656A6B", i.appendChild(r), i.appendChild(s), this.overlay = t, this.text = n, this.hide() + } + + function at(t) { + try { + this.selectedKey = localStorage.getItem("WEBVR_CARDBOARD_VIEWER") + } catch (t) { + console.error("Failed to load viewer profile: %s", t) + } + this.selectedKey || (this.selectedKey = t || "CardboardV1"), this.dialog = this.createDialog_(q.Viewers), this.root = null, this.onChangeCallbacks_ = [] + } + st.prototype.show = function(t) { + t || this.overlay.parentElement ? t && (this.overlay.parentElement && this.overlay.parentElement != t && this.overlay.parentElement.removeChild(this.overlay), t.appendChild(this.overlay)) : document.body.appendChild(this.overlay), this.overlay.style.display = "block"; + var e = this.overlay.querySelector("img").style; + m() ? (e.width = "20%", e.marginLeft = "40%", e.marginTop = "3%") : (e.width = "50%", e.marginLeft = "25%", e.marginTop = "25%") + }, st.prototype.hide = function() { + this.overlay.style.display = "none" + }, st.prototype.showTemporarily = function(t, e) { + this.show(e), this.timer = setTimeout(this.hide.bind(this), t) + }, st.prototype.disableShowTemporarily = function() { + clearTimeout(this.timer) + }, st.prototype.update = function() { + this.disableShowTemporarily(), !m() && _() ? this.show() : this.hide() + }, st.prototype.loadIcon_ = function() { + this.icon = "data:image/svg+xml," + encodeURIComponent("") + }, at.prototype.show = function(t) { + this.root = t, t.appendChild(this.dialog), this.dialog.querySelector("#" + this.selectedKey).checked = !0, this.dialog.style.display = "block" + }, at.prototype.hide = function() { + this.root && this.root.contains(this.dialog) && this.root.removeChild(this.dialog), this.dialog.style.display = "none" + }, at.prototype.getCurrentViewer = function() { + return q.Viewers[this.selectedKey] + }, at.prototype.getSelectedKey_ = function() { + var t = this.dialog.querySelector("input[name=field]:checked"); + return t ? t.id : null + }, at.prototype.onChange = function(t) { + this.onChangeCallbacks_.push(t) + }, at.prototype.fireOnChange_ = function(t) { + for (var e = 0; e < this.onChangeCallbacks_.length; e++) this.onChangeCallbacks_[e](t) + }, at.prototype.onSave_ = function() { + if (this.selectedKey = this.getSelectedKey_(), this.selectedKey && q.Viewers[this.selectedKey]) { + this.fireOnChange_(q.Viewers[this.selectedKey]); + try { + localStorage.setItem("WEBVR_CARDBOARD_VIEWER", this.selectedKey) + } catch (t) { + console.error("Failed to save viewer profile: %s", t) + } + this.hide() + } else console.error("ViewerSelector.onSave_: this should never happen!") + }, at.prototype.createDialog_ = function(t) { + var e = document.createElement("div"); + e.classList.add("webvr-polyfill-viewer-selector"), e.style.display = "none"; + var n = document.createElement("div"); + (r = n.style).position = "fixed", r.left = 0, r.top = 0, r.width = "100%", r.height = "100%", r.background = "rgba(0, 0, 0, 0.3)", n.addEventListener("click", this.hide.bind(this)); + var i = document.createElement("div"), + r = i.style; + for (var o in r.boxSizing = "border-box", r.position = "fixed", r.top = "24px", r.left = "50%", r.marginLeft = "-140px", r.width = "280px", r.padding = "24px", r.overflow = "hidden", r.background = "#fafafa", r.fontFamily = "'Roboto', sans-serif", r.boxShadow = "0px 5px 20px #666", i.appendChild(this.createH1_("Select your viewer")), t) i.appendChild(this.createChoice_(o, t[o].label)); + return i.appendChild(this.createButton_("Save", this.onSave_.bind(this))), e.appendChild(n), e.appendChild(i), e + }, at.prototype.createH1_ = function(t) { + var e = document.createElement("h1"), + n = e.style; + return n.color = "black", n.fontSize = "20px", n.fontWeight = "bold", n.marginTop = 0, n.marginBottom = "24px", e.innerHTML = t, e + }, at.prototype.createChoice_ = function(t, e) { + var n = document.createElement("div"); + n.style.marginTop = "8px", n.style.color = "black"; + var i = document.createElement("input"); + i.style.fontSize = "30px", i.setAttribute("id", t), i.setAttribute("type", "radio"), i.setAttribute("value", t), i.setAttribute("name", "field"); + var r = document.createElement("label"); + return r.style.marginLeft = "4px", r.setAttribute("for", t), r.innerHTML = e, n.appendChild(i), n.appendChild(r), n + }, at.prototype.createButton_ = function(t, e) { + var n = document.createElement("button"); + n.innerHTML = t; + var i = n.style; + return i.float = "right", i.textTransform = "uppercase", i.color = "#1094f7", i.fontSize = "14px", i.letterSpacing = 0, i.border = 0, i.background = "none", i.marginTop = "16px", n.addEventListener("click", e), n + }, "undefined" != typeof window ? window : void 0 !== e || "undefined" != typeof self && self; + var lt, ct = (lt = function(t, e) { + return t(e = { + exports: {} + }, e.exports), e.exports + }((function(t, e) { + ! function(e, n) { + t.exports = n() + }(0, (function() { + return function(t) { + var e = {}; + + function n(i) { + if (e[i]) return e[i].exports; + var r = e[i] = { + i: i, + l: !1, + exports: {} + }; + return t[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports + } + return n.m = t, n.c = e, n.d = function(t, e, i) { + n.o(t, e) || Object.defineProperty(t, e, { + configurable: !1, + enumerable: !0, + get: i + }) + }, n.n = function(t) { + var e = t && t.__esModule ? function() { + return t.default + } : function() { + return t + }; + return n.d(e, "a", e), e + }, n.o = function(t, e) { + return Object.prototype.hasOwnProperty.call(t, e) + }, n.p = "", n(n.s = 0) + }([function(t, e, n) { + var i = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + r = n(1), + o = "undefined" != typeof navigator && parseFloat(("" + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) < 10 && !window.MSStream, + s = function() { + function t() { + ! function(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + }(this, t), o ? this.noSleepTimer = null : (this.noSleepVideo = document.createElement("video"), this.noSleepVideo.setAttribute("playsinline", ""), this.noSleepVideo.setAttribute("src", r), this.noSleepVideo.addEventListener("timeupdate", function(t) { + this.noSleepVideo.currentTime > .5 && (this.noSleepVideo.currentTime = Math.random()) + }.bind(this))) + } + return i(t, [{ + key: "enable", + value: function() { + o ? (this.disable(), this.noSleepTimer = window.setInterval((function() { + window.location.href = "/", window.setTimeout(window.stop, 0) + }), 15e3)) : this.noSleepVideo.play() + } + }, { + key: "disable", + value: function() { + o ? this.noSleepTimer && (window.clearInterval(this.noSleepTimer), this.noSleepTimer = null) : this.noSleepVideo.pause() + } + }]), t + }(); + t.exports = s + }, function(t, e, n) { + t.exports = "data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA=" + }]) + })) + }))) && lt.__esModule && Object.prototype.hasOwnProperty.call(lt, "default") ? lt.default : lt, + ht = 1e3, + ut = [0, 0, .5, 1], + dt = [.5, 0, .5, 1], + pt = window.requestAnimationFrame, + ft = window.cancelAnimationFrame; + + function mt(t) { + Object.defineProperties(this, { + hasPosition: { + writable: !1, + enumerable: !0, + value: t.hasPosition + }, + hasExternalDisplay: { + writable: !1, + enumerable: !0, + value: t.hasExternalDisplay + }, + canPresent: { + writable: !1, + enumerable: !0, + value: t.canPresent + }, + maxLayers: { + writable: !1, + enumerable: !0, + value: t.maxLayers + }, + hasOrientation: { + enumerable: !0, + get: function() { + return T("VRDisplayCapabilities.prototype.hasOrientation", "VRDisplay.prototype.getFrameData"), t.hasOrientation + } + } + }) + } + + function gt(t) { + var e = !("wakelock" in (t = t || {})) || t.wakelock; + this.isPolyfilled = !0, this.displayId = ht++, this.displayName = "", this.depthNear = .01, this.depthFar = 1e4, this.isPresenting = !1, Object.defineProperty(this, "isConnected", { + get: function() { + return T("VRDisplay.prototype.isConnected", "VRDisplayCapabilities.prototype.hasExternalDisplay"), !1 + } + }), this.capabilities = new mt({ + hasPosition: !1, + hasOrientation: !1, + hasExternalDisplay: !1, + canPresent: !1, + maxLayers: 1 + }), this.stageParameters = null, this.waitingForPresent_ = !1, this.layer_ = null, this.originalParent_ = null, this.fullscreenElement_ = null, this.fullscreenWrapper_ = null, this.fullscreenElementCachedStyle_ = null, this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null, e && _() && (this.wakelock_ = new ct) + } + gt.prototype.getFrameData = function(t) { + return M(t, this._getPose(), this) + }, gt.prototype.getPose = function() { + return T("VRDisplay.prototype.getPose", "VRDisplay.prototype.getFrameData"), this._getPose() + }, gt.prototype.resetPose = function() { + return T("VRDisplay.prototype.resetPose"), this._resetPose() + }, gt.prototype.getImmediatePose = function() { + return T("VRDisplay.prototype.getImmediatePose", "VRDisplay.prototype.getFrameData"), this._getPose() + }, gt.prototype.requestAnimationFrame = function(t) { + return pt(t) + }, gt.prototype.cancelAnimationFrame = function(t) { + return ft(t) + }, gt.prototype.wrapForFullscreen = function(t) { + if (a()) return t; + if (!this.fullscreenWrapper_) { + this.fullscreenWrapper_ = document.createElement("div"); + var e = ["height: " + Math.min(screen.height, screen.width) + "px !important", "top: 0 !important", "left: 0 !important", "right: 0 !important", "border: 0", "margin: 0", "padding: 0", "z-index: 999999 !important", "position: fixed"]; + this.fullscreenWrapper_.setAttribute("style", e.join("; ") + ";"), this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper") + } + if (this.fullscreenElement_ == t) return this.fullscreenWrapper_; + if (this.fullscreenElement_ && (this.originalParent_ ? this.originalParent_.appendChild(this.fullscreenElement_) : this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)), this.fullscreenElement_ = t, this.originalParent_ = t.parentElement, this.originalParent_ || document.body.appendChild(t), !this.fullscreenWrapper_.parentElement) { + var n = this.fullscreenElement_.parentElement; + n.insertBefore(this.fullscreenWrapper_, this.fullscreenElement_), n.removeChild(this.fullscreenElement_) + } + this.fullscreenWrapper_.insertBefore(this.fullscreenElement_, this.fullscreenWrapper_.firstChild), this.fullscreenElementCachedStyle_ = this.fullscreenElement_.getAttribute("style"); + var i = this; + return function() { + if (i.fullscreenElement_) { + var t = ["position: absolute", "top: 0", "left: 0", "width: " + Math.max(screen.width, screen.height) + "px", "height: " + Math.min(screen.height, screen.width) + "px", "border: 0", "margin: 0", "padding: 0"]; + i.fullscreenElement_.setAttribute("style", t.join("; ") + ";") + } + }(), this.fullscreenWrapper_ + }, gt.prototype.removeFullscreenWrapper = function() { + if (this.fullscreenElement_) { + var t = this.fullscreenElement_; + this.fullscreenElementCachedStyle_ ? t.setAttribute("style", this.fullscreenElementCachedStyle_) : t.removeAttribute("style"), this.fullscreenElement_ = null, this.fullscreenElementCachedStyle_ = null; + var e = this.fullscreenWrapper_.parentElement; + return this.fullscreenWrapper_.removeChild(t), this.originalParent_ === e ? e.insertBefore(t, this.fullscreenWrapper_) : this.originalParent_ && this.originalParent_.appendChild(t), e.removeChild(this.fullscreenWrapper_), t + } + }, gt.prototype.requestPresent = function(t) { + var e = this.isPresenting, + n = this; + return t instanceof Array || (T("VRDisplay.prototype.requestPresent with non-array argument", "an array of VRLayers as the first argument"), t = [t]), new Promise((function(i, r) { + if (n.capabilities.canPresent) + if (0 == t.length || t.length > n.capabilities.maxLayers) r(new Error("Invalid number of layers.")); + else { + var o = t[0]; + if (o.source) { + var s = o.leftBounds || ut, + c = o.rightBounds || dt; + if (e) { + var h = n.layer_; + h.source !== o.source && (h.source = o.source); + for (var u = 0; u < 4; u++) h.leftBounds[u] = s[u], h.rightBounds[u] = c[u]; + return n.wrapForFullscreen(n.layer_.source), n.updatePresent_(), void i() + } + if (n.layer_ = { + predistorted: o.predistorted, + source: o.source, + leftBounds: s.slice(0), + rightBounds: c.slice(0) + }, n.waitingForPresent_ = !1, n.layer_ && n.layer_.source) { + var d = n.wrapForFullscreen(n.layer_.source); + n.addFullscreenListeners_(d, (function() { + var t = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement; + n.isPresenting = d === t, n.isPresenting ? (screen.orientation && screen.orientation.lock && screen.orientation.lock("landscape-primary").catch((function(t) { + console.error("screen.orientation.lock() failed due to", t.message) + })), n.waitingForPresent_ = !1, n.beginPresent_(), i()) : (screen.orientation && screen.orientation.unlock && screen.orientation.unlock(), n.removeFullscreenWrapper(), n.disableWakeLock(), n.endPresent_(), n.removeFullscreenListeners_()), n.fireVRDisplayPresentChange_() + }), (function() { + n.waitingForPresent_ && (n.removeFullscreenWrapper(), n.removeFullscreenListeners_(), n.disableWakeLock(), n.waitingForPresent_ = !1, n.isPresenting = !1, r(new Error("Unable to present."))) + })), + function(t) { + if (l()) return !1; + if (t.requestFullscreen) t.requestFullscreen(); + else if (t.webkitRequestFullscreen) t.webkitRequestFullscreen(); + else if (t.mozRequestFullScreen) t.mozRequestFullScreen(); + else { + if (!t.msRequestFullscreen) return !1; + t.msRequestFullscreen() + } + return !0 + }(d) ? (n.enableWakeLock(), n.waitingForPresent_ = !0) : (a() || l()) && (n.enableWakeLock(), n.isPresenting = !0, n.beginPresent_(), n.fireVRDisplayPresentChange_(), i()) + } + n.waitingForPresent_ || a() || (y(), r(new Error("Unable to present."))) + } else i() + } + else r(new Error("VRDisplay is not capable of presenting.")) + })) + }, gt.prototype.exitPresent = function() { + var t = this.isPresenting, + e = this; + return this.isPresenting = !1, this.layer_ = null, this.disableWakeLock(), new Promise((function(n, i) { + t ? (!y() && a() && (e.endPresent_(), e.fireVRDisplayPresentChange_()), l() && (e.removeFullscreenWrapper(), e.removeFullscreenListeners_(), e.endPresent_(), e.fireVRDisplayPresentChange_()), n()) : i(new Error("Was not presenting to VRDisplay.")) + })) + }, gt.prototype.getLayers = function() { + return this.layer_ ? [this.layer_] : [] + }, gt.prototype.fireVRDisplayPresentChange_ = function() { + var t = new CustomEvent("vrdisplaypresentchange", { + detail: { + display: this + } + }); + window.dispatchEvent(t) + }, gt.prototype.fireVRDisplayConnect_ = function() { + var t = new CustomEvent("vrdisplayconnect", { + detail: { + display: this + } + }); + window.dispatchEvent(t) + }, gt.prototype.addFullscreenListeners_ = function(t, e, n) { + this.removeFullscreenListeners_(), this.fullscreenEventTarget_ = t, this.fullscreenChangeHandler_ = e, this.fullscreenErrorHandler_ = n, e && (document.fullscreenEnabled ? t.addEventListener("fullscreenchange", e, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenchange", e, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenchange", e, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenchange", e, !1)), n && (document.fullscreenEnabled ? t.addEventListener("fullscreenerror", n, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenerror", n, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenerror", n, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenerror", n, !1)) + }, gt.prototype.removeFullscreenListeners_ = function() { + if (this.fullscreenEventTarget_) { + var t = this.fullscreenEventTarget_; + if (this.fullscreenChangeHandler_) { + var e = this.fullscreenChangeHandler_; + t.removeEventListener("fullscreenchange", e, !1), t.removeEventListener("webkitfullscreenchange", e, !1), document.removeEventListener("mozfullscreenchange", e, !1), t.removeEventListener("msfullscreenchange", e, !1) + } + if (this.fullscreenErrorHandler_) { + var n = this.fullscreenErrorHandler_; + t.removeEventListener("fullscreenerror", n, !1), t.removeEventListener("webkitfullscreenerror", n, !1), document.removeEventListener("mozfullscreenerror", n, !1), t.removeEventListener("msfullscreenerror", n, !1) + } + this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null + } + }, gt.prototype.enableWakeLock = function() { + this.wakelock_ && this.wakelock_.enable() + }, gt.prototype.disableWakeLock = function() { + this.wakelock_ && this.wakelock_.disable() + }, gt.prototype.beginPresent_ = function() {}, gt.prototype.endPresent_ = function() {}, gt.prototype.submitFrame = function(t) {}, gt.prototype.getEyeParameters = function(t) { + return null + }; + var vt = { + ADDITIONAL_VIEWERS: [], + DEFAULT_VIEWER: "", + MOBILE_WAKE_LOCK: !0, + DEBUG: !1, + DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", + K_FILTER: .98, + PREDICTION_TIME_S: .04, + CARDBOARD_UI_DISABLED: !1, + ROTATE_INSTRUCTIONS_DISABLED: !1, + YAW_ONLY: !1, + BUFFER_SCALE: .5, + DIRTY_SUBMIT_FRAME_BINDINGS: !1 + }, + yt = "left", + At = "right"; + + function xt(t) { + var e = b({}, vt); + t = b(e, t || {}), gt.call(this, { + wakelock: t.MOBILE_WAKE_LOCK + }), this.config = t, this.displayName = "Cardboard VRDisplay", this.capabilities = new mt({ + hasPosition: !1, + hasOrientation: !0, + hasExternalDisplay: !1, + canPresent: !0, + maxLayers: 1 + }), this.stageParameters = null, this.bufferScale_ = this.config.BUFFER_SCALE, this.poseSensor_ = new ot(this.config), this.distorter_ = null, this.cardboardUI_ = null, this.dpdb_ = new Z(this.config.DPDB_URL, this.onDeviceParamsUpdated_.bind(this)), this.deviceInfo_ = new q(this.dpdb_.getDeviceParams(), t.ADDITIONAL_VIEWERS), this.viewerSelector_ = new at(t.DEFAULT_VIEWER), this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)), this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()), this.config.ROTATE_INSTRUCTIONS_DISABLED || (this.rotateInstructions_ = new st), a() && window.addEventListener("resize", this.onResize_.bind(this)) + } + return xt.prototype = Object.create(gt.prototype), xt.prototype._getPose = function() { + return { + position: null, + orientation: this.poseSensor_.getOrientation(), + linearVelocity: null, + linearAcceleration: null, + angularVelocity: null, + angularAcceleration: null + } + }, xt.prototype._resetPose = function() { + this.poseSensor_.resetPose && this.poseSensor_.resetPose() + }, xt.prototype._getFieldOfView = function(t) { + var e; + if (t == yt) e = this.deviceInfo_.getFieldOfViewLeftEye(); + else { + if (t != At) return console.error("Invalid eye provided: %s", t), null; + e = this.deviceInfo_.getFieldOfViewRightEye() + } + return e + }, xt.prototype._getEyeOffset = function(t) { + var e; + if (t == yt) e = [.5 * -this.deviceInfo_.viewer.interLensDistance, 0, 0]; + else { + if (t != At) return console.error("Invalid eye provided: %s", t), null; + e = [.5 * this.deviceInfo_.viewer.interLensDistance, 0, 0] + } + return e + }, xt.prototype.getEyeParameters = function(t) { + var e = this._getEyeOffset(t), + n = this._getFieldOfView(t), + i = { + offset: e, + renderWidth: .5 * this.deviceInfo_.device.width * this.bufferScale_, + renderHeight: this.deviceInfo_.device.height * this.bufferScale_ + }; + return Object.defineProperty(i, "fieldOfView", { + enumerable: !0, + get: function() { + return T("VRFieldOfView", "VRFrameData's projection matrices"), n + } + }), i + }, xt.prototype.onDeviceParamsUpdated_ = function(t) { + this.config.DEBUG && console.log("DPDB reported that device params were updated."), this.deviceInfo_.updateDeviceParams(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_) + }, xt.prototype.updateBounds_ = function() { + this.layer_ && this.distorter_ && (this.layer_.leftBounds || this.layer_.rightBounds) && this.distorter_.setTextureBounds(this.layer_.leftBounds, this.layer_.rightBounds) + }, xt.prototype.beginPresent_ = function() { + var t = this.layer_.source.getContext("webgl"); + t || (t = this.layer_.source.getContext("experimental-webgl")), t || (t = this.layer_.source.getContext("webgl2")), t && (this.layer_.predistorted ? this.config.CARDBOARD_UI_DISABLED || (t.canvas.width = g() * this.bufferScale_, t.canvas.height = v() * this.bufferScale_, this.cardboardUI_ = new N(t)) : (this.config.CARDBOARD_UI_DISABLED || (this.cardboardUI_ = new N(t)), this.distorter_ = new P(t, this.cardboardUI_, this.config.BUFFER_SCALE, this.config.DIRTY_SUBMIT_FRAME_BINDINGS), this.distorter_.updateDeviceInfo(this.deviceInfo_)), this.cardboardUI_ && this.cardboardUI_.listen(function(t) { + this.viewerSelector_.show(this.layer_.source.parentElement), t.stopPropagation(), t.preventDefault() + }.bind(this), function(t) { + this.exitPresent(), t.stopPropagation(), t.preventDefault() + }.bind(this)), this.rotateInstructions_ && (m() && _() ? this.rotateInstructions_.showTemporarily(3e3, this.layer_.source.parentElement) : this.rotateInstructions_.update()), this.orientationHandler = this.onOrientationChange_.bind(this), window.addEventListener("orientationchange", this.orientationHandler), this.vrdisplaypresentchangeHandler = this.updateBounds_.bind(this), window.addEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler), this.fireVRDisplayDeviceParamsChange_()) + }, xt.prototype.endPresent_ = function() { + this.distorter_ && (this.distorter_.destroy(), this.distorter_ = null), this.cardboardUI_ && (this.cardboardUI_.destroy(), this.cardboardUI_ = null), this.rotateInstructions_ && this.rotateInstructions_.hide(), this.viewerSelector_.hide(), window.removeEventListener("orientationchange", this.orientationHandler), window.removeEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler) + }, xt.prototype.updatePresent_ = function() { + this.endPresent_(), this.beginPresent_() + }, xt.prototype.submitFrame = function(t) { + if (this.distorter_) this.updateBounds_(), this.distorter_.submitFrame(); + else if (this.cardboardUI_ && this.layer_) { + var e = this.layer_.source.getContext("webgl"); + e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")); + var n = e.canvas; + n.width == this.lastWidth && n.height == this.lastHeight || this.cardboardUI_.onResize(), this.lastWidth = n.width, this.lastHeight = n.height, this.cardboardUI_.render() + } + }, xt.prototype.onOrientationChange_ = function(t) { + this.viewerSelector_.hide(), this.rotateInstructions_ && this.rotateInstructions_.update(), this.onResize_() + }, xt.prototype.onResize_ = function(t) { + if (this.layer_) { + var e = this.layer_.source.getContext("webgl"); + e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")), e.canvas.setAttribute("style", ["position: absolute", "top: 0", "left: 0", "width: 100vw", "height: 100vh", "border: 0", "margin: 0", "padding: 0px", "box-sizing: content-box"].join("; ") + ";"), w(e.canvas) + } + }, xt.prototype.onViewerChanged_ = function(t) { + this.deviceInfo_.setViewer(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_), this.fireVRDisplayDeviceParamsChange_() + }, xt.prototype.fireVRDisplayDeviceParamsChange_ = function() { + var t = new CustomEvent("vrdisplaydeviceparamschange", { + detail: { + vrdisplay: this, + deviceInfo: this.deviceInfo_ + } + }); + window.dispatchEvent(t) + }, xt.VRFrameData = function() { + this.leftProjectionMatrix = new Float32Array(16), this.leftViewMatrix = new Float32Array(16), this.rightProjectionMatrix = new Float32Array(16), this.rightViewMatrix = new Float32Array(16), this.pose = null + }, xt.VRDisplay = gt, xt + }() + }))) && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t, + a = { + ADDITIONAL_VIEWERS: [], + DEFAULT_VIEWER: "", + PROVIDE_MOBILE_VRDISPLAY: !0, + MOBILE_WAKE_LOCK: !0, + DEBUG: !1, + DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", + K_FILTER: .98, + PREDICTION_TIME_S: .04, + CARDBOARD_UI_DISABLED: !1, + ROTATE_INSTRUCTIONS_DISABLED: !1, + YAW_ONLY: !1, + BUFFER_SCALE: .5, + DIRTY_SUBMIT_FRAME_BINDINGS: !1 + }; + + function l(t) { + this.config = o(o({}, a), t), this.polyfillDisplays = [], this.enabled = !1, this.hasNative = "getVRDisplays" in navigator, this.native = {}, this.native.getVRDisplays = navigator.getVRDisplays, this.native.VRFrameData = window.VRFrameData, this.native.VRDisplay = window.VRDisplay, (!this.hasNative || this.config.PROVIDE_MOBILE_VRDISPLAY && n()) && (this.enable(), this.getVRDisplays().then((function(t) { + t && t[0] && t[0].fireVRDisplayConnect_ && t[0].fireVRDisplayConnect_() + }))) + } + l.prototype.getPolyfillDisplays = function() { + if (this._polyfillDisplaysPopulated) return this.polyfillDisplays; + if (n()) { + var t = new s({ + ADDITIONAL_VIEWERS: this.config.ADDITIONAL_VIEWERS, + DEFAULT_VIEWER: this.config.DEFAULT_VIEWER, + MOBILE_WAKE_LOCK: this.config.MOBILE_WAKE_LOCK, + DEBUG: this.config.DEBUG, + DPDB_URL: this.config.DPDB_URL, + CARDBOARD_UI_DISABLED: this.config.CARDBOARD_UI_DISABLED, + K_FILTER: this.config.K_FILTER, + PREDICTION_TIME_S: this.config.PREDICTION_TIME_S, + ROTATE_INSTRUCTIONS_DISABLED: this.config.ROTATE_INSTRUCTIONS_DISABLED, + YAW_ONLY: this.config.YAW_ONLY, + BUFFER_SCALE: this.config.BUFFER_SCALE, + DIRTY_SUBMIT_FRAME_BINDINGS: this.config.DIRTY_SUBMIT_FRAME_BINDINGS + }); + this.polyfillDisplays.push(t) + } + return this._polyfillDisplaysPopulated = !0, this.polyfillDisplays + }, l.prototype.enable = function() { + if (this.enabled = !0, this.hasNative && this.native.VRFrameData) { + var t = this.native.VRFrameData, + e = new this.native.VRFrameData, + n = this.native.VRDisplay.prototype.getFrameData; + window.VRDisplay.prototype.getFrameData = function(i) { + i instanceof t ? n.call(this, i) : (n.call(this, e), i.pose = e.pose, r(e.leftProjectionMatrix, i.leftProjectionMatrix), r(e.rightProjectionMatrix, i.rightProjectionMatrix), r(e.leftViewMatrix, i.leftViewMatrix), r(e.rightViewMatrix, i.rightViewMatrix)) + } + } + navigator.getVRDisplays = this.getVRDisplays.bind(this), window.VRDisplay = s.VRDisplay, window.VRFrameData = s.VRFrameData + }, l.prototype.getVRDisplays = function() { + var t = this; + return this.config, this.hasNative ? this.native.getVRDisplays.call(navigator).then((function(e) { + return e.length > 0 ? e : t.getPolyfillDisplays() + })) : Promise.resolve(this.getPolyfillDisplays()) + }, l.version = "0.10.12", l.VRFrameData = s.VRFrameData, l.VRDisplay = s.VRDisplay; + var c = Object.freeze({ + default: l + }), + h = c && l || c; + return void 0 !== e && e.window && (e.document || (e.document = e.window.document), e.navigator || (e.navigator = e.window.navigator)), h + }() + }))); + const h = 0, + u = 1, + d = 2; + + function p() {} + Object.assign(p.prototype, { + addEventListener: function(t, e) { + void 0 === this._listeners && (this._listeners = {}); + const n = this._listeners; + void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e) + }, + hasEventListener: function(t, e) { + if (void 0 === this._listeners) return !1; + const n = this._listeners; + return void 0 !== n[t] && -1 !== n[t].indexOf(e) + }, + removeEventListener: function(t, e) { + if (void 0 === this._listeners) return; + const n = this._listeners[t]; + if (void 0 !== n) { + const t = n.indexOf(e); - 1 !== t && n.splice(t, 1) + } + }, + dispatchEvent: function(t) { + if (void 0 === this._listeners) return; + const e = this._listeners[t.type]; + if (void 0 !== e) { + t.target = this; + const n = e.slice(0); + for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t) + } + } + }); + const f = []; + for (let t = 0; t < 256; t++) f[t] = (t < 16 ? "0" : "") + t.toString(16); + let m = 1234567; + const g = { + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + generateUUID: function() { + const t = 4294967295 * Math.random() | 0, + e = 4294967295 * Math.random() | 0, + n = 4294967295 * Math.random() | 0, + i = 4294967295 * Math.random() | 0; + return (f[255 & t] + f[t >> 8 & 255] + f[t >> 16 & 255] + f[t >> 24 & 255] + "-" + f[255 & e] + f[e >> 8 & 255] + "-" + f[e >> 16 & 15 | 64] + f[e >> 24 & 255] + "-" + f[63 & n | 128] + f[n >> 8 & 255] + "-" + f[n >> 16 & 255] + f[n >> 24 & 255] + f[255 & i] + f[i >> 8 & 255] + f[i >> 16 & 255] + f[i >> 24 & 255]).toUpperCase() + }, + clamp: function(t, e, n) { + return Math.max(e, Math.min(n, t)) + }, + euclideanModulo: function(t, e) { + return (t % e + e) % e + }, + mapLinear: function(t, e, n, i, r) { + return i + (t - e) * (r - i) / (n - e) + }, + lerp: function(t, e, n) { + return (1 - n) * t + n * e + }, + damp: function(t, e, n, i) { + return g.lerp(t, e, 1 - Math.exp(-n * i)) + }, + pingpong: function(t, e = 1) { + return e - Math.abs(g.euclideanModulo(t, 2 * e) - e) + }, + smoothstep: function(t, e, n) { + return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * (3 - 2 * t) + }, + smootherstep: function(t, e, n) { + return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10) + }, + randInt: function(t, e) { + return t + Math.floor(Math.random() * (e - t + 1)) + }, + randFloat: function(t, e) { + return t + Math.random() * (e - t) + }, + randFloatSpread: function(t) { + return t * (.5 - Math.random()) + }, + seededRandom: function(t) { + return void 0 !== t && (m = t % 2147483647), m = 16807 * m % 2147483647, (m - 1) / 2147483646 + }, + degToRad: function(t) { + return t * g.DEG2RAD + }, + radToDeg: function(t) { + return t * g.RAD2DEG + }, + isPowerOfTwo: function(t) { + return 0 == (t & t - 1) && 0 !== t + }, + ceilPowerOfTwo: function(t) { + return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2)) + }, + floorPowerOfTwo: function(t) { + return Math.pow(2, Math.floor(Math.log(t) / Math.LN2)) + }, + setQuaternionFromProperEuler: function(t, e, n, i, r) { + const o = Math.cos, + s = Math.sin, + a = o(n / 2), + l = s(n / 2), + c = o((e + i) / 2), + h = s((e + i) / 2), + u = o((e - i) / 2), + d = s((e - i) / 2), + p = o((i - e) / 2), + f = s((i - e) / 2); + switch (r) { + case "XYX": + t.set(a * h, l * u, l * d, a * c); + break; + case "YZY": + t.set(l * d, a * h, l * u, a * c); + break; + case "ZXZ": + t.set(l * u, l * d, a * h, a * c); + break; + case "XZX": + t.set(a * h, l * f, l * p, a * c); + break; + case "YXY": + t.set(l * p, a * h, l * f, a * c); + break; + case "ZYZ": + t.set(l * f, l * p, a * h, a * c); + break; + default: + console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r) + } + } + }; + class v { + constructor(t = 0, e = 0) { + Object.defineProperty(this, "isVector2", { + value: !0 + }), this.x = t, this.y = e + } + get width() { + return this.x + } + set width(t) { + this.x = t + } + get height() { + return this.y + } + set height(t) { + this.y = t + } + set(t, e) { + return this.x = t, this.y = e, this + } + setScalar(t) { + return this.x = t, this.y = t, this + } + setX(t) { + return this.x = t, this + } + setY(t) { + return this.y = t, this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw new Error("index is out of range: " + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + t) + } + } + clone() { + return new this.constructor(this.x, this.y) + } + copy(t) { + return this.x = t.x, this.y = t.y, this + } + add(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this) + } + addScalar(t) { + return this.x += t, this.y += t, this + } + addVectors(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this + } + addScaledVector(t, e) { + return this.x += t.x * e, this.y += t.y * e, this + } + sub(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this) + } + subScalar(t) { + return this.x -= t, this.y -= t, this + } + subVectors(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this + } + multiply(t) { + return this.x *= t.x, this.y *= t.y, this + } + multiplyScalar(t) { + return this.x *= t, this.y *= t, this + } + divide(t) { + return this.x /= t.x, this.y /= t.y, this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = t.elements; + return this.x = i[0] * e + i[3] * n + i[6], this.y = i[1] * e + i[4] * n + i[7], this + } + min(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this + } + max(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this + } + clamp(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this + } + clampScalar(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this + } + roundToZero() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this + } + dot(t) { + return this.x * t.x + this.y * t.y + } + cross(t) { + return this.x * t.y - this.y * t.x + } + lengthSq() { + return this.x * this.x + this.y * this.y + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + angle() { + return Math.atan2(-this.y, -this.x) + Math.PI + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)) + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y; + return e * e + n * n + } + manhattanDistanceTo(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this + } + lerpVectors(t, e, n) { + return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this + } + equals(t) { + return t.x === this.x && t.y === this.y + } + fromArray(t, e = 0) { + return this.x = t[e], this.y = t[e + 1], this + } + toArray(t = [], e = 0) { + return t[e] = this.x, t[e + 1] = this.y, t + } + fromBufferAttribute(t, e, n) { + return void 0 !== n && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this + } + rotateAround(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = this.x - t.x, + o = this.y - t.y; + return this.x = r * n - o * i + t.x, this.y = r * i + o * n + t.y, this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this + } + } + class y { + constructor() { + Object.defineProperty(this, "isMatrix3", { + value: !0 + }), this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.") + } + set(t, e, n, i, r, o, s, a, l) { + const c = this.elements; + return c[0] = t, c[1] = i, c[2] = s, c[3] = e, c[4] = r, c[5] = a, c[6] = n, c[7] = o, c[8] = l, this + } + identity() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this + } + clone() { + return (new this.constructor).fromArray(this.elements) + } + copy(t) { + const e = this.elements, + n = t.elements; + return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], this + } + extractBasis(t, e, n) { + return t.setFromMatrix3Column(this, 0), e.setFromMatrix3Column(this, 1), n.setFromMatrix3Column(this, 2), this + } + setFromMatrix4(t) { + const e = t.elements; + return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this + } + multiply(t) { + return this.multiplyMatrices(this, t) + } + premultiply(t) { + return this.multiplyMatrices(t, this) + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + o = n[0], + s = n[3], + a = n[6], + l = n[1], + c = n[4], + h = n[7], + u = n[2], + d = n[5], + p = n[8], + f = i[0], + m = i[3], + g = i[6], + v = i[1], + y = i[4], + A = i[7], + x = i[2], + _ = i[5], + b = i[8]; + return r[0] = o * f + s * v + a * x, r[3] = o * m + s * y + a * _, r[6] = o * g + s * A + a * b, r[1] = l * f + c * v + h * x, r[4] = l * m + c * y + h * _, r[7] = l * g + c * A + h * b, r[2] = u * f + d * v + p * x, r[5] = u * m + d * y + p * _, r[8] = u * g + d * A + p * b, this + } + multiplyScalar(t) { + const e = this.elements; + return e[0] *= t, e[3] *= t, e[6] *= t, e[1] *= t, e[4] *= t, e[7] *= t, e[2] *= t, e[5] *= t, e[8] *= t, this + } + determinant() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + o = t[4], + s = t[5], + a = t[6], + l = t[7], + c = t[8]; + return e * o * c - e * s * l - n * r * c + n * s * a + i * r * l - i * o * a + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + o = t[4], + s = t[5], + a = t[6], + l = t[7], + c = t[8], + h = c * o - s * l, + u = s * a - c * r, + d = l * r - o * a, + p = e * h + n * u + i * d; + if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const f = 1 / p; + return t[0] = h * f, t[1] = (i * l - c * n) * f, t[2] = (s * n - i * o) * f, t[3] = u * f, t[4] = (c * e - i * a) * f, t[5] = (i * r - s * e) * f, t[6] = d * f, t[7] = (n * a - l * e) * f, t[8] = (o * e - n * r) * f, this + } + transpose() { + let t; + const e = this.elements; + return t = e[1], e[1] = e[3], e[3] = t, t = e[2], e[2] = e[6], e[6] = t, t = e[5], e[5] = e[7], e[7] = t, this + } + getNormalMatrix(t) { + return this.setFromMatrix4(t).copy(this).invert().transpose() + } + transposeIntoArray(t) { + const e = this.elements; + return t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[7] = e[5], t[8] = e[8], this + } + setUvTransform(t, e, n, i, r, o, s) { + const a = Math.cos(r), + l = Math.sin(r); + return this.set(n * a, n * l, -n * (a * o + l * s) + o + t, -i * l, i * a, -i * (-l * o + a * s) + s + e, 0, 0, 1), this + } + scale(t, e) { + const n = this.elements; + return n[0] *= t, n[3] *= t, n[6] *= t, n[1] *= e, n[4] *= e, n[7] *= e, this + } + rotate(t) { + const e = Math.cos(t), + n = Math.sin(t), + i = this.elements, + r = i[0], + o = i[3], + s = i[6], + a = i[1], + l = i[4], + c = i[7]; + return i[0] = e * r + n * a, i[3] = e * o + n * l, i[6] = e * s + n * c, i[1] = -n * r + e * a, i[4] = -n * o + e * l, i[7] = -n * s + e * c, this + } + translate(t, e) { + const n = this.elements; + return n[0] += t * n[2], n[3] += t * n[5], n[6] += t * n[8], n[1] += e * n[2], n[4] += e * n[5], n[7] += e * n[8], this + } + equals(t) { + const e = this.elements, + n = t.elements; + for (let t = 0; t < 9; t++) + if (e[t] !== n[t]) return !1; + return !0 + } + fromArray(t, e = 0) { + for (let n = 0; n < 9; n++) this.elements[n] = t[n + e]; + return this + } + toArray(t = [], e = 0) { + const n = this.elements; + return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t + } + } + let A; + const x = { + getDataURL: function(t) { + if (/^data:/i.test(t.src)) return t.src; + if ("undefined" == typeof HTMLCanvasElement) return t.src; + let e; + if (t instanceof HTMLCanvasElement) e = t; + else { + void 0 === A && (A = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), A.width = t.width, A.height = t.height; + const n = A.getContext("2d"); + t instanceof ImageData ? n.putImageData(t, 0, 0) : n.drawImage(t, 0, 0, t.width, t.height), e = A + } + return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png") + } + }; + let _ = 0; + + function b(t = b.DEFAULT_IMAGE, e = b.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, o = 1008, s = 1023, a = 1009, l = 1, c = 3e3) { + Object.defineProperty(this, "id", { + value: _++ + }), this.uuid = g.generateUUID(), this.name = "", this.image = t, this.mipmaps = [], this.mapping = e, this.wrapS = n, this.wrapT = i, this.magFilter = r, this.minFilter = o, this.anisotropy = l, this.format = s, this.internalFormat = null, this.type = a, this.offset = new v(0, 0), this.repeat = new v(1, 1), this.center = new v(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new y, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.encoding = c, this.version = 0, this.onUpdate = null + } + + function w(t) { + return "undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap ? x.getDataURL(t) : t.data ? { + data: Array.prototype.slice.call(t.data), + width: t.width, + height: t.height, + type: t.data.constructor.name + } : (console.warn("THREE.Texture: Unable to serialize Texture."), {}) + } + b.DEFAULT_IMAGE = void 0, b.DEFAULT_MAPPING = 300, b.prototype = Object.assign(Object.create(p.prototype), { + constructor: b, + isTexture: !0, + updateMatrix: function() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.name = t.name, this.image = t.image, this.mipmaps = t.mipmaps.slice(0), this.mapping = t.mapping, this.wrapS = t.wrapS, this.wrapT = t.wrapT, this.magFilter = t.magFilter, this.minFilter = t.minFilter, this.anisotropy = t.anisotropy, this.format = t.format, this.internalFormat = t.internalFormat, this.type = t.type, this.offset.copy(t.offset), this.repeat.copy(t.repeat), this.center.copy(t.center), this.rotation = t.rotation, this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrix.copy(t.matrix), this.generateMipmaps = t.generateMipmaps, this.premultiplyAlpha = t.premultiplyAlpha, this.flipY = t.flipY, this.unpackAlignment = t.unpackAlignment, this.encoding = t.encoding, this + }, + toJSON: function(t) { + const e = void 0 === t || "string" == typeof t; + if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid]; + const n = { + metadata: { + version: 4.5, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + mapping: this.mapping, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + type: this.type, + encoding: this.encoding, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + if (void 0 !== this.image) { + const i = this.image; + if (void 0 === i.uuid && (i.uuid = g.generateUUID()), !e && void 0 === t.images[i.uuid]) { + let e; + if (Array.isArray(i)) { + e = []; + for (let t = 0, n = i.length; t < n; t++) i[t].isDataTexture ? e.push(w(i[t].image)) : e.push(w(i[t])) + } else e = w(i); + t.images[i.uuid] = { + uuid: i.uuid, + url: e + } + } + n.image = i.uuid + } + return e || (t.textures[this.uuid] = n), n + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + }, + transformUv: function(t) { + if (300 !== this.mapping) return t; + if (t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1) switch (this.wrapS) { + case 1e3: + t.x = t.x - Math.floor(t.x); + break; + case 1001: + t.x = t.x < 0 ? 0 : 1; + break; + case 1002: + 1 === Math.abs(Math.floor(t.x) % 2) ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x) + } + if (t.y < 0 || t.y > 1) switch (this.wrapT) { + case 1e3: + t.y = t.y - Math.floor(t.y); + break; + case 1001: + t.y = t.y < 0 ? 0 : 1; + break; + case 1002: + 1 === Math.abs(Math.floor(t.y) % 2) ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y) + } + return this.flipY && (t.y = 1 - t.y), t + } + }), Object.defineProperty(b.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }); + class M { + constructor(t = 0, e = 0, n = 0, i = 1) { + Object.defineProperty(this, "isVector4", { + value: !0 + }), this.x = t, this.y = e, this.z = n, this.w = i + } + get width() { + return this.z + } + set width(t) { + this.z = t + } + get height() { + return this.w + } + set height(t) { + this.w = t + } + set(t, e, n, i) { + return this.x = t, this.y = e, this.z = n, this.w = i, this + } + setScalar(t) { + return this.x = t, this.y = t, this.z = t, this.w = t, this + } + setX(t) { + return this.x = t, this + } + setY(t) { + return this.y = t, this + } + setZ(t) { + return this.z = t, this + } + setW(t) { + return this.w = t, this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + case 3: + this.w = e; + break; + default: + throw new Error("index is out of range: " + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + t) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w) + } + copy(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this.w = void 0 !== t.w ? t.w : 1, this + } + add(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this) + } + addScalar(t) { + return this.x += t, this.y += t, this.z += t, this.w += t, this + } + addVectors(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this.w = t.w + e.w, this + } + addScaledVector(t, e) { + return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this.w += t.w * e, this + } + sub(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this) + } + subScalar(t) { + return this.x -= t, this.y -= t, this.z -= t, this.w -= t, this + } + subVectors(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this.w = t.w - e.w, this + } + multiply(t) { + return this.x *= t.x, this.y *= t.y, this.z *= t.z, this.w *= t.w, this + } + multiplyScalar(t) { + return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = this.w, + o = t.elements; + return this.x = o[0] * e + o[4] * n + o[8] * i + o[12] * r, this.y = o[1] * e + o[5] * n + o[9] * i + o[13] * r, this.z = o[2] * e + o[6] * n + o[10] * i + o[14] * r, this.w = o[3] * e + o[7] * n + o[11] * i + o[15] * r, this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + setAxisAngleFromQuaternion(t) { + this.w = 2 * Math.acos(t.w); + const e = Math.sqrt(1 - t.w * t.w); + return e < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = t.x / e, this.y = t.y / e, this.z = t.z / e), this + } + setAxisAngleFromRotationMatrix(t) { + let e, n, i, r; + const o = t.elements, + s = o[0], + a = o[4], + l = o[8], + c = o[1], + h = o[5], + u = o[9], + d = o[2], + p = o[6], + f = o[10]; + if (Math.abs(a - c) < .01 && Math.abs(l - d) < .01 && Math.abs(u - p) < .01) { + if (Math.abs(a + c) < .1 && Math.abs(l + d) < .1 && Math.abs(u + p) < .1 && Math.abs(s + h + f - 3) < .1) return this.set(1, 0, 0, 0), this; + e = Math.PI; + const t = (s + 1) / 2, + o = (h + 1) / 2, + m = (f + 1) / 2, + g = (a + c) / 4, + v = (l + d) / 4, + y = (u + p) / 4; + return t > o && t > m ? t < .01 ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(t), i = g / n, r = v / n) : o > m ? o < .01 ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = g / i, r = y / i) : m < .01 ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(m), n = v / r, i = y / r), this.set(n, i, r, e), this + } + let m = Math.sqrt((p - u) * (p - u) + (l - d) * (l - d) + (c - a) * (c - a)); + return Math.abs(m) < .001 && (m = 1), this.x = (p - u) / m, this.y = (l - d) / m, this.z = (c - a) / m, this.w = Math.acos((s + h + f - 1) / 2), this + } + min(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this.w = Math.min(this.w, t.w), this + } + max(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this.w = Math.max(this.w, t.w), this + } + clamp(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this.w = Math.max(t.w, Math.min(e.w, this.w)), this + } + clampScalar(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this.w = Math.max(t, Math.min(e, this.w)), this + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this + } + roundToZero() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this.w += (t.w - this.w) * e, this + } + lerpVectors(t, e, n) { + return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this.w = t.w + (e.w - t.w) * n, this + } + equals(t) { + return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w + } + fromArray(t, e = 0) { + return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this.w = t[e + 3], this + } + toArray(t = [], e = 0) { + return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t[e + 3] = this.w, t + } + fromBufferAttribute(t, e, n) { + return void 0 !== n && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this.w = t.getW(e), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this.w = Math.random(), this + } + } + class E extends p { + constructor(t, e, n) { + super(), Object.defineProperty(this, "isWebGLRenderTarget", { + value: !0 + }), this.width = t, this.height = e, this.scissor = new M(0, 0, t, e), this.scissorTest = !1, this.viewport = new M(0, 0, t, e), n = n || {}, this.texture = new b(void 0, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.encoding), this.texture.image = {}, this.texture.image.width = t, this.texture.image.height = e, this.texture.generateMipmaps = void 0 !== n.generateMipmaps && n.generateMipmaps, this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer, this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer, this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null + } + setSize(t, e) { + this.width === t && this.height === e || (this.width = t, this.height = e, this.texture.image.width = t, this.texture.image.height = e, this.dispose()), this.viewport.set(0, 0, t, e), this.scissor.set(0, 0, t, e) + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.width = t.width, this.height = t.height, this.viewport.copy(t.viewport), this.texture = t.texture.clone(), this.depthBuffer = t.depthBuffer, this.stencilBuffer = t.stencilBuffer, this.depthTexture = t.depthTexture, this + } + dispose() { + this.dispatchEvent({ + type: "dispose" + }) + } + } + class S { + constructor(t = 0, e = 0, n = 0, i = 1) { + Object.defineProperty(this, "isQuaternion", { + value: !0 + }), this._x = t, this._y = e, this._z = n, this._w = i + } + static slerp(t, e, n, i) { + return n.copy(t).slerp(e, i) + } + static slerpFlat(t, e, n, i, r, o, s) { + let a = n[i + 0], + l = n[i + 1], + c = n[i + 2], + h = n[i + 3]; + const u = r[o + 0], + d = r[o + 1], + p = r[o + 2], + f = r[o + 3]; + if (h !== f || a !== u || l !== d || c !== p) { + let t = 1 - s; + const e = a * u + l * d + c * p + h * f, + n = e >= 0 ? 1 : -1, + i = 1 - e * e; + if (i > Number.EPSILON) { + const r = Math.sqrt(i), + o = Math.atan2(r, e * n); + t = Math.sin(t * o) / r, s = Math.sin(s * o) / r + } + const r = s * n; + if (a = a * t + u * r, l = l * t + d * r, c = c * t + p * r, h = h * t + f * r, t === 1 - s) { + const t = 1 / Math.sqrt(a * a + l * l + c * c + h * h); + a *= t, l *= t, c *= t, h *= t + } + } + t[e] = a, t[e + 1] = l, t[e + 2] = c, t[e + 3] = h + } + static multiplyQuaternionsFlat(t, e, n, i, r, o) { + const s = n[i], + a = n[i + 1], + l = n[i + 2], + c = n[i + 3], + h = r[o], + u = r[o + 1], + d = r[o + 2], + p = r[o + 3]; + return t[e] = s * p + c * h + a * d - l * u, t[e + 1] = a * p + c * u + l * h - s * d, t[e + 2] = l * p + c * d + s * u - a * h, t[e + 3] = c * p - s * h - a * u - l * d, t + } + get x() { + return this._x + } + set x(t) { + this._x = t, this._onChangeCallback() + } + get y() { + return this._y + } + set y(t) { + this._y = t, this._onChangeCallback() + } + get z() { + return this._z + } + set z(t) { + this._z = t, this._onChangeCallback() + } + get w() { + return this._w + } + set w(t) { + this._w = t, this._onChangeCallback() + } + set(t, e, n, i) { + return this._x = t, this._y = e, this._z = n, this._w = i, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w) + } + copy(t) { + return this._x = t.x, this._y = t.y, this._z = t.z, this._w = t.w, this._onChangeCallback(), this + } + setFromEuler(t, e) { + if (!t || !t.isEuler) throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); + const n = t._x, + i = t._y, + r = t._z, + o = t._order, + s = Math.cos, + a = Math.sin, + l = s(n / 2), + c = s(i / 2), + h = s(r / 2), + u = a(n / 2), + d = a(i / 2), + p = a(r / 2); + switch (o) { + case "XYZ": + this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; + break; + case "YXZ": + this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; + break; + case "ZXY": + this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; + break; + case "ZYX": + this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; + break; + case "YZX": + this._x = u * c * h + l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h - u * d * p; + break; + case "XZY": + this._x = u * c * h - l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h + u * d * p; + break; + default: + console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + o) + } + return !1 !== e && this._onChangeCallback(), this + } + setFromAxisAngle(t, e) { + const n = e / 2, + i = Math.sin(n); + return this._x = t.x * i, this._y = t.y * i, this._z = t.z * i, this._w = Math.cos(n), this._onChangeCallback(), this + } + setFromRotationMatrix(t) { + const e = t.elements, + n = e[0], + i = e[4], + r = e[8], + o = e[1], + s = e[5], + a = e[9], + l = e[2], + c = e[6], + h = e[10], + u = n + s + h; + if (u > 0) { + const t = .5 / Math.sqrt(u + 1); + this._w = .25 / t, this._x = (c - a) * t, this._y = (r - l) * t, this._z = (o - i) * t + } else if (n > s && n > h) { + const t = 2 * Math.sqrt(1 + n - s - h); + this._w = (c - a) / t, this._x = .25 * t, this._y = (i + o) / t, this._z = (r + l) / t + } else if (s > h) { + const t = 2 * Math.sqrt(1 + s - n - h); + this._w = (r - l) / t, this._x = (i + o) / t, this._y = .25 * t, this._z = (a + c) / t + } else { + const t = 2 * Math.sqrt(1 + h - n - s); + this._w = (o - i) / t, this._x = (r + l) / t, this._y = (a + c) / t, this._z = .25 * t + } + return this._onChangeCallback(), this + } + setFromUnitVectors(t, e) { + let n = t.dot(e) + 1; + return n < 1e-6 ? (n = 0, Math.abs(t.x) > Math.abs(t.z) ? (this._x = -t.y, this._y = t.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -t.z, this._z = t.y, this._w = n)) : (this._x = t.y * e.z - t.z * e.y, this._y = t.z * e.x - t.x * e.z, this._z = t.x * e.y - t.y * e.x, this._w = n), this.normalize() + } + angleTo(t) { + return 2 * Math.acos(Math.abs(g.clamp(this.dot(t), -1, 1))) + } + rotateTowards(t, e) { + const n = this.angleTo(t); + if (0 === n) return this; + const i = Math.min(1, e / n); + return this.slerp(t, i), this + } + identity() { + return this.set(0, 0, 0, 1) + } + invert() { + return this.conjugate() + } + conjugate() { + return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this + } + dot(t) { + return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + } + length() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + } + normalize() { + let t = this.length(); + return 0 === t ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (t = 1 / t, this._x = this._x * t, this._y = this._y * t, this._z = this._z * t, this._w = this._w * t), this._onChangeCallback(), this + } + multiply(t, e) { + return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(t, e)) : this.multiplyQuaternions(this, t) + } + premultiply(t) { + return this.multiplyQuaternions(t, this) + } + multiplyQuaternions(t, e) { + const n = t._x, + i = t._y, + r = t._z, + o = t._w, + s = e._x, + a = e._y, + l = e._z, + c = e._w; + return this._x = n * c + o * s + i * l - r * a, this._y = i * c + o * a + r * s - n * l, this._z = r * c + o * l + n * a - i * s, this._w = o * c - n * s - i * a - r * l, this._onChangeCallback(), this + } + slerp(t, e) { + if (0 === e) return this; + if (1 === e) return this.copy(t); + const n = this._x, + i = this._y, + r = this._z, + o = this._w; + let s = o * t._w + n * t._x + i * t._y + r * t._z; + if (s < 0 ? (this._w = -t._w, this._x = -t._x, this._y = -t._y, this._z = -t._z, s = -s) : this.copy(t), s >= 1) return this._w = o, this._x = n, this._y = i, this._z = r, this; + const a = 1 - s * s; + if (a <= Number.EPSILON) { + const t = 1 - e; + return this._w = t * o + e * this._w, this._x = t * n + e * this._x, this._y = t * i + e * this._y, this._z = t * r + e * this._z, this.normalize(), this._onChangeCallback(), this + } + const l = Math.sqrt(a), + c = Math.atan2(l, s), + h = Math.sin((1 - e) * c) / l, + u = Math.sin(e * c) / l; + return this._w = o * h + this._w * u, this._x = n * h + this._x * u, this._y = i * h + this._y * u, this._z = r * h + this._z * u, this._onChangeCallback(), this + } + equals(t) { + return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w + } + fromArray(t, e = 0) { + return this._x = t[e], this._y = t[e + 1], this._z = t[e + 2], this._w = t[e + 3], this._onChangeCallback(), this + } + toArray(t = [], e = 0) { + return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._w, t + } + fromBufferAttribute(t, e) { + return this._x = t.getX(e), this._y = t.getY(e), this._z = t.getZ(e), this._w = t.getW(e), this + } + _onChange(t) { + return this._onChangeCallback = t, this + } + _onChangeCallback() {} + } + class T { + constructor(t = 0, e = 0, n = 0) { + Object.defineProperty(this, "isVector3", { + value: !0 + }), this.x = t, this.y = e, this.z = n + } + set(t, e, n) { + return void 0 === n && (n = this.z), this.x = t, this.y = e, this.z = n, this + } + setScalar(t) { + return this.x = t, this.y = t, this.z = t, this + } + setX(t) { + return this.x = t, this + } + setY(t) { + return this.y = t, this + } + setZ(t) { + return this.z = t, this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw new Error("index is out of range: " + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + t) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z) + } + copy(t) { + return this.x = t.x, this.y = t.y, this.z = t.z, this + } + add(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this) + } + addScalar(t) { + return this.x += t, this.y += t, this.z += t, this + } + addVectors(t, e) { + return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this + } + addScaledVector(t, e) { + return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this + } + sub(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this) + } + subScalar(t) { + return this.x -= t, this.y -= t, this.z -= t, this + } + subVectors(t, e) { + return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this + } + multiply(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(t, e)) : (this.x *= t.x, this.y *= t.y, this.z *= t.z, this) + } + multiplyScalar(t) { + return this.x *= t, this.y *= t, this.z *= t, this + } + multiplyVectors(t, e) { + return this.x = t.x * e.x, this.y = t.y * e.y, this.z = t.z * e.z, this + } + applyEuler(t) { + return t && t.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), this.applyQuaternion(R.setFromEuler(t)) + } + applyAxisAngle(t, e) { + return this.applyQuaternion(R.setFromAxisAngle(t, e)) + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return this.x = r[0] * e + r[3] * n + r[6] * i, this.y = r[1] * e + r[4] * n + r[7] * i, this.z = r[2] * e + r[5] * n + r[8] * i, this + } + applyNormalMatrix(t) { + return this.applyMatrix3(t).normalize() + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements, + o = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]); + return this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * o, this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * o, this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * o, this + } + applyQuaternion(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.x, + o = t.y, + s = t.z, + a = t.w, + l = a * e + o * i - s * n, + c = a * n + s * e - r * i, + h = a * i + r * n - o * e, + u = -r * e - o * n - s * i; + return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this + } + project(t) { + return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix) + } + unproject(t) { + return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld) + } + transformDirection(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return this.x = r[0] * e + r[4] * n + r[8] * i, this.y = r[1] * e + r[5] * n + r[9] * i, this.z = r[2] * e + r[6] * n + r[10] * i, this.normalize() + } + divide(t) { + return this.x /= t.x, this.y /= t.y, this.z /= t.z, this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + min(t) { + return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this + } + max(t) { + return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this + } + clamp(t, e) { + return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this + } + clampScalar(t, e) { + return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this + } + ceil() { + return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this + } + round() { + return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this + } + roundToZero() { + return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this + } + negate() { + return this.x = -this.x, this.y = -this.y, this.z = -this.z, this + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this + } + lerpVectors(t, e, n) { + return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this + } + cross(t, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(t, e)) : this.crossVectors(this, t) + } + crossVectors(t, e) { + const n = t.x, + i = t.y, + r = t.z, + o = e.x, + s = e.y, + a = e.z; + return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this + } + projectOnVector(t) { + const e = t.lengthSq(); + if (0 === e) return this.set(0, 0, 0); + const n = t.dot(this) / e; + return this.copy(t).multiplyScalar(n) + } + projectOnPlane(t) { + return L.copy(this).projectOnVector(t), this.sub(L) + } + reflect(t) { + return this.sub(L.copy(t).multiplyScalar(2 * this.dot(t))) + } + angleTo(t) { + const e = Math.sqrt(this.lengthSq() * t.lengthSq()); + if (0 === e) return Math.PI / 2; + const n = this.dot(t) / e; + return Math.acos(g.clamp(n, -1, 1)) + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)) + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y, + i = this.z - t.z; + return e * e + n * n + i * i + } + manhattanDistanceTo(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z) + } + setFromSpherical(t) { + return this.setFromSphericalCoords(t.radius, t.phi, t.theta) + } + setFromSphericalCoords(t, e, n) { + const i = Math.sin(e) * t; + return this.x = i * Math.sin(n), this.y = Math.cos(e) * t, this.z = i * Math.cos(n), this + } + setFromCylindrical(t) { + return this.setFromCylindricalCoords(t.radius, t.theta, t.y) + } + setFromCylindricalCoords(t, e, n) { + return this.x = t * Math.sin(e), this.y = n, this.z = t * Math.cos(e), this + } + setFromMatrixPosition(t) { + const e = t.elements; + return this.x = e[12], this.y = e[13], this.z = e[14], this + } + setFromMatrixScale(t) { + const e = this.setFromMatrixColumn(t, 0).length(), + n = this.setFromMatrixColumn(t, 1).length(), + i = this.setFromMatrixColumn(t, 2).length(); + return this.x = e, this.y = n, this.z = i, this + } + setFromMatrixColumn(t, e) { + return this.fromArray(t.elements, 4 * e) + } + setFromMatrix3Column(t, e) { + return this.fromArray(t.elements, 3 * e) + } + equals(t) { + return t.x === this.x && t.y === this.y && t.z === this.z + } + fromArray(t, e = 0) { + return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this + } + toArray(t = [], e = 0) { + return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t + } + fromBufferAttribute(t, e, n) { + return void 0 !== n && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this + } + random() { + return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this + } + } + const L = new T, + R = new S; + class C { + constructor(t, e) { + Object.defineProperty(this, "isBox3", { + value: !0 + }), this.min = void 0 !== t ? t : new T(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new T(-1 / 0, -1 / 0, -1 / 0) + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this + } + setFromArray(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + o = -1 / 0, + s = -1 / 0; + for (let a = 0, l = t.length; a < l; a += 3) { + const l = t[a], + c = t[a + 1], + h = t[a + 2]; + l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) + } + return this.min.set(e, n, i), this.max.set(r, o, s), this + } + setFromBufferAttribute(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + o = -1 / 0, + s = -1 / 0; + for (let a = 0, l = t.count; a < l; a++) { + const l = t.getX(a), + c = t.getY(a), + h = t.getZ(a); + l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) + } + return this.min.set(e, n, i), this.max.set(r, o, s), this + } + setFromPoints(t) { + this.makeEmpty(); + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this + } + setFromCenterAndSize(t, e) { + const n = I.copy(e).multiplyScalar(.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + } + setFromObject(t) { + return this.makeEmpty(), this.expandByObject(t) + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + } + makeEmpty() { + return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z + } + getCenter(t) { + return void 0 === t && (console.warn("THREE.Box3: .getCenter() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) + } + getSize(t) { + return void 0 === t && (console.warn("THREE.Box3: .getSize() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min) + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + } + expandByObject(t) { + t.updateWorldMatrix(!1, !1); + const e = t.geometry; + void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), O.copy(e.boundingBox), O.applyMatrix4(t.matrixWorld), this.union(O)); + const n = t.children; + for (let t = 0, e = n.length; t < e; t++) this.expandByObject(n[t]); + return this + } + containsPoint(t) { + return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y || t.z < this.min.z || t.z > this.max.z) + } + containsBox(t) { + return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y && this.min.z <= t.min.z && t.max.z <= this.max.z + } + getParameter(t, e) { + return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), e = new T), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y), (t.z - this.min.z) / (this.max.z - this.min.z)) + } + intersectsBox(t) { + return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y || t.max.z < this.min.z || t.min.z > this.max.z) + } + intersectsSphere(t) { + return this.clampPoint(t.center, I), I.distanceToSquared(t.center) <= t.radius * t.radius + } + intersectsPlane(t) { + let e, n; + return t.normal.x > 0 ? (e = t.normal.x * this.min.x, n = t.normal.x * this.max.x) : (e = t.normal.x * this.max.x, n = t.normal.x * this.min.x), t.normal.y > 0 ? (e += t.normal.y * this.min.y, n += t.normal.y * this.max.y) : (e += t.normal.y * this.max.y, n += t.normal.y * this.min.y), t.normal.z > 0 ? (e += t.normal.z * this.min.z, n += t.normal.z * this.max.z) : (e += t.normal.z * this.max.z, n += t.normal.z * this.min.z), e <= -t.constant && n >= -t.constant + } + intersectsTriangle(t) { + if (this.isEmpty()) return !1; + this.getCenter(G), V.subVectors(this.max, G), N.subVectors(t.a, G), B.subVectors(t.b, G), F.subVectors(t.c, G), z.subVectors(B, N), U.subVectors(F, B), H.subVectors(N, F); + let e = [0, -z.z, z.y, 0, -U.z, U.y, 0, -H.z, H.y, z.z, 0, -z.x, U.z, 0, -U.x, H.z, 0, -H.x, -z.y, z.x, 0, -U.y, U.x, 0, -H.y, H.x, 0]; + return !!P(e, N, B, F, V) && (e = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!P(e, N, B, F, V) && (k.crossVectors(z, U), e = [k.x, k.y, k.z], P(e, N, B, F, V))) + } + clampPoint(t, e) { + return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), e = new T), e.copy(t).clamp(this.min, this.max) + } + distanceToPoint(t) { + return I.copy(t).clamp(this.min, this.max).sub(t).length() + } + getBoundingSphere(t) { + return void 0 === t && console.error("THREE.Box3: .getBoundingSphere() target is now required"), this.getCenter(t.center), t.radius = .5 * this.getSize(I).length(), t + } + intersect(t) { + return this.min.max(t.min), this.max.min(t.max), this.isEmpty() && this.makeEmpty(), this + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this + } + applyMatrix4(t) { + return this.isEmpty() || (D[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), D[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), D[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), D[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), D[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), D[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), D[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), D[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.setFromPoints(D)), this + } + translate(t) { + return this.min.add(t), this.max.add(t), this + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + } + + function P(t, e, n, i, r) { + for (let o = 0, s = t.length - 3; o <= s; o += 3) { + W.fromArray(t, o); + const s = r.x * Math.abs(W.x) + r.y * Math.abs(W.y) + r.z * Math.abs(W.z), + a = e.dot(W), + l = n.dot(W), + c = i.dot(W); + if (Math.max(-Math.max(a, l, c), Math.min(a, l, c)) > s) return !1 + } + return !0 + } + const D = [new T, new T, new T, new T, new T, new T, new T, new T], + I = new T, + O = new C, + N = new T, + B = new T, + F = new T, + z = new T, + U = new T, + H = new T, + G = new T, + V = new T, + k = new T, + W = new T, + j = new C; + class X { + constructor(t, e) { + this.center = void 0 !== t ? t : new T, this.radius = void 0 !== e ? e : -1 + } + set(t, e) { + return this.center.copy(t), this.radius = e, this + } + setFromPoints(t, e) { + const n = this.center; + void 0 !== e ? n.copy(e) : j.setFromPoints(t).getCenter(n); + let i = 0; + for (let e = 0, r = t.length; e < r; e++) i = Math.max(i, n.distanceToSquared(t[e])); + return this.radius = Math.sqrt(i), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.center.copy(t.center), this.radius = t.radius, this + } + isEmpty() { + return this.radius < 0 + } + makeEmpty() { + return this.center.set(0, 0, 0), this.radius = -1, this + } + containsPoint(t) { + return t.distanceToSquared(this.center) <= this.radius * this.radius + } + distanceToPoint(t) { + return t.distanceTo(this.center) - this.radius + } + intersectsSphere(t) { + const e = this.radius + t.radius; + return t.center.distanceToSquared(this.center) <= e * e + } + intersectsBox(t) { + return t.intersectsSphere(this) + } + intersectsPlane(t) { + return Math.abs(t.distanceToPoint(this.center)) <= this.radius + } + clampPoint(t, e) { + const n = this.center.distanceToSquared(t); + return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), e = new T), e.copy(t), n > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), e + } + getBoundingBox(t) { + return void 0 === t && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), t = new C), this.isEmpty() ? (t.makeEmpty(), t) : (t.set(this.center, this.center), t.expandByScalar(this.radius), t) + } + applyMatrix4(t) { + return this.center.applyMatrix4(t), this.radius = this.radius * t.getMaxScaleOnAxis(), this + } + translate(t) { + return this.center.add(t), this + } + equals(t) { + return t.center.equals(this.center) && t.radius === this.radius + } + } + const q = new T, + Y = new T, + Q = new T, + Z = new T, + J = new T, + K = new T, + $ = new T; + class tt { + constructor(t, e) { + this.origin = void 0 !== t ? t : new T, this.direction = void 0 !== e ? e : new T(0, 0, -1) + } + set(t, e) { + return this.origin.copy(t), this.direction.copy(e), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.origin.copy(t.origin), this.direction.copy(t.direction), this + } + at(t, e) { + return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), e = new T), e.copy(this.direction).multiplyScalar(t).add(this.origin) + } + lookAt(t) { + return this.direction.copy(t).sub(this.origin).normalize(), this + } + recast(t) { + return this.origin.copy(this.at(t, q)), this + } + closestPointToPoint(t, e) { + void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), e = new T), e.subVectors(t, this.origin); + const n = e.dot(this.direction); + return n < 0 ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(n).add(this.origin) + } + distanceToPoint(t) { + return Math.sqrt(this.distanceSqToPoint(t)) + } + distanceSqToPoint(t) { + const e = q.subVectors(t, this.origin).dot(this.direction); + return e < 0 ? this.origin.distanceToSquared(t) : (q.copy(this.direction).multiplyScalar(e).add(this.origin), q.distanceToSquared(t)) + } + distanceSqToSegment(t, e, n, i) { + Y.copy(t).add(e).multiplyScalar(.5), Q.copy(e).sub(t).normalize(), Z.copy(this.origin).sub(Y); + const r = .5 * t.distanceTo(e), + o = -this.direction.dot(Q), + s = Z.dot(this.direction), + a = -Z.dot(Q), + l = Z.lengthSq(), + c = Math.abs(1 - o * o); + let h, u, d, p; + if (c > 0) + if (h = o * a - s, u = o * s - a, p = r * c, h >= 0) + if (u >= -p) + if (u <= p) { + const t = 1 / c; + h *= t, u *= t, d = h * (h + o * u + 2 * s) + u * (o * h + u + 2 * a) + l + } else u = r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; + else u = -r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; + else u <= -p ? (h = Math.max(0, -(-o * r + s)), u = h > 0 ? -r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l) : u <= p ? (h = 0, u = Math.min(Math.max(-r, -a), r), d = u * (u + 2 * a) + l) : (h = Math.max(0, -(o * r + s)), u = h > 0 ? r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l); + else u = o > 0 ? -r : r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; + return n && n.copy(this.direction).multiplyScalar(h).add(this.origin), i && i.copy(Q).multiplyScalar(u).add(Y), d + } + intersectSphere(t, e) { + q.subVectors(t.center, this.origin); + const n = q.dot(this.direction), + i = q.dot(q) - n * n, + r = t.radius * t.radius; + if (i > r) return null; + const o = Math.sqrt(r - i), + s = n - o, + a = n + o; + return s < 0 && a < 0 ? null : s < 0 ? this.at(a, e) : this.at(s, e) + } + intersectsSphere(t) { + return this.distanceSqToPoint(t.center) <= t.radius * t.radius + } + distanceToPlane(t) { + const e = t.normal.dot(this.direction); + if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null; + const n = -(this.origin.dot(t.normal) + t.constant) / e; + return n >= 0 ? n : null + } + intersectPlane(t, e) { + const n = this.distanceToPlane(t); + return null === n ? null : this.at(n, e) + } + intersectsPlane(t) { + const e = t.distanceToPoint(this.origin); + if (0 === e) return !0; + return t.normal.dot(this.direction) * e < 0 + } + intersectBox(t, e) { + let n, i, r, o, s, a; + const l = 1 / this.direction.x, + c = 1 / this.direction.y, + h = 1 / this.direction.z, + u = this.origin; + return l >= 0 ? (n = (t.min.x - u.x) * l, i = (t.max.x - u.x) * l) : (n = (t.max.x - u.x) * l, i = (t.min.x - u.x) * l), c >= 0 ? (r = (t.min.y - u.y) * c, o = (t.max.y - u.y) * c) : (r = (t.max.y - u.y) * c, o = (t.min.y - u.y) * c), n > o || r > i ? null : ((r > n || n != n) && (n = r), (o < i || i != i) && (i = o), h >= 0 ? (s = (t.min.z - u.z) * h, a = (t.max.z - u.z) * h) : (s = (t.max.z - u.z) * h, a = (t.min.z - u.z) * h), n > a || s > i ? null : ((s > n || n != n) && (n = s), (a < i || i != i) && (i = a), i < 0 ? null : this.at(n >= 0 ? n : i, e))) + } + intersectsBox(t) { + return null !== this.intersectBox(t, q) + } + intersectTriangle(t, e, n, i, r) { + J.subVectors(e, t), K.subVectors(n, t), $.crossVectors(J, K); + let o, s = this.direction.dot($); + if (s > 0) { + if (i) return null; + o = 1 + } else { + if (!(s < 0)) return null; + o = -1, s = -s + } + Z.subVectors(this.origin, t); + const a = o * this.direction.dot(K.crossVectors(Z, K)); + if (a < 0) return null; + const l = o * this.direction.dot(J.cross(Z)); + if (l < 0) return null; + if (a + l > s) return null; + const c = -o * Z.dot($); + return c < 0 ? null : this.at(c / s, r) + } + applyMatrix4(t) { + return this.origin.applyMatrix4(t), this.direction.transformDirection(t), this + } + equals(t) { + return t.origin.equals(this.origin) && t.direction.equals(this.direction) + } + } + class et { + constructor() { + Object.defineProperty(this, "isMatrix4", { + value: !0 + }), this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.") + } + set(t, e, n, i, r, o, s, a, l, c, h, u, d, p, f, m) { + const g = this.elements; + return g[0] = t, g[4] = e, g[8] = n, g[12] = i, g[1] = r, g[5] = o, g[9] = s, g[13] = a, g[2] = l, g[6] = c, g[10] = h, g[14] = u, g[3] = d, g[7] = p, g[11] = f, g[15] = m, this + } + identity() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + clone() { + return (new et).fromArray(this.elements) + } + copy(t) { + const e = this.elements, + n = t.elements; + return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], e[9] = n[9], e[10] = n[10], e[11] = n[11], e[12] = n[12], e[13] = n[13], e[14] = n[14], e[15] = n[15], this + } + copyPosition(t) { + const e = this.elements, + n = t.elements; + return e[12] = n[12], e[13] = n[13], e[14] = n[14], this + } + setFromMatrix3(t) { + const e = t.elements; + return this.set(e[0], e[3], e[6], 0, e[1], e[4], e[7], 0, e[2], e[5], e[8], 0, 0, 0, 0, 1), this + } + extractBasis(t, e, n) { + return t.setFromMatrixColumn(this, 0), e.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this + } + makeBasis(t, e, n) { + return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1), this + } + extractRotation(t) { + const e = this.elements, + n = t.elements, + i = 1 / nt.setFromMatrixColumn(t, 0).length(), + r = 1 / nt.setFromMatrixColumn(t, 1).length(), + o = 1 / nt.setFromMatrixColumn(t, 2).length(); + return e[0] = n[0] * i, e[1] = n[1] * i, e[2] = n[2] * i, e[3] = 0, e[4] = n[4] * r, e[5] = n[5] * r, e[6] = n[6] * r, e[7] = 0, e[8] = n[8] * o, e[9] = n[9] * o, e[10] = n[10] * o, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this + } + makeRotationFromEuler(t) { + t && t.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); + const e = this.elements, + n = t.x, + i = t.y, + r = t.z, + o = Math.cos(n), + s = Math.sin(n), + a = Math.cos(i), + l = Math.sin(i), + c = Math.cos(r), + h = Math.sin(r); + if ("XYZ" === t.order) { + const t = o * c, + n = o * h, + i = s * c, + r = s * h; + e[0] = a * c, e[4] = -a * h, e[8] = l, e[1] = n + i * l, e[5] = t - r * l, e[9] = -s * a, e[2] = r - t * l, e[6] = i + n * l, e[10] = o * a + } else if ("YXZ" === t.order) { + const t = a * c, + n = a * h, + i = l * c, + r = l * h; + e[0] = t + r * s, e[4] = i * s - n, e[8] = o * l, e[1] = o * h, e[5] = o * c, e[9] = -s, e[2] = n * s - i, e[6] = r + t * s, e[10] = o * a + } else if ("ZXY" === t.order) { + const t = a * c, + n = a * h, + i = l * c, + r = l * h; + e[0] = t - r * s, e[4] = -o * h, e[8] = i + n * s, e[1] = n + i * s, e[5] = o * c, e[9] = r - t * s, e[2] = -o * l, e[6] = s, e[10] = o * a + } else if ("ZYX" === t.order) { + const t = o * c, + n = o * h, + i = s * c, + r = s * h; + e[0] = a * c, e[4] = i * l - n, e[8] = t * l + r, e[1] = a * h, e[5] = r * l + t, e[9] = n * l - i, e[2] = -l, e[6] = s * a, e[10] = o * a + } else if ("YZX" === t.order) { + const t = o * a, + n = o * l, + i = s * a, + r = s * l; + e[0] = a * c, e[4] = r - t * h, e[8] = i * h + n, e[1] = h, e[5] = o * c, e[9] = -s * c, e[2] = -l * c, e[6] = n * h + i, e[10] = t - r * h + } else if ("XZY" === t.order) { + const t = o * a, + n = o * l, + i = s * a, + r = s * l; + e[0] = a * c, e[4] = -h, e[8] = l * c, e[1] = t * h + r, e[5] = o * c, e[9] = n * h - i, e[2] = i * h - n, e[6] = s * c, e[10] = r * h + t + } + return e[3] = 0, e[7] = 0, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this + } + makeRotationFromQuaternion(t) { + return this.compose(rt, t, ot) + } + lookAt(t, e, n) { + const i = this.elements; + return lt.subVectors(t, e), 0 === lt.lengthSq() && (lt.z = 1), lt.normalize(), st.crossVectors(n, lt), 0 === st.lengthSq() && (1 === Math.abs(n.z) ? lt.x += 1e-4 : lt.z += 1e-4, lt.normalize(), st.crossVectors(n, lt)), st.normalize(), at.crossVectors(lt, st), i[0] = st.x, i[4] = at.x, i[8] = lt.x, i[1] = st.y, i[5] = at.y, i[9] = lt.y, i[2] = st.z, i[6] = at.z, i[10] = lt.z, this + } + multiply(t, e) { + return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(t, e)) : this.multiplyMatrices(this, t) + } + premultiply(t) { + return this.multiplyMatrices(t, this) + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + o = n[0], + s = n[4], + a = n[8], + l = n[12], + c = n[1], + h = n[5], + u = n[9], + d = n[13], + p = n[2], + f = n[6], + m = n[10], + g = n[14], + v = n[3], + y = n[7], + A = n[11], + x = n[15], + _ = i[0], + b = i[4], + w = i[8], + M = i[12], + E = i[1], + S = i[5], + T = i[9], + L = i[13], + R = i[2], + C = i[6], + P = i[10], + D = i[14], + I = i[3], + O = i[7], + N = i[11], + B = i[15]; + return r[0] = o * _ + s * E + a * R + l * I, r[4] = o * b + s * S + a * C + l * O, r[8] = o * w + s * T + a * P + l * N, r[12] = o * M + s * L + a * D + l * B, r[1] = c * _ + h * E + u * R + d * I, r[5] = c * b + h * S + u * C + d * O, r[9] = c * w + h * T + u * P + d * N, r[13] = c * M + h * L + u * D + d * B, r[2] = p * _ + f * E + m * R + g * I, r[6] = p * b + f * S + m * C + g * O, r[10] = p * w + f * T + m * P + g * N, r[14] = p * M + f * L + m * D + g * B, r[3] = v * _ + y * E + A * R + x * I, r[7] = v * b + y * S + A * C + x * O, r[11] = v * w + y * T + A * P + x * N, r[15] = v * M + y * L + A * D + x * B, this + } + multiplyScalar(t) { + const e = this.elements; + return e[0] *= t, e[4] *= t, e[8] *= t, e[12] *= t, e[1] *= t, e[5] *= t, e[9] *= t, e[13] *= t, e[2] *= t, e[6] *= t, e[10] *= t, e[14] *= t, e[3] *= t, e[7] *= t, e[11] *= t, e[15] *= t, this + } + determinant() { + const t = this.elements, + e = t[0], + n = t[4], + i = t[8], + r = t[12], + o = t[1], + s = t[5], + a = t[9], + l = t[13], + c = t[2], + h = t[6], + u = t[10], + d = t[14]; + return t[3] * (+r * a * h - i * l * h - r * s * u + n * l * u + i * s * d - n * a * d) + t[7] * (+e * a * d - e * l * u + r * o * u - i * o * d + i * l * c - r * a * c) + t[11] * (+e * l * h - e * s * d - r * o * h + n * o * d + r * s * c - n * l * c) + t[15] * (-i * s * c - e * a * h + e * s * u + i * o * h - n * o * u + n * a * c) + } + transpose() { + const t = this.elements; + let e; + return e = t[1], t[1] = t[4], t[4] = e, e = t[2], t[2] = t[8], t[8] = e, e = t[6], t[6] = t[9], t[9] = e, e = t[3], t[3] = t[12], t[12] = e, e = t[7], t[7] = t[13], t[13] = e, e = t[11], t[11] = t[14], t[14] = e, this + } + setPosition(t, e, n) { + const i = this.elements; + return t.isVector3 ? (i[12] = t.x, i[13] = t.y, i[14] = t.z) : (i[12] = t, i[13] = e, i[14] = n), this + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + o = t[4], + s = t[5], + a = t[6], + l = t[7], + c = t[8], + h = t[9], + u = t[10], + d = t[11], + p = t[12], + f = t[13], + m = t[14], + g = t[15], + v = h * m * l - f * u * l + f * a * d - s * m * d - h * a * g + s * u * g, + y = p * u * l - c * m * l - p * a * d + o * m * d + c * a * g - o * u * g, + A = c * f * l - p * h * l + p * s * d - o * f * d - c * s * g + o * h * g, + x = p * h * a - c * f * a - p * s * u + o * f * u + c * s * m - o * h * m, + _ = e * v + n * y + i * A + r * x; + if (0 === _) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const b = 1 / _; + return t[0] = v * b, t[1] = (f * u * r - h * m * r - f * i * d + n * m * d + h * i * g - n * u * g) * b, t[2] = (s * m * r - f * a * r + f * i * l - n * m * l - s * i * g + n * a * g) * b, t[3] = (h * a * r - s * u * r - h * i * l + n * u * l + s * i * d - n * a * d) * b, t[4] = y * b, t[5] = (c * m * r - p * u * r + p * i * d - e * m * d - c * i * g + e * u * g) * b, t[6] = (p * a * r - o * m * r - p * i * l + e * m * l + o * i * g - e * a * g) * b, t[7] = (o * u * r - c * a * r + c * i * l - e * u * l - o * i * d + e * a * d) * b, t[8] = A * b, t[9] = (p * h * r - c * f * r - p * n * d + e * f * d + c * n * g - e * h * g) * b, t[10] = (o * f * r - p * s * r + p * n * l - e * f * l - o * n * g + e * s * g) * b, t[11] = (c * s * r - o * h * r - c * n * l + e * h * l + o * n * d - e * s * d) * b, t[12] = x * b, t[13] = (c * f * i - p * h * i + p * n * u - e * f * u - c * n * m + e * h * m) * b, t[14] = (p * s * i - o * f * i - p * n * a + e * f * a + o * n * m - e * s * m) * b, t[15] = (o * h * i - c * s * i + c * n * a - e * h * a - o * n * u + e * s * u) * b, this + } + scale(t) { + const e = this.elements, + n = t.x, + i = t.y, + r = t.z; + return e[0] *= n, e[4] *= i, e[8] *= r, e[1] *= n, e[5] *= i, e[9] *= r, e[2] *= n, e[6] *= i, e[10] *= r, e[3] *= n, e[7] *= i, e[11] *= r, this + } + getMaxScaleOnAxis() { + const t = this.elements, + e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2], + n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6], + i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10]; + return Math.sqrt(Math.max(e, n, i)) + } + makeTranslation(t, e, n) { + return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this + } + makeRotationX(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this + } + makeRotationY(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this + } + makeRotationZ(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + makeRotationAxis(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = 1 - n, + o = t.x, + s = t.y, + a = t.z, + l = r * o, + c = r * s; + return this.set(l * o + n, l * s - i * a, l * a + i * s, 0, l * s + i * a, c * s + n, c * a - i * o, 0, l * a - i * s, c * a + i * o, r * a * a + n, 0, 0, 0, 0, 1), this + } + makeScale(t, e, n) { + return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this + } + makeShear(t, e, n) { + return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this + } + compose(t, e, n) { + const i = this.elements, + r = e._x, + o = e._y, + s = e._z, + a = e._w, + l = r + r, + c = o + o, + h = s + s, + u = r * l, + d = r * c, + p = r * h, + f = o * c, + m = o * h, + g = s * h, + v = a * l, + y = a * c, + A = a * h, + x = n.x, + _ = n.y, + b = n.z; + return i[0] = (1 - (f + g)) * x, i[1] = (d + A) * x, i[2] = (p - y) * x, i[3] = 0, i[4] = (d - A) * _, i[5] = (1 - (u + g)) * _, i[6] = (m + v) * _, i[7] = 0, i[8] = (p + y) * b, i[9] = (m - v) * b, i[10] = (1 - (u + f)) * b, i[11] = 0, i[12] = t.x, i[13] = t.y, i[14] = t.z, i[15] = 1, this + } + decompose(t, e, n) { + const i = this.elements; + let r = nt.set(i[0], i[1], i[2]).length(); + const o = nt.set(i[4], i[5], i[6]).length(), + s = nt.set(i[8], i[9], i[10]).length(); + this.determinant() < 0 && (r = -r), t.x = i[12], t.y = i[13], t.z = i[14], it.copy(this); + const a = 1 / r, + l = 1 / o, + c = 1 / s; + return it.elements[0] *= a, it.elements[1] *= a, it.elements[2] *= a, it.elements[4] *= l, it.elements[5] *= l, it.elements[6] *= l, it.elements[8] *= c, it.elements[9] *= c, it.elements[10] *= c, e.setFromRotationMatrix(it), n.x = r, n.y = o, n.z = s, this + } + makePerspective(t, e, n, i, r, o) { + void 0 === o && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); + const s = this.elements, + a = 2 * r / (e - t), + l = 2 * r / (n - i), + c = (e + t) / (e - t), + h = (n + i) / (n - i), + u = -(o + r) / (o - r), + d = -2 * o * r / (o - r); + return s[0] = a, s[4] = 0, s[8] = c, s[12] = 0, s[1] = 0, s[5] = l, s[9] = h, s[13] = 0, s[2] = 0, s[6] = 0, s[10] = u, s[14] = d, s[3] = 0, s[7] = 0, s[11] = -1, s[15] = 0, this + } + makeOrthographic(t, e, n, i, r, o) { + const s = this.elements, + a = 1 / (e - t), + l = 1 / (n - i), + c = 1 / (o - r), + h = (e + t) * a, + u = (n + i) * l, + d = (o + r) * c; + return s[0] = 2 * a, s[4] = 0, s[8] = 0, s[12] = -h, s[1] = 0, s[5] = 2 * l, s[9] = 0, s[13] = -u, s[2] = 0, s[6] = 0, s[10] = -2 * c, s[14] = -d, s[3] = 0, s[7] = 0, s[11] = 0, s[15] = 1, this + } + equals(t) { + const e = this.elements, + n = t.elements; + for (let t = 0; t < 16; t++) + if (e[t] !== n[t]) return !1; + return !0 + } + fromArray(t, e = 0) { + for (let n = 0; n < 16; n++) this.elements[n] = t[n + e]; + return this + } + toArray(t = [], e = 0) { + const n = this.elements; + return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t[e + 9] = n[9], t[e + 10] = n[10], t[e + 11] = n[11], t[e + 12] = n[12], t[e + 13] = n[13], t[e + 14] = n[14], t[e + 15] = n[15], t + } + } + const nt = new T, + it = new et, + rt = new T(0, 0, 0), + ot = new T(1, 1, 1), + st = new T, + at = new T, + lt = new T; + class ct { + constructor(t = 0, e = 0, n = 0, i = ct.DefaultOrder) { + Object.defineProperty(this, "isEuler", { + value: !0 + }), this._x = t, this._y = e, this._z = n, this._order = i + } + get x() { + return this._x + } + set x(t) { + this._x = t, this._onChangeCallback() + } + get y() { + return this._y + } + set y(t) { + this._y = t, this._onChangeCallback() + } + get z() { + return this._z + } + set z(t) { + this._z = t, this._onChangeCallback() + } + get order() { + return this._order + } + set order(t) { + this._order = t, this._onChangeCallback() + } + set(t, e, n, i) { + return this._x = t, this._y = e, this._z = n, this._order = i || this._order, this._onChangeCallback(), this + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order) + } + copy(t) { + return this._x = t._x, this._y = t._y, this._z = t._z, this._order = t._order, this._onChangeCallback(), this + } + setFromRotationMatrix(t, e, n) { + const i = g.clamp, + r = t.elements, + o = r[0], + s = r[4], + a = r[8], + l = r[1], + c = r[5], + h = r[9], + u = r[2], + d = r[6], + p = r[10]; + switch (e = e || this._order) { + case "XYZ": + this._y = Math.asin(i(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(-h, p), this._z = Math.atan2(-s, o)) : (this._x = Math.atan2(d, c), this._z = 0); + break; + case "YXZ": + this._x = Math.asin(-i(h, -1, 1)), Math.abs(h) < .9999999 ? (this._y = Math.atan2(a, p), this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-u, o), this._z = 0); + break; + case "ZXY": + this._x = Math.asin(i(d, -1, 1)), Math.abs(d) < .9999999 ? (this._y = Math.atan2(-u, p), this._z = Math.atan2(-s, c)) : (this._y = 0, this._z = Math.atan2(l, o)); + break; + case "ZYX": + this._y = Math.asin(-i(u, -1, 1)), Math.abs(u) < .9999999 ? (this._x = Math.atan2(d, p), this._z = Math.atan2(l, o)) : (this._x = 0, this._z = Math.atan2(-s, c)); + break; + case "YZX": + this._z = Math.asin(i(l, -1, 1)), Math.abs(l) < .9999999 ? (this._x = Math.atan2(-h, c), this._y = Math.atan2(-u, o)) : (this._x = 0, this._y = Math.atan2(a, p)); + break; + case "XZY": + this._z = Math.asin(-i(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(d, c), this._y = Math.atan2(a, o)) : (this._x = Math.atan2(-h, p), this._y = 0); + break; + default: + console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + e) + } + return this._order = e, !1 !== n && this._onChangeCallback(), this + } + setFromQuaternion(t, e, n) { + return ht.makeRotationFromQuaternion(t), this.setFromRotationMatrix(ht, e, n) + } + setFromVector3(t, e) { + return this.set(t.x, t.y, t.z, e || this._order) + } + reorder(t) { + return ut.setFromEuler(this), this.setFromQuaternion(ut, t) + } + equals(t) { + return t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order + } + fromArray(t) { + return this._x = t[0], this._y = t[1], this._z = t[2], void 0 !== t[3] && (this._order = t[3]), this._onChangeCallback(), this + } + toArray(t = [], e = 0) { + return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._order, t + } + toVector3(t) { + return t ? t.set(this._x, this._y, this._z) : new T(this._x, this._y, this._z) + } + _onChange(t) { + return this._onChangeCallback = t, this + } + _onChangeCallback() {} + } + ct.DefaultOrder = "XYZ", ct.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]; + const ht = new et, + ut = new S; + class dt { + constructor() { + this.mask = 1 + } + set(t) { + this.mask = 1 << t | 0 + } + enable(t) { + this.mask |= 1 << t | 0 + } + enableAll() { + this.mask = -1 + } + toggle(t) { + this.mask ^= 1 << t | 0 + } + disable(t) { + this.mask &= ~(1 << t | 0) + } + disableAll() { + this.mask = 0 + } + test(t) { + return 0 != (this.mask & t.mask) + } + } + let pt = 0; + const ft = new T, + mt = new S, + gt = new et, + vt = new T, + yt = new T, + At = new T, + xt = new S, + _t = new T(1, 0, 0), + bt = new T(0, 1, 0), + wt = new T(0, 0, 1), + Mt = { + type: "added" + }, + Et = { + type: "removed" + }; + + function St() { + Object.defineProperty(this, "id", { + value: pt++ + }), this.uuid = g.generateUUID(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = St.DefaultUp.clone(); + const t = new T, + e = new ct, + n = new S, + i = new T(1, 1, 1); + e._onChange((function() { + n.setFromEuler(e, !1) + })), n._onChange((function() { + e.setFromQuaternion(n, void 0, !1) + })), Object.defineProperties(this, { + position: { + configurable: !0, + enumerable: !0, + value: t + }, + rotation: { + configurable: !0, + enumerable: !0, + value: e + }, + quaternion: { + configurable: !0, + enumerable: !0, + value: n + }, + scale: { + configurable: !0, + enumerable: !0, + value: i + }, + modelViewMatrix: { + value: new et + }, + normalMatrix: { + value: new y + } + }), this.matrix = new et, this.matrixWorld = new et, this.matrixAutoUpdate = St.DefaultMatrixAutoUpdate, this.matrixWorldNeedsUpdate = !1, this.layers = new dt, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.animations = [], this.userData = {} + } + St.DefaultUp = new T(0, 1, 0), St.DefaultMatrixAutoUpdate = !0, St.prototype = Object.assign(Object.create(p.prototype), { + constructor: St, + isObject3D: !0, + onBeforeRender: function() {}, + onAfterRender: function() {}, + applyMatrix4: function(t) { + this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(t), this.matrix.decompose(this.position, this.quaternion, this.scale) + }, + applyQuaternion: function(t) { + return this.quaternion.premultiply(t), this + }, + setRotationFromAxisAngle: function(t, e) { + this.quaternion.setFromAxisAngle(t, e) + }, + setRotationFromEuler: function(t) { + this.quaternion.setFromEuler(t, !0) + }, + setRotationFromMatrix: function(t) { + this.quaternion.setFromRotationMatrix(t) + }, + setRotationFromQuaternion: function(t) { + this.quaternion.copy(t) + }, + rotateOnAxis: function(t, e) { + return mt.setFromAxisAngle(t, e), this.quaternion.multiply(mt), this + }, + rotateOnWorldAxis: function(t, e) { + return mt.setFromAxisAngle(t, e), this.quaternion.premultiply(mt), this + }, + rotateX: function(t) { + return this.rotateOnAxis(_t, t) + }, + rotateY: function(t) { + return this.rotateOnAxis(bt, t) + }, + rotateZ: function(t) { + return this.rotateOnAxis(wt, t) + }, + translateOnAxis: function(t, e) { + return ft.copy(t).applyQuaternion(this.quaternion), this.position.add(ft.multiplyScalar(e)), this + }, + translateX: function(t) { + return this.translateOnAxis(_t, t) + }, + translateY: function(t) { + return this.translateOnAxis(bt, t) + }, + translateZ: function(t) { + return this.translateOnAxis(wt, t) + }, + localToWorld: function(t) { + return t.applyMatrix4(this.matrixWorld) + }, + worldToLocal: function(t) { + return t.applyMatrix4(gt.copy(this.matrixWorld).invert()) + }, + lookAt: function(t, e, n) { + t.isVector3 ? vt.copy(t) : vt.set(t, e, n); + const i = this.parent; + this.updateWorldMatrix(!0, !1), yt.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? gt.lookAt(yt, vt, this.up) : gt.lookAt(vt, yt, this.up), this.quaternion.setFromRotationMatrix(gt), i && (gt.extractRotation(i.matrixWorld), mt.setFromRotationMatrix(gt), this.quaternion.premultiply(mt.invert())) + }, + add: function(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.add(arguments[t]); + return this + } + return t === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", t), this) : (t && t.isObject3D ? (null !== t.parent && t.parent.remove(t), t.parent = this, this.children.push(t), t.dispatchEvent(Mt)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", t), this) + }, + remove: function(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]); + return this + } + const e = this.children.indexOf(t); + return -1 !== e && (t.parent = null, this.children.splice(e, 1), t.dispatchEvent(Et)), this + }, + clear: function() { + for (let t = 0; t < this.children.length; t++) { + const e = this.children[t]; + e.parent = null, e.dispatchEvent(Et) + } + return this.children.length = 0, this + }, + attach: function(t) { + return this.updateWorldMatrix(!0, !1), gt.copy(this.matrixWorld).invert(), null !== t.parent && (t.parent.updateWorldMatrix(!0, !1), gt.multiply(t.parent.matrixWorld)), t.applyMatrix4(gt), t.updateWorldMatrix(!1, !1), this.add(t), this + }, + getObjectById: function(t) { + return this.getObjectByProperty("id", t) + }, + getObjectByName: function(t) { + return this.getObjectByProperty("name", t) + }, + getObjectByProperty: function(t, e) { + if (this[t] === e) return this; + for (let n = 0, i = this.children.length; n < i; n++) { + const i = this.children[n].getObjectByProperty(t, e); + if (void 0 !== i) return i + } + }, + getWorldPosition: function(t) { + return void 0 === t && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), t.setFromMatrixPosition(this.matrixWorld) + }, + getWorldQuaternion: function(t) { + return void 0 === t && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), t = new S), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, t, At), t + }, + getWorldScale: function(t) { + return void 0 === t && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, xt, t), t + }, + getWorldDirection: function(t) { + void 0 === t && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); + const e = this.matrixWorld.elements; + return t.set(e[8], e[9], e[10]).normalize() + }, + raycast: function() {}, + traverse: function(t) { + t(this); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t) + }, + traverseVisible: function(t) { + if (!1 === this.visible) return; + t(this); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t) + }, + traverseAncestors: function(t) { + const e = this.parent; + null !== e && (t(e), e.traverseAncestors(t)) + }, + updateMatrix: function() { + this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 + }, + updateMatrixWorld: function(t) { + this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || t) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, t = !0); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t) + }, + updateWorldMatrix: function(t, e) { + const n = this.parent; + if (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), !0 === e) { + const t = this.children; + for (let e = 0, n = t.length; e < n; e++) t[e].updateWorldMatrix(!1, !0) + } + }, + toJSON: function(t) { + const e = void 0 === t || "string" == typeof t, + n = {}; + e && (t = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {} + }, n.metadata = { + version: 4.5, + type: "Object", + generator: "Object3D.toJSON" + }); + const i = {}; + + function r(e, n) { + return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid + } + if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON()), this.isMesh || this.isLine || this.isPoints) { + i.geometry = r(t.geometries, this.geometry); + const e = this.geometry.parameters; + if (void 0 !== e && void 0 !== e.shapes) { + const n = e.shapes; + if (Array.isArray(n)) + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + r(t.shapes, i) + } else r(t.shapes, n) + } + } + if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(t.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material) + if (Array.isArray(this.material)) { + const e = []; + for (let n = 0, i = this.material.length; n < i; n++) e.push(r(t.materials, this.material[n])); + i.material = e + } else i.material = r(t.materials, this.material); + if (this.children.length > 0) { + i.children = []; + for (let e = 0; e < this.children.length; e++) i.children.push(this.children[e].toJSON(t).object) + } + if (this.animations.length > 0) { + i.animations = []; + for (let e = 0; e < this.animations.length; e++) { + const n = this.animations[e]; + i.animations.push(r(t.animations, n)) + } + } + if (e) { + const e = o(t.geometries), + i = o(t.materials), + r = o(t.textures), + s = o(t.images), + a = o(t.shapes), + l = o(t.skeletons), + c = o(t.animations); + e.length > 0 && (n.geometries = e), i.length > 0 && (n.materials = i), r.length > 0 && (n.textures = r), s.length > 0 && (n.images = s), a.length > 0 && (n.shapes = a), l.length > 0 && (n.skeletons = l), c.length > 0 && (n.animations = c) + } + return n.object = i, n; + + function o(t) { + const e = []; + for (const n in t) { + const i = t[n]; + delete i.metadata, e.push(i) + } + return e + } + }, + clone: function(t) { + return (new this.constructor).copy(this, t) + }, + copy: function(t, e = !0) { + if (this.name = t.name, this.up.copy(t.up), this.position.copy(t.position), this.rotation.order = t.rotation.order, this.quaternion.copy(t.quaternion), this.scale.copy(t.scale), this.matrix.copy(t.matrix), this.matrixWorld.copy(t.matrixWorld), this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate, this.layers.mask = t.layers.mask, this.visible = t.visible, this.castShadow = t.castShadow, this.receiveShadow = t.receiveShadow, this.frustumCulled = t.frustumCulled, this.renderOrder = t.renderOrder, this.userData = JSON.parse(JSON.stringify(t.userData)), !0 === e) + for (let e = 0; e < t.children.length; e++) { + const n = t.children[e]; + this.add(n.clone()) + } + return this + } + }); + const Tt = new T, + Lt = new T, + Rt = new y; + class Ct { + constructor(t, e) { + Object.defineProperty(this, "isPlane", { + value: !0 + }), this.normal = void 0 !== t ? t : new T(1, 0, 0), this.constant = void 0 !== e ? e : 0 + } + set(t, e) { + return this.normal.copy(t), this.constant = e, this + } + setComponents(t, e, n, i) { + return this.normal.set(t, e, n), this.constant = i, this + } + setFromNormalAndCoplanarPoint(t, e) { + return this.normal.copy(t), this.constant = -e.dot(this.normal), this + } + setFromCoplanarPoints(t, e, n) { + const i = Tt.subVectors(n, e).cross(Lt.subVectors(t, e)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, t), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.normal.copy(t.normal), this.constant = t.constant, this + } + normalize() { + const t = 1 / this.normal.length(); + return this.normal.multiplyScalar(t), this.constant *= t, this + } + negate() { + return this.constant *= -1, this.normal.negate(), this + } + distanceToPoint(t) { + return this.normal.dot(t) + this.constant + } + distanceToSphere(t) { + return this.distanceToPoint(t.center) - t.radius + } + projectPoint(t, e) { + return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), e = new T), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t) + } + intersectLine(t, e) { + void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), e = new T); + const n = t.delta(Tt), + i = this.normal.dot(n); + if (0 === i) return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : void 0; + const r = -(t.start.dot(this.normal) + this.constant) / i; + return r < 0 || r > 1 ? void 0 : e.copy(n).multiplyScalar(r).add(t.start) + } + intersectsLine(t) { + const e = this.distanceToPoint(t.start), + n = this.distanceToPoint(t.end); + return e < 0 && n > 0 || n < 0 && e > 0 + } + intersectsBox(t) { + return t.intersectsPlane(this) + } + intersectsSphere(t) { + return t.intersectsPlane(this) + } + coplanarPoint(t) { + return void 0 === t && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), t = new T), t.copy(this.normal).multiplyScalar(-this.constant) + } + applyMatrix4(t, e) { + const n = e || Rt.getNormalMatrix(t), + i = this.coplanarPoint(Tt).applyMatrix4(t), + r = this.normal.applyMatrix3(n).normalize(); + return this.constant = -i.dot(r), this + } + translate(t) { + return this.constant -= t.dot(this.normal), this + } + equals(t) { + return t.normal.equals(this.normal) && t.constant === this.constant + } + } + const Pt = new T, + Dt = new T, + It = new T, + Ot = new T, + Nt = new T, + Bt = new T, + Ft = new T, + zt = new T, + Ut = new T, + Ht = new T; + class Gt { + constructor(t, e, n) { + this.a = void 0 !== t ? t : new T, this.b = void 0 !== e ? e : new T, this.c = void 0 !== n ? n : new T + } + static getNormal(t, e, n, i) { + void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), i = new T), i.subVectors(n, e), Pt.subVectors(t, e), i.cross(Pt); + const r = i.lengthSq(); + return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0) + } + static getBarycoord(t, e, n, i, r) { + Pt.subVectors(i, e), Dt.subVectors(n, e), It.subVectors(t, e); + const o = Pt.dot(Pt), + s = Pt.dot(Dt), + a = Pt.dot(It), + l = Dt.dot(Dt), + c = Dt.dot(It), + h = o * l - s * s; + if (void 0 === r && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), r = new T), 0 === h) return r.set(-2, -1, -1); + const u = 1 / h, + d = (l * a - s * c) * u, + p = (o * c - s * a) * u; + return r.set(1 - d - p, p, d) + } + static containsPoint(t, e, n, i) { + return this.getBarycoord(t, e, n, i, Ot), Ot.x >= 0 && Ot.y >= 0 && Ot.x + Ot.y <= 1 + } + static getUV(t, e, n, i, r, o, s, a) { + return this.getBarycoord(t, e, n, i, Ot), a.set(0, 0), a.addScaledVector(r, Ot.x), a.addScaledVector(o, Ot.y), a.addScaledVector(s, Ot.z), a + } + static isFrontFacing(t, e, n, i) { + return Pt.subVectors(n, e), Dt.subVectors(t, e), Pt.cross(Dt).dot(i) < 0 + } + set(t, e, n) { + return this.a.copy(t), this.b.copy(e), this.c.copy(n), this + } + setFromPointsAndIndices(t, e, n, i) { + return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this + } + getArea() { + return Pt.subVectors(this.c, this.b), Dt.subVectors(this.a, this.b), .5 * Pt.cross(Dt).length() + } + getMidpoint(t) { + return void 0 === t && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), t = new T), t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) + } + getNormal(t) { + return Gt.getNormal(this.a, this.b, this.c, t) + } + getPlane(t) { + return void 0 === t && (console.warn("THREE.Triangle: .getPlane() target is now required"), t = new Ct), t.setFromCoplanarPoints(this.a, this.b, this.c) + } + getBarycoord(t, e) { + return Gt.getBarycoord(t, this.a, this.b, this.c, e) + } + getUV(t, e, n, i, r) { + return Gt.getUV(t, this.a, this.b, this.c, e, n, i, r) + } + containsPoint(t) { + return Gt.containsPoint(t, this.a, this.b, this.c) + } + isFrontFacing(t) { + return Gt.isFrontFacing(this.a, this.b, this.c, t) + } + intersectsBox(t) { + return t.intersectsTriangle(this) + } + closestPointToPoint(t, e) { + void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), e = new T); + const n = this.a, + i = this.b, + r = this.c; + let o, s; + Nt.subVectors(i, n), Bt.subVectors(r, n), zt.subVectors(t, n); + const a = Nt.dot(zt), + l = Bt.dot(zt); + if (a <= 0 && l <= 0) return e.copy(n); + Ut.subVectors(t, i); + const c = Nt.dot(Ut), + h = Bt.dot(Ut); + if (c >= 0 && h <= c) return e.copy(i); + const u = a * h - c * l; + if (u <= 0 && a >= 0 && c <= 0) return o = a / (a - c), e.copy(n).addScaledVector(Nt, o); + Ht.subVectors(t, r); + const d = Nt.dot(Ht), + p = Bt.dot(Ht); + if (p >= 0 && d <= p) return e.copy(r); + const f = d * l - a * p; + if (f <= 0 && l >= 0 && p <= 0) return s = l / (l - p), e.copy(n).addScaledVector(Bt, s); + const m = c * p - d * h; + if (m <= 0 && h - c >= 0 && d - p >= 0) return Ft.subVectors(r, i), s = (h - c) / (h - c + (d - p)), e.copy(i).addScaledVector(Ft, s); + const g = 1 / (m + f + u); + return o = f * g, s = u * g, e.copy(n).addScaledVector(Nt, o).addScaledVector(Bt, s) + } + equals(t) { + return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c) + } + } + const Vt = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }, + kt = { + h: 0, + s: 0, + l: 0 + }, + Wt = { + h: 0, + s: 0, + l: 0 + }; + + function jt(t, e, n) { + return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + 6 * (e - t) * (2 / 3 - n) : t + } + + function Xt(t) { + return t < .04045 ? .0773993808 * t : Math.pow(.9478672986 * t + .0521327014, 2.4) + } + + function qt(t) { + return t < .0031308 ? 12.92 * t : 1.055 * Math.pow(t, .41666) - .055 + } + class Yt { + constructor(t, e, n) { + return Object.defineProperty(this, "isColor", { + value: !0 + }), void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n) + } + set(t) { + return t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t), this + } + setScalar(t) { + return this.r = t, this.g = t, this.b = t, this + } + setHex(t) { + return t = Math.floor(t), this.r = (t >> 16 & 255) / 255, this.g = (t >> 8 & 255) / 255, this.b = (255 & t) / 255, this + } + setRGB(t, e, n) { + return this.r = t, this.g = e, this.b = n, this + } + setHSL(t, e, n) { + if (t = g.euclideanModulo(t, 1), e = g.clamp(e, 0, 1), n = g.clamp(n, 0, 1), 0 === e) this.r = this.g = this.b = n; + else { + const i = n <= .5 ? n * (1 + e) : n + e - n * e, + r = 2 * n - i; + this.r = jt(r, i, t + 1 / 3), this.g = jt(r, i, t), this.b = jt(r, i, t - 1 / 3) + } + return this + } + setStyle(t) { + function e(e) { + void 0 !== e && parseFloat(e) < 1 && console.warn("THREE.Color: Alpha component of " + t + " will be ignored.") + } + let n; + if (n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)) { + let t; + const i = n[1], + r = n[2]; + switch (i) { + case "rgb": + case "rgba": + if (t = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, e(t[4]), this; + if (t = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, e(t[4]), this; + break; + case "hsl": + case "hsla": + if (t = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) { + const n = parseFloat(t[1]) / 360, + i = parseInt(t[2], 10) / 100, + r = parseInt(t[3], 10) / 100; + return e(t[4]), this.setHSL(n, i, r) + } + } + } else if (n = /^\#([A-Fa-f\d]+)$/.exec(t)) { + const t = n[1], + e = t.length; + if (3 === e) return this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255, this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255, this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255, this; + if (6 === e) return this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255, this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255, this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255, this + } + return t && t.length > 0 ? this.setColorName(t) : this + } + setColorName(t) { + const e = Vt[t]; + return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + t), this + } + clone() { + return new this.constructor(this.r, this.g, this.b) + } + copy(t) { + return this.r = t.r, this.g = t.g, this.b = t.b, this + } + copyGammaToLinear(t, e = 2) { + return this.r = Math.pow(t.r, e), this.g = Math.pow(t.g, e), this.b = Math.pow(t.b, e), this + } + copyLinearToGamma(t, e = 2) { + const n = e > 0 ? 1 / e : 1; + return this.r = Math.pow(t.r, n), this.g = Math.pow(t.g, n), this.b = Math.pow(t.b, n), this + } + convertGammaToLinear(t) { + return this.copyGammaToLinear(this, t), this + } + convertLinearToGamma(t) { + return this.copyLinearToGamma(this, t), this + } + copySRGBToLinear(t) { + return this.r = Xt(t.r), this.g = Xt(t.g), this.b = Xt(t.b), this + } + copyLinearToSRGB(t) { + return this.r = qt(t.r), this.g = qt(t.g), this.b = qt(t.b), this + } + convertSRGBToLinear() { + return this.copySRGBToLinear(this), this + } + convertLinearToSRGB() { + return this.copyLinearToSRGB(this), this + } + getHex() { + return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 + } + getHexString() { + return ("000000" + this.getHex().toString(16)).slice(-6) + } + getHSL(t) { + void 0 === t && (console.warn("THREE.Color: .getHSL() target is now required"), t = { + h: 0, + s: 0, + l: 0 + }); + const e = this.r, + n = this.g, + i = this.b, + r = Math.max(e, n, i), + o = Math.min(e, n, i); + let s, a; + const l = (o + r) / 2; + if (o === r) s = 0, a = 0; + else { + const t = r - o; + switch (a = l <= .5 ? t / (r + o) : t / (2 - r - o), r) { + case e: + s = (n - i) / t + (n < i ? 6 : 0); + break; + case n: + s = (i - e) / t + 2; + break; + case i: + s = (e - n) / t + 4 + } + s /= 6 + } + return t.h = s, t.s = a, t.l = l, t + } + getStyle() { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + } + offsetHSL(t, e, n) { + return this.getHSL(kt), kt.h += t, kt.s += e, kt.l += n, this.setHSL(kt.h, kt.s, kt.l), this + } + add(t) { + return this.r += t.r, this.g += t.g, this.b += t.b, this + } + addColors(t, e) { + return this.r = t.r + e.r, this.g = t.g + e.g, this.b = t.b + e.b, this + } + addScalar(t) { + return this.r += t, this.g += t, this.b += t, this + } + sub(t) { + return this.r = Math.max(0, this.r - t.r), this.g = Math.max(0, this.g - t.g), this.b = Math.max(0, this.b - t.b), this + } + multiply(t) { + return this.r *= t.r, this.g *= t.g, this.b *= t.b, this + } + multiplyScalar(t) { + return this.r *= t, this.g *= t, this.b *= t, this + } + lerp(t, e) { + return this.r += (t.r - this.r) * e, this.g += (t.g - this.g) * e, this.b += (t.b - this.b) * e, this + } + lerpColors(t, e, n) { + return this.r = t.r + (e.r - t.r) * n, this.g = t.g + (e.g - t.g) * n, this.b = t.b + (e.b - t.b) * n, this + } + lerpHSL(t, e) { + this.getHSL(kt), t.getHSL(Wt); + const n = g.lerp(kt.h, Wt.h, e), + i = g.lerp(kt.s, Wt.s, e), + r = g.lerp(kt.l, Wt.l, e); + return this.setHSL(n, i, r), this + } + equals(t) { + return t.r === this.r && t.g === this.g && t.b === this.b + } + fromArray(t, e = 0) { + return this.r = t[e], this.g = t[e + 1], this.b = t[e + 2], this + } + toArray(t = [], e = 0) { + return t[e] = this.r, t[e + 1] = this.g, t[e + 2] = this.b, t + } + fromBufferAttribute(t, e) { + return this.r = t.getX(e), this.g = t.getY(e), this.b = t.getZ(e), !0 === t.normalized && (this.r /= 255, this.g /= 255, this.b /= 255), this + } + toJSON() { + return this.getHex() + } + } + Yt.NAMES = Vt, Yt.prototype.r = 1, Yt.prototype.g = 1, Yt.prototype.b = 1; + class Qt { + constructor(t, e, n, i, r, o = 0) { + this.a = t, this.b = e, this.c = n, this.normal = i && i.isVector3 ? i : new T, this.vertexNormals = Array.isArray(i) ? i : [], this.color = r && r.isColor ? r : new Yt, this.vertexColors = Array.isArray(r) ? r : [], this.materialIndex = o + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + this.a = t.a, this.b = t.b, this.c = t.c, this.normal.copy(t.normal), this.color.copy(t.color), this.materialIndex = t.materialIndex; + for (let e = 0, n = t.vertexNormals.length; e < n; e++) this.vertexNormals[e] = t.vertexNormals[e].clone(); + for (let e = 0, n = t.vertexColors.length; e < n; e++) this.vertexColors[e] = t.vertexColors[e].clone(); + return this + } + } + let Zt = 0; + + function Jt() { + Object.defineProperty(this, "id", { + value: Zt++ + }), this.uuid = g.generateUUID(), this.name = "", this.type = "Material", this.fog = !0, this.blending = 1, this.side = 0, this.flatShading = !1, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = 100, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = 7680, this.stencilZFail = 7680, this.stencilZPass = 7680, this.stencilWrite = !1, this.clippingPlanes = null, this.clipIntersection = !1, this.clipShadows = !1, this.shadowSide = null, this.colorWrite = !0, this.precision = null, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = !1, this.alphaTest = 0, this.premultipliedAlpha = !1, this.visible = !0, this.toneMapped = !0, this.userData = {}, this.version = 0 + } + + function Kt(t) { + Jt.call(this), this.type = "MeshBasicMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.setValues(t) + } + Jt.prototype = Object.assign(Object.create(p.prototype), { + constructor: Jt, + isMaterial: !0, + onBeforeCompile: function() {}, + customProgramCacheKey: function() { + return this.onBeforeCompile.toString() + }, + setValues: function(t) { + if (void 0 !== t) + for (const e in t) { + const n = t[e]; + if (void 0 === n) { + console.warn("THREE.Material: '" + e + "' parameter is undefined."); + continue + } + if ("shading" === e) { + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === n; + continue + } + const i = this[e]; + void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[e] = n : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.") + } + }, + toJSON: function(t) { + const e = void 0 === t || "string" == typeof t; + e && (t = { + textures: {}, + images: {} + }); + const n = { + metadata: { + version: 4.5, + type: "Material", + generator: "Material.toJSON" + } + }; + + function i(t) { + const e = []; + for (const n in t) { + const i = t[n]; + delete i.metadata, e.push(i) + } + return e + } + if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(t).uuid), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(t).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(t).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(t).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(t).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(t).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(t).uuid, n.reflectivity = this.reflectivity, n.refractionRatio = this.refractionRatio, void 0 !== this.combine && (n.combine = this.combine), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity)), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(t).uuid), void 0 !== this.size && (n.size = this.size), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), !0 === this.flatShading && (n.flatShading = this.flatShading), 0 !== this.side && (n.side = this.side), this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), !0 === this.transparent && (n.transparent = this.transparent), n.depthFunc = this.depthFunc, n.depthTest = this.depthTest, n.depthWrite = this.depthWrite, n.stencilWrite = this.stencilWrite, n.stencilWriteMask = this.stencilWriteMask, n.stencilFunc = this.stencilFunc, n.stencilRef = this.stencilRef, n.stencilFuncMask = this.stencilFuncMask, n.stencilFail = this.stencilFail, n.stencilZFail = this.stencilZFail, n.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), !0 === this.wireframe && (n.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.morphTargets && (n.morphTargets = !0), !0 === this.morphNormals && (n.morphNormals = !0), !0 === this.skinning && (n.skinning = !0), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData), e) { + const e = i(t.textures), + r = i(t.images); + e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r) + } + return n + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + this.name = t.name, this.fog = t.fog, this.blending = t.blending, this.side = t.side, this.flatShading = t.flatShading, this.vertexColors = t.vertexColors, this.opacity = t.opacity, this.transparent = t.transparent, this.blendSrc = t.blendSrc, this.blendDst = t.blendDst, this.blendEquation = t.blendEquation, this.blendSrcAlpha = t.blendSrcAlpha, this.blendDstAlpha = t.blendDstAlpha, this.blendEquationAlpha = t.blendEquationAlpha, this.depthFunc = t.depthFunc, this.depthTest = t.depthTest, this.depthWrite = t.depthWrite, this.stencilWriteMask = t.stencilWriteMask, this.stencilFunc = t.stencilFunc, this.stencilRef = t.stencilRef, this.stencilFuncMask = t.stencilFuncMask, this.stencilFail = t.stencilFail, this.stencilZFail = t.stencilZFail, this.stencilZPass = t.stencilZPass, this.stencilWrite = t.stencilWrite; + const e = t.clippingPlanes; + let n = null; + if (null !== e) { + const t = e.length; + n = new Array(t); + for (let i = 0; i !== t; ++i) n[i] = e[i].clone() + } + return this.clippingPlanes = n, this.clipIntersection = t.clipIntersection, this.clipShadows = t.clipShadows, this.shadowSide = t.shadowSide, this.colorWrite = t.colorWrite, this.precision = t.precision, this.polygonOffset = t.polygonOffset, this.polygonOffsetFactor = t.polygonOffsetFactor, this.polygonOffsetUnits = t.polygonOffsetUnits, this.dithering = t.dithering, this.alphaTest = t.alphaTest, this.premultipliedAlpha = t.premultipliedAlpha, this.visible = t.visible, this.toneMapped = t.toneMapped, this.userData = JSON.parse(JSON.stringify(t.userData)), this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), Object.defineProperty(Jt.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Kt.prototype = Object.create(Jt.prototype), Kt.prototype.constructor = Kt, Kt.prototype.isMeshBasicMaterial = !0, Kt.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this + }; + const $t = new T, + te = new v; + + function ee(t, e, n) { + if (Array.isArray(t)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + this.name = "", this.array = t, this.itemSize = e, this.count = void 0 !== t ? t.length / e : 0, this.normalized = !0 === n, this.usage = 35044, this.updateRange = { + offset: 0, + count: -1 + }, this.version = 0 + } + + function ne(t, e, n) { + ee.call(this, new Int8Array(t), e, n) + } + + function ie(t, e, n) { + ee.call(this, new Uint8Array(t), e, n) + } + + function re(t, e, n) { + ee.call(this, new Uint8ClampedArray(t), e, n) + } + + function oe(t, e, n) { + ee.call(this, new Int16Array(t), e, n) + } + + function se(t, e, n) { + ee.call(this, new Uint16Array(t), e, n) + } + + function ae(t, e, n) { + ee.call(this, new Int32Array(t), e, n) + } + + function le(t, e, n) { + ee.call(this, new Uint32Array(t), e, n) + } + + function ce(t, e, n) { + ee.call(this, new Uint16Array(t), e, n) + } + + function he(t, e, n) { + ee.call(this, new Float32Array(t), e, n) + } + + function ue(t, e, n) { + ee.call(this, new Float64Array(t), e, n) + } + + function de(t) { + if (0 === t.length) return -1 / 0; + let e = t[0]; + for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]); + return e + } + Object.defineProperty(ee.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Object.assign(ee.prototype, { + isBufferAttribute: !0, + onUploadCallback: function() {}, + setUsage: function(t) { + return this.usage = t, this + }, + copy: function(t) { + return this.name = t.name, this.array = new t.array.constructor(t.array), this.itemSize = t.itemSize, this.count = t.count, this.normalized = t.normalized, this.usage = t.usage, this + }, + copyAt: function(t, e, n) { + t *= this.itemSize, n *= e.itemSize; + for (let i = 0, r = this.itemSize; i < r; i++) this.array[t + i] = e.array[n + i]; + return this + }, + copyArray: function(t) { + return this.array.set(t), this + }, + copyColorsArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), r = new Yt), e[n++] = r.r, e[n++] = r.g, e[n++] = r.b + } + return this + }, + copyVector2sArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), r = new v), e[n++] = r.x, e[n++] = r.y + } + return this + }, + copyVector3sArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), r = new T), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z + } + return this + }, + copyVector4sArray: function(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), r = new M), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z, e[n++] = r.w + } + return this + }, + applyMatrix3: function(t) { + if (2 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) te.fromBufferAttribute(this, e), te.applyMatrix3(t), this.setXY(e, te.x, te.y); + else if (3 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) $t.fromBufferAttribute(this, e), $t.applyMatrix3(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + applyMatrix4: function(t) { + for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyMatrix4(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + applyNormalMatrix: function(t) { + for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyNormalMatrix(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + transformDirection: function(t) { + for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.transformDirection(t), this.setXYZ(e, $t.x, $t.y, $t.z); + return this + }, + set: function(t, e = 0) { + return this.array.set(t, e), this + }, + getX: function(t) { + return this.array[t * this.itemSize] + }, + setX: function(t, e) { + return this.array[t * this.itemSize] = e, this + }, + getY: function(t) { + return this.array[t * this.itemSize + 1] + }, + setY: function(t, e) { + return this.array[t * this.itemSize + 1] = e, this + }, + getZ: function(t) { + return this.array[t * this.itemSize + 2] + }, + setZ: function(t, e) { + return this.array[t * this.itemSize + 2] = e, this + }, + getW: function(t) { + return this.array[t * this.itemSize + 3] + }, + setW: function(t, e) { + return this.array[t * this.itemSize + 3] = e, this + }, + setXY: function(t, e, n) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this + }, + setXYZ: function(t, e, n, i) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this + }, + setXYZW: function(t, e, n, i, r) { + return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this.array[t + 3] = r, this + }, + onUpload: function(t) { + return this.onUploadCallback = t, this + }, + clone: function() { + return new this.constructor(this.array, this.itemSize).copy(this) + }, + toJSON: function() { + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call(this.array), + normalized: this.normalized + } + } + }), ne.prototype = Object.create(ee.prototype), ne.prototype.constructor = ne, ie.prototype = Object.create(ee.prototype), ie.prototype.constructor = ie, re.prototype = Object.create(ee.prototype), re.prototype.constructor = re, oe.prototype = Object.create(ee.prototype), oe.prototype.constructor = oe, se.prototype = Object.create(ee.prototype), se.prototype.constructor = se, ae.prototype = Object.create(ee.prototype), ae.prototype.constructor = ae, le.prototype = Object.create(ee.prototype), le.prototype.constructor = le, ce.prototype = Object.create(ee.prototype), ce.prototype.constructor = ce, ce.prototype.isFloat16BufferAttribute = !0, he.prototype = Object.create(ee.prototype), he.prototype.constructor = he, ue.prototype = Object.create(ee.prototype), ue.prototype.constructor = ue; + const pe = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }; + + function fe(t, e) { + return new pe[t](e) + } + let me = 0; + const ge = new et, + ve = new St, + ye = new T, + Ae = new C, + xe = new C, + _e = new T; + + function be() { + Object.defineProperty(this, "id", { + value: me++ + }), this.uuid = g.generateUUID(), this.name = "", this.type = "BufferGeometry", this.index = null, this.attributes = {}, this.morphAttributes = {}, this.morphTargetsRelative = !1, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = { + start: 0, + count: 1 / 0 + }, this.userData = {} + } + be.prototype = Object.assign(Object.create(p.prototype), { + constructor: be, + isBufferGeometry: !0, + getIndex: function() { + return this.index + }, + setIndex: function(t) { + return Array.isArray(t) ? this.index = new(de(t) > 65535 ? le : se)(t, 1) : this.index = t, this + }, + getAttribute: function(t) { + return this.attributes[t] + }, + setAttribute: function(t, e) { + return this.attributes[t] = e, this + }, + deleteAttribute: function(t) { + return delete this.attributes[t], this + }, + hasAttribute: function(t) { + return void 0 !== this.attributes[t] + }, + addGroup: function(t, e, n = 0) { + this.groups.push({ + start: t, + count: e, + materialIndex: n + }) + }, + clearGroups: function() { + this.groups = [] + }, + setDrawRange: function(t, e) { + this.drawRange.start = t, this.drawRange.count = e + }, + applyMatrix4: function(t) { + const e = this.attributes.position; + void 0 !== e && (e.applyMatrix4(t), e.needsUpdate = !0); + const n = this.attributes.normal; + if (void 0 !== n) { + const e = (new y).getNormalMatrix(t); + n.applyNormalMatrix(e), n.needsUpdate = !0 + } + const i = this.attributes.tangent; + return void 0 !== i && (i.transformDirection(t), i.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this + }, + rotateX: function(t) { + return ge.makeRotationX(t), this.applyMatrix4(ge), this + }, + rotateY: function(t) { + return ge.makeRotationY(t), this.applyMatrix4(ge), this + }, + rotateZ: function(t) { + return ge.makeRotationZ(t), this.applyMatrix4(ge), this + }, + translate: function(t, e, n) { + return ge.makeTranslation(t, e, n), this.applyMatrix4(ge), this + }, + scale: function(t, e, n) { + return ge.makeScale(t, e, n), this.applyMatrix4(ge), this + }, + lookAt: function(t) { + return ve.lookAt(t), ve.updateMatrix(), this.applyMatrix4(ve.matrix), this + }, + center: function() { + return this.computeBoundingBox(), this.boundingBox.getCenter(ye).negate(), this.translate(ye.x, ye.y, ye.z), this + }, + setFromPoints: function(t) { + const e = []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + e.push(i.x, i.y, i.z || 0) + } + return this.setAttribute("position", new he(e, 3)), this + }, + computeBoundingBox: function() { + null === this.boundingBox && (this.boundingBox = new C); + const t = this.attributes.position, + e = this.morphAttributes.position; + if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingBox.set(new T(-1 / 0, -1 / 0, -1 / 0), new T(1 / 0, 1 / 0, 1 / 0)); + if (void 0 !== t) { + if (this.boundingBox.setFromBufferAttribute(t), e) + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + Ae.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(this.boundingBox.min, Ae.min), this.boundingBox.expandByPoint(_e), _e.addVectors(this.boundingBox.max, Ae.max), this.boundingBox.expandByPoint(_e)) : (this.boundingBox.expandByPoint(Ae.min), this.boundingBox.expandByPoint(Ae.max)) + } + } else this.boundingBox.makeEmpty(); + (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this) + }, + computeBoundingSphere: function() { + null === this.boundingSphere && (this.boundingSphere = new X); + const t = this.attributes.position, + e = this.morphAttributes.position; + if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingSphere.set(new T, 1 / 0); + if (t) { + const n = this.boundingSphere.center; + if (Ae.setFromBufferAttribute(t), e) + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + xe.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(Ae.min, xe.min), Ae.expandByPoint(_e), _e.addVectors(Ae.max, xe.max), Ae.expandByPoint(_e)) : (Ae.expandByPoint(xe.min), Ae.expandByPoint(xe.max)) + } + Ae.getCenter(n); + let i = 0; + for (let e = 0, r = t.count; e < r; e++) _e.fromBufferAttribute(t, e), i = Math.max(i, n.distanceToSquared(_e)); + if (e) + for (let r = 0, o = e.length; r < o; r++) { + const o = e[r], + s = this.morphTargetsRelative; + for (let e = 0, r = o.count; e < r; e++) _e.fromBufferAttribute(o, e), s && (ye.fromBufferAttribute(t, e), _e.add(ye)), i = Math.max(i, n.distanceToSquared(_e)) + } + this.boundingSphere.radius = Math.sqrt(i), isNaN(this.boundingSphere.radius) && console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this) + } + }, + computeFaceNormals: function() {}, + computeTangents: function() { + const t = this.index, + e = this.attributes; + if (null === t || void 0 === e.position || void 0 === e.normal || void 0 === e.uv) return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); + const n = t.array, + i = e.position.array, + r = e.normal.array, + o = e.uv.array, + s = i.length / 3; + void 0 === e.tangent && this.setAttribute("tangent", new ee(new Float32Array(4 * s), 4)); + const a = e.tangent.array, + l = [], + c = []; + for (let t = 0; t < s; t++) l[t] = new T, c[t] = new T; + const h = new T, + u = new T, + d = new T, + p = new v, + f = new v, + m = new v, + g = new T, + y = new T; + + function A(t, e, n) { + h.fromArray(i, 3 * t), u.fromArray(i, 3 * e), d.fromArray(i, 3 * n), p.fromArray(o, 2 * t), f.fromArray(o, 2 * e), m.fromArray(o, 2 * n), u.sub(h), d.sub(h), f.sub(p), m.sub(p); + const r = 1 / (f.x * m.y - m.x * f.y); + isFinite(r) && (g.copy(u).multiplyScalar(m.y).addScaledVector(d, -f.y).multiplyScalar(r), y.copy(d).multiplyScalar(f.x).addScaledVector(u, -m.x).multiplyScalar(r), l[t].add(g), l[e].add(g), l[n].add(g), c[t].add(y), c[e].add(y), c[n].add(y)) + } + let x = this.groups; + 0 === x.length && (x = [{ + start: 0, + count: n.length + }]); + for (let t = 0, e = x.length; t < e; ++t) { + const e = x[t], + i = e.start; + for (let t = i, r = i + e.count; t < r; t += 3) A(n[t + 0], n[t + 1], n[t + 2]) + } + const _ = new T, + b = new T, + w = new T, + M = new T; + + function E(t) { + w.fromArray(r, 3 * t), M.copy(w); + const e = l[t]; + _.copy(e), _.sub(w.multiplyScalar(w.dot(e))).normalize(), b.crossVectors(M, e); + const n = b.dot(c[t]) < 0 ? -1 : 1; + a[4 * t] = _.x, a[4 * t + 1] = _.y, a[4 * t + 2] = _.z, a[4 * t + 3] = n + } + for (let t = 0, e = x.length; t < e; ++t) { + const e = x[t], + i = e.start; + for (let t = i, r = i + e.count; t < r; t += 3) E(n[t + 0]), E(n[t + 1]), E(n[t + 2]) + } + }, + computeVertexNormals: function() { + const t = this.index, + e = this.getAttribute("position"); + if (void 0 !== e) { + let n = this.getAttribute("normal"); + if (void 0 === n) n = new ee(new Float32Array(3 * e.count), 3), this.setAttribute("normal", n); + else + for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0); + const i = new T, + r = new T, + o = new T, + s = new T, + a = new T, + l = new T, + c = new T, + h = new T; + if (t) + for (let u = 0, d = t.count; u < d; u += 3) { + const d = t.getX(u + 0), + p = t.getX(u + 1), + f = t.getX(u + 2); + i.fromBufferAttribute(e, d), r.fromBufferAttribute(e, p), o.fromBufferAttribute(e, f), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), s.fromBufferAttribute(n, d), a.fromBufferAttribute(n, p), l.fromBufferAttribute(n, f), s.add(c), a.add(c), l.add(c), n.setXYZ(d, s.x, s.y, s.z), n.setXYZ(p, a.x, a.y, a.z), n.setXYZ(f, l.x, l.y, l.z) + } else + for (let t = 0, s = e.count; t < s; t += 3) i.fromBufferAttribute(e, t + 0), r.fromBufferAttribute(e, t + 1), o.fromBufferAttribute(e, t + 2), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), n.setXYZ(t + 0, c.x, c.y, c.z), n.setXYZ(t + 1, c.x, c.y, c.z), n.setXYZ(t + 2, c.x, c.y, c.z); + this.normalizeNormals(), n.needsUpdate = !0 + } + }, + merge: function(t, e) { + if (!t || !t.isBufferGeometry) return void console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", t); + void 0 === e && (e = 0, console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.")); + const n = this.attributes; + for (const i in n) { + if (void 0 === t.attributes[i]) continue; + const r = n[i].array, + o = t.attributes[i], + s = o.array, + a = o.itemSize * e, + l = Math.min(s.length, r.length - a); + for (let t = 0, e = a; t < l; t++, e++) r[e] = s[t] + } + return this + }, + normalizeNormals: function() { + const t = this.attributes.normal; + for (let e = 0, n = t.count; e < n; e++) _e.fromBufferAttribute(t, e), _e.normalize(), t.setXYZ(e, _e.x, _e.y, _e.z) + }, + toNonIndexed: function() { + function t(t, e) { + const n = t.array, + i = t.itemSize, + r = t.normalized, + o = new n.constructor(e.length * i); + let s = 0, + a = 0; + for (let t = 0, r = e.length; t < r; t++) { + s = e[t] * i; + for (let t = 0; t < i; t++) o[a++] = n[s++] + } + return new ee(o, i, r) + } + if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this; + const e = new be, + n = this.index.array, + i = this.attributes; + for (const r in i) { + const o = t(i[r], n); + e.setAttribute(r, o) + } + const r = this.morphAttributes; + for (const i in r) { + const o = [], + s = r[i]; + for (let e = 0, i = s.length; e < i; e++) { + const i = t(s[e], n); + o.push(i) + } + e.morphAttributes[i] = o + } + e.morphTargetsRelative = this.morphTargetsRelative; + const o = this.groups; + for (let t = 0, n = o.length; t < n; t++) { + const n = o[t]; + e.addGroup(n.start, n.count, n.materialIndex) + } + return e + }, + toJSON: function() { + const t = { + metadata: { + version: 4.5, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + if (t.uuid = this.uuid, t.type = this.type, "" !== this.name && (t.name = this.name), Object.keys(this.userData).length > 0 && (t.userData = this.userData), void 0 !== this.parameters) { + const e = this.parameters; + for (const n in e) void 0 !== e[n] && (t[n] = e[n]); + return t + } + t.data = { + attributes: {} + }; + const e = this.index; + null !== e && (t.data.index = { + type: e.array.constructor.name, + array: Array.prototype.slice.call(e.array) + }); + const n = this.attributes; + for (const e in n) { + const i = n[e], + r = i.toJSON(t.data); + "" !== i.name && (r.name = i.name), t.data.attributes[e] = r + } + const i = {}; + let r = !1; + for (const e in this.morphAttributes) { + const n = this.morphAttributes[e], + o = []; + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e], + r = i.toJSON(t.data); + "" !== i.name && (r.name = i.name), o.push(r) + } + o.length > 0 && (i[e] = o, r = !0) + } + r && (t.data.morphAttributes = i, t.data.morphTargetsRelative = this.morphTargetsRelative); + const o = this.groups; + o.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(o))); + const s = this.boundingSphere; + return null !== s && (t.data.boundingSphere = { + center: s.center.toArray(), + radius: s.radius + }), t + }, + clone: function() { + return (new be).copy(this) + }, + copy: function(t) { + this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null; + const e = {}; + this.name = t.name; + const n = t.index; + null !== n && this.setIndex(n.clone(e)); + const i = t.attributes; + for (const t in i) { + const n = i[t]; + this.setAttribute(t, n.clone(e)) + } + const r = t.morphAttributes; + for (const t in r) { + const n = [], + i = r[t]; + for (let t = 0, r = i.length; t < r; t++) n.push(i[t].clone(e)); + this.morphAttributes[t] = n + } + this.morphTargetsRelative = t.morphTargetsRelative; + const o = t.groups; + for (let t = 0, e = o.length; t < e; t++) { + const e = o[t]; + this.addGroup(e.start, e.count, e.materialIndex) + } + const s = t.boundingBox; + null !== s && (this.boundingBox = s.clone()); + const a = t.boundingSphere; + return null !== a && (this.boundingSphere = a.clone()), this.drawRange.start = t.drawRange.start, this.drawRange.count = t.drawRange.count, this.userData = t.userData, this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + const we = new et, + Me = new tt, + Ee = new X, + Se = new T, + Te = new T, + Le = new T, + Re = new T, + Ce = new T, + Pe = new T, + De = new T, + Ie = new T, + Oe = new T, + Ne = new v, + Be = new v, + Fe = new v, + ze = new T, + Ue = new T; + + function He(t = new be, e = new Kt) { + St.call(this), this.type = "Mesh", this.geometry = t, this.material = e, this.updateMorphTargets() + } + + function Ge(t, e, n, i, r, o, s, a, l, c, h, u) { + Se.fromBufferAttribute(r, c), Te.fromBufferAttribute(r, h), Le.fromBufferAttribute(r, u); + const d = t.morphTargetInfluences; + if (e.morphTargets && o && d) { + De.set(0, 0, 0), Ie.set(0, 0, 0), Oe.set(0, 0, 0); + for (let t = 0, e = o.length; t < e; t++) { + const e = d[t], + n = o[t]; + 0 !== e && (Re.fromBufferAttribute(n, c), Ce.fromBufferAttribute(n, h), Pe.fromBufferAttribute(n, u), s ? (De.addScaledVector(Re, e), Ie.addScaledVector(Ce, e), Oe.addScaledVector(Pe, e)) : (De.addScaledVector(Re.sub(Se), e), Ie.addScaledVector(Ce.sub(Te), e), Oe.addScaledVector(Pe.sub(Le), e))) + } + Se.add(De), Te.add(Ie), Le.add(Oe) + } + t.isSkinnedMesh && (t.boneTransform(c, Se), t.boneTransform(h, Te), t.boneTransform(u, Le)); + const p = function(t, e, n, i, r, o, s, a) { + let l; + if (l = 1 === e.side ? i.intersectTriangle(s, o, r, !0, a) : i.intersectTriangle(r, o, s, 2 !== e.side, a), null === l) return null; + Ue.copy(a), Ue.applyMatrix4(t.matrixWorld); + const c = n.ray.origin.distanceTo(Ue); + return c < n.near || c > n.far ? null : { + distance: c, + point: Ue.clone(), + object: t + } + }(t, e, n, i, Se, Te, Le, ze); + if (p) { + a && (Ne.fromBufferAttribute(a, c), Be.fromBufferAttribute(a, h), Fe.fromBufferAttribute(a, u), p.uv = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)), l && (Ne.fromBufferAttribute(l, c), Be.fromBufferAttribute(l, h), Fe.fromBufferAttribute(l, u), p.uv2 = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)); + const t = new Qt(c, h, u); + Gt.getNormal(Se, Te, Le, t.normal), p.face = t + } + return p + } + He.prototype = Object.assign(Object.create(St.prototype), { + constructor: He, + isMesh: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), void 0 !== t.morphTargetInfluences && (this.morphTargetInfluences = t.morphTargetInfluences.slice()), void 0 !== t.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)), this.material = t.material, this.geometry = t.geometry, this + }, + updateMorphTargets: function() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && e.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }, + raycast: function(t, e) { + const n = this.geometry, + i = this.material, + r = this.matrixWorld; + if (void 0 === i) return; + if (null === n.boundingSphere && n.computeBoundingSphere(), Ee.copy(n.boundingSphere), Ee.applyMatrix4(r), !1 === t.ray.intersectsSphere(Ee)) return; + if (we.copy(r).invert(), Me.copy(t.ray).applyMatrix4(we), null !== n.boundingBox && !1 === Me.intersectsBox(n.boundingBox)) return; + let o; + if (n.isBufferGeometry) { + const r = n.index, + s = n.attributes.position, + a = n.morphAttributes.position, + l = n.morphTargetsRelative, + c = n.attributes.uv, + h = n.attributes.uv2, + u = n.groups, + d = n.drawRange; + if (null !== r) + if (Array.isArray(i)) + for (let n = 0, p = u.length; n < p; n++) { + const p = u[n], + f = i[p.materialIndex]; + for (let n = Math.max(p.start, d.start), i = Math.min(p.start + p.count, d.start + d.count); n < i; n += 3) { + const i = r.getX(n), + u = r.getX(n + 1), + d = r.getX(n + 2); + o = Ge(this, f, t, Me, s, a, l, c, h, i, u, d), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = p.materialIndex, e.push(o)) + } + } else { + for (let n = Math.max(0, d.start), u = Math.min(r.count, d.start + d.count); n < u; n += 3) { + const u = r.getX(n), + d = r.getX(n + 1), + p = r.getX(n + 2); + o = Ge(this, i, t, Me, s, a, l, c, h, u, d, p), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) + } + } else if (void 0 !== s) + if (Array.isArray(i)) + for (let n = 0, r = u.length; n < r; n++) { + const r = u[n], + p = i[r.materialIndex]; + for (let n = Math.max(r.start, d.start), i = Math.min(r.start + r.count, d.start + d.count); n < i; n += 3) { + o = Ge(this, p, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = r.materialIndex, e.push(o)) + } + } else { + for (let n = Math.max(0, d.start), r = Math.min(s.count, d.start + d.count); n < r; n += 3) { + o = Ge(this, i, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) + } + } + } else n.isGeometry && console.error("THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }); + class Ve extends be { + constructor(t = 1, e = 1, n = 1, i = 1, r = 1, o = 1) { + super(), this.type = "BoxGeometry", this.parameters = { + width: t, + height: e, + depth: n, + widthSegments: i, + heightSegments: r, + depthSegments: o + }; + const s = this; + i = Math.floor(i), r = Math.floor(r), o = Math.floor(o); + const a = [], + l = [], + c = [], + h = []; + let u = 0, + d = 0; + + function p(t, e, n, i, r, o, p, f, m, g, v) { + const y = o / m, + A = p / g, + x = o / 2, + _ = p / 2, + b = f / 2, + w = m + 1, + M = g + 1; + let E = 0, + S = 0; + const L = new T; + for (let o = 0; o < M; o++) { + const s = o * A - _; + for (let a = 0; a < w; a++) { + const u = a * y - x; + L[t] = u * i, L[e] = s * r, L[n] = b, l.push(L.x, L.y, L.z), L[t] = 0, L[e] = 0, L[n] = f > 0 ? 1 : -1, c.push(L.x, L.y, L.z), h.push(a / m), h.push(1 - o / g), E += 1 + } + } + for (let t = 0; t < g; t++) + for (let e = 0; e < m; e++) { + const n = u + e + w * t, + i = u + e + w * (t + 1), + r = u + (e + 1) + w * (t + 1), + o = u + (e + 1) + w * t; + a.push(n, i, o), a.push(i, r, o), S += 6 + } + s.addGroup(d, S, v), d += S, u += E + } + p("z", "y", "x", -1, -1, n, e, t, o, r, 0), p("z", "y", "x", 1, -1, n, e, -t, o, r, 1), p("x", "z", "y", 1, 1, t, n, e, i, o, 2), p("x", "z", "y", 1, -1, t, n, -e, i, o, 3), p("x", "y", "z", 1, -1, t, e, n, i, r, 4), p("x", "y", "z", -1, -1, t, e, -n, i, r, 5), this.setIndex(a), this.setAttribute("position", new he(l, 3)), this.setAttribute("normal", new he(c, 3)), this.setAttribute("uv", new he(h, 2)) + } + } + + function ke(t) { + const e = {}; + for (const n in t) { + e[n] = {}; + for (const i in t[n]) { + const r = t[n][i]; + r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture) ? e[n][i] = r.clone() : Array.isArray(r) ? e[n][i] = r.slice() : e[n][i] = r + } + } + return e + } + + function We(t) { + const e = {}; + for (let n = 0; n < t.length; n++) { + const i = ke(t[n]); + for (const t in i) e[t] = i[t] + } + return e + } + const je = { + clone: ke, + merge: We + }; + + function Xe(t) { + Jt.call(this), this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", this.linewidth = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.lights = !1, this.clipping = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.extensions = { + derivatives: !1, + fragDepth: !1, + drawBuffers: !1, + shaderTextureLOD: !1 + }, this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, this.index0AttributeName = void 0, this.uniformsNeedUpdate = !1, this.glslVersion = null, void 0 !== t && (void 0 !== t.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(t)) + } + + function qe() { + St.call(this), this.type = "Camera", this.matrixWorldInverse = new et, this.projectionMatrix = new et, this.projectionMatrixInverse = new et + } + + function Ye(t = 50, e = 1, n = .1, i = 2e3) { + qe.call(this), this.type = "PerspectiveCamera", this.fov = t, this.zoom = 1, this.near = n, this.far = i, this.focus = 10, this.aspect = e, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() + } + Xe.prototype = Object.create(Jt.prototype), Xe.prototype.constructor = Xe, Xe.prototype.isShaderMaterial = !0, Xe.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.fragmentShader = t.fragmentShader, this.vertexShader = t.vertexShader, this.uniforms = ke(t.uniforms), this.defines = Object.assign({}, t.defines), this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.lights = t.lights, this.clipping = t.clipping, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.extensions = Object.assign({}, t.extensions), this.glslVersion = t.glslVersion, this + }, Xe.prototype.toJSON = function(t) { + const e = Jt.prototype.toJSON.call(this, t); + e.glslVersion = this.glslVersion, e.uniforms = {}; + for (const n in this.uniforms) { + const i = this.uniforms[n].value; + i && i.isTexture ? e.uniforms[n] = { + type: "t", + value: i.toJSON(t).uuid + } : i && i.isColor ? e.uniforms[n] = { + type: "c", + value: i.getHex() + } : i && i.isVector2 ? e.uniforms[n] = { + type: "v2", + value: i.toArray() + } : i && i.isVector3 ? e.uniforms[n] = { + type: "v3", + value: i.toArray() + } : i && i.isVector4 ? e.uniforms[n] = { + type: "v4", + value: i.toArray() + } : i && i.isMatrix3 ? e.uniforms[n] = { + type: "m3", + value: i.toArray() + } : i && i.isMatrix4 ? e.uniforms[n] = { + type: "m4", + value: i.toArray() + } : e.uniforms[n] = { + value: i + } + } + Object.keys(this.defines).length > 0 && (e.defines = this.defines), e.vertexShader = this.vertexShader, e.fragmentShader = this.fragmentShader; + const n = {}; + for (const t in this.extensions) !0 === this.extensions[t] && (n[t] = !0); + return Object.keys(n).length > 0 && (e.extensions = n), e + }, qe.prototype = Object.assign(Object.create(St.prototype), { + constructor: qe, + isCamera: !0, + copy: function(t, e) { + return St.prototype.copy.call(this, t, e), this.matrixWorldInverse.copy(t.matrixWorldInverse), this.projectionMatrix.copy(t.projectionMatrix), this.projectionMatrixInverse.copy(t.projectionMatrixInverse), this + }, + getWorldDirection: function(t) { + void 0 === t && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); + const e = this.matrixWorld.elements; + return t.set(-e[8], -e[9], -e[10]).normalize() + }, + updateMatrixWorld: function(t) { + St.prototype.updateMatrixWorld.call(this, t), this.matrixWorldInverse.copy(this.matrixWorld).invert() + }, + updateWorldMatrix: function(t, e) { + St.prototype.updateWorldMatrix.call(this, t, e), this.matrixWorldInverse.copy(this.matrixWorld).invert() + }, + clone: function() { + return (new this.constructor).copy(this) + } + }), Ye.prototype = Object.assign(Object.create(qe.prototype), { + constructor: Ye, + isPerspectiveCamera: !0, + copy: function(t, e) { + return qe.prototype.copy.call(this, t, e), this.fov = t.fov, this.zoom = t.zoom, this.near = t.near, this.far = t.far, this.focus = t.focus, this.aspect = t.aspect, this.view = null === t.view ? null : Object.assign({}, t.view), this.filmGauge = t.filmGauge, this.filmOffset = t.filmOffset, this + }, + setFocalLength: function(t) { + const e = .5 * this.getFilmHeight() / t; + this.fov = 2 * g.RAD2DEG * Math.atan(e), this.updateProjectionMatrix() + }, + getFocalLength: function() { + const t = Math.tan(.5 * g.DEG2RAD * this.fov); + return .5 * this.getFilmHeight() / t + }, + getEffectiveFOV: function() { + return 2 * g.RAD2DEG * Math.atan(Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom) + }, + getFilmWidth: function() { + return this.filmGauge * Math.min(this.aspect, 1) + }, + getFilmHeight: function() { + return this.filmGauge / Math.max(this.aspect, 1) + }, + setViewOffset: function(t, e, n, i, r, o) { + this.aspect = t / e, null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + const t = this.near; + let e = t * Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom, + n = 2 * e, + i = this.aspect * n, + r = -.5 * i; + const o = this.view; + if (null !== this.view && this.view.enabled) { + const t = o.fullWidth, + s = o.fullHeight; + r += o.offsetX * i / t, e -= o.offsetY * n / s, i *= o.width / t, n *= o.height / s + } + const s = this.filmOffset; + 0 !== s && (r += t * s / this.getFilmWidth()), this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + return e.object.fov = this.fov, e.object.zoom = this.zoom, e.object.near = this.near, e.object.far = this.far, e.object.focus = this.focus, e.object.aspect = this.aspect, null !== this.view && (e.object.view = Object.assign({}, this.view)), e.object.filmGauge = this.filmGauge, e.object.filmOffset = this.filmOffset, e + } + }); + + function Qe(t, e, n) { + if (St.call(this), this.type = "CubeCamera", !0 !== n.isWebGLCubeRenderTarget) return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter."); + this.renderTarget = n; + const i = new Ye(90, 1, t, e); + i.layers = this.layers, i.up.set(0, -1, 0), i.lookAt(new T(1, 0, 0)), this.add(i); + const r = new Ye(90, 1, t, e); + r.layers = this.layers, r.up.set(0, -1, 0), r.lookAt(new T(-1, 0, 0)), this.add(r); + const o = new Ye(90, 1, t, e); + o.layers = this.layers, o.up.set(0, 0, 1), o.lookAt(new T(0, 1, 0)), this.add(o); + const s = new Ye(90, 1, t, e); + s.layers = this.layers, s.up.set(0, 0, -1), s.lookAt(new T(0, -1, 0)), this.add(s); + const a = new Ye(90, 1, t, e); + a.layers = this.layers, a.up.set(0, -1, 0), a.lookAt(new T(0, 0, 1)), this.add(a); + const l = new Ye(90, 1, t, e); + l.layers = this.layers, l.up.set(0, -1, 0), l.lookAt(new T(0, 0, -1)), this.add(l), this.update = function(t, e) { + null === this.parent && this.updateMatrixWorld(); + const c = t.xr.enabled, + h = t.getRenderTarget(); + t.xr.enabled = !1; + const u = n.texture.generateMipmaps; + n.texture.generateMipmaps = !1, t.setRenderTarget(n, 0), t.render(e, i), t.setRenderTarget(n, 1), t.render(e, r), t.setRenderTarget(n, 2), t.render(e, o), t.setRenderTarget(n, 3), t.render(e, s), t.setRenderTarget(n, 4), t.render(e, a), n.texture.generateMipmaps = u, t.setRenderTarget(n, 5), t.render(e, l), t.setRenderTarget(h), t.xr.enabled = c + } + } + + function Ze(t, e, n, i, r, o, s, a, l, c) { + t = void 0 !== t ? t : [], e = void 0 !== e ? e : 301, s = void 0 !== s ? s : 1022, b.call(this, t, e, n, i, r, o, s, a, l, c), this.flipY = !1, this._needsFlipEnvMap = !0 + } + Qe.prototype = Object.create(St.prototype), Qe.prototype.constructor = Qe, Ze.prototype = Object.create(b.prototype), Ze.prototype.constructor = Ze, Ze.prototype.isCubeTexture = !0, Object.defineProperty(Ze.prototype, "images", { + get: function() { + return this.image + }, + set: function(t) { + this.image = t + } + }); + class Je extends E { + constructor(t, e, n) { + Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), e = n), super(t, t, e), Object.defineProperty(this, "isWebGLCubeRenderTarget", { + value: !0 + }), e = e || {}, this.texture = new Ze(void 0, e.mapping, e.wrapS, e.wrapT, e.magFilter, e.minFilter, e.format, e.type, e.anisotropy, e.encoding), this.texture._needsFlipEnvMap = !1 + } + fromEquirectangularTexture(t, e) { + this.texture.type = e.type, this.texture.format = 1023, this.texture.encoding = e.encoding, this.texture.generateMipmaps = e.generateMipmaps, this.texture.minFilter = e.minFilter, this.texture.magFilter = e.magFilter; + const n = { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t", + fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t" + }, + i = new Ve(5, 5, 5), + r = new Xe({ + name: "CubemapFromEquirect", + uniforms: ke(n.uniforms), + vertexShader: n.vertexShader, + fragmentShader: n.fragmentShader, + side: 1, + blending: 0 + }); + r.uniforms.tEquirect.value = e; + const o = new He(i, r), + s = e.minFilter; + 1008 === e.minFilter && (e.minFilter = 1006); + return new Qe(1, 10, this).update(t, o), e.minFilter = s, o.geometry.dispose(), o.material.dispose(), this + } + clear(t, e, n, i) { + const r = t.getRenderTarget(); + for (let r = 0; r < 6; r++) t.setRenderTarget(this, r), t.clear(e, n, i); + t.setRenderTarget(r) + } + } + + function Ke(t, e, n, i, r, o, s, a, l, c, h, u) { + b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { + data: t || null, + width: e || 1, + height: n || 1 + }, this.magFilter = void 0 !== l ? l : 1003, this.minFilter = void 0 !== c ? c : 1003, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.needsUpdate = !0 + } + Ke.prototype = Object.create(b.prototype), Ke.prototype.constructor = Ke, Ke.prototype.isDataTexture = !0; + const $e = new X, + tn = new T; + class en { + constructor(t, e, n, i, r, o) { + this.planes = [void 0 !== t ? t : new Ct, void 0 !== e ? e : new Ct, void 0 !== n ? n : new Ct, void 0 !== i ? i : new Ct, void 0 !== r ? r : new Ct, void 0 !== o ? o : new Ct] + } + set(t, e, n, i, r, o) { + const s = this.planes; + return s[0].copy(t), s[1].copy(e), s[2].copy(n), s[3].copy(i), s[4].copy(r), s[5].copy(o), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]); + return this + } + setFromProjectionMatrix(t) { + const e = this.planes, + n = t.elements, + i = n[0], + r = n[1], + o = n[2], + s = n[3], + a = n[4], + l = n[5], + c = n[6], + h = n[7], + u = n[8], + d = n[9], + p = n[10], + f = n[11], + m = n[12], + g = n[13], + v = n[14], + y = n[15]; + return e[0].setComponents(s - i, h - a, f - u, y - m).normalize(), e[1].setComponents(s + i, h + a, f + u, y + m).normalize(), e[2].setComponents(s + r, h + l, f + d, y + g).normalize(), e[3].setComponents(s - r, h - l, f - d, y - g).normalize(), e[4].setComponents(s - o, h - c, f - p, y - v).normalize(), e[5].setComponents(s + o, h + c, f + p, y + v).normalize(), this + } + intersectsObject(t) { + const e = t.geometry; + return null === e.boundingSphere && e.computeBoundingSphere(), $e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), this.intersectsSphere($e) + } + intersectsSprite(t) { + return $e.center.set(0, 0, 0), $e.radius = .7071067811865476, $e.applyMatrix4(t.matrixWorld), this.intersectsSphere($e) + } + intersectsSphere(t) { + const e = this.planes, + n = t.center, + i = -t.radius; + for (let t = 0; t < 6; t++) { + if (e[t].distanceToPoint(n) < i) return !1 + } + return !0 + } + intersectsBox(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) { + const i = e[n]; + if (tn.x = i.normal.x > 0 ? t.max.x : t.min.x, tn.y = i.normal.y > 0 ? t.max.y : t.min.y, tn.z = i.normal.z > 0 ? t.max.z : t.min.z, i.distanceToPoint(tn) < 0) return !1 + } + return !0 + } + containsPoint(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) + if (e[n].distanceToPoint(t) < 0) return !1; + return !0 + } + } + + function nn() { + let t = null, + e = !1, + n = null, + i = null; + + function r(e, o) { + n(e, o), i = t.requestAnimationFrame(r) + } + return { + start: function() { + !0 !== e && null !== n && (i = t.requestAnimationFrame(r), e = !0) + }, + stop: function() { + t.cancelAnimationFrame(i), e = !1 + }, + setAnimationLoop: function(t) { + n = t + }, + setContext: function(e) { + t = e + } + } + } + + function rn(t, e) { + const n = e.isWebGL2, + i = new WeakMap; + return { + get: function(t) { + return t.isInterleavedBufferAttribute && (t = t.data), i.get(t) + }, + remove: function(e) { + e.isInterleavedBufferAttribute && (e = e.data); + const n = i.get(e); + n && (t.deleteBuffer(n.buffer), i.delete(e)) + }, + update: function(e, r) { + if (e.isGLBufferAttribute) { + const t = i.get(e); + return void((!t || t.version < e.version) && i.set(e, { + buffer: e.buffer, + type: e.type, + bytesPerElement: e.elementSize, + version: e.version + })) + } + e.isInterleavedBufferAttribute && (e = e.data); + const o = i.get(e); + void 0 === o ? i.set(e, function(e, i) { + const r = e.array, + o = e.usage, + s = t.createBuffer(); + t.bindBuffer(i, s), t.bufferData(i, r, o), e.onUploadCallback(); + let a = 5126; + return r instanceof Float32Array ? a = 5126 : r instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : r instanceof Uint16Array ? e.isFloat16BufferAttribute ? n ? a = 5131 : console.warn("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.") : a = 5123 : r instanceof Int16Array ? a = 5122 : r instanceof Uint32Array ? a = 5125 : r instanceof Int32Array ? a = 5124 : r instanceof Int8Array ? a = 5120 : r instanceof Uint8Array && (a = 5121), { + buffer: s, + type: a, + bytesPerElement: r.BYTES_PER_ELEMENT, + version: e.version + } + }(e, r)) : o.version < e.version && (! function(e, i, r) { + const o = i.array, + s = i.updateRange; + t.bindBuffer(r, e), -1 === s.count ? t.bufferSubData(r, 0, o) : (n ? t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o, s.offset, s.count) : t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o.subarray(s.offset, s.offset + s.count)), s.count = -1) + }(o.buffer, e, r), o.version = e.version) + } + } + } + class on extends be { + constructor(t = 1, e = 1, n = 1, i = 1) { + super(), this.type = "PlaneGeometry", this.parameters = { + width: t, + height: e, + widthSegments: n, + heightSegments: i + }; + const r = t / 2, + o = e / 2, + s = Math.floor(n), + a = Math.floor(i), + l = s + 1, + c = a + 1, + h = t / s, + u = e / a, + d = [], + p = [], + f = [], + m = []; + for (let t = 0; t < c; t++) { + const e = t * u - o; + for (let n = 0; n < l; n++) { + const i = n * h - r; + p.push(i, -e, 0), f.push(0, 0, 1), m.push(n / s), m.push(1 - t / a) + } + } + for (let t = 0; t < a; t++) + for (let e = 0; e < s; e++) { + const n = e + l * t, + i = e + l * (t + 1), + r = e + 1 + l * (t + 1), + o = e + 1 + l * t; + d.push(n, i, o), d.push(i, r, o) + } + this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) + } + } + const sn = { + alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", + alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", + aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", + aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", + begin_vertex: "vec3 transformed = vec3( position );", + beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", + bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", + bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", + clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", + clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", + clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", + clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", + color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif", + color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_pars_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif", + color_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif", + common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", + cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif", + defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", + displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", + displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif", + emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", + emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", + encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", + encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", + envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", + envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", + envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", + envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", + envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", + envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", + fog_vertex: "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif", + fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif", + fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", + fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", + gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}", + lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", + lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", + lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", + lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", + lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;", + lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", + lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_phong_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", + lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", + lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", + lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", + lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", + lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif", + logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", + logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif", + logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", + map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", + map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", + map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", + map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", + metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", + morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif", + morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", + morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", + normal_fragment_begin: "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", + normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", + normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", + clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif", + clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif", + clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", + packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", + premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", + project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", + dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", + dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", + roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", + roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", + shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", + shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", + shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", + shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", + skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", + skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", + skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", + skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", + specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", + specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", + tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", + tonemapping_pars_fragment: "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", + transmissionmap_fragment: "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif", + transmissionmap_pars_fragment: "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif", + uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif", + uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif", + uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", + uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif", + uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", + uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif", + worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", + background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", + cube_frag: "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", + cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", + depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", + distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", + distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", + equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", + meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", + normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", + points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", + shadow_vert: "#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", + sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}" + }, + an = { + common: { + diffuse: { + value: new Yt(15658734) + }, + opacity: { + value: 1 + }, + map: { + value: null + }, + uvTransform: { + value: new y + }, + uv2Transform: { + value: new y + }, + alphaMap: { + value: null + } + }, + specularmap: { + specularMap: { + value: null + } + }, + envmap: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + }, + reflectivity: { + value: 1 + }, + refractionRatio: { + value: .98 + }, + maxMipLevel: { + value: 0 + } + }, + aomap: { + aoMap: { + value: null + }, + aoMapIntensity: { + value: 1 + } + }, + lightmap: { + lightMap: { + value: null + }, + lightMapIntensity: { + value: 1 + } + }, + emissivemap: { + emissiveMap: { + value: null + } + }, + bumpmap: { + bumpMap: { + value: null + }, + bumpScale: { + value: 1 + } + }, + normalmap: { + normalMap: { + value: null + }, + normalScale: { + value: new v(1, 1) + } + }, + displacementmap: { + displacementMap: { + value: null + }, + displacementScale: { + value: 1 + }, + displacementBias: { + value: 0 + } + }, + roughnessmap: { + roughnessMap: { + value: null + } + }, + metalnessmap: { + metalnessMap: { + value: null + } + }, + gradientmap: { + gradientMap: { + value: null + } + }, + fog: { + fogDensity: { + value: 25e-5 + }, + fogNear: { + value: 1 + }, + fogFar: { + value: 2e3 + }, + fogColor: { + value: new Yt(16777215) + } + }, + lights: { + ambientLightColor: { + value: [] + }, + lightProbe: { + value: [] + }, + directionalLights: { + value: [], + properties: { + direction: {}, + color: {} + } + }, + directionalLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + directionalShadowMap: { + value: [] + }, + directionalShadowMatrix: { + value: [] + }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } + }, + spotLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + spotShadowMap: { + value: [] + }, + spotShadowMatrix: { + value: [] + }, + pointLights: { + value: [], + properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } + }, + pointLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } + }, + pointShadowMap: { + value: [] + }, + pointShadowMatrix: { + value: [] + }, + hemisphereLights: { + value: [], + properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } + }, + rectAreaLights: { + value: [], + properties: { + color: {}, + position: {}, + width: {}, + height: {} + } + }, + ltc_1: { + value: null + }, + ltc_2: { + value: null + } + }, + points: { + diffuse: { + value: new Yt(15658734) + }, + opacity: { + value: 1 + }, + size: { + value: 1 + }, + scale: { + value: 1 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new y + } + }, + sprite: { + diffuse: { + value: new Yt(15658734) + }, + opacity: { + value: 1 + }, + center: { + value: new v(.5, .5) + }, + rotation: { + value: 0 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new y + } + } + }, + ln = { + basic: { + uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.fog]), + vertexShader: sn.meshbasic_vert, + fragmentShader: sn.meshbasic_frag + }, + lambert: { + uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + } + }]), + vertexShader: sn.meshlambert_vert, + fragmentShader: sn.meshlambert_frag + }, + phong: { + uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + }, + specular: { + value: new Yt(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: sn.meshphong_vert, + fragmentShader: sn.meshphong_frag + }, + standard: { + uniforms: We([an.common, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.roughnessmap, an.metalnessmap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + }, + roughness: { + value: 1 + }, + metalness: { + value: 0 + }, + envMapIntensity: { + value: 1 + } + }]), + vertexShader: sn.meshphysical_vert, + fragmentShader: sn.meshphysical_frag + }, + toon: { + uniforms: We([an.common, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.gradientmap, an.fog, an.lights, { + emissive: { + value: new Yt(0) + } + }]), + vertexShader: sn.meshtoon_vert, + fragmentShader: sn.meshtoon_frag + }, + matcap: { + uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, an.fog, { + matcap: { + value: null + } + }]), + vertexShader: sn.meshmatcap_vert, + fragmentShader: sn.meshmatcap_frag + }, + points: { + uniforms: We([an.points, an.fog]), + vertexShader: sn.points_vert, + fragmentShader: sn.points_frag + }, + dashed: { + uniforms: We([an.common, an.fog, { + scale: { + value: 1 + }, + dashSize: { + value: 1 + }, + totalSize: { + value: 2 + } + }]), + vertexShader: sn.linedashed_vert, + fragmentShader: sn.linedashed_frag + }, + depth: { + uniforms: We([an.common, an.displacementmap]), + vertexShader: sn.depth_vert, + fragmentShader: sn.depth_frag + }, + normal: { + uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, { + opacity: { + value: 1 + } + }]), + vertexShader: sn.normal_vert, + fragmentShader: sn.normal_frag + }, + sprite: { + uniforms: We([an.sprite, an.fog]), + vertexShader: sn.sprite_vert, + fragmentShader: sn.sprite_frag + }, + background: { + uniforms: { + uvTransform: { + value: new y + }, + t2D: { + value: null + } + }, + vertexShader: sn.background_vert, + fragmentShader: sn.background_frag + }, + cube: { + uniforms: We([an.envmap, { + opacity: { + value: 1 + } + }]), + vertexShader: sn.cube_vert, + fragmentShader: sn.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: sn.equirect_vert, + fragmentShader: sn.equirect_frag + }, + distanceRGBA: { + uniforms: We([an.common, an.displacementmap, { + referencePosition: { + value: new T + }, + nearDistance: { + value: 1 + }, + farDistance: { + value: 1e3 + } + }]), + vertexShader: sn.distanceRGBA_vert, + fragmentShader: sn.distanceRGBA_frag + }, + shadow: { + uniforms: We([an.lights, an.fog, { + color: { + value: new Yt(0) + }, + opacity: { + value: 1 + } + }]), + vertexShader: sn.shadow_vert, + fragmentShader: sn.shadow_frag + } + }; + + function cn(t, e, n, i, r) { + const o = new Yt(0); + let s, a, l = 0, + c = null, + h = 0, + u = null; + + function d(t, e) { + n.buffers.color.setClear(t.r, t.g, t.b, e, r) + } + return { + getClearColor: function() { + return o + }, + setClearColor: function(t, e = 1) { + o.set(t), l = e, d(o, l) + }, + getClearAlpha: function() { + return l + }, + setClearAlpha: function(t) { + l = t, d(o, l) + }, + render: function(n, r, p, f) { + let m = !0 === r.isScene ? r.background : null; + m && m.isTexture && (m = e.get(m)); + const g = t.xr, + v = g.getSession && g.getSession(); + v && "additive" === v.environmentBlendMode && (m = null), null === m ? d(o, l) : m && m.isColor && (d(m, 1), f = !0), (t.autoClear || f) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), m && (m.isCubeTexture || m.isWebGLCubeRenderTarget || 306 === m.mapping) ? (void 0 === a && (a = new He(new Ve(1, 1, 1), new Xe({ + name: "BackgroundCubeMaterial", + uniforms: ke(ln.cube.uniforms), + vertexShader: ln.cube.vertexShader, + fragmentShader: ln.cube.fragmentShader, + side: 1, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), a.geometry.deleteAttribute("normal"), a.geometry.deleteAttribute("uv"), a.onBeforeRender = function(t, e, n) { + this.matrixWorld.copyPosition(n.matrixWorld) + }, Object.defineProperty(a.material, "envMap", { + get: function() { + return this.uniforms.envMap.value + } + }), i.update(a)), m.isWebGLCubeRenderTarget && (m = m.texture), a.material.uniforms.envMap.value = m, a.material.uniforms.flipEnvMap.value = m.isCubeTexture && m._needsFlipEnvMap ? -1 : 1, c === m && h === m.version && u === t.toneMapping || (a.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(a, a.geometry, a.material, 0, 0, null)) : m && m.isTexture && (void 0 === s && (s = new He(new on(2, 2), new Xe({ + name: "BackgroundMaterial", + uniforms: ke(ln.background.uniforms), + vertexShader: ln.background.vertexShader, + fragmentShader: ln.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1 + })), s.geometry.deleteAttribute("normal"), Object.defineProperty(s.material, "map", { + get: function() { + return this.uniforms.t2D.value + } + }), i.update(s)), s.material.uniforms.t2D.value = m, !0 === m.matrixAutoUpdate && m.updateMatrix(), s.material.uniforms.uvTransform.value.copy(m.matrix), c === m && h === m.version && u === t.toneMapping || (s.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(s, s.geometry, s.material, 0, 0, null)) + } + } + } + + function hn(t, e, n, i) { + const r = t.getParameter(34921), + o = i.isWebGL2 ? null : e.get("OES_vertex_array_object"), + s = i.isWebGL2 || null !== o, + a = {}, + l = d(null); + let c = l; + + function h(e) { + return i.isWebGL2 ? t.bindVertexArray(e) : o.bindVertexArrayOES(e) + } + + function u(e) { + return i.isWebGL2 ? t.deleteVertexArray(e) : o.deleteVertexArrayOES(e) + } + + function d(t) { + const e = [], + n = [], + i = []; + for (let t = 0; t < r; t++) e[t] = 0, n[t] = 0, i[t] = 0; + return { + geometry: null, + program: null, + wireframe: !1, + newAttributes: e, + enabledAttributes: n, + attributeDivisors: i, + object: t, + attributes: {}, + index: null + } + } + + function p() { + const t = c.newAttributes; + for (let e = 0, n = t.length; e < n; e++) t[e] = 0 + } + + function f(t) { + m(t, 0) + } + + function m(n, r) { + const o = c.newAttributes, + s = c.enabledAttributes, + a = c.attributeDivisors; + if (o[n] = 1, 0 === s[n] && (t.enableVertexAttribArray(n), s[n] = 1), a[n] !== r) { + (i.isWebGL2 ? t : e.get("ANGLE_instanced_arrays"))[i.isWebGL2 ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](n, r), a[n] = r + } + } + + function g() { + const e = c.newAttributes, + n = c.enabledAttributes; + for (let i = 0, r = n.length; i < r; i++) n[i] !== e[i] && (t.disableVertexAttribArray(i), n[i] = 0) + } + + function v(e, n, r, o, s, a) { + !0 !== i.isWebGL2 || 5124 !== r && 5125 !== r ? t.vertexAttribPointer(e, n, r, o, s, a) : t.vertexAttribIPointer(e, n, r, s, a) + } + + function y() { + A(), c !== l && (c = l, h(c.object)) + } + + function A() { + l.geometry = null, l.program = null, l.wireframe = !1 + } + return { + setup: function(r, l, u, y, A) { + let x = !1; + if (s) { + const e = function(e, n, r) { + const s = !0 === r.wireframe; + let l = a[e.id]; + void 0 === l && (l = {}, a[e.id] = l); + let c = l[n.id]; + void 0 === c && (c = {}, l[n.id] = c); + let h = c[s]; + void 0 === h && (h = d(i.isWebGL2 ? t.createVertexArray() : o.createVertexArrayOES()), c[s] = h); + return h + }(y, u, l); + c !== e && (c = e, h(c.object)), x = function(t, e) { + const n = c.attributes, + i = t.attributes; + let r = 0; + for (const t in i) { + const e = n[t], + o = i[t]; + if (void 0 === e) return !0; + if (e.attribute !== o) return !0; + if (e.data !== o.data) return !0; + r++ + } + return c.attributesNum !== r || c.index !== e + }(y, A), x && function(t, e) { + const n = {}, + i = t.attributes; + let r = 0; + for (const t in i) { + const e = i[t], + o = {}; + o.attribute = e, e.data && (o.data = e.data), n[t] = o, r++ + } + c.attributes = n, c.attributesNum = r, c.index = e + }(y, A) + } else { + const t = !0 === l.wireframe; + c.geometry === y.id && c.program === u.id && c.wireframe === t || (c.geometry = y.id, c.program = u.id, c.wireframe = t, x = !0) + }!0 === r.isInstancedMesh && (x = !0), null !== A && n.update(A, 34963), x && (! function(r, o, s, a) { + if (!1 === i.isWebGL2 && (r.isInstancedMesh || a.isInstancedBufferGeometry) && null === e.get("ANGLE_instanced_arrays")) return; + p(); + const l = a.attributes, + c = s.getAttributes(), + h = o.defaultAttributeValues; + for (const e in c) { + const i = c[e]; + if (i >= 0) { + const o = l[e]; + if (void 0 !== o) { + const e = o.normalized, + r = o.itemSize, + s = n.get(o); + if (void 0 === s) continue; + const l = s.buffer, + c = s.type, + h = s.bytesPerElement; + if (o.isInterleavedBufferAttribute) { + const n = o.data, + s = n.stride, + u = o.offset; + n && n.isInstancedInterleavedBuffer ? (m(i, n.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = n.meshPerAttribute * n.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, s * h, u * h) + } else o.isInstancedBufferAttribute ? (m(i, o.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = o.meshPerAttribute * o.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, 0, 0) + } else if ("instanceMatrix" === e) { + const e = n.get(r.instanceMatrix); + if (void 0 === e) continue; + const o = e.buffer, + s = e.type; + m(i + 0, 1), m(i + 1, 1), m(i + 2, 1), m(i + 3, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i + 0, 4, s, !1, 64, 0), t.vertexAttribPointer(i + 1, 4, s, !1, 64, 16), t.vertexAttribPointer(i + 2, 4, s, !1, 64, 32), t.vertexAttribPointer(i + 3, 4, s, !1, 64, 48) + } else if ("instanceColor" === e) { + const e = n.get(r.instanceColor); + if (void 0 === e) continue; + const o = e.buffer, + s = e.type; + m(i, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i, 3, s, !1, 12, 0) + } else if (void 0 !== h) { + const n = h[e]; + if (void 0 !== n) switch (n.length) { + case 2: + t.vertexAttrib2fv(i, n); + break; + case 3: + t.vertexAttrib3fv(i, n); + break; + case 4: + t.vertexAttrib4fv(i, n); + break; + default: + t.vertexAttrib1fv(i, n) + } + } + } + } + g() + }(r, l, u, y), null !== A && t.bindBuffer(34963, n.get(A).buffer)) + }, + reset: y, + resetDefaultState: A, + dispose: function() { + y(); + for (const t in a) { + const e = a[t]; + for (const t in e) { + const n = e[t]; + for (const t in n) u(n[t].object), delete n[t]; + delete e[t] + } + delete a[t] + } + }, + releaseStatesOfGeometry: function(t) { + if (void 0 === a[t.id]) return; + const e = a[t.id]; + for (const t in e) { + const n = e[t]; + for (const t in n) u(n[t].object), delete n[t]; + delete e[t] + } + delete a[t.id] + }, + releaseStatesOfProgram: function(t) { + for (const e in a) { + const n = a[e]; + if (void 0 === n[t.id]) continue; + const i = n[t.id]; + for (const t in i) u(i[t].object), delete i[t]; + delete n[t.id] + } + }, + initAttributes: p, + enableAttribute: f, + disableUnusedAttributes: g + } + } + + function un(t, e, n, i) { + const r = i.isWebGL2; + let o; + this.setMode = function(t) { + o = t + }, this.render = function(e, i) { + t.drawArrays(o, e, i), n.update(i, o, 1) + }, this.renderInstances = function(i, s, a) { + if (0 === a) return; + let l, c; + if (r) l = t, c = "drawArraysInstanced"; + else if (l = e.get("ANGLE_instanced_arrays"), c = "drawArraysInstancedANGLE", null === l) return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + l[c](o, i, s, a), n.update(s, o, a) + } + } + + function dn(t, e, n) { + let i; + + function r(e) { + if ("highp" === e) { + if (t.getShaderPrecisionFormat(35633, 36338).precision > 0 && t.getShaderPrecisionFormat(35632, 36338).precision > 0) return "highp"; + e = "mediump" + } + return "mediump" === e && t.getShaderPrecisionFormat(35633, 36337).precision > 0 && t.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" + } + const o = "undefined" != typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && t instanceof WebGL2ComputeRenderingContext; + let s = void 0 !== n.precision ? n.precision : "highp"; + const a = r(s); + a !== s && (console.warn("THREE.WebGLRenderer:", s, "not supported, using", a, "instead."), s = a); + const l = !0 === n.logarithmicDepthBuffer, + c = t.getParameter(34930), + h = t.getParameter(35660), + u = t.getParameter(3379), + d = t.getParameter(34076), + p = t.getParameter(34921), + f = t.getParameter(36347), + m = t.getParameter(36348), + g = t.getParameter(36349), + v = h > 0, + y = o || !!e.get("OES_texture_float"); + return { + isWebGL2: o, + getMaxAnisotropy: function() { + if (void 0 !== i) return i; + const n = e.get("EXT_texture_filter_anisotropic"); + return i = null !== n ? t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0, i + }, + getMaxPrecision: r, + precision: s, + logarithmicDepthBuffer: l, + maxTextures: c, + maxVertexTextures: h, + maxTextureSize: u, + maxCubemapSize: d, + maxAttributes: p, + maxVertexUniforms: f, + maxVaryings: m, + maxFragmentUniforms: g, + vertexTextures: v, + floatFragmentTextures: y, + floatVertexTextures: v && y, + maxSamples: o ? t.getParameter(36183) : 0 + } + } + + function pn(t) { + const e = this; + let n = null, + i = 0, + r = !1, + o = !1; + const s = new Ct, + a = new y, + l = { + value: null, + needsUpdate: !1 + }; + + function c() { + l.value !== n && (l.value = n, l.needsUpdate = i > 0), e.numPlanes = i, e.numIntersection = 0 + } + + function h(t, n, i, r) { + const o = null !== t ? t.length : 0; + let c = null; + if (0 !== o) { + if (c = l.value, !0 !== r || null === c) { + const e = i + 4 * o, + r = n.matrixWorldInverse; + a.getNormalMatrix(r), (null === c || c.length < e) && (c = new Float32Array(e)); + for (let e = 0, n = i; e !== o; ++e, n += 4) s.copy(t[e]).applyMatrix4(r, a), s.normal.toArray(c, n), c[n + 3] = s.constant + } + l.value = c, l.needsUpdate = !0 + } + return e.numPlanes = o, e.numIntersection = 0, c + } + this.uniform = l, this.numPlanes = 0, this.numIntersection = 0, this.init = function(t, e, o) { + const s = 0 !== t.length || e || 0 !== i || r; + return r = e, n = h(t, o, 0), i = t.length, s + }, this.beginShadows = function() { + o = !0, h(null) + }, this.endShadows = function() { + o = !1, c() + }, this.setState = function(e, s, a) { + const u = e.clippingPlanes, + d = e.clipIntersection, + p = e.clipShadows, + f = t.get(e); + if (!r || null === u || 0 === u.length || o && !p) o ? h(null) : c(); + else { + const t = o ? 0 : i, + e = 4 * t; + let r = f.clippingState || null; + l.value = r, r = h(u, s, e, a); + for (let t = 0; t !== e; ++t) r[t] = n[t]; + f.clippingState = r, this.numIntersection = d ? this.numPlanes : 0, this.numPlanes += t + } + } + } + + function fn(t) { + let e = new WeakMap; + + function n(t, e) { + return 303 === e ? t.mapping = 301 : 304 === e && (t.mapping = 302), t + } + + function i(t) { + const n = t.target; + n.removeEventListener("dispose", i); + const r = e.get(n); + void 0 !== r && (e.delete(n), r.dispose()) + } + return { + get: function(r) { + if (r && r.isTexture) { + const o = r.mapping; + if (303 === o || 304 === o) { + if (e.has(r)) { + return n(e.get(r).texture, r.mapping) + } { + const o = r.image; + if (o && o.height > 0) { + const s = t.getRenderList(), + a = t.getRenderTarget(), + l = new Je(o.height / 2); + return l.fromEquirectangularTexture(t, r), e.set(r, l), t.setRenderTarget(a), t.setRenderList(s), r.addEventListener("dispose", i), n(l.texture, r.mapping) + } + return null + } + } + } + return r + }, + dispose: function() { + e = new WeakMap + } + } + } + + function mn(t) { + const e = {}; + + function n(n) { + if (void 0 !== e[n]) return e[n]; + let i; + switch (n) { + case "WEBGL_depth_texture": + i = t.getExtension("WEBGL_depth_texture") || t.getExtension("MOZ_WEBGL_depth_texture") || t.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + i = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + i = t.getExtension("WEBGL_compressed_texture_s3tc") || t.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + i = t.getExtension("WEBGL_compressed_texture_pvrtc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + i = t.getExtension(n) + } + return e[n] = i, i + } + return { + has: function(t) { + return null !== n(t) + }, + init: function(t) { + t.isWebGL2 ? n("EXT_color_buffer_float") : (n("WEBGL_depth_texture"), n("OES_texture_float"), n("OES_texture_half_float"), n("OES_texture_half_float_linear"), n("OES_standard_derivatives"), n("OES_element_index_uint"), n("OES_vertex_array_object"), n("ANGLE_instanced_arrays")), n("OES_texture_float_linear"), n("EXT_color_buffer_half_float") + }, + get: function(t) { + const e = n(t); + return null === e && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), e + } + } + } + + function gn(t, e, n, i) { + const r = {}, + o = new WeakMap; + + function s(t) { + const a = t.target; + null !== a.index && e.remove(a.index); + for (const t in a.attributes) e.remove(a.attributes[t]); + a.removeEventListener("dispose", s), delete r[a.id]; + const l = o.get(a); + l && (e.remove(l), o.delete(a)), i.releaseStatesOfGeometry(a), !0 === a.isInstancedBufferGeometry && delete a._maxInstanceCount, n.memory.geometries-- + } + + function a(t) { + const n = [], + i = t.index, + r = t.attributes.position; + let s = 0; + if (null !== i) { + const t = i.array; + s = i.version; + for (let e = 0, i = t.length; e < i; e += 3) { + const i = t[e + 0], + r = t[e + 1], + o = t[e + 2]; + n.push(i, r, r, o, o, i) + } + } else { + const t = r.array; + s = r.version; + for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) { + const t = e + 0, + i = e + 1, + r = e + 2; + n.push(t, i, i, r, r, t) + } + } + const a = new(de(n) > 65535 ? le : se)(n, 1); + a.version = s; + const l = o.get(t); + l && e.remove(l), o.set(t, a) + } + return { + get: function(t, e) { + return !0 === r[e.id] || (e.addEventListener("dispose", s), r[e.id] = !0, n.memory.geometries++), e + }, + update: function(t) { + const n = t.attributes; + for (const t in n) e.update(n[t], 34962); + const i = t.morphAttributes; + for (const t in i) { + const n = i[t]; + for (let t = 0, i = n.length; t < i; t++) e.update(n[t], 34962) + } + }, + getWireframeAttribute: function(t) { + const e = o.get(t); + if (e) { + const n = t.index; + null !== n && e.version < n.version && a(t) + } else a(t); + return o.get(t) + } + } + } + + function vn(t, e, n, i) { + const r = i.isWebGL2; + let o, s, a; + this.setMode = function(t) { + o = t + }, this.setIndex = function(t) { + s = t.type, a = t.bytesPerElement + }, this.render = function(e, i) { + t.drawElements(o, i, s, e * a), n.update(i, o, 1) + }, this.renderInstances = function(i, l, c) { + if (0 === c) return; + let h, u; + if (r) h = t, u = "drawElementsInstanced"; + else if (h = e.get("ANGLE_instanced_arrays"), u = "drawElementsInstancedANGLE", null === h) return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + h[u](o, l, s, i * a, c), n.update(l, o, c) + } + } + + function yn(t) { + const e = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + return { + memory: { + geometries: 0, + textures: 0 + }, + render: e, + programs: null, + autoReset: !0, + reset: function() { + e.frame++, e.calls = 0, e.triangles = 0, e.points = 0, e.lines = 0 + }, + update: function(t, n, i) { + switch (e.calls++, n) { + case 4: + e.triangles += i * (t / 3); + break; + case 1: + e.lines += i * (t / 2); + break; + case 3: + e.lines += i * (t - 1); + break; + case 2: + e.lines += i * t; + break; + case 0: + e.points += i * t; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", n) + } + } + } + } + + function An(t, e) { + return t[0] - e[0] + } + + function xn(t, e) { + return Math.abs(e[1]) - Math.abs(t[1]) + } + + function _n(t) { + const e = {}, + n = new Float32Array(8), + i = []; + for (let t = 0; t < 8; t++) i[t] = [t, 0]; + return { + update: function(r, o, s, a) { + const l = r.morphTargetInfluences, + c = void 0 === l ? 0 : l.length; + let h = e[o.id]; + if (void 0 === h) { + h = []; + for (let t = 0; t < c; t++) h[t] = [t, 0]; + e[o.id] = h + } + for (let t = 0; t < c; t++) { + const e = h[t]; + e[0] = t, e[1] = l[t] + } + h.sort(xn); + for (let t = 0; t < 8; t++) t < c && h[t][1] ? (i[t][0] = h[t][0], i[t][1] = h[t][1]) : (i[t][0] = Number.MAX_SAFE_INTEGER, i[t][1] = 0); + i.sort(An); + const u = s.morphTargets && o.morphAttributes.position, + d = s.morphNormals && o.morphAttributes.normal; + let p = 0; + for (let t = 0; t < 8; t++) { + const e = i[t], + r = e[0], + s = e[1]; + r !== Number.MAX_SAFE_INTEGER && s ? (u && o.getAttribute("morphTarget" + t) !== u[r] && o.setAttribute("morphTarget" + t, u[r]), d && o.getAttribute("morphNormal" + t) !== d[r] && o.setAttribute("morphNormal" + t, d[r]), n[t] = s, p += s) : (u && !0 === o.hasAttribute("morphTarget" + t) && o.deleteAttribute("morphTarget" + t), d && !0 === o.hasAttribute("morphNormal" + t) && o.deleteAttribute("morphNormal" + t), n[t] = 0) + } + const f = o.morphTargetsRelative ? 1 : 1 - p; + a.getUniforms().setValue(t, "morphTargetBaseInfluence", f), a.getUniforms().setValue(t, "morphTargetInfluences", n) + } + } + } + + function bn(t, e, n, i) { + let r = new WeakMap; + + function o(t) { + const e = t.target; + e.removeEventListener("dispose", o), n.remove(e.instanceMatrix), null !== e.instanceColor && n.remove(e.instanceColor) + } + return { + update: function(t) { + const s = i.render.frame, + a = t.geometry, + l = e.get(t, a); + return r.get(l) !== s && (e.update(l), r.set(l, s)), t.isInstancedMesh && (!1 === t.hasEventListener("dispose", o) && t.addEventListener("dispose", o), n.update(t.instanceMatrix, 34962), null !== t.instanceColor && n.update(t.instanceColor, 34962)), l + }, + dispose: function() { + r = new WeakMap + } + } + } + + function wn(t = null, e = 1, n = 1, i = 1) { + b.call(this, null), this.image = { + data: t, + width: e, + height: n, + depth: i + }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 + } + + function Mn(t = null, e = 1, n = 1, i = 1) { + b.call(this, null), this.image = { + data: t, + width: e, + height: n, + depth: i + }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 + } + ln.physical = { + uniforms: We([ln.standard.uniforms, { + clearcoat: { + value: 0 + }, + clearcoatMap: { + value: null + }, + clearcoatRoughness: { + value: 0 + }, + clearcoatRoughnessMap: { + value: null + }, + clearcoatNormalScale: { + value: new v(1, 1) + }, + clearcoatNormalMap: { + value: null + }, + sheen: { + value: new Yt(0) + }, + transmission: { + value: 0 + }, + transmissionMap: { + value: null + } + }]), + vertexShader: sn.meshphysical_vert, + fragmentShader: sn.meshphysical_frag + }, wn.prototype = Object.create(b.prototype), wn.prototype.constructor = wn, wn.prototype.isDataTexture2DArray = !0, Mn.prototype = Object.create(b.prototype), Mn.prototype.constructor = Mn, Mn.prototype.isDataTexture3D = !0; + const En = new b, + Sn = new wn, + Tn = new Mn, + Ln = new Ze, + Rn = [], + Cn = [], + Pn = new Float32Array(16), + Dn = new Float32Array(9), + In = new Float32Array(4); + + function On(t, e, n) { + const i = t[0]; + if (i <= 0 || i > 0) return t; + const r = e * n; + let o = Rn[r]; + if (void 0 === o && (o = new Float32Array(r), Rn[r] = o), 0 !== e) { + i.toArray(o, 0); + for (let i = 1, r = 0; i !== e; ++i) r += n, t[i].toArray(o, r) + } + return o + } + + function Nn(t, e) { + if (t.length !== e.length) return !1; + for (let n = 0, i = t.length; n < i; n++) + if (t[n] !== e[n]) return !1; + return !0 + } + + function Bn(t, e) { + for (let n = 0, i = e.length; n < i; n++) t[n] = e[n] + } + + function Fn(t, e) { + let n = Cn[e]; + void 0 === n && (n = new Int32Array(e), Cn[e] = n); + for (let i = 0; i !== e; ++i) n[i] = t.allocateTextureUnit(); + return n + } + + function zn(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1f(this.addr, e), n[0] = e) + } + + function Un(t, e) { + const n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y || (t.uniform2f(this.addr, e.x, e.y), n[0] = e.x, n[1] = e.y); + else { + if (Nn(n, e)) return; + t.uniform2fv(this.addr, e), Bn(n, e) + } + } + + function Hn(t, e) { + const n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z || (t.uniform3f(this.addr, e.x, e.y, e.z), n[0] = e.x, n[1] = e.y, n[2] = e.z); + else if (void 0 !== e.r) n[0] === e.r && n[1] === e.g && n[2] === e.b || (t.uniform3f(this.addr, e.r, e.g, e.b), n[0] = e.r, n[1] = e.g, n[2] = e.b); + else { + if (Nn(n, e)) return; + t.uniform3fv(this.addr, e), Bn(n, e) + } + } + + function Gn(t, e) { + const n = this.cache; + if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w || (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), n[0] = e.x, n[1] = e.y, n[2] = e.z, n[3] = e.w); + else { + if (Nn(n, e)) return; + t.uniform4fv(this.addr, e), Bn(n, e) + } + } + + function Vn(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Nn(n, e)) return; + t.uniformMatrix2fv(this.addr, !1, e), Bn(n, e) + } else { + if (Nn(n, i)) return; + In.set(i), t.uniformMatrix2fv(this.addr, !1, In), Bn(n, i) + } + } + + function kn(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Nn(n, e)) return; + t.uniformMatrix3fv(this.addr, !1, e), Bn(n, e) + } else { + if (Nn(n, i)) return; + Dn.set(i), t.uniformMatrix3fv(this.addr, !1, Dn), Bn(n, i) + } + } + + function Wn(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Nn(n, e)) return; + t.uniformMatrix4fv(this.addr, !1, e), Bn(n, e) + } else { + if (Nn(n, i)) return; + Pn.set(i), t.uniformMatrix4fv(this.addr, !1, Pn), Bn(n, i) + } + } + + function jn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTexture2D(e || En, r) + } + + function Xn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(e || Sn, r) + } + + function qn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(e || Tn, r) + } + + function Yn(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTextureCube(e || Ln, r) + } + + function Qn(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1i(this.addr, e), n[0] = e) + } + + function Zn(t, e) { + const n = this.cache; + Nn(n, e) || (t.uniform2iv(this.addr, e), Bn(n, e)) + } + + function Jn(t, e) { + const n = this.cache; + Nn(n, e) || (t.uniform3iv(this.addr, e), Bn(n, e)) + } + + function Kn(t, e) { + const n = this.cache; + Nn(n, e) || (t.uniform4iv(this.addr, e), Bn(n, e)) + } + + function $n(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1ui(this.addr, e), n[0] = e) + } + + function ti(t, e) { + t.uniform1fv(this.addr, e) + } + + function ei(t, e) { + t.uniform1iv(this.addr, e) + } + + function ni(t, e) { + t.uniform2iv(this.addr, e) + } + + function ii(t, e) { + t.uniform3iv(this.addr, e) + } + + function ri(t, e) { + t.uniform4iv(this.addr, e) + } + + function oi(t, e) { + const n = On(e, this.size, 2); + t.uniform2fv(this.addr, n) + } + + function si(t, e) { + const n = On(e, this.size, 3); + t.uniform3fv(this.addr, n) + } + + function ai(t, e) { + const n = On(e, this.size, 4); + t.uniform4fv(this.addr, n) + } + + function li(t, e) { + const n = On(e, this.size, 4); + t.uniformMatrix2fv(this.addr, !1, n) + } + + function ci(t, e) { + const n = On(e, this.size, 9); + t.uniformMatrix3fv(this.addr, !1, n) + } + + function hi(t, e) { + const n = On(e, this.size, 16); + t.uniformMatrix4fv(this.addr, !1, n) + } + + function ui(t, e, n) { + const i = e.length, + r = Fn(n, i); + t.uniform1iv(this.addr, r); + for (let t = 0; t !== i; ++t) n.safeSetTexture2D(e[t] || En, r[t]) + } + + function di(t, e, n) { + const i = e.length, + r = Fn(n, i); + t.uniform1iv(this.addr, r); + for (let t = 0; t !== i; ++t) n.safeSetTextureCube(e[t] || Ln, r[t]) + } + + function pi(t, e, n) { + this.id = t, this.addr = n, this.cache = [], this.setValue = function(t) { + switch (t) { + case 5126: + return zn; + case 35664: + return Un; + case 35665: + return Hn; + case 35666: + return Gn; + case 35674: + return Vn; + case 35675: + return kn; + case 35676: + return Wn; + case 5124: + case 35670: + return Qn; + case 35667: + case 35671: + return Zn; + case 35668: + case 35672: + return Jn; + case 35669: + case 35673: + return Kn; + case 5125: + return $n; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return jn; + case 35679: + case 36299: + case 36307: + return qn; + case 35680: + case 36300: + case 36308: + case 36293: + return Yn; + case 36289: + case 36303: + case 36311: + case 36292: + return Xn + } + }(e.type) + } + + function fi(t, e, n) { + this.id = t, this.addr = n, this.cache = [], this.size = e.size, this.setValue = function(t) { + switch (t) { + case 5126: + return ti; + case 35664: + return oi; + case 35665: + return si; + case 35666: + return ai; + case 35674: + return li; + case 35675: + return ci; + case 35676: + return hi; + case 5124: + case 35670: + return ei; + case 35667: + case 35671: + return ni; + case 35668: + case 35672: + return ii; + case 35669: + case 35673: + return ri; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return ui; + case 35680: + case 36300: + case 36308: + case 36293: + return di + } + }(e.type) + } + + function mi(t) { + this.id = t, this.seq = [], this.map = {} + } + fi.prototype.updateCache = function(t) { + const e = this.cache; + t instanceof Float32Array && e.length !== t.length && (this.cache = new Float32Array(t.length)), Bn(e, t) + }, mi.prototype.setValue = function(t, e, n) { + const i = this.seq; + for (let r = 0, o = i.length; r !== o; ++r) { + const o = i[r]; + o.setValue(t, e[o.id], n) + } + }; + const gi = /(\w+)(\])?(\[|\.)?/g; + + function vi(t, e) { + t.seq.push(e), t.map[e.id] = e + } + + function yi(t, e, n) { + const i = t.name, + r = i.length; + for (gi.lastIndex = 0;;) { + const o = gi.exec(i), + s = gi.lastIndex; + let a = o[1]; + const l = "]" === o[2], + c = o[3]; + if (l && (a |= 0), void 0 === c || "[" === c && s + 2 === r) { + vi(n, void 0 === c ? new pi(a, t, e) : new fi(a, t, e)); + break + } { + let t = n.map[a]; + void 0 === t && (t = new mi(a), vi(n, t)), n = t + } + } + } + + function Ai(t, e) { + this.seq = [], this.map = {}; + const n = t.getProgramParameter(e, 35718); + for (let i = 0; i < n; ++i) { + const n = t.getActiveUniform(e, i); + yi(n, t.getUniformLocation(e, n.name), this) + } + } + + function xi(t, e, n) { + const i = t.createShader(e); + return t.shaderSource(i, n), t.compileShader(i), i + } + Ai.prototype.setValue = function(t, e, n, i) { + const r = this.map[e]; + void 0 !== r && r.setValue(t, n, i) + }, Ai.prototype.setOptional = function(t, e, n) { + const i = e[n]; + void 0 !== i && this.setValue(t, n, i) + }, Ai.upload = function(t, e, n, i) { + for (let r = 0, o = e.length; r !== o; ++r) { + const o = e[r], + s = n[o.id]; + !1 !== s.needsUpdate && o.setValue(t, s.value, i) + } + }, Ai.seqWithValue = function(t, e) { + const n = []; + for (let i = 0, r = t.length; i !== r; ++i) { + const r = t[i]; + r.id in e && n.push(r) + } + return n + }; + let _i = 0; + + function bi(t) { + switch (t) { + case 3e3: + return ["Linear", "( value )"]; + case 3001: + return ["sRGB", "( value )"]; + case 3002: + return ["RGBE", "( value )"]; + case 3004: + return ["RGBM", "( value, 7.0 )"]; + case 3005: + return ["RGBM", "( value, 16.0 )"]; + case 3006: + return ["RGBD", "( value, 256.0 )"]; + case 3007: + return ["Gamma", "( value, float( GAMMA_FACTOR ) )"]; + case 3003: + return ["LogLuv", "( value )"]; + default: + return console.warn("THREE.WebGLProgram: Unsupported encoding:", t), ["Linear", "( value )"] + } + } + + function wi(t, e, n) { + const i = t.getShaderParameter(e, 35713), + r = t.getShaderInfoLog(e).trim(); + if (i && "" === r) return ""; + return "THREE.WebGLShader: gl.getShaderInfoLog() " + n + "\n" + r + function(t) { + const e = t.split("\n"); + for (let t = 0; t < e.length; t++) e[t] = t + 1 + ": " + e[t]; + return e.join("\n") + }(t.getShaderSource(e)) + } + + function Mi(t, e) { + const n = bi(e); + return "vec4 " + t + "( vec4 value ) { return " + n[0] + "ToLinear" + n[1] + "; }" + } + + function Ei(t, e) { + const n = bi(e); + return "vec4 " + t + "( vec4 value ) { return LinearTo" + n[0] + n[1] + "; }" + } + + function Si(t, e) { + let n; + switch (e) { + case 1: + n = "Linear"; + break; + case 2: + n = "Reinhard"; + break; + case 3: + n = "OptimizedCineon"; + break; + case 4: + n = "ACESFilmic"; + break; + case 5: + n = "Custom"; + break; + default: + console.warn("THREE.WebGLProgram: Unsupported toneMapping:", e), n = "Linear" + } + return "vec3 " + t + "( vec3 color ) { return " + n + "ToneMapping( color ); }" + } + + function Ti(t) { + return "" !== t + } + + function Li(t, e) { + return t.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) + } + + function Ri(t, e) { + return t.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) + } + const Ci = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function Pi(t) { + return t.replace(Ci, Di) + } + + function Di(t, e) { + const n = sn[e]; + if (void 0 === n) throw new Error("Can not resolve #include <" + e + ">"); + return Pi(n) + } + const Ii = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, + Oi = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + + function Ni(t) { + return t.replace(Oi, Fi).replace(Ii, Bi) + } + + function Bi(t, e, n, i) { + return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), Fi(t, e, n, i) + } + + function Fi(t, e, n, i) { + let r = ""; + for (let t = parseInt(e); t < parseInt(n); t++) r += i.replace(/\[\s*i\s*\]/g, "[ " + t + " ]").replace(/UNROLLED_LOOP_INDEX/g, t); + return r + } + + function zi(t) { + let e = "precision " + t.precision + " float;\nprecision " + t.precision + " int;"; + return "highp" === t.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === t.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === t.precision && (e += "\n#define LOW_PRECISION"), e + } + + function Ui(t, e, n, i) { + const r = t.getContext(), + o = n.defines; + let s = n.vertexShader, + a = n.fragmentShader; + const l = function(t) { + let e = "SHADOWMAP_TYPE_BASIC"; + return 1 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === t.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), e + }(n), + c = function(t) { + let e = "ENVMAP_TYPE_CUBE"; + if (t.envMap) switch (t.envMapMode) { + case 301: + case 302: + e = "ENVMAP_TYPE_CUBE"; + break; + case 306: + case 307: + e = "ENVMAP_TYPE_CUBE_UV" + } + return e + }(n), + h = function(t) { + let e = "ENVMAP_MODE_REFLECTION"; + if (t.envMap) switch (t.envMapMode) { + case 302: + case 307: + e = "ENVMAP_MODE_REFRACTION" + } + return e + }(n), + u = function(t) { + let e = "ENVMAP_BLENDING_NONE"; + if (t.envMap) switch (t.combine) { + case 0: + e = "ENVMAP_BLENDING_MULTIPLY"; + break; + case 1: + e = "ENVMAP_BLENDING_MIX"; + break; + case 2: + e = "ENVMAP_BLENDING_ADD" + } + return e + }(n), + d = t.gammaFactor > 0 ? t.gammaFactor : 1, + p = n.isWebGL2 ? "" : function(t) { + return [t.extensionDerivatives || t.envMapCubeUV || t.bumpMap || t.tangentSpaceNormalMap || t.clearcoatNormalMap || t.flatShading || "physical" === t.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (t.extensionFragDepth || t.logarithmicDepthBuffer) && t.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", t.extensionDrawBuffers && t.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(Ti).join("\n") + }(n), + f = function(t) { + const e = []; + for (const n in t) { + const i = t[n]; + !1 !== i && e.push("#define " + n + " " + i) + } + return e.join("\n") + }(o), + m = r.createProgram(); + let g, v, y = n.glslVersion ? "#version " + n.glslVersion + "\n" : ""; + n.isRawShaderMaterial ? (g = [f].filter(Ti).join("\n"), g.length > 0 && (g += "\n"), v = [p, f].filter(Ti).join("\n"), v.length > 0 && (v += "\n")) : (g = [zi(n), "#define SHADER_NAME " + n.shaderName, f, n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + d, "#define MAX_BONES " + n.maxBones, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + h : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.displacementMap && n.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.useVertexTexture ? "#define BONE_TEXTURE" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#ifdef USE_COLOR", "\tattribute vec3 color;", "#endif", "#ifdef USE_MORPHTARGETS", "\tattribute vec3 morphTarget0;", "\tattribute vec3 morphTarget1;", "\tattribute vec3 morphTarget2;", "\tattribute vec3 morphTarget3;", "\t#ifdef USE_MORPHNORMALS", "\t\tattribute vec3 morphNormal0;", "\t\tattribute vec3 morphNormal1;", "\t\tattribute vec3 morphNormal2;", "\t\tattribute vec3 morphNormal3;", "\t#else", "\t\tattribute vec3 morphTarget4;", "\t\tattribute vec3 morphTarget5;", "\t\tattribute vec3 morphTarget6;", "\t\tattribute vec3 morphTarget7;", "\t#endif", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(Ti).join("\n"), v = [p, zi(n), "#define SHADER_NAME " + n.shaderName, f, n.alphaTest ? "#define ALPHATEST " + n.alphaTest + (n.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + d, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + c : "", n.envMap ? "#define " + h : "", n.envMap ? "#define " + u : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.sheen ? "#define USE_SHEEN" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (n.extensionShaderTextureLOD || n.envMap) && n.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? sn.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? Si("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", sn.encodings_pars_fragment, n.map ? Mi("mapTexelToLinear", n.mapEncoding) : "", n.matcap ? Mi("matcapTexelToLinear", n.matcapEncoding) : "", n.envMap ? Mi("envMapTexelToLinear", n.envMapEncoding) : "", n.emissiveMap ? Mi("emissiveMapTexelToLinear", n.emissiveMapEncoding) : "", n.lightMap ? Mi("lightMapTexelToLinear", n.lightMapEncoding) : "", Ei("linearToOutputTexel", n.outputEncoding), n.depthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(Ti).join("\n")), s = Pi(s), s = Li(s, n), s = Ri(s, n), a = Pi(a), a = Li(a, n), a = Ri(a, n), s = Ni(s), a = Ni(a), n.isWebGL2 && !0 !== n.isRawShaderMaterial && (y = "#version 300 es\n", g = ["#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + g, v = ["#define varying in", "300 es" === n.glslVersion ? "" : "out highp vec4 pc_fragColor;", "300 es" === n.glslVersion ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + v); + const A = y + v + a, + x = xi(r, 35633, y + g + s), + _ = xi(r, 35632, A); + if (r.attachShader(m, x), r.attachShader(m, _), void 0 !== n.index0AttributeName ? r.bindAttribLocation(m, 0, n.index0AttributeName) : !0 === n.morphTargets && r.bindAttribLocation(m, 0, "position"), r.linkProgram(m), t.debug.checkShaderErrors) { + const t = r.getProgramInfoLog(m).trim(), + e = r.getShaderInfoLog(x).trim(), + n = r.getShaderInfoLog(_).trim(); + let i = !0, + o = !0; + if (!1 === r.getProgramParameter(m, 35714)) { + i = !1; + const e = wi(r, x, "vertex"), + n = wi(r, _, "fragment"); + console.error("THREE.WebGLProgram: shader error: ", r.getError(), "35715", r.getProgramParameter(m, 35715), "gl.getProgramInfoLog", t, e, n) + } else "" !== t ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", t) : "" !== e && "" !== n || (o = !1); + o && (this.diagnostics = { + runnable: i, + programLog: t, + vertexShader: { + log: e, + prefix: g + }, + fragmentShader: { + log: n, + prefix: v + } + }) + } + let b, w; + return r.deleteShader(x), r.deleteShader(_), this.getUniforms = function() { + return void 0 === b && (b = new Ai(r, m)), b + }, this.getAttributes = function() { + return void 0 === w && (w = function(t, e) { + const n = {}, + i = t.getProgramParameter(e, 35721); + for (let r = 0; r < i; r++) { + const i = t.getActiveAttrib(e, r).name; + n[i] = t.getAttribLocation(e, i) + } + return n + }(r, m)), w + }, this.destroy = function() { + i.releaseStatesOfProgram(this), r.deleteProgram(m), this.program = void 0 + }, this.name = n.shaderName, this.id = _i++, this.cacheKey = e, this.usedTimes = 1, this.program = m, this.vertexShader = x, this.fragmentShader = _, this + } + + function Hi(t, e, n, i, r, o) { + const s = [], + a = i.isWebGL2, + l = i.logarithmicDepthBuffer, + c = i.floatVertexTextures, + h = i.maxVertexUniforms, + u = i.vertexTextures; + let d = i.precision; + const p = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }, + f = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen", "transmissionMap"]; + + function m(t) { + let e; + return t && t.isTexture ? e = t.encoding : t && t.isWebGLRenderTarget ? (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), e = t.texture.encoding) : e = 3e3, e + } + return { + getParameters: function(r, s, f, g, v) { + const y = g.fog, + A = r.isMeshStandardMaterial ? g.environment : null, + x = e.get(r.envMap || A), + _ = p[r.type], + b = v.isSkinnedMesh ? function(t) { + const e = t.skeleton.bones; + if (c) return 1024; { + const t = h, + n = Math.floor((t - 20) / 4), + i = Math.min(n, e.length); + return i < e.length ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), 0) : i + } + }(v) : 0; + let w, M; + if (null !== r.precision && (d = i.getMaxPrecision(r.precision), d !== r.precision && console.warn("THREE.WebGLProgram.getParameters:", r.precision, "not supported, using", d, "instead.")), _) { + const t = ln[_]; + w = t.vertexShader, M = t.fragmentShader + } else w = r.vertexShader, M = r.fragmentShader; + const E = t.getRenderTarget(); + return { + isWebGL2: a, + shaderID: _, + shaderName: r.type, + vertexShader: w, + fragmentShader: M, + defines: r.defines, + isRawShaderMaterial: !0 === r.isRawShaderMaterial, + glslVersion: r.glslVersion, + precision: d, + instancing: !0 === v.isInstancedMesh, + instancingColor: !0 === v.isInstancedMesh && null !== v.instanceColor, + supportsVertexTextures: u, + outputEncoding: null !== E ? m(E.texture) : t.outputEncoding, + map: !!r.map, + mapEncoding: m(r.map), + matcap: !!r.matcap, + matcapEncoding: m(r.matcap), + envMap: !!x, + envMapMode: x && x.mapping, + envMapEncoding: m(x), + envMapCubeUV: !!x && (306 === x.mapping || 307 === x.mapping), + lightMap: !!r.lightMap, + lightMapEncoding: m(r.lightMap), + aoMap: !!r.aoMap, + emissiveMap: !!r.emissiveMap, + emissiveMapEncoding: m(r.emissiveMap), + bumpMap: !!r.bumpMap, + normalMap: !!r.normalMap, + objectSpaceNormalMap: 1 === r.normalMapType, + tangentSpaceNormalMap: 0 === r.normalMapType, + clearcoatMap: !!r.clearcoatMap, + clearcoatRoughnessMap: !!r.clearcoatRoughnessMap, + clearcoatNormalMap: !!r.clearcoatNormalMap, + displacementMap: !!r.displacementMap, + roughnessMap: !!r.roughnessMap, + metalnessMap: !!r.metalnessMap, + specularMap: !!r.specularMap, + alphaMap: !!r.alphaMap, + gradientMap: !!r.gradientMap, + sheen: !!r.sheen, + transmissionMap: !!r.transmissionMap, + combine: r.combine, + vertexTangents: r.normalMap && r.vertexTangents, + vertexColors: r.vertexColors, + vertexUvs: !!(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatMap || r.clearcoatRoughnessMap || r.clearcoatNormalMap || r.displacementMap || r.transmissionMap), + uvsVertexOnly: !(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatNormalMap || r.transmissionMap || !r.displacementMap), + fog: !!y, + useFog: r.fog, + fogExp2: y && y.isFogExp2, + flatShading: r.flatShading, + sizeAttenuation: r.sizeAttenuation, + logarithmicDepthBuffer: l, + skinning: r.skinning && b > 0, + maxBones: b, + useVertexTexture: c, + morphTargets: r.morphTargets, + morphNormals: r.morphNormals, + maxMorphTargets: t.maxMorphTargets, + maxMorphNormals: t.maxMorphNormals, + numDirLights: s.directional.length, + numPointLights: s.point.length, + numSpotLights: s.spot.length, + numRectAreaLights: s.rectArea.length, + numHemiLights: s.hemi.length, + numDirLightShadows: s.directionalShadowMap.length, + numPointLightShadows: s.pointShadowMap.length, + numSpotLightShadows: s.spotShadowMap.length, + numClippingPlanes: o.numPlanes, + numClipIntersection: o.numIntersection, + dithering: r.dithering, + shadowMapEnabled: t.shadowMap.enabled && f.length > 0, + shadowMapType: t.shadowMap.type, + toneMapping: r.toneMapped ? t.toneMapping : 0, + physicallyCorrectLights: t.physicallyCorrectLights, + premultipliedAlpha: r.premultipliedAlpha, + alphaTest: r.alphaTest, + doubleSided: 2 === r.side, + flipSided: 1 === r.side, + depthPacking: void 0 !== r.depthPacking && r.depthPacking, + index0AttributeName: r.index0AttributeName, + extensionDerivatives: r.extensions && r.extensions.derivatives, + extensionFragDepth: r.extensions && r.extensions.fragDepth, + extensionDrawBuffers: r.extensions && r.extensions.drawBuffers, + extensionShaderTextureLOD: r.extensions && r.extensions.shaderTextureLOD, + rendererExtensionFragDepth: a || n.has("EXT_frag_depth"), + rendererExtensionDrawBuffers: a || n.has("WEBGL_draw_buffers"), + rendererExtensionShaderTextureLod: a || n.has("EXT_shader_texture_lod"), + customProgramCacheKey: r.customProgramCacheKey() + } + }, + getProgramCacheKey: function(e) { + const n = []; + if (e.shaderID ? n.push(e.shaderID) : (n.push(e.fragmentShader), n.push(e.vertexShader)), void 0 !== e.defines) + for (const t in e.defines) n.push(t), n.push(e.defines[t]); + if (!1 === e.isRawShaderMaterial) { + for (let t = 0; t < f.length; t++) n.push(e[f[t]]); + n.push(t.outputEncoding), n.push(t.gammaFactor) + } + return n.push(e.customProgramCacheKey), n.join() + }, + getUniforms: function(t) { + const e = p[t.type]; + let n; + if (e) { + const t = ln[e]; + n = je.clone(t.uniforms) + } else n = t.uniforms; + return n + }, + acquireProgram: function(e, n) { + let i; + for (let t = 0, e = s.length; t < e; t++) { + const e = s[t]; + if (e.cacheKey === n) { + i = e, ++i.usedTimes; + break + } + } + return void 0 === i && (i = new Ui(t, n, e, r), s.push(i)), i + }, + releaseProgram: function(t) { + if (0 == --t.usedTimes) { + const e = s.indexOf(t); + s[e] = s[s.length - 1], s.pop(), t.destroy() + } + }, + programs: s + } + } + + function Gi() { + let t = new WeakMap; + return { + get: function(e) { + let n = t.get(e); + return void 0 === n && (n = {}, t.set(e, n)), n + }, + remove: function(e) { + t.delete(e) + }, + update: function(e, n, i) { + t.get(e)[n] = i + }, + dispose: function() { + t = new WeakMap + } + } + } + + function Vi(t, e) { + return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.program !== e.program ? t.program.id - e.program.id : t.material.id !== e.material.id ? t.material.id - e.material.id : t.z !== e.z ? t.z - e.z : t.id - e.id + } + + function ki(t, e) { + return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.z !== e.z ? e.z - t.z : t.id - e.id + } + + function Wi(t) { + const e = []; + let n = 0; + const i = [], + r = [], + o = { + id: -1 + }; + + function s(i, r, s, a, l, c) { + let h = e[n]; + const u = t.get(s); + return void 0 === h ? (h = { + id: i.id, + object: i, + geometry: r, + material: s, + program: u.program || o, + groupOrder: a, + renderOrder: i.renderOrder, + z: l, + group: c + }, e[n] = h) : (h.id = i.id, h.object = i, h.geometry = r, h.material = s, h.program = u.program || o, h.groupOrder = a, h.renderOrder = i.renderOrder, h.z = l, h.group = c), n++, h + } + return { + opaque: i, + transparent: r, + init: function() { + n = 0, i.length = 0, r.length = 0 + }, + push: function(t, e, n, o, a, l) { + const c = s(t, e, n, o, a, l); + (!0 === n.transparent ? r : i).push(c) + }, + unshift: function(t, e, n, o, a, l) { + const c = s(t, e, n, o, a, l); + (!0 === n.transparent ? r : i).unshift(c) + }, + finish: function() { + for (let t = n, i = e.length; t < i; t++) { + const n = e[t]; + if (null === n.id) break; + n.id = null, n.object = null, n.geometry = null, n.material = null, n.program = null, n.group = null + } + }, + sort: function(t, e) { + i.length > 1 && i.sort(t || Vi), r.length > 1 && r.sort(e || ki) + } + } + } + + function ji(t) { + let e = new WeakMap; + return { + get: function(n, i) { + const r = e.get(n); + let o; + return void 0 === r ? (o = new Wi(t), e.set(n, new WeakMap), e.get(n).set(i, o)) : (o = r.get(i), void 0 === o && (o = new Wi(t), r.set(i, o))), o + }, + dispose: function() { + e = new WeakMap + } + } + } + + function Xi() { + const t = {}; + return { + get: function(e) { + if (void 0 !== t[e.id]) return t[e.id]; + let n; + switch (e.type) { + case "DirectionalLight": + n = { + direction: new T, + color: new Yt + }; + break; + case "SpotLight": + n = { + position: new T, + direction: new T, + color: new Yt, + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + n = { + position: new T, + color: new Yt, + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + n = { + direction: new T, + skyColor: new Yt, + groundColor: new Yt + }; + break; + case "RectAreaLight": + n = { + color: new Yt, + position: new T, + halfWidth: new T, + halfHeight: new T + } + } + return t[e.id] = n, n + } + } + } + let qi = 0; + + function Yi(t, e) { + return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0) + } + + function Qi(t, e) { + const n = new Xi, + i = function() { + const t = {}; + return { + get: function(e) { + if (void 0 !== t[e.id]) return t[e.id]; + let n; + switch (e.type) { + case "DirectionalLight": + case "SpotLight": + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new v + }; + break; + case "PointLight": + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new v, + shadowCameraNear: 1, + shadowCameraFar: 1e3 + } + } + return t[e.id] = n, n + } + } + }(), + r = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + }; + for (let t = 0; t < 9; t++) r.probe.push(new T); + const o = new T, + s = new et, + a = new et; + return { + setup: function(o) { + let s = 0, + a = 0, + l = 0; + for (let t = 0; t < 9; t++) r.probe[t].set(0, 0, 0); + let c = 0, + h = 0, + u = 0, + d = 0, + p = 0, + f = 0, + m = 0, + g = 0; + o.sort(Yi); + for (let t = 0, e = o.length; t < e; t++) { + const e = o[t], + v = e.color, + y = e.intensity, + A = e.distance, + x = e.shadow && e.shadow.map ? e.shadow.map.texture : null; + if (e.isAmbientLight) s += v.r * y, a += v.g * y, l += v.b * y; + else if (e.isLightProbe) + for (let t = 0; t < 9; t++) r.probe[t].addScaledVector(e.sh.coefficients[t], y); + else if (e.isDirectionalLight) { + const t = n.get(e); + if (t.color.copy(e.color).multiplyScalar(e.intensity), e.castShadow) { + const t = e.shadow, + n = i.get(e); + n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.directionalShadow[c] = n, r.directionalShadowMap[c] = x, r.directionalShadowMatrix[c] = e.shadow.matrix, f++ + } + r.directional[c] = t, c++ + } else if (e.isSpotLight) { + const t = n.get(e); + if (t.position.setFromMatrixPosition(e.matrixWorld), t.color.copy(v).multiplyScalar(y), t.distance = A, t.coneCos = Math.cos(e.angle), t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra)), t.decay = e.decay, e.castShadow) { + const t = e.shadow, + n = i.get(e); + n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.spotShadow[u] = n, r.spotShadowMap[u] = x, r.spotShadowMatrix[u] = e.shadow.matrix, g++ + } + r.spot[u] = t, u++ + } else if (e.isRectAreaLight) { + const t = n.get(e); + t.color.copy(v).multiplyScalar(y), t.halfWidth.set(.5 * e.width, 0, 0), t.halfHeight.set(0, .5 * e.height, 0), r.rectArea[d] = t, d++ + } else if (e.isPointLight) { + const t = n.get(e); + if (t.color.copy(e.color).multiplyScalar(e.intensity), t.distance = e.distance, t.decay = e.decay, e.castShadow) { + const t = e.shadow, + n = i.get(e); + n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, n.shadowCameraNear = t.camera.near, n.shadowCameraFar = t.camera.far, r.pointShadow[h] = n, r.pointShadowMap[h] = x, r.pointShadowMatrix[h] = e.shadow.matrix, m++ + } + r.point[h] = t, h++ + } else if (e.isHemisphereLight) { + const t = n.get(e); + t.skyColor.copy(e.color).multiplyScalar(y), t.groundColor.copy(e.groundColor).multiplyScalar(y), r.hemi[p] = t, p++ + } + } + d > 0 && (e.isWebGL2 || !0 === t.has("OES_texture_float_linear") ? (r.rectAreaLTC1 = an.LTC_FLOAT_1, r.rectAreaLTC2 = an.LTC_FLOAT_2) : !0 === t.has("OES_texture_half_float_linear") ? (r.rectAreaLTC1 = an.LTC_HALF_1, r.rectAreaLTC2 = an.LTC_HALF_2) : console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")), r.ambient[0] = s, r.ambient[1] = a, r.ambient[2] = l; + const v = r.hash; + v.directionalLength === c && v.pointLength === h && v.spotLength === u && v.rectAreaLength === d && v.hemiLength === p && v.numDirectionalShadows === f && v.numPointShadows === m && v.numSpotShadows === g || (r.directional.length = c, r.spot.length = u, r.rectArea.length = d, r.point.length = h, r.hemi.length = p, r.directionalShadow.length = f, r.directionalShadowMap.length = f, r.pointShadow.length = m, r.pointShadowMap.length = m, r.spotShadow.length = g, r.spotShadowMap.length = g, r.directionalShadowMatrix.length = f, r.pointShadowMatrix.length = m, r.spotShadowMatrix.length = g, v.directionalLength = c, v.pointLength = h, v.spotLength = u, v.rectAreaLength = d, v.hemiLength = p, v.numDirectionalShadows = f, v.numPointShadows = m, v.numSpotShadows = g, r.version = qi++) + }, + setupView: function(t, e) { + let n = 0, + i = 0, + l = 0, + c = 0, + h = 0; + const u = e.matrixWorldInverse; + for (let e = 0, d = t.length; e < d; e++) { + const d = t[e]; + if (d.isDirectionalLight) { + const t = r.directional[n]; + t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), n++ + } else if (d.isSpotLight) { + const t = r.spot[l]; + t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), l++ + } else if (d.isRectAreaLight) { + const t = r.rectArea[c]; + t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), a.identity(), s.copy(d.matrixWorld), s.premultiply(u), a.extractRotation(s), t.halfWidth.set(.5 * d.width, 0, 0), t.halfHeight.set(0, .5 * d.height, 0), t.halfWidth.applyMatrix4(a), t.halfHeight.applyMatrix4(a), c++ + } else if (d.isPointLight) { + const t = r.point[i]; + t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), i++ + } else if (d.isHemisphereLight) { + const t = r.hemi[h]; + t.direction.setFromMatrixPosition(d.matrixWorld), t.direction.transformDirection(u), t.direction.normalize(), h++ + } + } + }, + state: r + } + } + + function Zi(t, e) { + const n = new Qi(t, e), + i = [], + r = []; + return { + init: function() { + i.length = 0, r.length = 0 + }, + state: { + lightsArray: i, + shadowsArray: r, + lights: n + }, + setupLights: function() { + n.setup(i) + }, + setupLightsView: function(t) { + n.setupView(i, t) + }, + pushLight: function(t) { + i.push(t) + }, + pushShadow: function(t) { + r.push(t) + } + } + } + + function Ji(t, e) { + let n = new WeakMap; + return { + get: function(i, r = 0) { + let o; + return !1 === n.has(i) ? (o = new Zi(t, e), n.set(i, []), n.get(i).push(o)) : r >= n.get(i).length ? (o = new Zi(t, e), n.get(i).push(o)) : o = n.get(i)[r], o + }, + dispose: function() { + n = new WeakMap + } + } + } + + function Ki(t) { + Jt.call(this), this.type = "MeshDepthMaterial", this.depthPacking = 3200, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.setValues(t) + } + + function $i(t) { + Jt.call(this), this.type = "MeshDistanceMaterial", this.referencePosition = new T, this.nearDistance = 1, this.farDistance = 1e3, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.fog = !1, this.setValues(t) + } + Ki.prototype = Object.create(Jt.prototype), Ki.prototype.constructor = Ki, Ki.prototype.isMeshDepthMaterial = !0, Ki.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.depthPacking = t.depthPacking, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this + }, $i.prototype = Object.create(Jt.prototype), $i.prototype.constructor = $i, $i.prototype.isMeshDistanceMaterial = !0, $i.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.referencePosition.copy(t.referencePosition), this.nearDistance = t.nearDistance, this.farDistance = t.farDistance, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this + }; + + function tr(t, e, n) { + let i = new en; + const r = new v, + o = new v, + s = new M, + a = [], + l = [], + c = {}, + h = { + 0: 1, + 1: 0, + 2: 2 + }, + u = new Xe({ + defines: { + SAMPLE_RATE: 2 / 8, + HALF_SAMPLE_RATE: 1 / 8 + }, + uniforms: { + shadow_pass: { + value: null + }, + resolution: { + value: new v + }, + radius: { + value: 4 + } + }, + vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", + fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" + }), + d = u.clone(); + d.defines.HORIZONTAL_PASS = 1; + const p = new be; + p.setAttribute("position", new ee(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); + const f = new He(p, u), + m = this; + + function g(n, i) { + const r = e.update(f); + u.uniforms.shadow_pass.value = n.map.texture, u.uniforms.resolution.value = n.mapSize, u.uniforms.radius.value = n.radius, t.setRenderTarget(n.mapPass), t.clear(), t.renderBufferDirect(i, null, r, u, f, null), d.uniforms.shadow_pass.value = n.mapPass.texture, d.uniforms.resolution.value = n.mapSize, d.uniforms.radius.value = n.radius, t.setRenderTarget(n.map), t.clear(), t.renderBufferDirect(i, null, r, d, f, null) + } + + function y(t, e, n) { + const i = t << 0 | e << 1 | n << 2; + let r = a[i]; + return void 0 === r && (r = new Ki({ + depthPacking: 3201, + morphTargets: t, + skinning: e + }), a[i] = r), r + } + + function A(t, e, n) { + const i = t << 0 | e << 1 | n << 2; + let r = l[i]; + return void 0 === r && (r = new $i({ + morphTargets: t, + skinning: e + }), l[i] = r), r + } + + function x(e, n, i, r, o, s, a) { + let l = null, + u = y, + d = e.customDepthMaterial; + if (!0 === r.isPointLight && (u = A, d = e.customDistanceMaterial), void 0 === d) { + let t = !1; + !0 === i.morphTargets && (t = n.morphAttributes && n.morphAttributes.position && n.morphAttributes.position.length > 0); + let r = !1; + !0 === e.isSkinnedMesh && (!0 === i.skinning ? r = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e)); + l = u(t, r, !0 === e.isInstancedMesh) + } else l = d; + if (t.localClippingEnabled && !0 === i.clipShadows && 0 !== i.clippingPlanes.length) { + const t = l.uuid, + e = i.uuid; + let n = c[t]; + void 0 === n && (n = {}, c[t] = n); + let r = n[e]; + void 0 === r && (r = l.clone(), n[e] = r), l = r + } + return l.visible = i.visible, l.wireframe = i.wireframe, l.side = 3 === a ? null !== i.shadowSide ? i.shadowSide : i.side : null !== i.shadowSide ? i.shadowSide : h[i.side], l.clipShadows = i.clipShadows, l.clippingPlanes = i.clippingPlanes, l.clipIntersection = i.clipIntersection, l.wireframeLinewidth = i.wireframeLinewidth, l.linewidth = i.linewidth, !0 === r.isPointLight && !0 === l.isMeshDistanceMaterial && (l.referencePosition.setFromMatrixPosition(r.matrixWorld), l.nearDistance = o, l.farDistance = s), l + } + + function _(n, r, o, s, a) { + if (!1 === n.visible) return; + if (n.layers.test(r.layers) && (n.isMesh || n.isLine || n.isPoints) && (n.castShadow || n.receiveShadow && 3 === a) && (!n.frustumCulled || i.intersectsObject(n))) { + n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse, n.matrixWorld); + const i = e.update(n), + r = n.material; + if (Array.isArray(r)) { + const e = i.groups; + for (let l = 0, c = e.length; l < c; l++) { + const c = e[l], + h = r[c.materialIndex]; + if (h && h.visible) { + const e = x(n, i, h, s, o.near, o.far, a); + t.renderBufferDirect(o, null, i, e, n, c) + } + } + } else if (r.visible) { + const e = x(n, i, r, s, o.near, o.far, a); + t.renderBufferDirect(o, null, i, e, n, null) + } + } + const l = n.children; + for (let t = 0, e = l.length; t < e; t++) _(l[t], r, o, s, a) + } + this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1, this.render = function(e, a, l) { + if (!1 === m.enabled) return; + if (!1 === m.autoUpdate && !1 === m.needsUpdate) return; + if (0 === e.length) return; + const c = t.getRenderTarget(), + h = t.getActiveCubeFace(), + u = t.getActiveMipmapLevel(), + d = t.state; + d.setBlending(0), d.buffers.color.setClear(1, 1, 1, 1), d.buffers.depth.setTest(!0), d.setScissorTest(!1); + for (let c = 0, h = e.length; c < h; c++) { + const h = e[c], + u = h.shadow; + if (void 0 === u) { + console.warn("THREE.WebGLShadowMap:", h, "has no shadow."); + continue + } + if (!1 === u.autoUpdate && !1 === u.needsUpdate) continue; + r.copy(u.mapSize); + const p = u.getFrameExtents(); + if (r.multiply(p), o.copy(u.mapSize), (r.x > n || r.y > n) && (r.x > n && (o.x = Math.floor(n / p.x), r.x = o.x * p.x, u.mapSize.x = o.x), r.y > n && (o.y = Math.floor(n / p.y), r.y = o.y * p.y, u.mapSize.y = o.y)), null === u.map && !u.isPointLightShadow && 3 === this.type) { + const t = { + minFilter: 1006, + magFilter: 1006, + format: 1023 + }; + u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.mapPass = new E(r.x, r.y, t), u.camera.updateProjectionMatrix() + } + if (null === u.map) { + const t = { + minFilter: 1003, + magFilter: 1003, + format: 1023 + }; + u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.camera.updateProjectionMatrix() + } + t.setRenderTarget(u.map), t.clear(); + const f = u.getViewportCount(); + for (let t = 0; t < f; t++) { + const e = u.getViewport(t); + s.set(o.x * e.x, o.y * e.y, o.x * e.z, o.y * e.w), d.viewport(s), u.updateMatrices(h, t), i = u.getFrustum(), _(a, l, u.camera, h, this.type) + } + u.isPointLightShadow || 3 !== this.type || g(u, l), u.needsUpdate = !1 + } + m.needsUpdate = !1, t.setRenderTarget(c, h, u) + } + } + + function er(t, e, n) { + const i = n.isWebGL2; + const r = new function() { + let e = !1; + const n = new M; + let i = null; + const r = new M(0, 0, 0, 0); + return { + setMask: function(n) { + i === n || e || (t.colorMask(n, n, n, n), i = n) + }, + setLocked: function(t) { + e = t + }, + setClear: function(e, i, o, s, a) { + !0 === a && (e *= s, i *= s, o *= s), n.set(e, i, o, s), !1 === r.equals(n) && (t.clearColor(e, i, o, s), r.copy(n)) + }, + reset: function() { + e = !1, i = null, r.set(-1, 0, 0, 0) + } + } + }, + o = new function() { + let e = !1, + n = null, + i = null, + r = null; + return { + setTest: function(t) { + t ? O(2929) : N(2929) + }, + setMask: function(i) { + n === i || e || (t.depthMask(i), n = i) + }, + setFunc: function(e) { + if (i !== e) { + if (e) switch (e) { + case 0: + t.depthFunc(512); + break; + case 1: + t.depthFunc(519); + break; + case 2: + t.depthFunc(513); + break; + case 3: + t.depthFunc(515); + break; + case 4: + t.depthFunc(514); + break; + case 5: + t.depthFunc(518); + break; + case 6: + t.depthFunc(516); + break; + case 7: + t.depthFunc(517); + break; + default: + t.depthFunc(515) + } else t.depthFunc(515); + i = e + } + }, + setLocked: function(t) { + e = t + }, + setClear: function(e) { + r !== e && (t.clearDepth(e), r = e) + }, + reset: function() { + e = !1, n = null, i = null, r = null + } + } + }, + s = new function() { + let e = !1, + n = null, + i = null, + r = null, + o = null, + s = null, + a = null, + l = null, + c = null; + return { + setTest: function(t) { + e || (t ? O(2960) : N(2960)) + }, + setMask: function(i) { + n === i || e || (t.stencilMask(i), n = i) + }, + setFunc: function(e, n, s) { + i === e && r === n && o === s || (t.stencilFunc(e, n, s), i = e, r = n, o = s) + }, + setOp: function(e, n, i) { + s === e && a === n && l === i || (t.stencilOp(e, n, i), s = e, a = n, l = i) + }, + setLocked: function(t) { + e = t + }, + setClear: function(e) { + c !== e && (t.clearStencil(e), c = e) + }, + reset: function() { + e = !1, n = null, i = null, r = null, o = null, s = null, a = null, l = null, c = null + } + } + }; + let a = {}, + l = null, + c = null, + h = null, + u = null, + d = null, + p = null, + f = null, + m = null, + g = null, + v = !1, + y = null, + A = null, + x = null, + _ = null, + b = null; + const w = t.getParameter(35661); + let E = !1, + S = 0; + const T = t.getParameter(7938); - 1 !== T.indexOf("WebGL") ? (S = parseFloat(/^WebGL (\d)/.exec(T)[1]), E = S >= 1) : -1 !== T.indexOf("OpenGL ES") && (S = parseFloat(/^OpenGL ES (\d)/.exec(T)[1]), E = S >= 2); + let L = null, + R = {}; + const C = new M, + P = new M; + + function D(e, n, i) { + const r = new Uint8Array(4), + o = t.createTexture(); + t.bindTexture(e, o), t.texParameteri(e, 10241, 9728), t.texParameteri(e, 10240, 9728); + for (let e = 0; e < i; e++) t.texImage2D(n + e, 0, 6408, 1, 1, 0, 6408, 5121, r); + return o + } + const I = {}; + + function O(e) { + !0 !== a[e] && (t.enable(e), a[e] = !0) + } + + function N(e) { + !1 !== a[e] && (t.disable(e), a[e] = !1) + } + I[3553] = D(3553, 3553, 1), I[34067] = D(34067, 34069, 6), r.setClear(0, 0, 0, 1), o.setClear(1), s.setClear(0), O(2929), o.setFunc(3), U(!1), H(1), O(2884), z(0); + const B = { + 100: 32774, + 101: 32778, + 102: 32779 + }; + if (i) B[103] = 32775, B[104] = 32776; + else { + const t = e.get("EXT_blend_minmax"); + null !== t && (B[103] = t.MIN_EXT, B[104] = t.MAX_EXT) + } + const F = { + 200: 0, + 201: 1, + 202: 768, + 204: 770, + 210: 776, + 208: 774, + 206: 772, + 203: 769, + 205: 771, + 209: 775, + 207: 773 + }; + + function z(e, n, i, r, o, s, a, l) { + if (0 !== e) { + if (c || (O(3042), c = !0), 5 === e) o = o || n, s = s || i, a = a || r, n === u && o === f || (t.blendEquationSeparate(B[n], B[o]), u = n, f = o), i === d && r === p && s === m && a === g || (t.blendFuncSeparate(F[i], F[r], F[s], F[a]), d = i, p = r, m = s, g = a), h = e, v = null; + else if (e !== h || l !== v) { + if (100 === u && 100 === f || (t.blendEquation(32774), u = 100, f = 100), l) switch (e) { + case 1: + t.blendFuncSeparate(1, 771, 1, 771); + break; + case 2: + t.blendFunc(1, 1); + break; + case 3: + t.blendFuncSeparate(0, 0, 769, 771); + break; + case 4: + t.blendFuncSeparate(0, 768, 0, 770); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } else switch (e) { + case 1: + t.blendFuncSeparate(770, 771, 1, 771); + break; + case 2: + t.blendFunc(770, 1); + break; + case 3: + t.blendFunc(0, 769); + break; + case 4: + t.blendFunc(0, 768); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } + d = null, p = null, m = null, g = null, h = e, v = l + } + } else c && (N(3042), c = !1) + } + + function U(e) { + y !== e && (e ? t.frontFace(2304) : t.frontFace(2305), y = e) + } + + function H(e) { + 0 !== e ? (O(2884), e !== A && (1 === e ? t.cullFace(1029) : 2 === e ? t.cullFace(1028) : t.cullFace(1032))) : N(2884), A = e + } + + function G(e, n, i) { + e ? (O(32823), _ === n && b === i || (t.polygonOffset(n, i), _ = n, b = i)) : N(32823) + } + + function V(e) { + void 0 === e && (e = 33984 + w - 1), L !== e && (t.activeTexture(e), L = e) + } + return { + buffers: { + color: r, + depth: o, + stencil: s + }, + enable: O, + disable: N, + useProgram: function(e) { + return l !== e && (t.useProgram(e), l = e, !0) + }, + setBlending: z, + setMaterial: function(t, e) { + 2 === t.side ? N(2884) : O(2884); + let n = 1 === t.side; + e && (n = !n), U(n), 1 === t.blending && !1 === t.transparent ? z(0) : z(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.premultipliedAlpha), o.setFunc(t.depthFunc), o.setTest(t.depthTest), o.setMask(t.depthWrite), r.setMask(t.colorWrite); + const i = t.stencilWrite; + s.setTest(i), i && (s.setMask(t.stencilWriteMask), s.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), s.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), G(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits) + }, + setFlipSided: U, + setCullFace: H, + setLineWidth: function(e) { + e !== x && (E && t.lineWidth(e), x = e) + }, + setPolygonOffset: G, + setScissorTest: function(t) { + t ? O(3089) : N(3089) + }, + activeTexture: V, + bindTexture: function(e, n) { + null === L && V(); + let i = R[L]; + void 0 === i && (i = { + type: void 0, + texture: void 0 + }, R[L] = i), i.type === e && i.texture === n || (t.bindTexture(e, n || I[e]), i.type = e, i.texture = n) + }, + unbindTexture: function() { + const e = R[L]; + void 0 !== e && void 0 !== e.type && (t.bindTexture(e.type, null), e.type = void 0, e.texture = void 0) + }, + compressedTexImage2D: function() { + try { + t.compressedTexImage2D.apply(t, arguments) + } catch (t) { + console.error("THREE.WebGLState:", t) + } + }, + texImage2D: function() { + try { + t.texImage2D.apply(t, arguments) + } catch (t) { + console.error("THREE.WebGLState:", t) + } + }, + texImage3D: function() { + try { + t.texImage3D.apply(t, arguments) + } catch (t) { + console.error("THREE.WebGLState:", t) + } + }, + scissor: function(e) { + !1 === C.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), C.copy(e)) + }, + viewport: function(e) { + !1 === P.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), P.copy(e)) + }, + reset: function() { + a = {}, L = null, R = {}, l = null, c = null, h = null, u = null, d = null, p = null, f = null, m = null, g = null, v = !1, y = null, A = null, x = null, _ = null, b = null, r.reset(), o.reset(), s.reset() + } + } + } + + function nr(t, e, n, i, r, o, s) { + const a = r.isWebGL2, + l = r.maxTextures, + c = r.maxCubemapSize, + h = r.maxTextureSize, + u = r.maxSamples, + d = new WeakMap; + let p, f = !1; + try { + f = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") + } catch (t) {} + + function m(t, e) { + return f ? new OffscreenCanvas(t, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") + } + + function v(t, e, n, i) { + let r = 1; + if ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), r < 1 || !0 === e) { + if ("undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap) { + const i = e ? g.floorPowerOfTwo : Math.floor, + o = i(r * t.width), + s = i(r * t.height); + void 0 === p && (p = m(o, s)); + const a = n ? m(o, s) : p; + a.width = o, a.height = s; + return a.getContext("2d").drawImage(t, 0, 0, o, s), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + t.width + "x" + t.height + ") to (" + o + "x" + s + ")."), a + } + return "data" in t && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + t.width + "x" + t.height + ")."), t + } + return t + } + + function y(t) { + return g.isPowerOfTwo(t.width) && g.isPowerOfTwo(t.height) + } + + function A(t, e) { + return t.generateMipmaps && e && 1003 !== t.minFilter && 1006 !== t.minFilter + } + + function x(e, n, r, o) { + t.generateMipmap(e); + i.get(n).__maxMipLevel = Math.log(Math.max(r, o)) * Math.LOG2E + } + + function _(n, i, r) { + if (!1 === a) return i; + if (null !== n) { + if (void 0 !== t[n]) return t[n]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'") + } + let o = i; + return 6403 === i && (5126 === r && (o = 33326), 5131 === r && (o = 33325), 5121 === r && (o = 33321)), 6407 === i && (5126 === r && (o = 34837), 5131 === r && (o = 34843), 5121 === r && (o = 32849)), 6408 === i && (5126 === r && (o = 34836), 5131 === r && (o = 34842), 5121 === r && (o = 32856)), 33325 !== o && 33326 !== o && 34842 !== o && 34836 !== o || e.get("EXT_color_buffer_float"), o + } + + function b(t) { + return 1003 === t || 1004 === t || 1005 === t ? 9728 : 9729 + } + + function w(e) { + const n = e.target; + n.removeEventListener("dispose", w), + function(e) { + const n = i.get(e); + if (void 0 === n.__webglInit) return; + t.deleteTexture(n.__webglTexture), i.remove(e) + }(n), n.isVideoTexture && d.delete(n), s.memory.textures-- + } + + function M(e) { + const n = e.target; + n.removeEventListener("dispose", M), + function(e) { + const n = i.get(e), + r = i.get(e.texture); + if (!e) return; + void 0 !== r.__webglTexture && t.deleteTexture(r.__webglTexture); + e.depthTexture && e.depthTexture.dispose(); + if (e.isWebGLCubeRenderTarget) + for (let e = 0; e < 6; e++) t.deleteFramebuffer(n.__webglFramebuffer[e]), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer[e]); + else t.deleteFramebuffer(n.__webglFramebuffer), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer), n.__webglMultisampledFramebuffer && t.deleteFramebuffer(n.__webglMultisampledFramebuffer), n.__webglColorRenderbuffer && t.deleteRenderbuffer(n.__webglColorRenderbuffer), n.__webglDepthRenderbuffer && t.deleteRenderbuffer(n.__webglDepthRenderbuffer); + i.remove(e.texture), i.remove(e) + }(n), s.memory.textures-- + } + let E = 0; + + function S(t, e) { + const r = i.get(t); + if (t.isVideoTexture && function(t) { + const e = s.render.frame; + d.get(t) !== e && (d.set(t, e), t.update()) + }(t), t.version > 0 && r.__version !== t.version) { + const n = t.image; + if (void 0 === n) console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined"); + else { + if (!1 !== n.complete) return void D(r, t, e); + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") + } + } + n.activeTexture(33984 + e), n.bindTexture(3553, r.__webglTexture) + } + + function T(e, r) { + const s = i.get(e); + e.version > 0 && s.__version !== e.version ? function(e, i, r) { + if (6 !== i.image.length) return; + P(e, i), n.activeTexture(33984 + r), n.bindTexture(34067, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); + const s = i && (i.isCompressedTexture || i.image[0].isCompressedTexture), + l = i.image[0] && i.image[0].isDataTexture, + h = []; + for (let t = 0; t < 6; t++) h[t] = s || l ? l ? i.image[t].image : i.image[t] : v(i.image[t], !1, !0, c); + const u = h[0], + d = y(u) || a, + p = o.convert(i.format), + f = o.convert(i.type), + m = _(i.internalFormat, p, f); + let g; + if (C(34067, i, d), s) { + for (let t = 0; t < 6; t++) { + g = h[t].mipmaps; + for (let e = 0; e < g.length; e++) { + const r = g[e]; + 1023 !== i.format && 1022 !== i.format ? null !== p ? n.compressedTexImage2D(34069 + t, e, m, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : n.texImage2D(34069 + t, e, m, r.width, r.height, 0, p, f, r.data) + } + } + e.__maxMipLevel = g.length - 1 + } else { + g = i.mipmaps; + for (let t = 0; t < 6; t++) + if (l) { + n.texImage2D(34069 + t, 0, m, h[t].width, h[t].height, 0, p, f, h[t].data); + for (let e = 0; e < g.length; e++) { + const i = g[e].image[t].image; + n.texImage2D(34069 + t, e + 1, m, i.width, i.height, 0, p, f, i.data) + } + } else { + n.texImage2D(34069 + t, 0, m, p, f, h[t]); + for (let e = 0; e < g.length; e++) { + const i = g[e]; + n.texImage2D(34069 + t, e + 1, m, p, f, i.image[t]) + } + } e.__maxMipLevel = g.length + } + A(i, d) && x(34067, i, u.width, u.height); + e.__version = i.version, i.onUpdate && i.onUpdate(i) + }(s, e, r) : (n.activeTexture(33984 + r), n.bindTexture(34067, s.__webglTexture)) + } + const L = { + 1e3: 10497, + 1001: 33071, + 1002: 33648 + }, + R = { + 1003: 9728, + 1004: 9984, + 1005: 9986, + 1006: 9729, + 1007: 9985, + 1008: 9987 + }; + + function C(n, o, s) { + s ? (t.texParameteri(n, 10242, L[o.wrapS]), t.texParameteri(n, 10243, L[o.wrapT]), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, L[o.wrapR]), t.texParameteri(n, 10240, R[o.magFilter]), t.texParameteri(n, 10241, R[o.minFilter])) : (t.texParameteri(n, 10242, 33071), t.texParameteri(n, 10243, 33071), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, 33071), 1001 === o.wrapS && 1001 === o.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), t.texParameteri(n, 10240, b(o.magFilter)), t.texParameteri(n, 10241, b(o.minFilter)), 1003 !== o.minFilter && 1006 !== o.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")); + const l = e.get("EXT_texture_filter_anisotropic"); + if (l) { + if (1015 === o.type && null === e.get("OES_texture_float_linear")) return; + if (1016 === o.type && null === (a || e.get("OES_texture_half_float_linear"))) return; + (o.anisotropy > 1 || i.get(o).__currentAnisotropy) && (t.texParameterf(n, l.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(o.anisotropy, r.getMaxAnisotropy())), i.get(o).__currentAnisotropy = o.anisotropy) + } + } + + function P(e, n) { + void 0 === e.__webglInit && (e.__webglInit = !0, n.addEventListener("dispose", w), e.__webglTexture = t.createTexture(), s.memory.textures++) + } + + function D(e, i, r) { + let s = 3553; + i.isDataTexture2DArray && (s = 35866), i.isDataTexture3D && (s = 32879), P(e, i), n.activeTexture(33984 + r), n.bindTexture(s, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); + const l = function(t) { + return !a && (1001 !== t.wrapS || 1001 !== t.wrapT || 1003 !== t.minFilter && 1006 !== t.minFilter) + }(i) && !1 === y(i.image), + c = v(i.image, l, !1, h), + u = y(c) || a, + d = o.convert(i.format); + let p, f = o.convert(i.type), + m = _(i.internalFormat, d, f); + C(s, i, u); + const g = i.mipmaps; + if (i.isDepthTexture) m = 6402, a ? m = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), 1026 === i.format && 6402 === m && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), i.type = 1012, f = o.convert(i.type)), 1027 === i.format && 6402 === m && (m = 34041, 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), i.type = 1020, f = o.convert(i.type))), n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, null); + else if (i.isDataTexture) + if (g.length > 0 && u) { + for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); + i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 + } else n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, c.data), e.__maxMipLevel = 0; + else if (i.isCompressedTexture) { + for (let t = 0, e = g.length; t < e; t++) p = g[t], 1023 !== i.format && 1022 !== i.format ? null !== d ? n.compressedTexImage2D(3553, t, m, p.width, p.height, 0, p.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); + e.__maxMipLevel = g.length - 1 + } else if (i.isDataTexture2DArray) n.texImage3D(35866, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; + else if (i.isDataTexture3D) n.texImage3D(32879, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; + else if (g.length > 0 && u) { + for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, d, f, p); + i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 + } else n.texImage2D(3553, 0, m, d, f, c), e.__maxMipLevel = 0; + A(i, u) && x(s, i, c.width, c.height), e.__version = i.version, i.onUpdate && i.onUpdate(i) + } + + function I(e, r, s, a) { + const l = o.convert(r.texture.format), + c = o.convert(r.texture.type), + h = _(r.texture.internalFormat, l, c); + n.texImage2D(a, 0, h, r.width, r.height, 0, l, c, null), t.bindFramebuffer(36160, e), t.framebufferTexture2D(36160, s, a, i.get(r.texture).__webglTexture, 0), t.bindFramebuffer(36160, null) + } + + function O(e, n, i) { + if (t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer) { + let r = 33189; + if (i) { + const e = n.depthTexture; + e && e.isDepthTexture && (1015 === e.type ? r = 36012 : 1014 === e.type && (r = 33190)); + const i = B(n); + t.renderbufferStorageMultisample(36161, i, r, n.width, n.height) + } else t.renderbufferStorage(36161, r, n.width, n.height); + t.framebufferRenderbuffer(36160, 36096, 36161, e) + } else if (n.depthBuffer && n.stencilBuffer) { + if (i) { + const e = B(n); + t.renderbufferStorageMultisample(36161, e, 35056, n.width, n.height) + } else t.renderbufferStorage(36161, 34041, n.width, n.height); + t.framebufferRenderbuffer(36160, 33306, 36161, e) + } else { + const e = o.convert(n.texture.format), + r = o.convert(n.texture.type), + s = _(n.texture.internalFormat, e, r); + if (i) { + const e = B(n); + t.renderbufferStorageMultisample(36161, e, s, n.width, n.height) + } else t.renderbufferStorage(36161, s, n.width, n.height) + } + t.bindRenderbuffer(36161, null) + } + + function N(e) { + const n = i.get(e), + r = !0 === e.isWebGLCubeRenderTarget; + if (e.depthTexture) { + if (r) throw new Error("target.depthTexture not supported in Cube render targets"); + ! function(e, n) { + if (n && n.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported"); + if (t.bindFramebuffer(36160, e), !n.depthTexture || !n.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + i.get(n.depthTexture).__webglTexture && n.depthTexture.image.width === n.width && n.depthTexture.image.height === n.height || (n.depthTexture.image.width = n.width, n.depthTexture.image.height = n.height, n.depthTexture.needsUpdate = !0), S(n.depthTexture, 0); + const r = i.get(n.depthTexture).__webglTexture; + if (1026 === n.depthTexture.format) t.framebufferTexture2D(36160, 36096, 3553, r, 0); + else { + if (1027 !== n.depthTexture.format) throw new Error("Unknown depthTexture format"); + t.framebufferTexture2D(36160, 33306, 3553, r, 0) + } + }(n.__webglFramebuffer, e) + } else if (r) { + n.__webglDepthbuffer = []; + for (let i = 0; i < 6; i++) t.bindFramebuffer(36160, n.__webglFramebuffer[i]), n.__webglDepthbuffer[i] = t.createRenderbuffer(), O(n.__webglDepthbuffer[i], e, !1) + } else t.bindFramebuffer(36160, n.__webglFramebuffer), n.__webglDepthbuffer = t.createRenderbuffer(), O(n.__webglDepthbuffer, e, !1); + t.bindFramebuffer(36160, null) + } + + function B(t) { + return a && t.isWebGLMultisampleRenderTarget ? Math.min(u, t.samples) : 0 + } + let F = !1, + z = !1; + this.allocateTextureUnit = function() { + const t = E; + return t >= l && console.warn("THREE.WebGLTextures: Trying to use " + t + " texture units while this GPU supports only " + l), E += 1, t + }, this.resetTextureUnits = function() { + E = 0 + }, this.setTexture2D = S, this.setTexture2DArray = function(t, e) { + const r = i.get(t); + t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture)) + }, this.setTexture3D = function(t, e) { + const r = i.get(t); + t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture)) + }, this.setTextureCube = T, this.setupRenderTarget = function(e) { + const r = i.get(e), + l = i.get(e.texture); + e.addEventListener("dispose", M), l.__webglTexture = t.createTexture(), s.memory.textures++; + const c = !0 === e.isWebGLCubeRenderTarget, + h = !0 === e.isWebGLMultisampleRenderTarget, + u = y(e) || a; + if (!a || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), c) { + r.__webglFramebuffer = []; + for (let e = 0; e < 6; e++) r.__webglFramebuffer[e] = t.createFramebuffer() + } else if (r.__webglFramebuffer = t.createFramebuffer(), h) + if (a) { + r.__webglMultisampledFramebuffer = t.createFramebuffer(), r.__webglColorRenderbuffer = t.createRenderbuffer(), t.bindRenderbuffer(36161, r.__webglColorRenderbuffer); + const n = o.convert(e.texture.format), + i = o.convert(e.texture.type), + s = _(e.texture.internalFormat, n, i), + a = B(e); + t.renderbufferStorageMultisample(36161, a, s, e.width, e.height), t.bindFramebuffer(36160, r.__webglMultisampledFramebuffer), t.framebufferRenderbuffer(36160, 36064, 36161, r.__webglColorRenderbuffer), t.bindRenderbuffer(36161, null), e.depthBuffer && (r.__webglDepthRenderbuffer = t.createRenderbuffer(), O(r.__webglDepthRenderbuffer, e, !0)), t.bindFramebuffer(36160, null) + } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); + if (c) { + n.bindTexture(34067, l.__webglTexture), C(34067, e.texture, u); + for (let t = 0; t < 6; t++) I(r.__webglFramebuffer[t], e, 36064, 34069 + t); + A(e.texture, u) && x(34067, e.texture, e.width, e.height), n.bindTexture(34067, null) + } else n.bindTexture(3553, l.__webglTexture), C(3553, e.texture, u), I(r.__webglFramebuffer, e, 36064, 3553), A(e.texture, u) && x(3553, e.texture, e.width, e.height), n.bindTexture(3553, null); + e.depthBuffer && N(e) + }, this.updateRenderTargetMipmap = function(t) { + const e = t.texture; + if (A(e, y(t) || a)) { + const r = t.isWebGLCubeRenderTarget ? 34067 : 3553, + o = i.get(e).__webglTexture; + n.bindTexture(r, o), x(r, e, t.width, t.height), n.bindTexture(r, null) + } + }, this.updateMultisampleRenderTarget = function(e) { + if (e.isWebGLMultisampleRenderTarget) + if (a) { + const n = i.get(e); + t.bindFramebuffer(36008, n.__webglMultisampledFramebuffer), t.bindFramebuffer(36009, n.__webglFramebuffer); + const r = e.width, + o = e.height; + let s = 16384; + e.depthBuffer && (s |= 256), e.stencilBuffer && (s |= 1024), t.blitFramebuffer(0, 0, r, o, 0, 0, r, o, s, 9728), t.bindFramebuffer(36160, n.__webglMultisampledFramebuffer) + } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.") + }, this.safeSetTexture2D = function(t, e) { + t && t.isWebGLRenderTarget && (!1 === F && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), F = !0), t = t.texture), S(t, e) + }, this.safeSetTextureCube = function(t, e) { + t && t.isWebGLCubeRenderTarget && (!1 === z && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), z = !0), t = t.texture), T(t, e) + } + } + + function ir(t, e, n) { + const i = n.isWebGL2; + return { + convert: function(t) { + let n; + if (1009 === t) return 5121; + if (1017 === t) return 32819; + if (1018 === t) return 32820; + if (1019 === t) return 33635; + if (1010 === t) return 5120; + if (1011 === t) return 5122; + if (1012 === t) return 5123; + if (1013 === t) return 5124; + if (1014 === t) return 5125; + if (1015 === t) return 5126; + if (1016 === t) return i ? 5131 : (n = e.get("OES_texture_half_float"), null !== n ? n.HALF_FLOAT_OES : null); + if (1021 === t) return 6406; + if (1022 === t) return 6407; + if (1023 === t) return 6408; + if (1024 === t) return 6409; + if (1025 === t) return 6410; + if (1026 === t) return 6402; + if (1027 === t) return 34041; + if (1028 === t) return 6403; + if (1029 === t) return 36244; + if (1030 === t) return 33319; + if (1031 === t) return 33320; + if (1032 === t) return 36248; + if (1033 === t) return 36249; + if (33776 === t || 33777 === t || 33778 === t || 33779 === t) { + if (n = e.get("WEBGL_compressed_texture_s3tc"), null === n) return null; + if (33776 === t) return n.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (33777 === t) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (33778 === t) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (33779 === t) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT + } + if (35840 === t || 35841 === t || 35842 === t || 35843 === t) { + if (n = e.get("WEBGL_compressed_texture_pvrtc"), null === n) return null; + if (35840 === t) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (35841 === t) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (35842 === t) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (35843 === t) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (36196 === t) return n = e.get("WEBGL_compressed_texture_etc1"), null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null; + if ((37492 === t || 37496 === t) && (n = e.get("WEBGL_compressed_texture_etc"), null !== n)) { + if (37492 === t) return n.COMPRESSED_RGB8_ETC2; + if (37496 === t) return n.COMPRESSED_RGBA8_ETC2_EAC + } + return 37808 === t || 37809 === t || 37810 === t || 37811 === t || 37812 === t || 37813 === t || 37814 === t || 37815 === t || 37816 === t || 37817 === t || 37818 === t || 37819 === t || 37820 === t || 37821 === t || 37840 === t || 37841 === t || 37842 === t || 37843 === t || 37844 === t || 37845 === t || 37846 === t || 37847 === t || 37848 === t || 37849 === t || 37850 === t || 37851 === t || 37852 === t || 37853 === t ? (n = e.get("WEBGL_compressed_texture_astc"), null !== n ? t : null) : 36492 === t ? (n = e.get("EXT_texture_compression_bptc"), null !== n ? t : null) : 1020 === t ? i ? 34042 : (n = e.get("WEBGL_depth_texture"), null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) : void 0 + } + } + } + + function rr(t = []) { + Ye.call(this), this.cameras = t + } + + function or() { + St.call(this), this.type = "Group" + } + + function sr() { + this._targetRay = null, this._grip = null, this._hand = null + } + + function ar(t, e) { + const n = this; + let i = null, + r = 1, + o = null, + s = "local-floor", + a = null; + const l = [], + c = new Map, + h = new Ye; + h.layers.enable(1), h.viewport = new M; + const u = new Ye; + u.layers.enable(2), u.viewport = new M; + const d = [h, u], + p = new rr; + p.layers.enable(1), p.layers.enable(2); + let f = null, + m = null; + + function g(t) { + const e = c.get(t.inputSource); + e && e.dispatchEvent({ + type: t.type, + data: t.inputSource + }) + } + + function v() { + c.forEach((function(t, e) { + t.disconnect(e) + })), c.clear(), f = null, m = null, t.setFramebuffer(null), t.setRenderTarget(t.getRenderTarget()), w.stop(), n.isPresenting = !1, n.dispatchEvent({ + type: "sessionend" + }) + } + + function y(t) { + const e = i.inputSources; + for (let t = 0; t < l.length; t++) c.set(e[t], l[t]); + for (let e = 0; e < t.removed.length; e++) { + const n = t.removed[e], + i = c.get(n); + i && (i.dispatchEvent({ + type: "disconnected", + data: n + }), c.delete(n)) + } + for (let e = 0; e < t.added.length; e++) { + const n = t.added[e], + i = c.get(n); + i && i.dispatchEvent({ + type: "connected", + data: n + }) + } + } + this.enabled = !1, this.isPresenting = !1, this.getController = function(t) { + let e = l[t]; + return void 0 === e && (e = new sr, l[t] = e), e.getTargetRaySpace() + }, this.getControllerGrip = function(t) { + let e = l[t]; + return void 0 === e && (e = new sr, l[t] = e), e.getGripSpace() + }, this.getHand = function(t) { + let e = l[t]; + return void 0 === e && (e = new sr, l[t] = e), e.getHandSpace() + }, this.setFramebufferScaleFactor = function(t) { + r = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.") + }, this.setReferenceSpaceType = function(t) { + s = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.") + }, this.getReferenceSpace = function() { + return o + }, this.getSession = function() { + return i + }, this.setSession = async function(t) { + if (i = t, null !== i) { + i.addEventListener("select", g), i.addEventListener("selectstart", g), i.addEventListener("selectend", g), i.addEventListener("squeeze", g), i.addEventListener("squeezestart", g), i.addEventListener("squeezeend", g), i.addEventListener("end", v), i.addEventListener("inputsourceschange", y); + const t = e.getContextAttributes(); + !0 !== t.xrCompatible && await e.makeXRCompatible(); + const a = { + antialias: t.antialias, + alpha: t.alpha, + depth: t.depth, + stencil: t.stencil, + framebufferScaleFactor: r + }, + l = new XRWebGLLayer(i, e, a); + i.updateRenderState({ + baseLayer: l + }), o = await i.requestReferenceSpace(s), w.setContext(i), w.start(), n.isPresenting = !0, n.dispatchEvent({ + type: "sessionstart" + }) + } + }; + const A = new T, + x = new T; + + function _(t, e) { + null === e ? t.matrixWorld.copy(t.matrix) : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), t.matrixWorldInverse.copy(t.matrixWorld).invert() + } + this.getCamera = function(t) { + p.near = u.near = h.near = t.near, p.far = u.far = h.far = t.far, f === p.near && m === p.far || (i.updateRenderState({ + depthNear: p.near, + depthFar: p.far + }), f = p.near, m = p.far); + const e = t.parent, + n = p.cameras; + _(p, e); + for (let t = 0; t < n.length; t++) _(n[t], e); + t.matrixWorld.copy(p.matrixWorld), t.matrix.copy(p.matrix), t.matrix.decompose(t.position, t.quaternion, t.scale); + const r = t.children; + for (let t = 0, e = r.length; t < e; t++) r[t].updateMatrixWorld(!0); + return 2 === n.length ? function(t, e, n) { + A.setFromMatrixPosition(e.matrixWorld), x.setFromMatrixPosition(n.matrixWorld); + const i = A.distanceTo(x), + r = e.projectionMatrix.elements, + o = n.projectionMatrix.elements, + s = r[14] / (r[10] - 1), + a = r[14] / (r[10] + 1), + l = (r[9] + 1) / r[5], + c = (r[9] - 1) / r[5], + h = (r[8] - 1) / r[0], + u = (o[8] + 1) / o[0], + d = s * h, + p = s * u, + f = i / (-h + u), + m = f * -h; + e.matrixWorld.decompose(t.position, t.quaternion, t.scale), t.translateX(m), t.translateZ(f), t.matrixWorld.compose(t.position, t.quaternion, t.scale), t.matrixWorldInverse.copy(t.matrixWorld).invert(); + const g = s + f, + v = a + f, + y = d - m, + _ = p + (i - m), + b = l * a / v * g, + w = c * a / v * g; + t.projectionMatrix.makePerspective(y, _, b, w, g, v) + }(p, h, u) : p.projectionMatrix.copy(h.projectionMatrix), p + }; + let b = null; + const w = new nn; + w.setAnimationLoop((function(e, n) { + if (a = n.getViewerPose(o), null !== a) { + const e = a.views, + n = i.renderState.baseLayer; + t.setFramebuffer(n.framebuffer); + let r = !1; + e.length !== p.cameras.length && (p.cameras.length = 0, r = !0); + for (let t = 0; t < e.length; t++) { + const i = e[t], + o = n.getViewport(i), + s = d[t]; + s.matrix.fromArray(i.transform.matrix), s.projectionMatrix.fromArray(i.projectionMatrix), s.viewport.set(o.x, o.y, o.width, o.height), 0 === t && p.matrix.copy(s.matrix), !0 === r && p.cameras.push(s) + } + } + const r = i.inputSources; + for (let t = 0; t < l.length; t++) { + const e = l[t], + i = r[t]; + e.update(i, n, o) + } + b && b(e, n) + })), this.setAnimationLoop = function(t) { + b = t + }, this.dispose = function() {} + } + + function lr(t) { + function e(e, n) { + e.opacity.value = n.opacity, n.color && e.diffuse.value.copy(n.color), n.emissive && e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity), n.map && (e.map.value = n.map), n.alphaMap && (e.alphaMap.value = n.alphaMap), n.specularMap && (e.specularMap.value = n.specularMap); + const i = t.get(n).envMap; + if (i) { + e.envMap.value = i, e.flipEnvMap.value = i.isCubeTexture && i._needsFlipEnvMap ? -1 : 1, e.reflectivity.value = n.reflectivity, e.refractionRatio.value = n.refractionRatio; + const r = t.get(i).__maxMipLevel; + void 0 !== r && (e.maxMipLevel.value = r) + } + let r, o; + n.lightMap && (e.lightMap.value = n.lightMap, e.lightMapIntensity.value = n.lightMapIntensity), n.aoMap && (e.aoMap.value = n.aoMap, e.aoMapIntensity.value = n.aoMapIntensity), n.map ? r = n.map : n.specularMap ? r = n.specularMap : n.displacementMap ? r = n.displacementMap : n.normalMap ? r = n.normalMap : n.bumpMap ? r = n.bumpMap : n.roughnessMap ? r = n.roughnessMap : n.metalnessMap ? r = n.metalnessMap : n.alphaMap ? r = n.alphaMap : n.emissiveMap ? r = n.emissiveMap : n.clearcoatMap ? r = n.clearcoatMap : n.clearcoatNormalMap ? r = n.clearcoatNormalMap : n.clearcoatRoughnessMap && (r = n.clearcoatRoughnessMap), void 0 !== r && (r.isWebGLRenderTarget && (r = r.texture), !0 === r.matrixAutoUpdate && r.updateMatrix(), e.uvTransform.value.copy(r.matrix)), n.aoMap ? o = n.aoMap : n.lightMap && (o = n.lightMap), void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), !0 === o.matrixAutoUpdate && o.updateMatrix(), e.uv2Transform.value.copy(o.matrix)) + } + + function n(e, n) { + e.roughness.value = n.roughness, e.metalness.value = n.metalness, n.roughnessMap && (e.roughnessMap.value = n.roughnessMap), n.metalnessMap && (e.metalnessMap.value = n.metalnessMap), n.emissiveMap && (e.emissiveMap.value = n.emissiveMap), n.bumpMap && (e.bumpMap.value = n.bumpMap, e.bumpScale.value = n.bumpScale, 1 === n.side && (e.bumpScale.value *= -1)), n.normalMap && (e.normalMap.value = n.normalMap, e.normalScale.value.copy(n.normalScale), 1 === n.side && e.normalScale.value.negate()), n.displacementMap && (e.displacementMap.value = n.displacementMap, e.displacementScale.value = n.displacementScale, e.displacementBias.value = n.displacementBias); + t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity) + } + return { + refreshFogUniforms: function(t, e) { + t.fogColor.value.copy(e.color), e.isFog ? (t.fogNear.value = e.near, t.fogFar.value = e.far) : e.isFogExp2 && (t.fogDensity.value = e.density) + }, + refreshMaterialUniforms: function(t, i, r, o) { + i.isMeshBasicMaterial ? e(t, i) : i.isMeshLambertMaterial ? (e(t, i), function(t, e) { + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) + }(t, i)) : i.isMeshToonMaterial ? (e(t, i), function(t, e) { + e.gradientMap && (t.gradientMap.value = e.gradientMap); + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshPhongMaterial ? (e(t, i), function(t, e) { + t.specular.value.copy(e.specular), t.shininess.value = Math.max(e.shininess, 1e-4), e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshStandardMaterial ? (e(t, i), i.isMeshPhysicalMaterial ? function(t, e) { + n(t, e), t.reflectivity.value = e.reflectivity, t.clearcoat.value = e.clearcoat, t.clearcoatRoughness.value = e.clearcoatRoughness, e.sheen && t.sheen.value.copy(e.sheen); + e.clearcoatMap && (t.clearcoatMap.value = e.clearcoatMap); + e.clearcoatRoughnessMap && (t.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap); + e.clearcoatNormalMap && (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), t.clearcoatNormalMap.value = e.clearcoatNormalMap, 1 === e.side && t.clearcoatNormalScale.value.negate()); + t.transmission.value = e.transmission, e.transmissionMap && (t.transmissionMap.value = e.transmissionMap) + }(t, i) : n(t, i)) : i.isMeshMatcapMaterial ? (e(t, i), function(t, e) { + e.matcap && (t.matcap.value = e.matcap); + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshDepthMaterial ? (e(t, i), function(t, e) { + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isMeshDistanceMaterial ? (e(t, i), function(t, e) { + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias); + t.referencePosition.value.copy(e.referencePosition), t.nearDistance.value = e.nearDistance, t.farDistance.value = e.farDistance + }(t, i)) : i.isMeshNormalMaterial ? (e(t, i), function(t, e) { + e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) + }(t, i)) : i.isLineBasicMaterial ? (function(t, e) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity + }(t, i), i.isLineDashedMaterial && function(t, e) { + t.dashSize.value = e.dashSize, t.totalSize.value = e.dashSize + e.gapSize, t.scale.value = e.scale + }(t, i)) : i.isPointsMaterial ? function(t, e, n, i) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.size.value = e.size * n, t.scale.value = .5 * i, e.map && (t.map.value = e.map); + e.alphaMap && (t.alphaMap.value = e.alphaMap); + let r; + e.map ? r = e.map : e.alphaMap && (r = e.alphaMap); + void 0 !== r && (!0 === r.matrixAutoUpdate && r.updateMatrix(), t.uvTransform.value.copy(r.matrix)) + }(t, i, r, o) : i.isSpriteMaterial ? function(t, e) { + t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.rotation.value = e.rotation, e.map && (t.map.value = e.map); + e.alphaMap && (t.alphaMap.value = e.alphaMap); + let n; + e.map ? n = e.map : e.alphaMap && (n = e.alphaMap); + void 0 !== n && (!0 === n.matrixAutoUpdate && n.updateMatrix(), t.uvTransform.value.copy(n.matrix)) + }(t, i) : i.isShadowMaterial ? (t.color.value.copy(i.color), t.opacity.value = i.opacity) : i.isShaderMaterial && (i.uniformsNeedUpdate = !1) + } + } + } + + function cr(t) { + const e = void 0 !== (t = t || {}).canvas ? t.canvas : function() { + const t = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + return t.style.display = "block", t + }(), + n = void 0 !== t.context ? t.context : null, + i = void 0 !== t.alpha && t.alpha, + r = void 0 === t.depth || t.depth, + o = void 0 === t.stencil || t.stencil, + s = void 0 !== t.antialias && t.antialias, + a = void 0 === t.premultipliedAlpha || t.premultipliedAlpha, + l = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer, + c = void 0 !== t.powerPreference ? t.powerPreference : "default", + h = void 0 !== t.failIfMajorPerformanceCaveat && t.failIfMajorPerformanceCaveat; + let u = null, + d = null; + const p = []; + this.domElement = e, this.debug = { + checkShaderErrors: !0 + }, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this.gammaFactor = 2, this.outputEncoding = 3e3, this.physicallyCorrectLights = !1, this.toneMapping = 0, this.toneMappingExposure = 1, this.maxMorphTargets = 8, this.maxMorphNormals = 4; + const f = this; + let m = !1, + y = null, + A = 0, + x = 0, + _ = null, + b = null, + w = -1, + E = null; + const S = new M, + L = new M; + let R = null, + C = e.width, + P = e.height, + D = 1, + I = null, + O = null; + const N = new M(0, 0, C, P), + B = new M(0, 0, C, P); + let F = !1; + const z = new en; + let U = !1, + H = !1; + const G = new et, + V = new T, + k = { + background: null, + fog: null, + environment: null, + overrideMaterial: null, + isScene: !0 + }; + + function W() { + return null === _ ? D : 1 + } + let j, X, q, Y, Q, Z, J, K, $, tt, nt, it, rt, ot, st, at, lt, ct, ht, ut, dt, pt = n; + + function ft(t, n) { + for (let i = 0; i < t.length; i++) { + const r = t[i], + o = e.getContext(r, n); + if (null !== o) return o + } + return null + } + try { + const t = { + alpha: i, + depth: r, + stencil: o, + antialias: s, + premultipliedAlpha: a, + preserveDrawingBuffer: l, + powerPreference: c, + failIfMajorPerformanceCaveat: h + }; + if (e.addEventListener("webglcontextlost", yt, !1), e.addEventListener("webglcontextrestored", At, !1), null === pt) { + const e = ["webgl2", "webgl", "experimental-webgl"]; + if (!0 === f.isWebGL1Renderer && e.shift(), pt = ft(e, t), null === pt) throw ft(e) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.") + } + void 0 === pt.getShaderPrecisionFormat && (pt.getShaderPrecisionFormat = function() { + return { + rangeMin: 1, + rangeMax: 1, + precision: 1 + } + }) + } catch (t) { + throw console.error("THREE.WebGLRenderer: " + t.message), t + } + + function mt() { + j = new mn(pt), X = new dn(pt, j, t), j.init(X), ut = new ir(pt, j, X), q = new er(pt, j, X), q.scissor(L.copy(B).multiplyScalar(D).floor()), q.viewport(S.copy(N).multiplyScalar(D).floor()), Y = new yn(pt), Q = new Gi, Z = new nr(pt, j, q, Q, X, ut, Y), J = new fn(f), K = new rn(pt, X), dt = new hn(pt, j, K, X), $ = new gn(pt, K, Y, dt), tt = new bn(pt, $, K, Y), lt = new _n(pt), st = new pn(Q), nt = new Hi(f, J, j, X, dt, st), it = new lr(Q), rt = new ji(Q), ot = new Ji(j, X), at = new cn(f, J, q, tt, a), ct = new un(pt, j, Y, X), ht = new vn(pt, j, Y, X), Y.programs = nt.programs, f.capabilities = X, f.extensions = j, f.properties = Q, f.renderLists = rt, f.state = q, f.info = Y + } + mt(); + const gt = new ar(f, pt); + this.xr = gt; + const vt = new tr(f, tt, X.maxTextureSize); + + function yt(t) { + t.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), m = !0 + } + + function At() { + console.log("THREE.WebGLRenderer: Context Restored."), m = !1, mt() + } + + function xt(t) { + const e = t.target; + e.removeEventListener("dispose", xt), + function(t) { + _t(t), Q.remove(t) + }(e) + } + + function _t(t) { + const e = Q.get(t).program; + void 0 !== e && nt.releaseProgram(e) + } + this.shadowMap = vt, this.getContext = function() { + return pt + }, this.getContextAttributes = function() { + return pt.getContextAttributes() + }, this.forceContextLoss = function() { + const t = j.get("WEBGL_lose_context"); + t && t.loseContext() + }, this.forceContextRestore = function() { + const t = j.get("WEBGL_lose_context"); + t && t.restoreContext() + }, this.getPixelRatio = function() { + return D + }, this.setPixelRatio = function(t) { + void 0 !== t && (D = t, this.setSize(C, P, !1)) + }, this.getSize = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), t = new v), t.set(C, P) + }, this.setSize = function(t, n, i) { + gt.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (C = t, P = n, e.width = Math.floor(t * D), e.height = Math.floor(n * D), !1 !== i && (e.style.width = t + "px", e.style.height = n + "px"), this.setViewport(0, 0, t, n)) + }, this.getDrawingBufferSize = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), t = new v), t.set(C * D, P * D).floor() + }, this.setDrawingBufferSize = function(t, n, i) { + C = t, P = n, D = i, e.width = Math.floor(t * i), e.height = Math.floor(n * i), this.setViewport(0, 0, t, n) + }, this.getCurrentViewport = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), t = new M), t.copy(S) + }, this.getViewport = function(t) { + return t.copy(N) + }, this.setViewport = function(t, e, n, i) { + t.isVector4 ? N.set(t.x, t.y, t.z, t.w) : N.set(t, e, n, i), q.viewport(S.copy(N).multiplyScalar(D).floor()) + }, this.getScissor = function(t) { + return t.copy(B) + }, this.setScissor = function(t, e, n, i) { + t.isVector4 ? B.set(t.x, t.y, t.z, t.w) : B.set(t, e, n, i), q.scissor(L.copy(B).multiplyScalar(D).floor()) + }, this.getScissorTest = function() { + return F + }, this.setScissorTest = function(t) { + q.setScissorTest(F = t) + }, this.setOpaqueSort = function(t) { + I = t + }, this.setTransparentSort = function(t) { + O = t + }, this.getClearColor = function(t) { + return void 0 === t && (console.warn("WebGLRenderer: .getClearColor() now requires a Color as an argument"), t = new Yt), t.copy(at.getClearColor()) + }, this.setClearColor = function() { + at.setClearColor.apply(at, arguments) + }, this.getClearAlpha = function() { + return at.getClearAlpha() + }, this.setClearAlpha = function() { + at.setClearAlpha.apply(at, arguments) + }, this.clear = function(t, e, n) { + let i = 0; + (void 0 === t || t) && (i |= 16384), (void 0 === e || e) && (i |= 256), (void 0 === n || n) && (i |= 1024), pt.clear(i) + }, this.clearColor = function() { + this.clear(!0, !1, !1) + }, this.clearDepth = function() { + this.clear(!1, !0, !1) + }, this.clearStencil = function() { + this.clear(!1, !1, !0) + }, this.dispose = function() { + e.removeEventListener("webglcontextlost", yt, !1), e.removeEventListener("webglcontextrestored", At, !1), rt.dispose(), ot.dispose(), Q.dispose(), J.dispose(), tt.dispose(), dt.dispose(), gt.dispose(), wt.stop() + }, this.renderBufferImmediate = function(t, e) { + dt.initAttributes(); + const n = Q.get(t); + t.hasPositions && !n.position && (n.position = pt.createBuffer()), t.hasNormals && !n.normal && (n.normal = pt.createBuffer()), t.hasUvs && !n.uv && (n.uv = pt.createBuffer()), t.hasColors && !n.color && (n.color = pt.createBuffer()); + const i = e.getAttributes(); + t.hasPositions && (pt.bindBuffer(34962, n.position), pt.bufferData(34962, t.positionArray, 35048), dt.enableAttribute(i.position), pt.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), t.hasNormals && (pt.bindBuffer(34962, n.normal), pt.bufferData(34962, t.normalArray, 35048), dt.enableAttribute(i.normal), pt.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), t.hasUvs && (pt.bindBuffer(34962, n.uv), pt.bufferData(34962, t.uvArray, 35048), dt.enableAttribute(i.uv), pt.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), t.hasColors && (pt.bindBuffer(34962, n.color), pt.bufferData(34962, t.colorArray, 35048), dt.enableAttribute(i.color), pt.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), dt.disableUnusedAttributes(), pt.drawArrays(4, 0, t.count), t.count = 0 + }, this.renderBufferDirect = function(t, e, n, i, r, o) { + null === e && (e = k); + const s = r.isMesh && r.matrixWorld.determinant() < 0, + a = Lt(t, e, i, r); + q.setMaterial(i, s); + let l = n.index; + const c = n.attributes.position; + if (null === l) { + if (void 0 === c || 0 === c.count) return + } else if (0 === l.count) return; + let h, u = 1; + !0 === i.wireframe && (l = $.getWireframeAttribute(n), u = 2), (i.morphTargets || i.morphNormals) && lt.update(r, n, i, a), dt.setup(r, i, a, n, l); + let d = ct; + null !== l && (h = K.get(l), d = ht, d.setIndex(h)); + const p = null !== l ? l.count : c.count, + f = n.drawRange.start * u, + m = n.drawRange.count * u, + g = null !== o ? o.start * u : 0, + v = null !== o ? o.count * u : 1 / 0, + y = Math.max(f, g), + A = Math.min(p, f + m, g + v) - 1, + x = Math.max(0, A - y + 1); + if (0 !== x) { + if (r.isMesh) !0 === i.wireframe ? (q.setLineWidth(i.wireframeLinewidth * W()), d.setMode(1)) : d.setMode(4); + else if (r.isLine) { + let t = i.linewidth; + void 0 === t && (t = 1), q.setLineWidth(t * W()), r.isLineSegments ? d.setMode(1) : r.isLineLoop ? d.setMode(2) : d.setMode(3) + } else r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4); + if (r.isInstancedMesh) d.renderInstances(y, x, r.count); + else if (n.isInstancedBufferGeometry) { + const t = Math.min(n.instanceCount, n._maxInstanceCount); + d.renderInstances(y, x, t) + } else d.render(y, x) + } + }, this.compile = function(t, e) { + d = ot.get(t), d.init(), t.traverseVisible((function(t) { + t.isLight && t.layers.test(e.layers) && (d.pushLight(t), t.castShadow && d.pushShadow(t)) + })), d.setupLights(); + const n = new WeakMap; + t.traverse((function(e) { + const i = e.material; + if (i) + if (Array.isArray(i)) + for (let r = 0; r < i.length; r++) { + const o = i[r]; + !1 === n.has(o) && (Tt(o, t, e), n.set(o)) + } else !1 === n.has(i) && (Tt(i, t, e), n.set(i)) + })) + }; + let bt = null; + const wt = new nn; + + function Mt(t, e, n, i) { + if (!1 === t.visible) return; + if (t.layers.test(e.layers)) + if (t.isGroup) n = t.renderOrder; + else if (t.isLOD) !0 === t.autoUpdate && t.update(e); + else if (t.isLight) d.pushLight(t), t.castShadow && d.pushShadow(t); + else if (t.isSprite) { + if (!t.frustumCulled || z.intersectsSprite(t)) { + i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); + const e = tt.update(t), + r = t.material; + r.visible && u.push(t, e, r, n, V.z, null) + } + } else if (t.isImmediateRenderObject) i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G), u.push(t, null, t.material, n, V.z, null); + else if ((t.isMesh || t.isLine || t.isPoints) && (t.isSkinnedMesh && t.skeleton.frame !== Y.render.frame && (t.skeleton.update(), t.skeleton.frame = Y.render.frame), !t.frustumCulled || z.intersectsObject(t))) { + i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); + const e = tt.update(t), + r = t.material; + if (Array.isArray(r)) { + const i = e.groups; + for (let o = 0, s = i.length; o < s; o++) { + const s = i[o], + a = r[s.materialIndex]; + a && a.visible && u.push(t, e, a, n, V.z, s) + } + } else r.visible && u.push(t, e, r, n, V.z, null) + } + const r = t.children; + for (let t = 0, o = r.length; t < o; t++) Mt(r[t], e, n, i) + } + + function Et(t, e, n) { + const i = !0 === e.isScene ? e.overrideMaterial : null; + for (let r = 0, o = t.length; r < o; r++) { + const o = t[r], + s = o.object, + a = o.geometry, + l = null === i ? o.material : i, + c = o.group; + if (n.isArrayCamera) { + const t = n.cameras; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + s.layers.test(i.layers) && (q.viewport(S.copy(i.viewport)), d.setupLightsView(i), St(s, e, i, a, l, c)) + } + } else St(s, e, n, a, l, c) + } + } + + function St(t, e, n, i, r, o) { + if (t.onBeforeRender(f, e, n, i, r, o), t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), t.normalMatrix.getNormalMatrix(t.modelViewMatrix), t.isImmediateRenderObject) { + const i = Lt(n, e, r, t); + q.setMaterial(r), dt.reset(), + function(t, e) { + t.render((function(t) { + f.renderBufferImmediate(t, e) + })) + }(t, i) + } else f.renderBufferDirect(n, e, i, r, t, o); + t.onAfterRender(f, e, n, i, r, o) + } + + function Tt(t, e, n) { + !0 !== e.isScene && (e = k); + const i = Q.get(t), + r = d.state.lights, + o = d.state.shadowsArray, + s = r.state.version, + a = nt.getParameters(t, r.state, o, e, n), + l = nt.getProgramCacheKey(a); + let c = i.program, + h = !0; + if (i.environment = t.isMeshStandardMaterial ? e.environment : null, i.fog = e.fog, i.envMap = J.get(t.envMap || i.environment), void 0 === c) t.addEventListener("dispose", xt); + else if (c.cacheKey !== l) _t(t); + else if (i.lightsStateVersion !== s) h = !1; + else { + if (void 0 !== a.shaderID) return; + h = !1 + } + h && (a.uniforms = nt.getUniforms(t), t.onBeforeCompile(a, f), c = nt.acquireProgram(a, l), i.program = c, i.uniforms = a.uniforms, i.outputEncoding = a.outputEncoding); + const u = i.uniforms; + (t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping || (i.numClippingPlanes = st.numPlanes, i.numIntersection = st.numIntersection, u.clippingPlanes = st.uniform), i.needsLights = function(t) { + return t.isMeshLambertMaterial || t.isMeshToonMaterial || t.isMeshPhongMaterial || t.isMeshStandardMaterial || t.isShadowMaterial || t.isShaderMaterial && !0 === t.lights + }(t), i.lightsStateVersion = s, i.needsLights && (u.ambientLightColor.value = r.state.ambient, u.lightProbe.value = r.state.probe, u.directionalLights.value = r.state.directional, u.directionalLightShadows.value = r.state.directionalShadow, u.spotLights.value = r.state.spot, u.spotLightShadows.value = r.state.spotShadow, u.rectAreaLights.value = r.state.rectArea, u.ltc_1.value = r.state.rectAreaLTC1, u.ltc_2.value = r.state.rectAreaLTC2, u.pointLights.value = r.state.point, u.pointLightShadows.value = r.state.pointShadow, u.hemisphereLights.value = r.state.hemi, u.directionalShadowMap.value = r.state.directionalShadowMap, u.directionalShadowMatrix.value = r.state.directionalShadowMatrix, u.spotShadowMap.value = r.state.spotShadowMap, u.spotShadowMatrix.value = r.state.spotShadowMatrix, u.pointShadowMap.value = r.state.pointShadowMap, u.pointShadowMatrix.value = r.state.pointShadowMatrix); + const p = i.program.getUniforms(), + m = Ai.seqWithValue(p.seq, u); + i.uniformsList = m + } + + function Lt(t, e, n, i) { + !0 !== e.isScene && (e = k), Z.resetTextureUnits(); + const r = e.fog, + o = n.isMeshStandardMaterial ? e.environment : null, + s = null === _ ? f.outputEncoding : _.texture.encoding, + a = J.get(n.envMap || o), + l = Q.get(n), + c = d.state.lights; + if (!0 === U && (!0 === H || t !== E)) { + const e = t === E && n.id === w; + st.setState(n, t, e) + } + n.version === l.__version ? n.fog && l.fog !== r || l.environment !== o || l.needsLights && l.lightsStateVersion !== c.state.version ? Tt(n, e, i) : void 0 === l.numClippingPlanes || l.numClippingPlanes === st.numPlanes && l.numIntersection === st.numIntersection ? (l.outputEncoding !== s || l.envMap !== a) && Tt(n, e, i) : Tt(n, e, i) : (Tt(n, e, i), l.__version = n.version); + let h = !1, + u = !1, + p = !1; + const m = l.program, + v = m.getUniforms(), + y = l.uniforms; + if (q.useProgram(m.program) && (h = !0, u = !0, p = !0), n.id !== w && (w = n.id, u = !0), h || E !== t) { + if (v.setValue(pt, "projectionMatrix", t.projectionMatrix), X.logarithmicDepthBuffer && v.setValue(pt, "logDepthBufFC", 2 / (Math.log(t.far + 1) / Math.LN2)), E !== t && (E = t, u = !0, p = !0), n.isShaderMaterial || n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshStandardMaterial || n.envMap) { + const e = v.map.cameraPosition; + void 0 !== e && e.setValue(pt, V.setFromMatrixPosition(t.matrixWorld)) + }(n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial) && v.setValue(pt, "isOrthographic", !0 === t.isOrthographicCamera), (n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial || n.isShadowMaterial || n.skinning) && v.setValue(pt, "viewMatrix", t.matrixWorldInverse) + } + if (n.skinning) { + v.setOptional(pt, i, "bindMatrix"), v.setOptional(pt, i, "bindMatrixInverse"); + const t = i.skeleton; + if (t) { + const e = t.bones; + if (X.floatVertexTextures) { + if (null === t.boneTexture) { + let n = Math.sqrt(4 * e.length); + n = g.ceilPowerOfTwo(n), n = Math.max(n, 4); + const i = new Float32Array(n * n * 4); + i.set(t.boneMatrices); + const r = new Ke(i, n, n, 1023, 1015); + t.boneMatrices = i, t.boneTexture = r, t.boneTextureSize = n + } + v.setValue(pt, "boneTexture", t.boneTexture, Z), v.setValue(pt, "boneTextureSize", t.boneTextureSize) + } else v.setOptional(pt, t, "boneMatrices") + } + } + var A, x; + return (u || l.receiveShadow !== i.receiveShadow) && (l.receiveShadow = i.receiveShadow, v.setValue(pt, "receiveShadow", i.receiveShadow)), u && (v.setValue(pt, "toneMappingExposure", f.toneMappingExposure), l.needsLights && (x = p, (A = y).ambientLightColor.needsUpdate = x, A.lightProbe.needsUpdate = x, A.directionalLights.needsUpdate = x, A.directionalLightShadows.needsUpdate = x, A.pointLights.needsUpdate = x, A.pointLightShadows.needsUpdate = x, A.spotLights.needsUpdate = x, A.spotLightShadows.needsUpdate = x, A.rectAreaLights.needsUpdate = x, A.hemisphereLights.needsUpdate = x), r && n.fog && it.refreshFogUniforms(y, r), it.refreshMaterialUniforms(y, n, D, P), Ai.upload(pt, l.uniformsList, y, Z)), n.isShaderMaterial && !0 === n.uniformsNeedUpdate && (Ai.upload(pt, l.uniformsList, y, Z), n.uniformsNeedUpdate = !1), n.isSpriteMaterial && v.setValue(pt, "center", i.center), v.setValue(pt, "modelViewMatrix", i.modelViewMatrix), v.setValue(pt, "normalMatrix", i.normalMatrix), v.setValue(pt, "modelMatrix", i.matrixWorld), m + } + wt.setAnimationLoop((function(t) { + gt.isPresenting || bt && bt(t) + })), "undefined" != typeof window && wt.setContext(window), this.setAnimationLoop = function(t) { + bt = t, gt.setAnimationLoop(t), null === t ? wt.stop() : wt.start() + }, this.render = function(t, e) { + let n, i; + if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), n = arguments[2]), void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), i = arguments[3]), void 0 !== e && !0 !== e.isCamera) return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); + if (!0 === m) return; + dt.resetDefaultState(), w = -1, E = null, !0 === t.autoUpdate && t.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), !0 === gt.enabled && !0 === gt.isPresenting && (e = gt.getCamera(e)), !0 === t.isScene && t.onBeforeRender(f, t, e, n || _), d = ot.get(t, p.length), d.init(), p.push(d), G.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), z.setFromProjectionMatrix(G), H = this.localClippingEnabled, U = st.init(this.clippingPlanes, H, e), u = rt.get(t, e), u.init(), Mt(t, e, 0, f.sortObjects), u.finish(), !0 === f.sortObjects && u.sort(I, O), !0 === U && st.beginShadows(); + const r = d.state.shadowsArray; + vt.render(r, t, e), d.setupLights(), d.setupLightsView(e), !0 === U && st.endShadows(), !0 === this.info.autoReset && this.info.reset(), void 0 !== n && this.setRenderTarget(n), at.render(u, t, e, i); + const o = u.opaque, + s = u.transparent; + o.length > 0 && Et(o, t, e), s.length > 0 && Et(s, t, e), !0 === t.isScene && t.onAfterRender(f, t, e), null !== _ && (Z.updateRenderTargetMipmap(_), Z.updateMultisampleRenderTarget(_)), q.buffers.depth.setTest(!0), q.buffers.depth.setMask(!0), q.buffers.color.setMask(!0), q.setPolygonOffset(!1), p.pop(), d = p.length > 0 ? p[p.length - 1] : null, u = null + }, this.setFramebuffer = function(t) { + y !== t && null === _ && pt.bindFramebuffer(36160, t), y = t + }, this.getActiveCubeFace = function() { + return A + }, this.getActiveMipmapLevel = function() { + return x + }, this.getRenderList = function() { + return u + }, this.setRenderList = function(t) { + u = t + }, this.getRenderTarget = function() { + return _ + }, this.setRenderTarget = function(t, e = 0, n = 0) { + _ = t, A = e, x = n, t && void 0 === Q.get(t).__webglFramebuffer && Z.setupRenderTarget(t); + let i = y, + r = !1; + if (t) { + const n = Q.get(t).__webglFramebuffer; + t.isWebGLCubeRenderTarget ? (i = n[e], r = !0) : i = t.isWebGLMultisampleRenderTarget ? Q.get(t).__webglMultisampledFramebuffer : n, S.copy(t.viewport), L.copy(t.scissor), R = t.scissorTest + } else S.copy(N).multiplyScalar(D).floor(), L.copy(B).multiplyScalar(D).floor(), R = F; + if (b !== i && (pt.bindFramebuffer(36160, i), b = i), q.viewport(S), q.scissor(L), q.setScissorTest(R), r) { + const i = Q.get(t.texture); + pt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n) + } + }, this.readRenderTargetPixels = function(t, e, n, i, r, o, s) { + if (!t || !t.isWebGLRenderTarget) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + let a = Q.get(t).__webglFramebuffer; + if (t.isWebGLCubeRenderTarget && void 0 !== s && (a = a[s]), a) { + let s = !1; + a !== b && (pt.bindFramebuffer(36160, a), s = !0); + try { + const a = t.texture, + l = a.format, + c = a.type; + if (1023 !== l && ut.convert(l) !== pt.getParameter(35739)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + const h = 1016 === c && (j.has("EXT_color_buffer_half_float") || X.isWebGL2 && j.has("EXT_color_buffer_float")); + if (!(1009 === c || ut.convert(c) === pt.getParameter(35738) || 1015 === c && (X.isWebGL2 || j.has("OES_texture_float") || j.has("WEBGL_color_buffer_float")) || h)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + 36053 === pt.checkFramebufferStatus(36160) ? e >= 0 && e <= t.width - i && n >= 0 && n <= t.height - r && pt.readPixels(e, n, i, r, ut.convert(l), ut.convert(c), o) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.") + } finally { + s && pt.bindFramebuffer(36160, b) + } + } + }, this.copyFramebufferToTexture = function(t, e, n = 0) { + const i = Math.pow(2, -n), + r = Math.floor(e.image.width * i), + o = Math.floor(e.image.height * i), + s = ut.convert(e.format); + Z.setTexture2D(e, 0), pt.copyTexImage2D(3553, n, s, t.x, t.y, r, o, 0), q.unbindTexture() + }, this.copyTextureToTexture = function(t, e, n, i = 0) { + const r = e.image.width, + o = e.image.height, + s = ut.convert(n.format), + a = ut.convert(n.type); + Z.setTexture2D(n, 0), pt.pixelStorei(37440, n.flipY), pt.pixelStorei(37441, n.premultiplyAlpha), pt.pixelStorei(3317, n.unpackAlignment), e.isDataTexture ? pt.texSubImage2D(3553, i, t.x, t.y, r, o, s, a, e.image.data) : e.isCompressedTexture ? pt.compressedTexSubImage2D(3553, i, t.x, t.y, e.mipmaps[0].width, e.mipmaps[0].height, s, e.mipmaps[0].data) : pt.texSubImage2D(3553, i, t.x, t.y, s, a, e.image), 0 === i && n.generateMipmaps && pt.generateMipmap(3553), q.unbindTexture() + }, this.initTexture = function(t) { + Z.setTexture2D(t, 0), q.unbindTexture() + }, this.resetState = function() { + q.reset(), dt.reset() + }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + + function hr(t) { + cr.call(this, t) + } + rr.prototype = Object.assign(Object.create(Ye.prototype), { + constructor: rr, + isArrayCamera: !0 + }), or.prototype = Object.assign(Object.create(St.prototype), { + constructor: or, + isGroup: !0 + }), Object.assign(sr.prototype, { + constructor: sr, + getHandSpace: function() { + return null === this._hand && (this._hand = new or, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = { + pinching: !1 + }), this._hand + }, + getTargetRaySpace: function() { + return null === this._targetRay && (this._targetRay = new or, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1), this._targetRay + }, + getGripSpace: function() { + return null === this._grip && (this._grip = new or, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1), this._grip + }, + dispatchEvent: function(t) { + return null !== this._targetRay && this._targetRay.dispatchEvent(t), null !== this._grip && this._grip.dispatchEvent(t), null !== this._hand && this._hand.dispatchEvent(t), this + }, + disconnect: function(t) { + return this.dispatchEvent({ + type: "disconnected", + data: t + }), null !== this._targetRay && (this._targetRay.visible = !1), null !== this._grip && (this._grip.visible = !1), null !== this._hand && (this._hand.visible = !1), this + }, + update: function(t, e, n) { + let i = null, + r = null, + o = null; + const s = this._targetRay, + a = this._grip, + l = this._hand; + if (t && "visible-blurred" !== e.session.visibilityState) + if (l && t.hand) { + o = !0; + for (const i of t.hand.values()) { + const t = e.getJointPose(i, n); + if (void 0 === l.joints[i.jointName]) { + const t = new or; + t.matrixAutoUpdate = !1, t.visible = !1, l.joints[i.jointName] = t, l.add(t) + } + const r = l.joints[i.jointName]; + null !== t && (r.matrix.fromArray(t.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.jointRadius = t.radius), r.visible = null !== t + } + const i = l.joints["index-finger-tip"], + r = l.joints["thumb-tip"], + s = i.position.distanceTo(r.position), + a = .02, + c = .005; + l.inputState.pinching && s > a + c ? (l.inputState.pinching = !1, this.dispatchEvent({ + type: "pinchend", + handedness: t.handedness, + target: this + })) : !l.inputState.pinching && s <= a - c && (l.inputState.pinching = !0, this.dispatchEvent({ + type: "pinchstart", + handedness: t.handedness, + target: this + })) + } else null !== s && (i = e.getPose(t.targetRaySpace, n), null !== i && (s.matrix.fromArray(i.transform.matrix), s.matrix.decompose(s.position, s.rotation, s.scale))), null !== a && t.gripSpace && (r = e.getPose(t.gripSpace, n), null !== r && (a.matrix.fromArray(r.transform.matrix), a.matrix.decompose(a.position, a.rotation, a.scale))); + return null !== s && (s.visible = null !== i), null !== a && (a.visible = null !== r), null !== l && (l.visible = null !== o), this + } + }), Object.assign(ar.prototype, p.prototype), hr.prototype = Object.assign(Object.create(cr.prototype), { + constructor: hr, + isWebGL1Renderer: !0 + }); + class ur extends St { + constructor() { + super(), Object.defineProperty(this, "isScene", { + value: !0 + }), this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.overrideMaterial = null, this.autoUpdate = !0, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + copy(t, e) { + return super.copy(t, e), null !== t.background && (this.background = t.background.clone()), null !== t.environment && (this.environment = t.environment.clone()), null !== t.fog && (this.fog = t.fog.clone()), null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()), this.autoUpdate = t.autoUpdate, this.matrixAutoUpdate = t.matrixAutoUpdate, this + } + toJSON(t) { + const e = super.toJSON(t); + return null !== this.background && (e.object.background = this.background.toJSON(t)), null !== this.environment && (e.object.environment = this.environment.toJSON(t)), null !== this.fog && (e.object.fog = this.fog.toJSON()), e + } + } + + function dr(t, e) { + this.array = t, this.stride = e, this.count = void 0 !== t ? t.length / e : 0, this.usage = 35044, this.updateRange = { + offset: 0, + count: -1 + }, this.version = 0, this.uuid = g.generateUUID() + } + Object.defineProperty(dr.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Object.assign(dr.prototype, { + isInterleavedBuffer: !0, + onUploadCallback: function() {}, + setUsage: function(t) { + return this.usage = t, this + }, + copy: function(t) { + return this.array = new t.array.constructor(t.array), this.count = t.count, this.stride = t.stride, this.usage = t.usage, this + }, + copyAt: function(t, e, n) { + t *= this.stride, n *= e.stride; + for (let i = 0, r = this.stride; i < r; i++) this.array[t + i] = e.array[n + i]; + return this + }, + set: function(t, e = 0) { + return this.array.set(t, e), this + }, + clone: function(t) { + void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer); + const e = new dr(new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]), this.stride); + return e.setUsage(this.usage), e + }, + onUpload: function(t) { + return this.onUploadCallback = t, this + }, + toJSON: function(t) { + return void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer))), { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + } + } + }); + const pr = new T; + + function fr(t, e, n, i) { + this.name = "", this.data = t, this.itemSize = e, this.offset = n, this.normalized = !0 === i + } + + function mr(t) { + Jt.call(this), this.type = "SpriteMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.rotation = 0, this.sizeAttenuation = !0, this.transparent = !0, this.setValues(t) + } + let gr; + Object.defineProperties(fr.prototype, { + count: { + get: function() { + return this.data.count + } + }, + array: { + get: function() { + return this.data.array + } + }, + needsUpdate: { + set: function(t) { + this.data.needsUpdate = t + } + } + }), Object.assign(fr.prototype, { + isInterleavedBufferAttribute: !0, + applyMatrix4: function(t) { + for (let e = 0, n = this.data.count; e < n; e++) pr.x = this.getX(e), pr.y = this.getY(e), pr.z = this.getZ(e), pr.applyMatrix4(t), this.setXYZ(e, pr.x, pr.y, pr.z); + return this + }, + setX: function(t, e) { + return this.data.array[t * this.data.stride + this.offset] = e, this + }, + setY: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 1] = e, this + }, + setZ: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 2] = e, this + }, + setW: function(t, e) { + return this.data.array[t * this.data.stride + this.offset + 3] = e, this + }, + getX: function(t) { + return this.data.array[t * this.data.stride + this.offset] + }, + getY: function(t) { + return this.data.array[t * this.data.stride + this.offset + 1] + }, + getZ: function(t) { + return this.data.array[t * this.data.stride + this.offset + 2] + }, + getW: function(t) { + return this.data.array[t * this.data.stride + this.offset + 3] + }, + setXY: function(t, e, n) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this + }, + setXYZ: function(t, e, n, i) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this + }, + setXYZW: function(t, e, n, i, r) { + return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this.data.array[t + 3] = r, this + }, + clone: function(t) { + if (void 0 === t) { + console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data."); + const t = []; + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset; + for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) + } + return new ee(new this.array.constructor(t), this.itemSize, this.normalized) + } + return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)), new fr(t.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized) + }, + toJSON: function(t) { + if (void 0 === t) { + console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data."); + const t = []; + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset; + for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: t, + normalized: this.normalized + } + } + return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), { + isInterleavedBufferAttribute: !0, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + } + } + }), mr.prototype = Object.create(Jt.prototype), mr.prototype.constructor = mr, mr.prototype.isSpriteMaterial = !0, mr.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.rotation = t.rotation, this.sizeAttenuation = t.sizeAttenuation, this + }; + const vr = new T, + yr = new T, + Ar = new T, + xr = new v, + _r = new v, + br = new et, + wr = new T, + Mr = new T, + Er = new T, + Sr = new v, + Tr = new v, + Lr = new v; + + function Rr(t) { + if (St.call(this), this.type = "Sprite", void 0 === gr) { + gr = new be; + const t = new dr(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5); + gr.setIndex([0, 1, 2, 0, 2, 3]), gr.setAttribute("position", new fr(t, 3, 0, !1)), gr.setAttribute("uv", new fr(t, 2, 3, !1)) + } + this.geometry = gr, this.material = void 0 !== t ? t : new mr, this.center = new v(.5, .5) + } + + function Cr(t, e, n, i, r, o) { + xr.subVectors(t, n).addScalar(.5).multiply(i), void 0 !== r ? (_r.x = o * xr.x - r * xr.y, _r.y = r * xr.x + o * xr.y) : _r.copy(xr), t.copy(e), t.x += _r.x, t.y += _r.y, t.applyMatrix4(br) + } + Rr.prototype = Object.assign(Object.create(St.prototype), { + constructor: Rr, + isSprite: !0, + raycast: function(t, e) { + null === t.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), yr.setFromMatrixScale(this.matrixWorld), br.copy(t.camera.matrixWorld), this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld), Ar.setFromMatrixPosition(this.modelViewMatrix), t.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && yr.multiplyScalar(-Ar.z); + const n = this.material.rotation; + let i, r; + 0 !== n && (r = Math.cos(n), i = Math.sin(n)); + const o = this.center; + Cr(wr.set(-.5, -.5, 0), Ar, o, yr, i, r), Cr(Mr.set(.5, -.5, 0), Ar, o, yr, i, r), Cr(Er.set(.5, .5, 0), Ar, o, yr, i, r), Sr.set(0, 0), Tr.set(1, 0), Lr.set(1, 1); + let s = t.ray.intersectTriangle(wr, Mr, Er, !1, vr); + if (null === s && (Cr(Mr.set(-.5, .5, 0), Ar, o, yr, i, r), Tr.set(0, 1), s = t.ray.intersectTriangle(wr, Er, Mr, !1, vr), null === s)) return; + const a = t.ray.origin.distanceTo(vr); + a < t.near || a > t.far || e.push({ + distance: a, + point: vr.clone(), + uv: Gt.getUV(vr, wr, Mr, Er, Sr, Tr, Lr, new v), + face: null, + object: this + }) + }, + copy: function(t) { + return St.prototype.copy.call(this, t), void 0 !== t.center && this.center.copy(t.center), this.material = t.material, this + } + }); + const Pr = new T, + Dr = new T; + + function Ir() { + St.call(this), this._currentLevel = 0, this.type = "LOD", Object.defineProperties(this, { + levels: { + enumerable: !0, + value: [] + } + }), this.autoUpdate = !0 + } + Ir.prototype = Object.assign(Object.create(St.prototype), { + constructor: Ir, + isLOD: !0, + copy: function(t) { + St.prototype.copy.call(this, t, !1); + const e = t.levels; + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + this.addLevel(n.object.clone(), n.distance) + } + return this.autoUpdate = t.autoUpdate, this + }, + addLevel: function(t, e = 0) { + e = Math.abs(e); + const n = this.levels; + let i; + for (i = 0; i < n.length && !(e < n[i].distance); i++); + return n.splice(i, 0, { + distance: e, + object: t + }), this.add(t), this + }, + getCurrentLevel: function() { + return this._currentLevel + }, + getObjectForDistance: function(t) { + const e = this.levels; + if (e.length > 0) { + let n, i; + for (n = 1, i = e.length; n < i && !(t < e[n].distance); n++); + return e[n - 1].object + } + return null + }, + raycast: function(t, e) { + if (this.levels.length > 0) { + Pr.setFromMatrixPosition(this.matrixWorld); + const n = t.ray.origin.distanceTo(Pr); + this.getObjectForDistance(n).raycast(t, e) + } + }, + update: function(t) { + const e = this.levels; + if (e.length > 1) { + Pr.setFromMatrixPosition(t.matrixWorld), Dr.setFromMatrixPosition(this.matrixWorld); + const n = Pr.distanceTo(Dr) / t.zoom; + let i, r; + for (e[0].object.visible = !0, i = 1, r = e.length; i < r && n >= e[i].distance; i++) e[i - 1].object.visible = !1, e[i].object.visible = !0; + for (this._currentLevel = i - 1; i < r; i++) e[i].object.visible = !1 + } + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + !1 === this.autoUpdate && (e.object.autoUpdate = !1), e.object.levels = []; + const n = this.levels; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + e.object.levels.push({ + object: i.object.uuid, + distance: i.distance + }) + } + return e + } + }); + const Or = new T, + Nr = new M, + Br = new M, + Fr = new T, + zr = new et; + + function Ur(t, e) { + t && t.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), He.call(this, t, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new et, this.bindMatrixInverse = new et + } + + function Hr() { + St.call(this), this.type = "Bone" + } + Ur.prototype = Object.assign(Object.create(He.prototype), { + constructor: Ur, + isSkinnedMesh: !0, + copy: function(t) { + return He.prototype.copy.call(this, t), this.bindMode = t.bindMode, this.bindMatrix.copy(t.bindMatrix), this.bindMatrixInverse.copy(t.bindMatrixInverse), this.skeleton = t.skeleton, this + }, + bind: function(t, e) { + this.skeleton = t, void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.copy(e).invert() + }, + pose: function() { + this.skeleton.pose() + }, + normalizeSkinWeights: function() { + const t = new M, + e = this.geometry.attributes.skinWeight; + for (let n = 0, i = e.count; n < i; n++) { + t.x = e.getX(n), t.y = e.getY(n), t.z = e.getZ(n), t.w = e.getW(n); + const i = 1 / t.manhattanLength(); + i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0), e.setXYZW(n, t.x, t.y, t.z, t.w) + } + }, + updateMatrixWorld: function(t) { + He.prototype.updateMatrixWorld.call(this, t), "attached" === this.bindMode ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + }, + boneTransform: function(t, e) { + const n = this.skeleton, + i = this.geometry; + Nr.fromBufferAttribute(i.attributes.skinIndex, t), Br.fromBufferAttribute(i.attributes.skinWeight, t), Or.fromBufferAttribute(i.attributes.position, t).applyMatrix4(this.bindMatrix), e.set(0, 0, 0); + for (let t = 0; t < 4; t++) { + const i = Br.getComponent(t); + if (0 !== i) { + const r = Nr.getComponent(t); + zr.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), e.addScaledVector(Fr.copy(Or).applyMatrix4(zr), i) + } + } + return e.applyMatrix4(this.bindMatrixInverse) + } + }), Hr.prototype = Object.assign(Object.create(St.prototype), { + constructor: Hr, + isBone: !0 + }); + const Gr = new et, + Vr = new et; + + function kr(t = [], e = []) { + this.uuid = g.generateUUID(), this.bones = t.slice(0), this.boneInverses = e, this.boneMatrices = null, this.boneTexture = null, this.boneTextureSize = 0, this.frame = -1, this.init() + } + Object.assign(kr.prototype, { + init: function() { + const t = this.bones, + e = this.boneInverses; + if (this.boneMatrices = new Float32Array(16 * t.length), 0 === e.length) this.calculateInverses(); + else if (t.length !== e.length) { + console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."), this.boneInverses = []; + for (let t = 0, e = this.bones.length; t < e; t++) this.boneInverses.push(new et) + } + }, + calculateInverses: function() { + this.boneInverses.length = 0; + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = new et; + this.bones[t] && e.copy(this.bones[t].matrixWorld).invert(), this.boneInverses.push(e) + } + }, + pose: function() { + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = this.bones[t]; + e && e.matrixWorld.copy(this.boneInverses[t]).invert() + } + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = this.bones[t]; + e && (e.parent && e.parent.isBone ? (e.matrix.copy(e.parent.matrixWorld).invert(), e.matrix.multiply(e.matrixWorld)) : e.matrix.copy(e.matrixWorld), e.matrix.decompose(e.position, e.quaternion, e.scale)) + } + }, + update: function() { + const t = this.bones, + e = this.boneInverses, + n = this.boneMatrices, + i = this.boneTexture; + for (let i = 0, r = t.length; i < r; i++) { + const r = t[i] ? t[i].matrixWorld : Vr; + Gr.multiplyMatrices(r, e[i]), Gr.toArray(n, 16 * i) + } + null !== i && (i.needsUpdate = !0) + }, + clone: function() { + return new kr(this.bones, this.boneInverses) + }, + getBoneByName: function(t) { + for (let e = 0, n = this.bones.length; e < n; e++) { + const n = this.bones[e]; + if (n.name === t) return n + } + }, + dispose: function() { + null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null) + }, + fromJSON: function(t, e) { + this.uuid = t.uuid; + for (let n = 0, i = t.bones.length; n < i; n++) { + const i = t.bones[n]; + let r = e[i]; + void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new Hr), this.bones.push(r), this.boneInverses.push((new et).fromArray(t.boneInverses[n])) + } + return this.init(), this + }, + toJSON: function() { + const t = { + metadata: { + version: 4.5, + type: "Skeleton", + generator: "Skeleton.toJSON" + }, + bones: [], + boneInverses: [] + }; + t.uuid = this.uuid; + const e = this.bones, + n = this.boneInverses; + for (let i = 0, r = e.length; i < r; i++) { + const r = e[i]; + t.bones.push(r.uuid); + const o = n[i]; + t.boneInverses.push(o.toArray()) + } + return t + } + }); + const Wr = new et, + jr = new et, + Xr = [], + qr = new He; + + function Yr(t, e, n) { + He.call(this, t, e), this.instanceMatrix = new ee(new Float32Array(16 * n), 16), this.instanceColor = null, this.count = n, this.frustumCulled = !1 + } + + function Qr(t) { + Jt.call(this), this.type = "LineBasicMaterial", this.color = new Yt(16777215), this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.morphTargets = !1, this.setValues(t) + } + Yr.prototype = Object.assign(Object.create(He.prototype), { + constructor: Yr, + isInstancedMesh: !0, + copy: function(t) { + return He.prototype.copy.call(this, t), this.instanceMatrix.copy(t.instanceMatrix), null !== t.instanceColor && (this.instanceColor = t.instanceColor.clone()), this.count = t.count, this + }, + getColorAt: function(t, e) { + e.fromArray(this.instanceColor.array, 3 * t) + }, + getMatrixAt: function(t, e) { + e.fromArray(this.instanceMatrix.array, 16 * t) + }, + raycast: function(t, e) { + const n = this.matrixWorld, + i = this.count; + if (qr.geometry = this.geometry, qr.material = this.material, void 0 !== qr.material) + for (let r = 0; r < i; r++) { + this.getMatrixAt(r, Wr), jr.multiplyMatrices(n, Wr), qr.matrixWorld = jr, qr.raycast(t, Xr); + for (let t = 0, n = Xr.length; t < n; t++) { + const n = Xr[t]; + n.instanceId = r, n.object = this, e.push(n) + } + Xr.length = 0 + } + }, + setColorAt: function(t, e) { + null === this.instanceColor && (this.instanceColor = new ee(new Float32Array(3 * this.count), 3)), e.toArray(this.instanceColor.array, 3 * t) + }, + setMatrixAt: function(t, e) { + e.toArray(this.instanceMatrix.array, 16 * t) + }, + updateMorphTargets: function() {}, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), Qr.prototype = Object.create(Jt.prototype), Qr.prototype.constructor = Qr, Qr.prototype.isLineBasicMaterial = !0, Qr.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.linewidth = t.linewidth, this.linecap = t.linecap, this.linejoin = t.linejoin, this.morphTargets = t.morphTargets, this + }; + const Zr = new T, + Jr = new T, + Kr = new et, + $r = new tt, + to = new X; + + function eo(t = new be, e = new Qr) { + St.call(this), this.type = "Line", this.geometry = t, this.material = e, this.updateMorphTargets() + } + eo.prototype = Object.assign(Object.create(St.prototype), { + constructor: eo, + isLine: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this + }, + computeLineDistances: function() { + const t = this.geometry; + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = [0]; + for (let t = 1, i = e.count; t < i; t++) Zr.fromBufferAttribute(e, t - 1), Jr.fromBufferAttribute(e, t), n[t] = n[t - 1], n[t] += Zr.distanceTo(Jr); + t.setAttribute("lineDistance", new he(n, 1)) + } else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else t.isGeometry && console.error("THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); + return this + }, + raycast: function(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Line.threshold; + if (null === n.boundingSphere && n.computeBoundingSphere(), to.copy(n.boundingSphere), to.applyMatrix4(i), to.radius += r, !1 === t.ray.intersectsSphere(to)) return; + Kr.copy(i).invert(), $r.copy(t.ray).applyMatrix4(Kr); + const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + s = o * o, + a = new T, + l = new T, + c = new T, + h = new T, + u = this.isLineSegments ? 2 : 1; + if (n.isBufferGeometry) { + const i = n.index, + r = n.attributes.position; + if (null !== i) { + const n = i.array; + for (let i = 0, o = n.length - 1; i < o; i += u) { + const o = n[i], + u = n[i + 1]; + a.fromBufferAttribute(r, o), l.fromBufferAttribute(r, u); + if ($r.distanceSqToSegment(a, l, h, c) > s) continue; + h.applyMatrix4(this.matrixWorld); + const d = t.ray.origin.distanceTo(h); + d < t.near || d > t.far || e.push({ + distance: d, + point: c.clone().applyMatrix4(this.matrixWorld), + index: i, + face: null, + faceIndex: null, + object: this + }) + } + } else + for (let n = 0, i = r.count - 1; n < i; n += u) { + a.fromBufferAttribute(r, n), l.fromBufferAttribute(r, n + 1); + if ($r.distanceSqToSegment(a, l, h, c) > s) continue; + h.applyMatrix4(this.matrixWorld); + const i = t.ray.origin.distanceTo(h); + i < t.near || i > t.far || e.push({ + distance: i, + point: c.clone().applyMatrix4(this.matrixWorld), + index: n, + face: null, + faceIndex: null, + object: this + }) + } + } else n.isGeometry && console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + }, + updateMorphTargets: function() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && e.length > 0 && console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") + } + } + }); + const no = new T, + io = new T; + + function ro(t, e) { + eo.call(this, t, e), this.type = "LineSegments" + } + + function oo(t, e) { + eo.call(this, t, e), this.type = "LineLoop" + } + + function so(t) { + Jt.call(this), this.type = "PointsMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.morphTargets = !1, this.setValues(t) + } + ro.prototype = Object.assign(Object.create(eo.prototype), { + constructor: ro, + isLineSegments: !0, + computeLineDistances: function() { + const t = this.geometry; + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = []; + for (let t = 0, i = e.count; t < i; t += 2) no.fromBufferAttribute(e, t), io.fromBufferAttribute(e, t + 1), n[t] = 0 === t ? 0 : n[t - 1], n[t + 1] = n[t] + no.distanceTo(io); + t.setAttribute("lineDistance", new he(n, 1)) + } else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else t.isGeometry && console.error("THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); + return this + } + }), oo.prototype = Object.assign(Object.create(eo.prototype), { + constructor: oo, + isLineLoop: !0 + }), so.prototype = Object.create(Jt.prototype), so.prototype.constructor = so, so.prototype.isPointsMaterial = !0, so.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.size = t.size, this.sizeAttenuation = t.sizeAttenuation, this.morphTargets = t.morphTargets, this + }; + const ao = new et, + lo = new tt, + co = new X, + ho = new T; + + function uo(t = new be, e = new so) { + St.call(this), this.type = "Points", this.geometry = t, this.material = e, this.updateMorphTargets() + } + + function po(t, e, n, i, r, o, s) { + const a = lo.distanceSqToPoint(t); + if (a < n) { + const n = new T; + lo.closestPointToPoint(t, n), n.applyMatrix4(i); + const l = r.ray.origin.distanceTo(n); + if (l < r.near || l > r.far) return; + o.push({ + distance: l, + distanceToRay: Math.sqrt(a), + point: n, + index: e, + face: null, + object: s + }) + } + } + + function fo(t, e, n, i, r, o, s, a, l) { + b.call(this, t, e, n, i, r, o, s, a, l), this.format = void 0 !== s ? s : 1022, this.minFilter = void 0 !== o ? o : 1006, this.magFilter = void 0 !== r ? r : 1006, this.generateMipmaps = !1; + const c = this; + "requestVideoFrameCallback" in t && t.requestVideoFrameCallback((function e() { + c.needsUpdate = !0, t.requestVideoFrameCallback(e) + })) + } + + function mo(t, e, n, i, r, o, s, a, l, c, h, u) { + b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { + width: e, + height: n + }, this.mipmaps = t, this.flipY = !1, this.generateMipmaps = !1 + } + + function go(t, e, n, i, r, o, s, a, l) { + b.call(this, t, e, n, i, r, o, s, a, l), this.needsUpdate = !0 + } + + function vo(t, e, n, i, r, o, s, a, l, c) { + if (1026 !== (c = void 0 !== c ? c : 1026) && 1027 !== c) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + void 0 === n && 1026 === c && (n = 1012), void 0 === n && 1027 === c && (n = 1020), b.call(this, null, i, r, o, s, a, c, n, l), this.image = { + width: t, + height: e + }, this.magFilter = void 0 !== s ? s : 1003, this.minFilter = void 0 !== a ? a : 1003, this.flipY = !1, this.generateMipmaps = !1 + } + uo.prototype = Object.assign(Object.create(St.prototype), { + constructor: uo, + isPoints: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this + }, + raycast: function(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Points.threshold; + if (null === n.boundingSphere && n.computeBoundingSphere(), co.copy(n.boundingSphere), co.applyMatrix4(i), co.radius += r, !1 === t.ray.intersectsSphere(co)) return; + ao.copy(i).invert(), lo.copy(t.ray).applyMatrix4(ao); + const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + s = o * o; + if (n.isBufferGeometry) { + const r = n.index, + o = n.attributes.position; + if (null !== r) { + const n = r.array; + for (let r = 0, a = n.length; r < a; r++) { + const a = n[r]; + ho.fromBufferAttribute(o, a), po(ho, a, s, i, t, e, this) + } + } else + for (let n = 0, r = o.count; n < r; n++) ho.fromBufferAttribute(o, n), po(ho, n, s, i, t, e, this) + } else console.error("THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + }, + updateMorphTargets: function() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + this.morphTargetInfluences = [], this.morphTargetDictionary = {}; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && e.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") + } + } + }), fo.prototype = Object.assign(Object.create(b.prototype), { + constructor: fo, + clone: function() { + return new this.constructor(this.image).copy(this) + }, + isVideoTexture: !0, + update: function() { + const t = this.image; + !1 === "requestVideoFrameCallback" in t && t.readyState >= t.HAVE_CURRENT_DATA && (this.needsUpdate = !0) + } + }), mo.prototype = Object.create(b.prototype), mo.prototype.constructor = mo, mo.prototype.isCompressedTexture = !0, go.prototype = Object.create(b.prototype), go.prototype.constructor = go, go.prototype.isCanvasTexture = !0, vo.prototype = Object.create(b.prototype), vo.prototype.constructor = vo, vo.prototype.isDepthTexture = !0; + new T, new T, new T, new Gt; + const yo = function(t, e, n) { + n = n || 2; + const i = e && e.length, + r = i ? e[0] * n : t.length; + let o = Ao(t, 0, r, n, !0); + const s = []; + if (!o || o.next === o.prev) return s; + let a, l, c, h, u, d, p; + if (i && (o = function(t, e, n, i) { + const r = []; + let o, s, a, l, c; + for (o = 0, s = e.length; o < s; o++) a = e[o] * i, l = o < s - 1 ? e[o + 1] * i : t.length, c = Ao(t, a, l, i, !1), c === c.next && (c.steiner = !0), r.push(Co(c)); + for (r.sort(So), o = 0; o < r.length; o++) To(r[o], n), n = xo(n, n.next); + return n + }(t, e, o, n)), t.length > 80 * n) { + a = c = t[0], l = h = t[1]; + for (let e = n; e < r; e += n) u = t[e], d = t[e + 1], u < a && (a = u), d < l && (l = d), u > c && (c = u), d > h && (h = d); + p = Math.max(c - a, h - l), p = 0 !== p ? 1 / p : 0 + } + return _o(o, s, n, a, l, p), s + }; + + function Ao(t, e, n, i, r) { + let o, s; + if (r === function(t, e, n, i) { + let r = 0; + for (let o = e, s = n - i; o < n; o += i) r += (t[s] - t[o]) * (t[o + 1] + t[s + 1]), s = o; + return r + }(t, e, n, i) > 0) + for (o = e; o < n; o += i) s = Ho(o, t[o], t[o + 1], s); + else + for (o = n - i; o >= e; o -= i) s = Ho(o, t[o], t[o + 1], s); + return s && Oo(s, s.next) && (Go(s), s = s.next), s + } + + function xo(t, e) { + if (!t) return t; + e || (e = t); + let n, i = t; + do { + if (n = !1, i.steiner || !Oo(i, i.next) && 0 !== Io(i.prev, i, i.next)) i = i.next; + else { + if (Go(i), i = e = i.prev, i === i.next) break; + n = !0 + } + } while (n || i !== e); + return e + } + + function _o(t, e, n, i, r, o, s) { + if (!t) return; + !s && o && function(t, e, n, i) { + let r = t; + do { + null === r.z && (r.z = Ro(r.x, r.y, e, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next + } while (r !== t); + r.prevZ.nextZ = null, r.prevZ = null, + function(t) { + let e, n, i, r, o, s, a, l, c = 1; + do { + for (n = t, t = null, o = null, s = 0; n;) { + for (s++, i = n, a = 0, e = 0; e < c && (a++, i = i.nextZ, i); e++); + for (l = c; a > 0 || l > 0 && i;) 0 !== a && (0 === l || !i || n.z <= i.z) ? (r = n, n = n.nextZ, a--) : (r = i, i = i.nextZ, l--), o ? o.nextZ = r : t = r, r.prevZ = o, o = r; + n = i + } + o.nextZ = null, c *= 2 + } while (s > 1) + }(r) + }(t, i, r, o); + let a, l, c = t; + for (; t.prev !== t.next;) + if (a = t.prev, l = t.next, o ? wo(t, i, r, o) : bo(t)) e.push(a.i / n), e.push(t.i / n), e.push(l.i / n), Go(t), t = l.next, c = l.next; + else if ((t = l) === c) { + s ? 1 === s ? _o(t = Mo(xo(t), e, n), e, n, i, r, o, 2) : 2 === s && Eo(t, e, n, i, r, o) : _o(xo(t), e, n, i, r, o, 1); + break + } + } + + function bo(t) { + const e = t.prev, + n = t, + i = t.next; + if (Io(e, n, i) >= 0) return !1; + let r = t.next.next; + for (; r !== t.prev;) { + if (Po(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && Io(r.prev, r, r.next) >= 0) return !1; + r = r.next + } + return !0 + } + + function wo(t, e, n, i) { + const r = t.prev, + o = t, + s = t.next; + if (Io(r, o, s) >= 0) return !1; + const a = r.x < o.x ? r.x < s.x ? r.x : s.x : o.x < s.x ? o.x : s.x, + l = r.y < o.y ? r.y < s.y ? r.y : s.y : o.y < s.y ? o.y : s.y, + c = r.x > o.x ? r.x > s.x ? r.x : s.x : o.x > s.x ? o.x : s.x, + h = r.y > o.y ? r.y > s.y ? r.y : s.y : o.y > s.y ? o.y : s.y, + u = Ro(a, l, e, n, i), + d = Ro(c, h, e, n, i); + let p = t.prevZ, + f = t.nextZ; + for (; p && p.z >= u && f && f.z <= d;) { + if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; + if (p = p.prevZ, f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; + f = f.nextZ + } + for (; p && p.z >= u;) { + if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; + p = p.prevZ + } + for (; f && f.z <= d;) { + if (f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; + f = f.nextZ + } + return !0 + } + + function Mo(t, e, n) { + let i = t; + do { + const r = i.prev, + o = i.next.next; + !Oo(r, o) && No(r, i, i.next, o) && zo(r, o) && zo(o, r) && (e.push(r.i / n), e.push(i.i / n), e.push(o.i / n), Go(i), Go(i.next), i = t = o), i = i.next + } while (i !== t); + return xo(i) + } + + function Eo(t, e, n, i, r, o) { + let s = t; + do { + let t = s.next.next; + for (; t !== s.prev;) { + if (s.i !== t.i && Do(s, t)) { + let a = Uo(s, t); + return s = xo(s, s.next), a = xo(a, a.next), _o(s, e, n, i, r, o), void _o(a, e, n, i, r, o) + } + t = t.next + } + s = s.next + } while (s !== t) + } + + function So(t, e) { + return t.x - e.x + } + + function To(t, e) { + if (e = function(t, e) { + let n = e; + const i = t.x, + r = t.y; + let o, s = -1 / 0; + do { + if (r <= n.y && r >= n.next.y && n.next.y !== n.y) { + const t = n.x + (r - n.y) * (n.next.x - n.x) / (n.next.y - n.y); + if (t <= i && t > s) { + if (s = t, t === i) { + if (r === n.y) return n; + if (r === n.next.y) return n.next + } + o = n.x < n.next.x ? n : n.next + } + } + n = n.next + } while (n !== e); + if (!o) return null; + if (i === s) return o; + const a = o, + l = o.x, + c = o.y; + let h, u = 1 / 0; + n = o; + do { + i >= n.x && n.x >= l && i !== n.x && Po(r < c ? i : s, r, l, c, r < c ? s : i, r, n.x, n.y) && (h = Math.abs(r - n.y) / (i - n.x), zo(n, t) && (h < u || h === u && (n.x > o.x || n.x === o.x && Lo(o, n))) && (o = n, u = h)), n = n.next + } while (n !== a); + return o + }(t, e)) { + const n = Uo(e, t); + xo(e, e.next), xo(n, n.next) + } + } + + function Lo(t, e) { + return Io(t.prev, t, e.prev) < 0 && Io(e.next, t, t.next) < 0 + } + + function Ro(t, e, n, i, r) { + return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 + } + + function Co(t) { + let e = t, + n = t; + do { + (e.x < n.x || e.x === n.x && e.y < n.y) && (n = e), e = e.next + } while (e !== t); + return n + } + + function Po(t, e, n, i, r, o, s, a) { + return (r - s) * (e - a) - (t - s) * (o - a) >= 0 && (t - s) * (i - a) - (n - s) * (e - a) >= 0 && (n - s) * (o - a) - (r - s) * (i - a) >= 0 + } + + function Do(t, e) { + return t.next.i !== e.i && t.prev.i !== e.i && ! function(t, e) { + let n = t; + do { + if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && No(n, n.next, t, e)) return !0; + n = n.next + } while (n !== t); + return !1 + }(t, e) && (zo(t, e) && zo(e, t) && function(t, e) { + let n = t, + i = !1; + const r = (t.x + e.x) / 2, + o = (t.y + e.y) / 2; + do { + n.y > o != n.next.y > o && n.next.y !== n.y && r < (n.next.x - n.x) * (o - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next + } while (n !== t); + return i + }(t, e) && (Io(t.prev, t, e.prev) || Io(t, e.prev, e)) || Oo(t, e) && Io(t.prev, t, t.next) > 0 && Io(e.prev, e, e.next) > 0) + } + + function Io(t, e, n) { + return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) + } + + function Oo(t, e) { + return t.x === e.x && t.y === e.y + } + + function No(t, e, n, i) { + const r = Fo(Io(t, e, n)), + o = Fo(Io(t, e, i)), + s = Fo(Io(n, i, t)), + a = Fo(Io(n, i, e)); + return r !== o && s !== a || (!(0 !== r || !Bo(t, n, e)) || (!(0 !== o || !Bo(t, i, e)) || (!(0 !== s || !Bo(n, t, i)) || !(0 !== a || !Bo(n, e, i))))) + } + + function Bo(t, e, n) { + return e.x <= Math.max(t.x, n.x) && e.x >= Math.min(t.x, n.x) && e.y <= Math.max(t.y, n.y) && e.y >= Math.min(t.y, n.y) + } + + function Fo(t) { + return t > 0 ? 1 : t < 0 ? -1 : 0 + } + + function zo(t, e) { + return Io(t.prev, t, t.next) < 0 ? Io(t, e, t.next) >= 0 && Io(t, t.prev, e) >= 0 : Io(t, e, t.prev) < 0 || Io(t, t.next, e) < 0 + } + + function Uo(t, e) { + const n = new Vo(t.i, t.x, t.y), + i = new Vo(e.i, e.x, e.y), + r = t.next, + o = e.prev; + return t.next = e, e.prev = t, n.next = r, r.prev = n, i.next = n, n.prev = i, o.next = i, i.prev = o, i + } + + function Ho(t, e, n, i) { + const r = new Vo(t, e, n); + return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r + } + + function Go(t) { + t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ) + } + + function Vo(t, e, n) { + this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 + } + const ko = { + area: function(t) { + const e = t.length; + let n = 0; + for (let i = e - 1, r = 0; r < e; i = r++) n += t[i].x * t[r].y - t[r].x * t[i].y; + return .5 * n + }, + isClockWise: function(t) { + return ko.area(t) < 0 + }, + triangulateShape: function(t, e) { + const n = [], + i = [], + r = []; + Wo(t), jo(n, t); + let o = t.length; + e.forEach(Wo); + for (let t = 0; t < e.length; t++) i.push(o), o += e[t].length, jo(n, e[t]); + const s = yo(n, i); + for (let t = 0; t < s.length; t += 3) r.push(s.slice(t, t + 3)); + return r + } + }; + + function Wo(t) { + const e = t.length; + e > 2 && t[e - 1].equals(t[0]) && t.pop() + } + + function jo(t, e) { + for (let n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y) + } + class Xo extends be { + constructor(t, e) { + super(), this.type = "ExtrudeGeometry", this.parameters = { + shapes: t, + options: e + }, t = Array.isArray(t) ? t : [t]; + const n = this, + i = [], + r = []; + for (let e = 0, n = t.length; e < n; e++) { + o(t[e]) + } + + function o(t) { + const o = [], + s = void 0 !== e.curveSegments ? e.curveSegments : 12, + a = void 0 !== e.steps ? e.steps : 1; + let l = void 0 !== e.depth ? e.depth : 100, + c = void 0 === e.bevelEnabled || e.bevelEnabled, + h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, + u = void 0 !== e.bevelSize ? e.bevelSize : h - 2, + d = void 0 !== e.bevelOffset ? e.bevelOffset : 0, + p = void 0 !== e.bevelSegments ? e.bevelSegments : 3; + const f = e.extrudePath, + m = void 0 !== e.UVGenerator ? e.UVGenerator : qo; + void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), l = e.amount); + let g, y, A, x, _, b = !1; + f && (g = f.getSpacedPoints(a), b = !0, c = !1, y = f.computeFrenetFrames(a, !1), A = new T, x = new T, _ = new T), c || (p = 0, h = 0, u = 0, d = 0); + const w = t.extractPoints(s); + let M = w.shape; + const E = w.holes; + if (!ko.isClockWise(M)) { + M = M.reverse(); + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + ko.isClockWise(e) && (E[t] = e.reverse()) + } + } + const S = ko.triangulateShape(M, E), + L = M; + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + M = M.concat(e) + } + + function R(t, e, n) { + return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), e.clone().multiplyScalar(n).add(t) + } + const C = M.length, + P = S.length; + + function D(t, e, n) { + let i, r, o; + const s = t.x - e.x, + a = t.y - e.y, + l = n.x - t.x, + c = n.y - t.y, + h = s * s + a * a, + u = s * c - a * l; + if (Math.abs(u) > Number.EPSILON) { + const u = Math.sqrt(h), + d = Math.sqrt(l * l + c * c), + p = e.x - a / u, + f = e.y + s / u, + m = ((n.x - c / d - p) * c - (n.y + l / d - f) * l) / (s * c - a * l); + i = p + s * m - t.x, r = f + a * m - t.y; + const g = i * i + r * r; + if (g <= 2) return new v(i, r); + o = Math.sqrt(g / 2) + } else { + let t = !1; + s > Number.EPSILON ? l > Number.EPSILON && (t = !0) : s < -Number.EPSILON ? l < -Number.EPSILON && (t = !0) : Math.sign(a) === Math.sign(c) && (t = !0), t ? (i = -a, r = s, o = Math.sqrt(h)) : (i = s, r = a, o = Math.sqrt(h / 2)) + } + return new v(i / o, r / o) + } + const I = []; + for (let t = 0, e = L.length, n = e - 1, i = t + 1; t < e; t++, n++, i++) n === e && (n = 0), i === e && (i = 0), I[t] = D(L[t], L[n], L[i]); + const O = []; + let N, B = I.concat(); + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + N = []; + for (let t = 0, n = e.length, i = n - 1, r = t + 1; t < n; t++, i++, r++) i === n && (i = 0), r === n && (r = 0), N[t] = D(e[t], e[i], e[r]); + O.push(N), B = B.concat(N) + } + for (let t = 0; t < p; t++) { + const e = t / p, + n = h * Math.cos(e * Math.PI / 2), + i = u * Math.sin(e * Math.PI / 2) + d; + for (let t = 0, e = L.length; t < e; t++) { + const e = R(L[t], I[t], i); + U(e.x, e.y, -n) + } + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + N = O[t]; + for (let t = 0, r = e.length; t < r; t++) { + const r = R(e[t], N[t], i); + U(r.x, r.y, -n) + } + } + } + const F = u + d; + for (let t = 0; t < C; t++) { + const e = c ? R(M[t], B[t], F) : M[t]; + b ? (x.copy(y.normals[0]).multiplyScalar(e.x), A.copy(y.binormals[0]).multiplyScalar(e.y), _.copy(g[0]).add(x).add(A), U(_.x, _.y, _.z)) : U(e.x, e.y, 0) + } + for (let t = 1; t <= a; t++) + for (let e = 0; e < C; e++) { + const n = c ? R(M[e], B[e], F) : M[e]; + b ? (x.copy(y.normals[t]).multiplyScalar(n.x), A.copy(y.binormals[t]).multiplyScalar(n.y), _.copy(g[t]).add(x).add(A), U(_.x, _.y, _.z)) : U(n.x, n.y, l / a * t) + } + for (let t = p - 1; t >= 0; t--) { + const e = t / p, + n = h * Math.cos(e * Math.PI / 2), + i = u * Math.sin(e * Math.PI / 2) + d; + for (let t = 0, e = L.length; t < e; t++) { + const e = R(L[t], I[t], i); + U(e.x, e.y, l + n) + } + for (let t = 0, e = E.length; t < e; t++) { + const e = E[t]; + N = O[t]; + for (let t = 0, r = e.length; t < r; t++) { + const r = R(e[t], N[t], i); + b ? U(r.x, r.y + g[a - 1].y, g[a - 1].x + n) : U(r.x, r.y, l + n) + } + } + } + + function z(t, e) { + let n = t.length; + for (; --n >= 0;) { + const i = n; + let r = n - 1; + r < 0 && (r = t.length - 1); + for (let t = 0, n = a + 2 * p; t < n; t++) { + const n = C * t, + o = C * (t + 1); + G(e + i + n, e + r + n, e + r + o, e + i + o) + } + } + } + + function U(t, e, n) { + o.push(t), o.push(e), o.push(n) + } + + function H(t, e, r) { + V(t), V(e), V(r); + const o = i.length / 3, + s = m.generateTopUV(n, i, o - 3, o - 2, o - 1); + k(s[0]), k(s[1]), k(s[2]) + } + + function G(t, e, r, o) { + V(t), V(e), V(o), V(e), V(r), V(o); + const s = i.length / 3, + a = m.generateSideWallUV(n, i, s - 6, s - 3, s - 2, s - 1); + k(a[0]), k(a[1]), k(a[3]), k(a[1]), k(a[2]), k(a[3]) + } + + function V(t) { + i.push(o[3 * t + 0]), i.push(o[3 * t + 1]), i.push(o[3 * t + 2]) + } + + function k(t) { + r.push(t.x), r.push(t.y) + }! function() { + const t = i.length / 3; + if (c) { + let t = 0, + e = C * t; + for (let t = 0; t < P; t++) { + const n = S[t]; + H(n[2] + e, n[1] + e, n[0] + e) + } + t = a + 2 * p, e = C * t; + for (let t = 0; t < P; t++) { + const n = S[t]; + H(n[0] + e, n[1] + e, n[2] + e) + } + } else { + for (let t = 0; t < P; t++) { + const e = S[t]; + H(e[2], e[1], e[0]) + } + for (let t = 0; t < P; t++) { + const e = S[t]; + H(e[0] + C * a, e[1] + C * a, e[2] + C * a) + } + } + n.addGroup(t, i.length / 3 - t, 0) + }(), + function() { + const t = i.length / 3; + let e = 0; + z(L, e), e += L.length; + for (let t = 0, n = E.length; t < n; t++) { + const n = E[t]; + z(n, e), e += n.length + } + n.addGroup(t, i.length / 3 - t, 1) + }() + } + this.setAttribute("position", new he(i, 3)), this.setAttribute("uv", new he(r, 2)), this.computeVertexNormals() + } + toJSON() { + const t = be.prototype.toJSON.call(this); + return function(t, e, n) { + if (n.shapes = [], Array.isArray(t)) + for (let e = 0, i = t.length; e < i; e++) { + const i = t[e]; + n.shapes.push(i.uuid) + } else n.shapes.push(t.uuid); + void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON()); + return n + }(this.parameters.shapes, this.parameters.options, t) + } + } + const qo = { + generateTopUV: function(t, e, n, i, r) { + const o = e[3 * n], + s = e[3 * n + 1], + a = e[3 * i], + l = e[3 * i + 1], + c = e[3 * r], + h = e[3 * r + 1]; + return [new v(o, s), new v(a, l), new v(c, h)] + }, + generateSideWallUV: function(t, e, n, i, r, o) { + const s = e[3 * n], + a = e[3 * n + 1], + l = e[3 * n + 2], + c = e[3 * i], + h = e[3 * i + 1], + u = e[3 * i + 2], + d = e[3 * r], + p = e[3 * r + 1], + f = e[3 * r + 2], + m = e[3 * o], + g = e[3 * o + 1], + y = e[3 * o + 2]; + return Math.abs(a - h) < .01 ? [new v(s, 1 - l), new v(c, 1 - u), new v(d, 1 - f), new v(m, 1 - y)] : [new v(a, 1 - l), new v(h, 1 - u), new v(p, 1 - f), new v(g, 1 - y)] + } + }; + + function Yo(t, e, n) { + be.call(this), this.type = "ParametricGeometry", this.parameters = { + func: t, + slices: e, + stacks: n + }; + const i = [], + r = [], + o = [], + s = [], + a = 1e-5, + l = new T, + c = new T, + h = new T, + u = new T, + d = new T; + t.length < 3 && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); + const p = e + 1; + for (let i = 0; i <= n; i++) { + const p = i / n; + for (let n = 0; n <= e; n++) { + const i = n / e; + t(i, p, c), r.push(c.x, c.y, c.z), i - a >= 0 ? (t(i - a, p, h), u.subVectors(c, h)) : (t(i + a, p, h), u.subVectors(h, c)), p - a >= 0 ? (t(i, p - a, h), d.subVectors(c, h)) : (t(i, p + a, h), d.subVectors(h, c)), l.crossVectors(u, d).normalize(), o.push(l.x, l.y, l.z), s.push(i, p) + } + } + for (let t = 0; t < n; t++) + for (let n = 0; n < e; n++) { + const e = t * p + n, + r = t * p + n + 1, + o = (t + 1) * p + n + 1, + s = (t + 1) * p + n; + i.push(e, r, s), i.push(r, o, s) + } + this.setIndex(i), this.setAttribute("position", new he(r, 3)), this.setAttribute("normal", new he(o, 3)), this.setAttribute("uv", new he(s, 2)) + } + Yo.prototype = Object.create(be.prototype), Yo.prototype.constructor = Yo; + class Qo extends be { + constructor(t, e = 12) { + super(), this.type = "ShapeGeometry", this.parameters = { + shapes: t, + curveSegments: e + }; + const n = [], + i = [], + r = [], + o = []; + let s = 0, + a = 0; + if (!1 === Array.isArray(t)) l(t); + else + for (let e = 0; e < t.length; e++) l(t[e]), this.addGroup(s, a, e), s += a, a = 0; + + function l(t) { + const s = i.length / 3, + l = t.extractPoints(e); + let c = l.shape; + const h = l.holes; + !1 === ko.isClockWise(c) && (c = c.reverse()); + for (let t = 0, e = h.length; t < e; t++) { + const e = h[t]; + !0 === ko.isClockWise(e) && (h[t] = e.reverse()) + } + const u = ko.triangulateShape(c, h); + for (let t = 0, e = h.length; t < e; t++) { + const e = h[t]; + c = c.concat(e) + } + for (let t = 0, e = c.length; t < e; t++) { + const e = c[t]; + i.push(e.x, e.y, 0), r.push(0, 0, 1), o.push(e.x, e.y) + } + for (let t = 0, e = u.length; t < e; t++) { + const e = u[t], + i = e[0] + s, + r = e[1] + s, + o = e[2] + s; + n.push(i, r, o), a += 3 + } + } + this.setIndex(n), this.setAttribute("position", new he(i, 3)), this.setAttribute("normal", new he(r, 3)), this.setAttribute("uv", new he(o, 2)) + } + toJSON() { + const t = be.prototype.toJSON.call(this); + return function(t, e) { + if (e.shapes = [], Array.isArray(t)) + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + e.shapes.push(i.uuid) + } else e.shapes.push(t.uuid); + return e + }(this.parameters.shapes, t) + } + } + class Zo extends be { + constructor(t = 1, e = 8, n = 6, i = 0, r = 2 * Math.PI, o = 0, s = Math.PI) { + super(), this.type = "SphereGeometry", this.parameters = { + radius: t, + widthSegments: e, + heightSegments: n, + phiStart: i, + phiLength: r, + thetaStart: o, + thetaLength: s + }, e = Math.max(3, Math.floor(e)), n = Math.max(2, Math.floor(n)); + const a = Math.min(o + s, Math.PI); + let l = 0; + const c = [], + h = new T, + u = new T, + d = [], + p = [], + f = [], + m = []; + for (let d = 0; d <= n; d++) { + const g = [], + v = d / n; + let y = 0; + 0 == d && 0 == o ? y = .5 / e : d == n && a == Math.PI && (y = -.5 / e); + for (let n = 0; n <= e; n++) { + const a = n / e; + h.x = -t * Math.cos(i + a * r) * Math.sin(o + v * s), h.y = t * Math.cos(o + v * s), h.z = t * Math.sin(i + a * r) * Math.sin(o + v * s), p.push(h.x, h.y, h.z), u.copy(h).normalize(), f.push(u.x, u.y, u.z), m.push(a + y, 1 - v), g.push(l++) + } + c.push(g) + } + for (let t = 0; t < n; t++) + for (let i = 0; i < e; i++) { + const e = c[t][i + 1], + r = c[t][i], + s = c[t + 1][i], + l = c[t + 1][i + 1]; + (0 !== t || o > 0) && d.push(e, r, l), (t !== n - 1 || a < Math.PI) && d.push(r, s, l) + } + this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) + } + } + + function Jo(t) { + Jt.call(this), this.type = "ShadowMaterial", this.color = new Yt(0), this.transparent = !0, this.setValues(t) + } + + function Ko(t) { + Xe.call(this, t), this.type = "RawShaderMaterial" + } + + function $o(t) { + Jt.call(this), this.defines = { + STANDARD: "" + }, this.type = "MeshStandardMaterial", this.color = new Yt(16777215), this.roughness = 1, this.metalness = 0, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapIntensity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.vertexTangents = !1, this.setValues(t) + } + + function ts(t) { + $o.call(this), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.type = "MeshPhysicalMaterial", this.clearcoat = 0, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new v(1, 1), this.clearcoatNormalMap = null, this.reflectivity = .5, Object.defineProperty(this, "ior", { + get: function() { + return (1 + .4 * this.reflectivity) / (1 - .4 * this.reflectivity) + }, + set: function(t) { + this.reflectivity = g.clamp(2.5 * (t - 1) / (t + 1), 0, 1) + } + }), this.sheen = null, this.transmission = 0, this.transmissionMap = null, this.setValues(t) + } + + function es(t) { + Jt.call(this), this.type = "MeshPhongMaterial", this.color = new Yt(16777215), this.specular = new Yt(1118481), this.shininess = 30, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function ns(t) { + Jt.call(this), this.defines = { + TOON: "" + }, this.type = "MeshToonMaterial", this.color = new Yt(16777215), this.map = null, this.gradientMap = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function is(t) { + Jt.call(this), this.type = "MeshNormalMaterial", this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function rs(t) { + Jt.call(this), this.type = "MeshLambertMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function os(t) { + Jt.call(this), this.defines = { + MATCAP: "" + }, this.type = "MeshMatcapMaterial", this.color = new Yt(16777215), this.matcap = null, this.map = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) + } + + function ss(t) { + Qr.call(this), this.type = "LineDashedMaterial", this.scale = 1, this.dashSize = 3, this.gapSize = 1, this.setValues(t) + } + Jo.prototype = Object.create(Jt.prototype), Jo.prototype.constructor = Jo, Jo.prototype.isShadowMaterial = !0, Jo.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this + }, Ko.prototype = Object.create(Xe.prototype), Ko.prototype.constructor = Ko, Ko.prototype.isRawShaderMaterial = !0, $o.prototype = Object.create(Jt.prototype), $o.prototype.constructor = $o, $o.prototype.isMeshStandardMaterial = !0, $o.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.defines = { + STANDARD: "" + }, this.color.copy(t.color), this.roughness = t.roughness, this.metalness = t.metalness, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.roughnessMap = t.roughnessMap, this.metalnessMap = t.metalnessMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.envMapIntensity = t.envMapIntensity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.vertexTangents = t.vertexTangents, this + }, ts.prototype = Object.create($o.prototype), ts.prototype.constructor = ts, ts.prototype.isMeshPhysicalMaterial = !0, ts.prototype.copy = function(t) { + return $o.prototype.copy.call(this, t), this.defines = { + STANDARD: "", + PHYSICAL: "" + }, this.clearcoat = t.clearcoat, this.clearcoatMap = t.clearcoatMap, this.clearcoatRoughness = t.clearcoatRoughness, this.clearcoatRoughnessMap = t.clearcoatRoughnessMap, this.clearcoatNormalMap = t.clearcoatNormalMap, this.clearcoatNormalScale.copy(t.clearcoatNormalScale), this.reflectivity = t.reflectivity, t.sheen ? this.sheen = (this.sheen || new Yt).copy(t.sheen) : this.sheen = null, this.transmission = t.transmission, this.transmissionMap = t.transmissionMap, this + }, es.prototype = Object.create(Jt.prototype), es.prototype.constructor = es, es.prototype.isMeshPhongMaterial = !0, es.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.specular.copy(t.specular), this.shininess = t.shininess, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, ns.prototype = Object.create(Jt.prototype), ns.prototype.constructor = ns, ns.prototype.isMeshToonMaterial = !0, ns.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.gradientMap = t.gradientMap, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, is.prototype = Object.create(Jt.prototype), is.prototype.constructor = is, is.prototype.isMeshNormalMaterial = !0, is.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, rs.prototype = Object.create(Jt.prototype), rs.prototype.constructor = rs, rs.prototype.isMeshLambertMaterial = !0, rs.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, os.prototype = Object.create(Jt.prototype), os.prototype.constructor = os, os.prototype.isMeshMatcapMaterial = !0, os.prototype.copy = function(t) { + return Jt.prototype.copy.call(this, t), this.defines = { + MATCAP: "" + }, this.color.copy(t.color), this.matcap = t.matcap, this.map = t.map, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this + }, ss.prototype = Object.create(Qr.prototype), ss.prototype.constructor = ss, ss.prototype.isLineDashedMaterial = !0, ss.prototype.copy = function(t) { + return Qr.prototype.copy.call(this, t), this.scale = t.scale, this.dashSize = t.dashSize, this.gapSize = t.gapSize, this + }; + var as = Object.freeze({ + __proto__: null, + ShadowMaterial: Jo, + SpriteMaterial: mr, + RawShaderMaterial: Ko, + ShaderMaterial: Xe, + PointsMaterial: so, + MeshPhysicalMaterial: ts, + MeshStandardMaterial: $o, + MeshPhongMaterial: es, + MeshToonMaterial: ns, + MeshNormalMaterial: is, + MeshLambertMaterial: rs, + MeshDepthMaterial: Ki, + MeshDistanceMaterial: $i, + MeshBasicMaterial: Kt, + MeshMatcapMaterial: os, + LineDashedMaterial: ss, + LineBasicMaterial: Qr, + Material: Jt + }); + const ls = { + arraySlice: function(t, e, n) { + return ls.isTypedArray(t) ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) : t.slice(e, n) + }, + convertArray: function(t, e, n) { + return !t || !n && t.constructor === e ? t : "number" == typeof e.BYTES_PER_ELEMENT ? new e(t) : Array.prototype.slice.call(t) + }, + isTypedArray: function(t) { + return ArrayBuffer.isView(t) && !(t instanceof DataView) + }, + getKeyframeOrder: function(t) { + const e = t.length, + n = new Array(e); + for (let t = 0; t !== e; ++t) n[t] = t; + return n.sort((function(e, n) { + return t[e] - t[n] + })), n + }, + sortedArray: function(t, e, n) { + const i = t.length, + r = new t.constructor(i); + for (let o = 0, s = 0; s !== i; ++o) { + const i = n[o] * e; + for (let n = 0; n !== e; ++n) r[s++] = t[i + n] + } + return r + }, + flattenJSON: function(t, e, n, i) { + let r = 1, + o = t[0]; + for (; void 0 !== o && void 0 === o[i];) o = t[r++]; + if (void 0 === o) return; + let s = o[i]; + if (void 0 !== s) + if (Array.isArray(s)) + do { + s = o[i], void 0 !== s && (e.push(o.time), n.push.apply(n, s)), o = t[r++] + } while (void 0 !== o); + else if (void 0 !== s.toArray) + do { + s = o[i], void 0 !== s && (e.push(o.time), s.toArray(n, n.length)), o = t[r++] + } while (void 0 !== o); + else + do { + s = o[i], void 0 !== s && (e.push(o.time), n.push(s)), o = t[r++] + } while (void 0 !== o) + }, + subclip: function(t, e, n, i, r = 30) { + const o = t.clone(); + o.name = e; + const s = []; + for (let t = 0; t < o.tracks.length; ++t) { + const e = o.tracks[t], + a = e.getValueSize(), + l = [], + c = []; + for (let t = 0; t < e.times.length; ++t) { + const o = e.times[t] * r; + if (!(o < n || o >= i)) { + l.push(e.times[t]); + for (let n = 0; n < a; ++n) c.push(e.values[t * a + n]) + } + } + 0 !== l.length && (e.times = ls.convertArray(l, e.times.constructor), e.values = ls.convertArray(c, e.values.constructor), s.push(e)) + } + o.tracks = s; + let a = 1 / 0; + for (let t = 0; t < o.tracks.length; ++t) a > o.tracks[t].times[0] && (a = o.tracks[t].times[0]); + for (let t = 0; t < o.tracks.length; ++t) o.tracks[t].shift(-1 * a); + return o.resetDuration(), o + }, + makeClipAdditive: function(t, e = 0, n = t, i = 30) { + i <= 0 && (i = 30); + const r = n.tracks.length, + o = e / i; + for (let e = 0; e < r; ++e) { + const i = n.tracks[e], + r = i.ValueTypeName; + if ("bool" === r || "string" === r) continue; + const s = t.tracks.find((function(t) { + return t.name === i.name && t.ValueTypeName === r + })); + if (void 0 === s) continue; + let a = 0; + const l = i.getValueSize(); + i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (a = l / 3); + let c = 0; + const h = s.getValueSize(); + s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (c = h / 3); + const u = i.times.length - 1; + let d; + if (o <= i.times[0]) { + const t = a, + e = l - a; + d = ls.arraySlice(i.values, t, e) + } else if (o >= i.times[u]) { + const t = u * l + a, + e = t + l - a; + d = ls.arraySlice(i.values, t, e) + } else { + const t = i.createInterpolant(), + e = a, + n = l - a; + t.evaluate(o), d = ls.arraySlice(t.resultBuffer, e, n) + } + if ("quaternion" === r) { + (new S).fromArray(d).normalize().conjugate().toArray(d) + } + const p = s.times.length; + for (let t = 0; t < p; ++t) { + const e = t * h + c; + if ("quaternion" === r) S.multiplyQuaternionsFlat(s.values, e, d, 0, s.values, e); + else { + const t = h - 2 * c; + for (let n = 0; n < t; ++n) s.values[e + n] -= d[n] + } + } + } + return t.blendMode = 2501, t + } + }; + + function cs(t, e, n, i) { + this.parameterPositions = t, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new e.constructor(n), this.sampleValues = e, this.valueSize = n + } + + function hs(t, e, n, i) { + cs.call(this, t, e, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0 + } + + function us(t, e, n, i) { + cs.call(this, t, e, n, i) + } + + function ds(t, e, n, i) { + cs.call(this, t, e, n, i) + } + + function ps(t, e, n, i) { + if (void 0 === t) throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (void 0 === e || 0 === e.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + t); + this.name = t, this.times = ls.convertArray(e, this.TimeBufferType), this.values = ls.convertArray(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) + } + + function fs(t, e, n) { + ps.call(this, t, e, n) + } + + function ms(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function gs(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function vs(t, e, n, i) { + cs.call(this, t, e, n, i) + } + + function ys(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function As(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function xs(t, e, n, i) { + ps.call(this, t, e, n, i) + } + + function _s(t, e = -1, n, i = 2500) { + this.name = t, this.tracks = n, this.duration = e, this.blendMode = i, this.uuid = g.generateUUID(), this.duration < 0 && this.resetDuration() + } + + function bs(t) { + if (void 0 === t.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + const e = function(t) { + switch (t.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return gs; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return xs; + case "color": + return ms; + case "quaternion": + return ys; + case "bool": + case "boolean": + return fs; + case "string": + return As + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + t) + }(t.type); + if (void 0 === t.times) { + const e = [], + n = []; + ls.flattenJSON(t.keys, e, n, "value"), t.times = e, t.values = n + } + return void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation) + } + Object.assign(cs.prototype, { + evaluate: function(t) { + const e = this.parameterPositions; + let n = this._cachedIndex, + i = e[n], + r = e[n - 1]; + t: { + e: { + let o;n: { + i: if (!(t < i)) { + for (let o = n + 2;;) { + if (void 0 === i) { + if (t < r) break i; + return n = e.length, this._cachedIndex = n, this.afterEnd_(n - 1, t, r) + } + if (n === o) break; + if (r = i, i = e[++n], t < i) break e + } + o = e.length; + break n + }if (t >= r) break t; { + const s = e[1]; + t < s && (n = 2, r = s); + for (let o = n - 2;;) { + if (void 0 === r) return this._cachedIndex = 0, this.beforeStart_(0, t, i); + if (n === o) break; + if (i = r, r = e[--n - 1], t >= r) break e + } + o = n, n = 0 + } + } + for (; n < o;) { + const i = n + o >>> 1; + t < e[i] ? o = i : n = i + 1 + } + if (i = e[n], r = e[n - 1], void 0 === r) return this._cachedIndex = 0, + this.beforeStart_(0, t, i); + if (void 0 === i) return n = e.length, + this._cachedIndex = n, + this.afterEnd_(n - 1, r, t) + } + this._cachedIndex = n, + this.intervalChanged_(n, r, i) + } + return this.interpolate_(n, r, t, i) + }, + settings: null, + DefaultSettings_: {}, + getSettings_: function() { + return this.settings || this.DefaultSettings_ + }, + copySampleValue_: function(t) { + const e = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = t * i; + for (let t = 0; t !== i; ++t) e[t] = n[r + t]; + return e + }, + interpolate_: function() { + throw new Error("call to abstract method") + }, + intervalChanged_: function() {} + }), Object.assign(cs.prototype, { + beforeStart_: cs.prototype.copySampleValue_, + afterEnd_: cs.prototype.copySampleValue_ + }), hs.prototype = Object.assign(Object.create(cs.prototype), { + constructor: hs, + DefaultSettings_: { + endingStart: 2400, + endingEnd: 2400 + }, + intervalChanged_: function(t, e, n) { + const i = this.parameterPositions; + let r = t - 2, + o = t + 1, + s = i[r], + a = i[o]; + if (void 0 === s) switch (this.getSettings_().endingStart) { + case 2401: + r = t, s = 2 * e - n; + break; + case 2402: + r = i.length - 2, s = e + i[r] - i[r + 1]; + break; + default: + r = t, s = n + } + if (void 0 === a) switch (this.getSettings_().endingEnd) { + case 2401: + o = t, a = 2 * n - e; + break; + case 2402: + o = 1, a = n + i[1] - i[0]; + break; + default: + o = t - 1, a = e + } + const l = .5 * (n - e), + c = this.valueSize; + this._weightPrev = l / (e - s), this._weightNext = l / (a - n), this._offsetPrev = r * c, this._offsetNext = o * c + }, + interpolate_: function(t, e, n, i) { + const r = this.resultBuffer, + o = this.sampleValues, + s = this.valueSize, + a = t * s, + l = a - s, + c = this._offsetPrev, + h = this._offsetNext, + u = this._weightPrev, + d = this._weightNext, + p = (n - e) / (i - e), + f = p * p, + m = f * p, + g = -u * m + 2 * u * f - u * p, + v = (1 + u) * m + (-1.5 - 2 * u) * f + (-.5 + u) * p + 1, + y = (-1 - d) * m + (1.5 + d) * f + .5 * p, + A = d * m - d * f; + for (let t = 0; t !== s; ++t) r[t] = g * o[c + t] + v * o[l + t] + y * o[a + t] + A * o[h + t]; + return r + } + }), us.prototype = Object.assign(Object.create(cs.prototype), { + constructor: us, + interpolate_: function(t, e, n, i) { + const r = this.resultBuffer, + o = this.sampleValues, + s = this.valueSize, + a = t * s, + l = a - s, + c = (n - e) / (i - e), + h = 1 - c; + for (let t = 0; t !== s; ++t) r[t] = o[l + t] * h + o[a + t] * c; + return r + } + }), ds.prototype = Object.assign(Object.create(cs.prototype), { + constructor: ds, + interpolate_: function(t) { + return this.copySampleValue_(t - 1) + } + }), Object.assign(ps, { + toJSON: function(t) { + const e = t.constructor; + let n; + if (void 0 !== e.toJSON) n = e.toJSON(t); + else { + n = { + name: t.name, + times: ls.convertArray(t.times, Array), + values: ls.convertArray(t.values, Array) + }; + const e = t.getInterpolation(); + e !== t.DefaultInterpolation && (n.interpolation = e) + } + return n.type = t.ValueTypeName, n + } + }), Object.assign(ps.prototype, { + constructor: ps, + TimeBufferType: Float32Array, + ValueBufferType: Float32Array, + DefaultInterpolation: 2301, + InterpolantFactoryMethodDiscrete: function(t) { + return new ds(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodLinear: function(t) { + return new us(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodSmooth: function(t) { + return new hs(this.times, this.values, this.getValueSize(), t) + }, + setInterpolation: function(t) { + let e; + switch (t) { + case 2300: + e = this.InterpolantFactoryMethodDiscrete; + break; + case 2301: + e = this.InterpolantFactoryMethodLinear; + break; + case 2302: + e = this.InterpolantFactoryMethodSmooth + } + if (void 0 === e) { + const e = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (void 0 === this.createInterpolant) { + if (t === this.DefaultInterpolation) throw new Error(e); + this.setInterpolation(this.DefaultInterpolation) + } + return console.warn("THREE.KeyframeTrack:", e), this + } + return this.createInterpolant = e, this + }, + getInterpolation: function() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return 2300; + case this.InterpolantFactoryMethodLinear: + return 2301; + case this.InterpolantFactoryMethodSmooth: + return 2302 + } + }, + getValueSize: function() { + return this.values.length / this.times.length + }, + shift: function(t) { + if (0 !== t) { + const e = this.times; + for (let n = 0, i = e.length; n !== i; ++n) e[n] += t + } + return this + }, + scale: function(t) { + if (1 !== t) { + const e = this.times; + for (let n = 0, i = e.length; n !== i; ++n) e[n] *= t + } + return this + }, + trim: function(t, e) { + const n = this.times, + i = n.length; + let r = 0, + o = i - 1; + for (; r !== i && n[r] < t;) ++r; + for (; - 1 !== o && n[o] > e;) --o; + if (++o, 0 !== r || o !== i) { + r >= o && (o = Math.max(o, 1), r = o - 1); + const t = this.getValueSize(); + this.times = ls.arraySlice(n, r, o), this.values = ls.arraySlice(this.values, r * t, o * t) + } + return this + }, + validate: function() { + let t = !0; + const e = this.getValueSize(); + e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), t = !1); + const n = this.times, + i = this.values, + r = n.length; + 0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), t = !1); + let o = null; + for (let e = 0; e !== r; e++) { + const i = n[e]; + if ("number" == typeof i && isNaN(i)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, e, i), t = !1; + break + } + if (null !== o && o > i) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, e, i, o), t = !1; + break + } + o = i + } + if (void 0 !== i && ls.isTypedArray(i)) + for (let e = 0, n = i.length; e !== n; ++e) { + const n = i[e]; + if (isNaN(n)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, e, n), t = !1; + break + } + } + return t + }, + optimize: function() { + const t = ls.arraySlice(this.times), + e = ls.arraySlice(this.values), + n = this.getValueSize(), + i = 2302 === this.getInterpolation(), + r = t.length - 1; + let o = 1; + for (let s = 1; s < r; ++s) { + let r = !1; + const a = t[s]; + if (a !== t[s + 1] && (1 !== s || a !== t[0])) + if (i) r = !0; + else { + const t = s * n, + i = t - n, + o = t + n; + for (let s = 0; s !== n; ++s) { + const n = e[t + s]; + if (n !== e[i + s] || n !== e[o + s]) { + r = !0; + break + } + } + } if (r) { + if (s !== o) { + t[o] = t[s]; + const i = s * n, + r = o * n; + for (let t = 0; t !== n; ++t) e[r + t] = e[i + t] + }++o + } + } + if (r > 0) { + t[o] = t[r]; + for (let t = r * n, i = o * n, s = 0; s !== n; ++s) e[i + s] = e[t + s]; + ++o + } + return o !== t.length ? (this.times = ls.arraySlice(t, 0, o), this.values = ls.arraySlice(e, 0, o * n)) : (this.times = t, this.values = e), this + }, + clone: function() { + const t = ls.arraySlice(this.times, 0), + e = ls.arraySlice(this.values, 0), + n = new(0, this.constructor)(this.name, t, e); + return n.createInterpolant = this.createInterpolant, n + } + }), fs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: fs, + ValueTypeName: "bool", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), ms.prototype = Object.assign(Object.create(ps.prototype), { + constructor: ms, + ValueTypeName: "color" + }), gs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: gs, + ValueTypeName: "number" + }), vs.prototype = Object.assign(Object.create(cs.prototype), { + constructor: vs, + interpolate_: function(t, e, n, i) { + const r = this.resultBuffer, + o = this.sampleValues, + s = this.valueSize, + a = (n - e) / (i - e); + let l = t * s; + for (let t = l + s; l !== t; l += 4) S.slerpFlat(r, 0, o, l - s, o, l, a); + return r + } + }), ys.prototype = Object.assign(Object.create(ps.prototype), { + constructor: ys, + ValueTypeName: "quaternion", + DefaultInterpolation: 2301, + InterpolantFactoryMethodLinear: function(t) { + return new vs(this.times, this.values, this.getValueSize(), t) + }, + InterpolantFactoryMethodSmooth: void 0 + }), As.prototype = Object.assign(Object.create(ps.prototype), { + constructor: As, + ValueTypeName: "string", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), xs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: xs, + ValueTypeName: "vector" + }), Object.assign(_s, { + parse: function(t) { + const e = [], + n = t.tracks, + i = 1 / (t.fps || 1); + for (let t = 0, r = n.length; t !== r; ++t) e.push(bs(n[t]).scale(i)); + const r = new _s(t.name, t.duration, e, t.blendMode); + return r.uuid = t.uuid, r + }, + toJSON: function(t) { + const e = [], + n = t.tracks, + i = { + name: t.name, + duration: t.duration, + tracks: e, + uuid: t.uuid, + blendMode: t.blendMode + }; + for (let t = 0, i = n.length; t !== i; ++t) e.push(ps.toJSON(n[t])); + return i + }, + CreateFromMorphTargetSequence: function(t, e, n, i) { + const r = e.length, + o = []; + for (let t = 0; t < r; t++) { + let s = [], + a = []; + s.push((t + r - 1) % r, t, (t + 1) % r), a.push(0, 1, 0); + const l = ls.getKeyframeOrder(s); + s = ls.sortedArray(s, 1, l), a = ls.sortedArray(a, 1, l), i || 0 !== s[0] || (s.push(r), a.push(a[0])), o.push(new gs(".morphTargetInfluences[" + e[t].name + "]", s, a).scale(1 / n)) + } + return new _s(t, -1, o) + }, + findByName: function(t, e) { + let n = t; + if (!Array.isArray(t)) { + const e = t; + n = e.geometry && e.geometry.animations || e.animations + } + for (let t = 0; t < n.length; t++) + if (n[t].name === e) return n[t]; + return null + }, + CreateClipsFromMorphTargetSequences: function(t, e, n) { + const i = {}, + r = /^([\w-]*?)([\d]+)$/; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e], + o = n.name.match(r); + if (o && o.length > 1) { + const t = o[1]; + let e = i[t]; + e || (i[t] = e = []), e.push(n) + } + } + const o = []; + for (const t in i) o.push(_s.CreateFromMorphTargetSequence(t, i[t], e, n)); + return o + }, + parseAnimation: function(t, e) { + if (!t) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null; + const n = function(t, e, n, i, r) { + if (0 !== n.length) { + const o = [], + s = []; + ls.flattenJSON(n, o, s, i), 0 !== o.length && r.push(new t(e, o, s)) + } + }, + i = [], + r = t.name || "default", + o = t.fps || 30, + s = t.blendMode; + let a = t.length || -1; + const l = t.hierarchy || []; + for (let t = 0; t < l.length; t++) { + const r = l[t].keys; + if (r && 0 !== r.length) + if (r[0].morphTargets) { + const t = {}; + let e; + for (e = 0; e < r.length; e++) + if (r[e].morphTargets) + for (let n = 0; n < r[e].morphTargets.length; n++) t[r[e].morphTargets[n]] = -1; + for (const n in t) { + const t = [], + o = []; + for (let i = 0; i !== r[e].morphTargets.length; ++i) { + const i = r[e]; + t.push(i.time), o.push(i.morphTarget === n ? 1 : 0) + } + i.push(new gs(".morphTargetInfluence[" + n + "]", t, o)) + } + a = t.length * (o || 1) + } else { + const o = ".bones[" + e[t].name + "]"; + n(xs, o + ".position", r, "pos", i), n(ys, o + ".quaternion", r, "rot", i), n(xs, o + ".scale", r, "scl", i) + } + } + if (0 === i.length) return null; + return new _s(r, a, i, s) + } + }), Object.assign(_s.prototype, { + resetDuration: function() { + let t = 0; + for (let e = 0, n = this.tracks.length; e !== n; ++e) { + const n = this.tracks[e]; + t = Math.max(t, n.times[n.times.length - 1]) + } + return this.duration = t, this + }, + trim: function() { + for (let t = 0; t < this.tracks.length; t++) this.tracks[t].trim(0, this.duration); + return this + }, + validate: function() { + let t = !0; + for (let e = 0; e < this.tracks.length; e++) t = t && this.tracks[e].validate(); + return t + }, + optimize: function() { + for (let t = 0; t < this.tracks.length; t++) this.tracks[t].optimize(); + return this + }, + clone: function() { + const t = []; + for (let e = 0; e < this.tracks.length; e++) t.push(this.tracks[e].clone()); + return new _s(this.name, this.duration, t, this.blendMode) + }, + toJSON: function() { + return _s.toJSON(this) + } + }); + const ws = { + enabled: !1, + files: {}, + add: function(t, e) { + !1 !== this.enabled && (this.files[t] = e) + }, + get: function(t) { + if (!1 !== this.enabled) return this.files[t] + }, + remove: function(t) { + delete this.files[t] + }, + clear: function() { + this.files = {} + } + }; + const Ms = new function(t, e, n) { + const i = this; + let r = !1, + o = 0, + s = 0, + a = void 0; + const l = []; + this.onStart = void 0, this.onLoad = t, this.onProgress = e, this.onError = n, this.itemStart = function(t) { + s++, !1 === r && void 0 !== i.onStart && i.onStart(t, o, s), r = !0 + }, this.itemEnd = function(t) { + o++, void 0 !== i.onProgress && i.onProgress(t, o, s), o === s && (r = !1, void 0 !== i.onLoad && i.onLoad()) + }, this.itemError = function(t) { + void 0 !== i.onError && i.onError(t) + }, this.resolveURL = function(t) { + return a ? a(t) : t + }, this.setURLModifier = function(t) { + return a = t, this + }, this.addHandler = function(t, e) { + return l.push(t, e), this + }, this.removeHandler = function(t) { + const e = l.indexOf(t); + return -1 !== e && l.splice(e, 2), this + }, this.getHandler = function(t) { + for (let e = 0, n = l.length; e < n; e += 2) { + const n = l[e], + i = l[e + 1]; + if (n.global && (n.lastIndex = 0), n.test(t)) return i + } + return null + } + }; + + function Es(t) { + this.manager = void 0 !== t ? t : Ms, this.crossOrigin = "anonymous", this.withCredentials = !1, this.path = "", this.resourcePath = "", this.requestHeader = {} + } + Object.assign(Es.prototype, { + load: function() {}, + loadAsync: function(t, e) { + const n = this; + return new Promise((function(i, r) { + n.load(t, i, e, r) + })) + }, + parse: function() {}, + setCrossOrigin: function(t) { + return this.crossOrigin = t, this + }, + setWithCredentials: function(t) { + return this.withCredentials = t, this + }, + setPath: function(t) { + return this.path = t, this + }, + setResourcePath: function(t) { + return this.resourcePath = t, this + }, + setRequestHeader: function(t) { + return this.requestHeader = t, this + } + }); + const Ss = {}; + + function Ts(t) { + Es.call(this, t) + } + + function Ls(t) { + Es.call(this, t) + } + + function Rs(t) { + Es.call(this, t) + } + + function Cs(t) { + Es.call(this, t) + } + + function Ps(t) { + Es.call(this, t) + } + + function Ds(t) { + Es.call(this, t) + } + + function Is(t) { + Es.call(this, t) + } + + function Os() { + this.type = "Curve", this.arcLengthDivisions = 200 + } + + function Ns(t, e, n, i, r, o, s, a) { + Os.call(this), this.type = "EllipseCurve", this.aX = t || 0, this.aY = e || 0, this.xRadius = n || 1, this.yRadius = i || 1, this.aStartAngle = r || 0, this.aEndAngle = o || 2 * Math.PI, this.aClockwise = s || !1, this.aRotation = a || 0 + } + + function Bs(t, e, n, i, r, o) { + Ns.call(this, t, e, n, n, i, r, o), this.type = "ArcCurve" + } + + function Fs() { + let t = 0, + e = 0, + n = 0, + i = 0; + + function r(r, o, s, a) { + t = r, e = s, n = -3 * r + 3 * o - 2 * s - a, i = 2 * r - 2 * o + s + a + } + return { + initCatmullRom: function(t, e, n, i, o) { + r(e, n, o * (n - t), o * (i - e)) + }, + initNonuniformCatmullRom: function(t, e, n, i, o, s, a) { + let l = (e - t) / o - (n - t) / (o + s) + (n - e) / s, + c = (n - e) / s - (i - e) / (s + a) + (i - n) / a; + l *= s, c *= s, r(e, n, l, c) + }, + calc: function(r) { + const o = r * r; + return t + e * r + n * o + i * (o * r) + } + } + } + Ts.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ts, + load: function(t, e, n, i) { + void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); + const r = this, + o = ws.get(t); + if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { + e && e(o), r.manager.itemEnd(t) + }), 0), o; + if (void 0 !== Ss[t]) return void Ss[t].push({ + onLoad: e, + onProgress: n, + onError: i + }); + const s = t.match(/^data:(.*?)(;base64)?,(.*)$/); + let a; + if (s) { + const n = s[1], + o = !!s[2]; + let a = s[3]; + a = decodeURIComponent(a), o && (a = atob(a)); + try { + let i; + const o = (this.responseType || "").toLowerCase(); + switch (o) { + case "arraybuffer": + case "blob": + const t = new Uint8Array(a.length); + for (let e = 0; e < a.length; e++) t[e] = a.charCodeAt(e); + i = "blob" === o ? new Blob([t.buffer], { + type: n + }) : t.buffer; + break; + case "document": + const e = new DOMParser; + i = e.parseFromString(a, n); + break; + case "json": + i = JSON.parse(a); + break; + default: + i = a + } + setTimeout((function() { + e && e(i), r.manager.itemEnd(t) + }), 0) + } catch (e) { + setTimeout((function() { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + }), 0) + } + } else { + Ss[t] = [], Ss[t].push({ + onLoad: e, + onProgress: n, + onError: i + }), a = new XMLHttpRequest, a.open("GET", t, !0), a.addEventListener("load", (function(e) { + const n = this.response, + i = Ss[t]; + if (delete Ss[t], 200 === this.status || 0 === this.status) { + 0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), ws.add(t, n); + for (let t = 0, e = i.length; t < e; t++) { + const e = i[t]; + e.onLoad && e.onLoad(n) + } + r.manager.itemEnd(t) + } else { + for (let t = 0, n = i.length; t < n; t++) { + const n = i[t]; + n.onError && n.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + } + }), !1), a.addEventListener("progress", (function(e) { + const n = Ss[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onProgress && i.onProgress(e) + } + }), !1), a.addEventListener("error", (function(e) { + const n = Ss[t]; + delete Ss[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onError && i.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + }), !1), a.addEventListener("abort", (function(e) { + const n = Ss[t]; + delete Ss[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onError && i.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + }), !1), void 0 !== this.responseType && (a.responseType = this.responseType), void 0 !== this.withCredentials && (a.withCredentials = this.withCredentials), a.overrideMimeType && a.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"); + for (const t in this.requestHeader) a.setRequestHeader(t, this.requestHeader[t]); + a.send(null) + } + return r.manager.itemStart(t), a + }, + setResponseType: function(t) { + return this.responseType = t, this + }, + setMimeType: function(t) { + return this.mimeType = t, this + } + }), Ls.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ls, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + e(r.parse(JSON.parse(n))) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + }, + parse: function(t) { + const e = []; + for (let n = 0; n < t.length; n++) { + const i = _s.parse(t[n]); + e.push(i) + } + return e + } + }), Rs.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Rs, + load: function(t, e, n, i) { + const r = this, + o = [], + s = new mo, + a = new Ts(this.manager); + a.setPath(this.path), a.setResponseType("arraybuffer"), a.setRequestHeader(this.requestHeader), a.setWithCredentials(r.withCredentials); + let l = 0; + + function c(c) { + a.load(t[c], (function(t) { + const n = r.parse(t, !0); + o[c] = { + width: n.width, + height: n.height, + format: n.format, + mipmaps: n.mipmaps + }, l += 1, 6 === l && (1 === n.mipmapCount && (s.minFilter = 1006), s.image = o, s.format = n.format, s.needsUpdate = !0, e && e(s)) + }), n, i) + } + if (Array.isArray(t)) + for (let e = 0, n = t.length; e < n; ++e) c(e); + else a.load(t, (function(t) { + const n = r.parse(t, !0); + if (n.isCubemap) { + const t = n.mipmaps.length / n.mipmapCount; + for (let e = 0; e < t; e++) { + o[e] = { + mipmaps: [] + }; + for (let t = 0; t < n.mipmapCount; t++) o[e].mipmaps.push(n.mipmaps[e * n.mipmapCount + t]), o[e].format = n.format, o[e].width = n.width, o[e].height = n.height + } + s.image = o + } else s.image.width = n.width, s.image.height = n.height, s.mipmaps = n.mipmaps; + 1 === n.mipmapCount && (s.minFilter = 1006), s.format = n.format, s.needsUpdate = !0, e && e(s) + }), n, i); + return s + } + }), Cs.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Cs, + load: function(t, e, n, i) { + void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); + const r = this, + o = ws.get(t); + if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { + e && e(o), r.manager.itemEnd(t) + }), 0), o; + const s = document.createElementNS("http://www.w3.org/1999/xhtml", "img"); + + function a() { + s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), ws.add(t, this), e && e(this), r.manager.itemEnd(t) + } + + function l(e) { + s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + } + return s.addEventListener("load", a, !1), s.addEventListener("error", l, !1), "data:" !== t.substr(0, 5) && void 0 !== this.crossOrigin && (s.crossOrigin = this.crossOrigin), r.manager.itemStart(t), s.src = t, s + } + }), Ps.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ps, + load: function(t, e, n, i) { + const r = new Ze, + o = new Cs(this.manager); + o.setCrossOrigin(this.crossOrigin), o.setPath(this.path); + let s = 0; + + function a(n) { + o.load(t[n], (function(t) { + r.images[n] = t, s++, 6 === s && (r.needsUpdate = !0, e && e(r)) + }), void 0, i) + } + for (let e = 0; e < t.length; ++e) a(e); + return r + } + }), Ds.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ds, + load: function(t, e, n, i) { + const r = this, + o = new Ke, + s = new Ts(this.manager); + return s.setResponseType("arraybuffer"), s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(r.withCredentials), s.load(t, (function(t) { + const n = r.parse(t); + n && (void 0 !== n.image ? o.image = n.image : void 0 !== n.data && (o.image.width = n.width, o.image.height = n.height, o.image.data = n.data), o.wrapS = void 0 !== n.wrapS ? n.wrapS : 1001, o.wrapT = void 0 !== n.wrapT ? n.wrapT : 1001, o.magFilter = void 0 !== n.magFilter ? n.magFilter : 1006, o.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, o.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1, void 0 !== n.encoding && (o.encoding = n.encoding), void 0 !== n.flipY && (o.flipY = n.flipY), void 0 !== n.format && (o.format = n.format), void 0 !== n.type && (o.type = n.type), void 0 !== n.mipmaps && (o.mipmaps = n.mipmaps, o.minFilter = 1008), 1 === n.mipmapCount && (o.minFilter = 1006), o.needsUpdate = !0, e && e(o, n)) + }), n, i), o + } + }), Is.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Is, + load: function(t, e, n, i) { + const r = new b, + o = new Cs(this.manager); + return o.setCrossOrigin(this.crossOrigin), o.setPath(this.path), o.load(t, (function(n) { + r.image = n; + const i = t.search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/); + r.format = i ? 1022 : 1023, r.needsUpdate = !0, void 0 !== e && e(r) + }), n, i), r + } + }), Object.assign(Os.prototype, { + getPoint: function() { + return console.warn("THREE.Curve: .getPoint() not implemented."), null + }, + getPointAt: function(t, e) { + const n = this.getUtoTmapping(t); + return this.getPoint(n, e) + }, + getPoints: function(t = 5) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return e + }, + getSpacedPoints: function(t = 5) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPointAt(n / t)); + return e + }, + getLength: function() { + const t = this.getLengths(); + return t[t.length - 1] + }, + getLengths: function(t) { + if (void 0 === t && (t = this.arcLengthDivisions), this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate) return this.cacheArcLengths; + this.needsUpdate = !1; + const e = []; + let n, i = this.getPoint(0), + r = 0; + e.push(0); + for (let o = 1; o <= t; o++) n = this.getPoint(o / t), r += n.distanceTo(i), e.push(r), i = n; + return this.cacheArcLengths = e, e + }, + updateArcLengths: function() { + this.needsUpdate = !0, this.getLengths() + }, + getUtoTmapping: function(t, e) { + const n = this.getLengths(); + let i = 0; + const r = n.length; + let o; + o = e || t * n[r - 1]; + let s, a = 0, + l = r - 1; + for (; a <= l;) + if (i = Math.floor(a + (l - a) / 2), s = n[i] - o, s < 0) a = i + 1; + else { + if (!(s > 0)) { + l = i; + break + } + l = i - 1 + } if (i = l, n[i] === o) return i / (r - 1); + const c = n[i]; + return (i + (o - c) / (n[i + 1] - c)) / (r - 1) + }, + getTangent: function(t, e) { + let n = t - 1e-4, + i = t + 1e-4; + n < 0 && (n = 0), i > 1 && (i = 1); + const r = this.getPoint(n), + o = this.getPoint(i), + s = e || (r.isVector2 ? new v : new T); + return s.copy(o).sub(r).normalize(), s + }, + getTangentAt: function(t, e) { + const n = this.getUtoTmapping(t); + return this.getTangent(n, e) + }, + computeFrenetFrames: function(t, e) { + const n = new T, + i = [], + r = [], + o = [], + s = new T, + a = new et; + for (let e = 0; e <= t; e++) { + const n = e / t; + i[e] = this.getTangentAt(n, new T), i[e].normalize() + } + r[0] = new T, o[0] = new T; + let l = Number.MAX_VALUE; + const c = Math.abs(i[0].x), + h = Math.abs(i[0].y), + u = Math.abs(i[0].z); + c <= l && (l = c, n.set(1, 0, 0)), h <= l && (l = h, n.set(0, 1, 0)), u <= l && n.set(0, 0, 1), s.crossVectors(i[0], n).normalize(), r[0].crossVectors(i[0], s), o[0].crossVectors(i[0], r[0]); + for (let e = 1; e <= t; e++) { + if (r[e] = r[e - 1].clone(), o[e] = o[e - 1].clone(), s.crossVectors(i[e - 1], i[e]), s.length() > Number.EPSILON) { + s.normalize(); + const t = Math.acos(g.clamp(i[e - 1].dot(i[e]), -1, 1)); + r[e].applyMatrix4(a.makeRotationAxis(s, t)) + } + o[e].crossVectors(i[e], r[e]) + } + if (!0 === e) { + let e = Math.acos(g.clamp(r[0].dot(r[t]), -1, 1)); + e /= t, i[0].dot(s.crossVectors(r[0], r[t])) > 0 && (e = -e); + for (let n = 1; n <= t; n++) r[n].applyMatrix4(a.makeRotationAxis(i[n], e * n)), o[n].crossVectors(i[n], r[n]) + } + return { + tangents: i, + normals: r, + binormals: o + } + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(t) { + return this.arcLengthDivisions = t.arcLengthDivisions, this + }, + toJSON: function() { + const t = { + metadata: { + version: 4.5, + type: "Curve", + generator: "Curve.toJSON" + } + }; + return t.arcLengthDivisions = this.arcLengthDivisions, t.type = this.type, t + }, + fromJSON: function(t) { + return this.arcLengthDivisions = t.arcLengthDivisions, this + } + }), Ns.prototype = Object.create(Os.prototype), Ns.prototype.constructor = Ns, Ns.prototype.isEllipseCurve = !0, Ns.prototype.getPoint = function(t, e) { + const n = e || new v, + i = 2 * Math.PI; + let r = this.aEndAngle - this.aStartAngle; + const o = Math.abs(r) < Number.EPSILON; + for (; r < 0;) r += i; + for (; r > i;) r -= i; + r < Number.EPSILON && (r = o ? 0 : i), !0 !== this.aClockwise || o || (r === i ? r = -i : r -= i); + const s = this.aStartAngle + t * r; + let a = this.aX + this.xRadius * Math.cos(s), + l = this.aY + this.yRadius * Math.sin(s); + if (0 !== this.aRotation) { + const t = Math.cos(this.aRotation), + e = Math.sin(this.aRotation), + n = a - this.aX, + i = l - this.aY; + a = n * t - i * e + this.aX, l = n * e + i * t + this.aY + } + return n.set(a, l) + }, Ns.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this + }, Ns.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.aX = this.aX, t.aY = this.aY, t.xRadius = this.xRadius, t.yRadius = this.yRadius, t.aStartAngle = this.aStartAngle, t.aEndAngle = this.aEndAngle, t.aClockwise = this.aClockwise, t.aRotation = this.aRotation, t + }, Ns.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this + }, Bs.prototype = Object.create(Ns.prototype), Bs.prototype.constructor = Bs, Bs.prototype.isArcCurve = !0; + const zs = new T, + Us = new Fs, + Hs = new Fs, + Gs = new Fs; + + function Vs(t = [], e = !1, n = "centripetal", i = .5) { + Os.call(this), this.type = "CatmullRomCurve3", this.points = t, this.closed = e, this.curveType = n, this.tension = i + } + + function ks(t, e, n, i, r) { + const o = .5 * (i - e), + s = .5 * (r - n), + a = t * t; + return (2 * n - 2 * i + o + s) * (t * a) + (-3 * n + 3 * i - 2 * o - s) * a + o * t + n + } + + function Ws(t, e, n, i) { + return function(t, e) { + const n = 1 - t; + return n * n * e + }(t, e) + function(t, e) { + return 2 * (1 - t) * t * e + }(t, n) + function(t, e) { + return t * t * e + }(t, i) + } + + function js(t, e, n, i, r) { + return function(t, e) { + const n = 1 - t; + return n * n * n * e + }(t, e) + function(t, e) { + const n = 1 - t; + return 3 * n * n * t * e + }(t, n) + function(t, e) { + return 3 * (1 - t) * t * t * e + }(t, i) + function(t, e) { + return t * t * t * e + }(t, r) + } + + function Xs(t = new v, e = new v, n = new v, i = new v) { + Os.call(this), this.type = "CubicBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i + } + + function qs(t = new T, e = new T, n = new T, i = new T) { + Os.call(this), this.type = "CubicBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i + } + + function Ys(t = new v, e = new v) { + Os.call(this), this.type = "LineCurve", this.v1 = t, this.v2 = e + } + + function Qs(t = new T, e = new T) { + Os.call(this), this.type = "LineCurve3", this.v1 = t, this.v2 = e + } + + function Zs(t = new v, e = new v, n = new v) { + Os.call(this), this.type = "QuadraticBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n + } + + function Js(t = new T, e = new T, n = new T) { + Os.call(this), this.type = "QuadraticBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n + } + + function Ks(t = []) { + Os.call(this), this.type = "SplineCurve", this.points = t + } + Vs.prototype = Object.create(Os.prototype), Vs.prototype.constructor = Vs, Vs.prototype.isCatmullRomCurve3 = !0, Vs.prototype.getPoint = function(t, e = new T) { + const n = e, + i = this.points, + r = i.length, + o = (r - (this.closed ? 0 : 1)) * t; + let s, a, l = Math.floor(o), + c = o - l; + this.closed ? l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r : 0 === c && l === r - 1 && (l = r - 2, c = 1), this.closed || l > 0 ? s = i[(l - 1) % r] : (zs.subVectors(i[0], i[1]).add(i[0]), s = zs); + const h = i[l % r], + u = i[(l + 1) % r]; + if (this.closed || l + 2 < r ? a = i[(l + 2) % r] : (zs.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), a = zs), "centripetal" === this.curveType || "chordal" === this.curveType) { + const t = "chordal" === this.curveType ? .5 : .25; + let e = Math.pow(s.distanceToSquared(h), t), + n = Math.pow(h.distanceToSquared(u), t), + i = Math.pow(u.distanceToSquared(a), t); + n < 1e-4 && (n = 1), e < 1e-4 && (e = n), i < 1e-4 && (i = n), Us.initNonuniformCatmullRom(s.x, h.x, u.x, a.x, e, n, i), Hs.initNonuniformCatmullRom(s.y, h.y, u.y, a.y, e, n, i), Gs.initNonuniformCatmullRom(s.z, h.z, u.z, a.z, e, n, i) + } else "catmullrom" === this.curveType && (Us.initCatmullRom(s.x, h.x, u.x, a.x, this.tension), Hs.initCatmullRom(s.y, h.y, u.y, a.y, this.tension), Gs.initCatmullRom(s.z, h.z, u.z, a.z, this.tension)); + return n.set(Us.calc(c), Hs.calc(c), Gs.calc(c)), n + }, Vs.prototype.copy = function(t) { + Os.prototype.copy.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(n.clone()) + } + return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this + }, Vs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + t.points = []; + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e]; + t.points.push(n.toArray()) + } + return t.closed = this.closed, t.curveType = this.curveType, t.tension = this.tension, t + }, Vs.prototype.fromJSON = function(t) { + Os.prototype.fromJSON.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push((new T).fromArray(n)) + } + return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this + }, Xs.prototype = Object.create(Os.prototype), Xs.prototype.constructor = Xs, Xs.prototype.isCubicBezierCurve = !0, Xs.prototype.getPoint = function(t, e = new v) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2, + s = this.v3; + return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y)), n + }, Xs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this + }, Xs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t + }, Xs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this + }, qs.prototype = Object.create(Os.prototype), qs.prototype.constructor = qs, qs.prototype.isCubicBezierCurve3 = !0, qs.prototype.getPoint = function(t, e = new T) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2, + s = this.v3; + return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y), js(t, i.z, r.z, o.z, s.z)), n + }, qs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this + }, qs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t + }, qs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this + }, Ys.prototype = Object.create(Os.prototype), Ys.prototype.constructor = Ys, Ys.prototype.isLineCurve = !0, Ys.prototype.getPoint = function(t, e = new v) { + const n = e; + return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n + }, Ys.prototype.getPointAt = function(t, e) { + return this.getPoint(t, e) + }, Ys.prototype.getTangent = function(t, e) { + const n = e || new v; + return n.copy(this.v2).sub(this.v1).normalize(), n + }, Ys.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Ys.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Ys.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Qs.prototype = Object.create(Os.prototype), Qs.prototype.constructor = Qs, Qs.prototype.isLineCurve3 = !0, Qs.prototype.getPoint = function(t, e = new T) { + const n = e; + return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n + }, Qs.prototype.getPointAt = function(t, e) { + return this.getPoint(t, e) + }, Qs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Qs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Qs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Zs.prototype = Object.create(Os.prototype), Zs.prototype.constructor = Zs, Zs.prototype.isQuadraticBezierCurve = !0, Zs.prototype.getPoint = function(t, e = new v) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2; + return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y)), n + }, Zs.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Zs.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Zs.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Js.prototype = Object.create(Os.prototype), Js.prototype.constructor = Js, Js.prototype.isQuadraticBezierCurve3 = !0, Js.prototype.getPoint = function(t, e = new T) { + const n = e, + i = this.v0, + r = this.v1, + o = this.v2; + return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y), Ws(t, i.z, r.z, o.z)), n + }, Js.prototype.copy = function(t) { + return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + }, Js.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t + }, Js.prototype.fromJSON = function(t) { + return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + }, Ks.prototype = Object.create(Os.prototype), Ks.prototype.constructor = Ks, Ks.prototype.isSplineCurve = !0, Ks.prototype.getPoint = function(t, e = new v) { + const n = e, + i = this.points, + r = (i.length - 1) * t, + o = Math.floor(r), + s = r - o, + a = i[0 === o ? o : o - 1], + l = i[o], + c = i[o > i.length - 2 ? i.length - 1 : o + 1], + h = i[o > i.length - 3 ? i.length - 1 : o + 2]; + return n.set(ks(s, a.x, l.x, c.x, h.x), ks(s, a.y, l.y, c.y, h.y)), n + }, Ks.prototype.copy = function(t) { + Os.prototype.copy.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(n.clone()) + } + return this + }, Ks.prototype.toJSON = function() { + const t = Os.prototype.toJSON.call(this); + t.points = []; + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e]; + t.points.push(n.toArray()) + } + return t + }, Ks.prototype.fromJSON = function(t) { + Os.prototype.fromJSON.call(this, t), this.points = []; + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push((new v).fromArray(n)) + } + return this + }; + var $s = Object.freeze({ + __proto__: null, + ArcCurve: Bs, + CatmullRomCurve3: Vs, + CubicBezierCurve: Xs, + CubicBezierCurve3: qs, + EllipseCurve: Ns, + LineCurve: Ys, + LineCurve3: Qs, + QuadraticBezierCurve: Zs, + QuadraticBezierCurve3: Js, + SplineCurve: Ks + }); + + function ta() { + Os.call(this), this.type = "CurvePath", this.curves = [], this.autoClose = !1 + } + + function ea(t) { + ta.call(this), this.type = "Path", this.currentPoint = new v, t && this.setFromPoints(t) + } + + function na(t) { + ea.call(this, t), this.uuid = g.generateUUID(), this.type = "Shape", this.holes = [] + } + + function ia(t, e = 1) { + St.call(this), this.type = "Light", this.color = new Yt(t), this.intensity = e + } + + function ra(t, e, n) { + ia.call(this, t, n), this.type = "HemisphereLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.groundColor = new Yt(e) + } + + function oa(t) { + this.camera = t, this.bias = 0, this.normalBias = 0, this.radius = 1, this.mapSize = new v(512, 512), this.map = null, this.mapPass = null, this.matrix = new et, this.autoUpdate = !0, this.needsUpdate = !1, this._frustum = new en, this._frameExtents = new v(1, 1), this._viewportCount = 1, this._viewports = [new M(0, 0, 1, 1)] + } + + function sa() { + oa.call(this, new Ye(50, 1, .5, 500)), this.focus = 1 + } + + function aa(t, e, n, i, r, o) { + ia.call(this, t, e), this.type = "SpotLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, Object.defineProperty(this, "power", { + get: function() { + return this.intensity * Math.PI + }, + set: function(t) { + this.intensity = t / Math.PI + } + }), this.distance = void 0 !== n ? n : 0, this.angle = void 0 !== i ? i : Math.PI / 3, this.penumbra = void 0 !== r ? r : 0, this.decay = void 0 !== o ? o : 1, this.shadow = new sa + } + + function la() { + oa.call(this, new Ye(90, 1, .5, 500)), this._frameExtents = new v(4, 2), this._viewportCount = 6, this._viewports = [new M(2, 1, 1, 1), new M(0, 1, 1, 1), new M(3, 1, 1, 1), new M(1, 1, 1, 1), new M(3, 0, 1, 1), new M(1, 0, 1, 1)], this._cubeDirections = [new T(1, 0, 0), new T(-1, 0, 0), new T(0, 0, 1), new T(0, 0, -1), new T(0, 1, 0), new T(0, -1, 0)], this._cubeUps = [new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 0, 1), new T(0, 0, -1)] + } + + function ca(t, e, n, i) { + ia.call(this, t, e), this.type = "PointLight", Object.defineProperty(this, "power", { + get: function() { + return 4 * this.intensity * Math.PI + }, + set: function(t) { + this.intensity = t / (4 * Math.PI) + } + }), this.distance = void 0 !== n ? n : 0, this.decay = void 0 !== i ? i : 1, this.shadow = new la + } + + function ha(t = -1, e = 1, n = 1, i = -1, r = .1, o = 2e3) { + qe.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = t, this.right = e, this.top = n, this.bottom = i, this.near = r, this.far = o, this.updateProjectionMatrix() + } + + function ua() { + oa.call(this, new ha(-5, 5, 5, -5, .5, 500)) + } + + function da(t, e) { + ia.call(this, t, e), this.type = "DirectionalLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, this.shadow = new ua + } + + function pa(t, e) { + ia.call(this, t, e), this.type = "AmbientLight" + } + + function fa(t, e, n, i) { + ia.call(this, t, e), this.type = "RectAreaLight", this.width = void 0 !== n ? n : 10, this.height = void 0 !== i ? i : 10 + } + ta.prototype = Object.assign(Object.create(Os.prototype), { + constructor: ta, + add: function(t) { + this.curves.push(t) + }, + closePath: function() { + const t = this.curves[0].getPoint(0), + e = this.curves[this.curves.length - 1].getPoint(1); + t.equals(e) || this.curves.push(new Ys(e, t)) + }, + getPoint: function(t) { + const e = t * this.getLength(), + n = this.getCurveLengths(); + let i = 0; + for (; i < n.length;) { + if (n[i] >= e) { + const t = n[i] - e, + r = this.curves[i], + o = r.getLength(), + s = 0 === o ? 0 : 1 - t / o; + return r.getPointAt(s) + } + i++ + } + return null + }, + getLength: function() { + const t = this.getCurveLengths(); + return t[t.length - 1] + }, + updateArcLengths: function() { + this.needsUpdate = !0, this.cacheLengths = null, this.getCurveLengths() + }, + getCurveLengths: function() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) return this.cacheLengths; + const t = []; + let e = 0; + for (let n = 0, i = this.curves.length; n < i; n++) e += this.curves[n].getLength(), t.push(e); + return this.cacheLengths = t, t + }, + getSpacedPoints: function(t = 40) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return this.autoClose && e.push(e[0]), e + }, + getPoints: function(t = 12) { + const e = []; + let n; + for (let i = 0, r = this.curves; i < r.length; i++) { + const o = r[i], + s = o && o.isEllipseCurve ? 2 * t : o && (o.isLineCurve || o.isLineCurve3) ? 1 : o && o.isSplineCurve ? t * o.points.length : t, + a = o.getPoints(s); + for (let t = 0; t < a.length; t++) { + const i = a[t]; + n && n.equals(i) || (e.push(i), n = i) + } + } + return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]), e + }, + copy: function(t) { + Os.prototype.copy.call(this, t), this.curves = []; + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e]; + this.curves.push(n.clone()) + } + return this.autoClose = t.autoClose, this + }, + toJSON: function() { + const t = Os.prototype.toJSON.call(this); + t.autoClose = this.autoClose, t.curves = []; + for (let e = 0, n = this.curves.length; e < n; e++) { + const n = this.curves[e]; + t.curves.push(n.toJSON()) + } + return t + }, + fromJSON: function(t) { + Os.prototype.fromJSON.call(this, t), this.autoClose = t.autoClose, this.curves = []; + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e]; + this.curves.push((new $s[n.type]).fromJSON(n)) + } + return this + } + }), ea.prototype = Object.assign(Object.create(ta.prototype), { + constructor: ea, + setFromPoints: function(t) { + this.moveTo(t[0].x, t[0].y); + for (let e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y); + return this + }, + moveTo: function(t, e) { + return this.currentPoint.set(t, e), this + }, + lineTo: function(t, e) { + const n = new Ys(this.currentPoint.clone(), new v(t, e)); + return this.curves.push(n), this.currentPoint.set(t, e), this + }, + quadraticCurveTo: function(t, e, n, i) { + const r = new Zs(this.currentPoint.clone(), new v(t, e), new v(n, i)); + return this.curves.push(r), this.currentPoint.set(n, i), this + }, + bezierCurveTo: function(t, e, n, i, r, o) { + const s = new Xs(this.currentPoint.clone(), new v(t, e), new v(n, i), new v(r, o)); + return this.curves.push(s), this.currentPoint.set(r, o), this + }, + splineThru: function(t) { + const e = new Ks([this.currentPoint.clone()].concat(t)); + return this.curves.push(e), this.currentPoint.copy(t[t.length - 1]), this + }, + arc: function(t, e, n, i, r, o) { + const s = this.currentPoint.x, + a = this.currentPoint.y; + return this.absarc(t + s, e + a, n, i, r, o), this + }, + absarc: function(t, e, n, i, r, o) { + return this.absellipse(t, e, n, n, i, r, o), this + }, + ellipse: function(t, e, n, i, r, o, s, a) { + const l = this.currentPoint.x, + c = this.currentPoint.y; + return this.absellipse(t + l, e + c, n, i, r, o, s, a), this + }, + absellipse: function(t, e, n, i, r, o, s, a) { + const l = new Ns(t, e, n, i, r, o, s, a); + if (this.curves.length > 0) { + const t = l.getPoint(0); + t.equals(this.currentPoint) || this.lineTo(t.x, t.y) + } + this.curves.push(l); + const c = l.getPoint(1); + return this.currentPoint.copy(c), this + }, + copy: function(t) { + return ta.prototype.copy.call(this, t), this.currentPoint.copy(t.currentPoint), this + }, + toJSON: function() { + const t = ta.prototype.toJSON.call(this); + return t.currentPoint = this.currentPoint.toArray(), t + }, + fromJSON: function(t) { + return ta.prototype.fromJSON.call(this, t), this.currentPoint.fromArray(t.currentPoint), this + } + }), na.prototype = Object.assign(Object.create(ea.prototype), { + constructor: na, + getPointsHoles: function(t) { + const e = []; + for (let n = 0, i = this.holes.length; n < i; n++) e[n] = this.holes[n].getPoints(t); + return e + }, + extractPoints: function(t) { + return { + shape: this.getPoints(t), + holes: this.getPointsHoles(t) + } + }, + copy: function(t) { + ea.prototype.copy.call(this, t), this.holes = []; + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e]; + this.holes.push(n.clone()) + } + return this + }, + toJSON: function() { + const t = ea.prototype.toJSON.call(this); + t.uuid = this.uuid, t.holes = []; + for (let e = 0, n = this.holes.length; e < n; e++) { + const n = this.holes[e]; + t.holes.push(n.toJSON()) + } + return t + }, + fromJSON: function(t) { + ea.prototype.fromJSON.call(this, t), this.uuid = t.uuid, this.holes = []; + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e]; + this.holes.push((new ea).fromJSON(n)) + } + return this + } + }), ia.prototype = Object.assign(Object.create(St.prototype), { + constructor: ia, + isLight: !0, + copy: function(t) { + return St.prototype.copy.call(this, t), this.color.copy(t.color), this.intensity = t.intensity, this + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + return e.object.color = this.color.getHex(), e.object.intensity = this.intensity, void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (e.object.distance = this.distance), void 0 !== this.angle && (e.object.angle = this.angle), void 0 !== this.decay && (e.object.decay = this.decay), void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), e + } + }), ra.prototype = Object.assign(Object.create(ia.prototype), { + constructor: ra, + isHemisphereLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.groundColor.copy(t.groundColor), this + } + }), Object.assign(oa.prototype, { + _projScreenMatrix: new et, + _lightPositionWorld: new T, + _lookTarget: new T, + getViewportCount: function() { + return this._viewportCount + }, + getFrustum: function() { + return this._frustum + }, + updateMatrices: function(t) { + const e = this.camera, + n = this.matrix, + i = this._projScreenMatrix, + r = this._lookTarget, + o = this._lightPositionWorld; + o.setFromMatrixPosition(t.matrixWorld), e.position.copy(o), r.setFromMatrixPosition(t.target.matrixWorld), e.lookAt(r), e.updateMatrixWorld(), i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), this._frustum.setFromProjectionMatrix(i), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(e.projectionMatrix), n.multiply(e.matrixWorldInverse) + }, + getViewport: function(t) { + return this._viewports[t] + }, + getFrameExtents: function() { + return this._frameExtents + }, + copy: function(t) { + return this.camera = t.camera.clone(), this.bias = t.bias, this.radius = t.radius, this.mapSize.copy(t.mapSize), this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + const t = {}; + return 0 !== this.bias && (t.bias = this.bias), 0 !== this.normalBias && (t.normalBias = this.normalBias), 1 !== this.radius && (t.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (t.mapSize = this.mapSize.toArray()), t.camera = this.camera.toJSON(!1).object, delete t.camera.matrix, t + } + }), sa.prototype = Object.assign(Object.create(oa.prototype), { + constructor: sa, + isSpotLightShadow: !0, + updateMatrices: function(t) { + const e = this.camera, + n = 2 * g.RAD2DEG * t.angle * this.focus, + i = this.mapSize.width / this.mapSize.height, + r = t.distance || e.far; + n === e.fov && i === e.aspect && r === e.far || (e.fov = n, e.aspect = i, e.far = r, e.updateProjectionMatrix()), oa.prototype.updateMatrices.call(this, t) + } + }), aa.prototype = Object.assign(Object.create(ia.prototype), { + constructor: aa, + isSpotLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.distance = t.distance, this.angle = t.angle, this.penumbra = t.penumbra, this.decay = t.decay, this.target = t.target.clone(), this.shadow = t.shadow.clone(), this + } + }), la.prototype = Object.assign(Object.create(oa.prototype), { + constructor: la, + isPointLightShadow: !0, + updateMatrices: function(t, e = 0) { + const n = this.camera, + i = this.matrix, + r = this._lightPositionWorld, + o = this._lookTarget, + s = this._projScreenMatrix; + r.setFromMatrixPosition(t.matrixWorld), n.position.copy(r), o.copy(n.position), o.add(this._cubeDirections[e]), n.up.copy(this._cubeUps[e]), n.lookAt(o), n.updateMatrixWorld(), i.makeTranslation(-r.x, -r.y, -r.z), s.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), this._frustum.setFromProjectionMatrix(s) + } + }), ca.prototype = Object.assign(Object.create(ia.prototype), { + constructor: ca, + isPointLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.distance = t.distance, this.decay = t.decay, this.shadow = t.shadow.clone(), this + } + }), ha.prototype = Object.assign(Object.create(qe.prototype), { + constructor: ha, + isOrthographicCamera: !0, + copy: function(t, e) { + return qe.prototype.copy.call(this, t, e), this.left = t.left, this.right = t.right, this.top = t.top, this.bottom = t.bottom, this.near = t.near, this.far = t.far, this.zoom = t.zoom, this.view = null === t.view ? null : Object.assign({}, t.view), this + }, + setViewOffset: function(t, e, n, i, r, o) { + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + const t = (this.right - this.left) / (2 * this.zoom), + e = (this.top - this.bottom) / (2 * this.zoom), + n = (this.right + this.left) / 2, + i = (this.top + this.bottom) / 2; + let r = n - t, + o = n + t, + s = i + e, + a = i - e; + if (null !== this.view && this.view.enabled) { + const t = (this.right - this.left) / this.view.fullWidth / this.zoom, + e = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + r += t * this.view.offsetX, o = r + t * this.view.width, s -= e * this.view.offsetY, a = s - e * this.view.height + } + this.projectionMatrix.makeOrthographic(r, o, s, a, this.near, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + }, + toJSON: function(t) { + const e = St.prototype.toJSON.call(this, t); + return e.object.zoom = this.zoom, e.object.left = this.left, e.object.right = this.right, e.object.top = this.top, e.object.bottom = this.bottom, e.object.near = this.near, e.object.far = this.far, null !== this.view && (e.object.view = Object.assign({}, this.view)), e + } + }), ua.prototype = Object.assign(Object.create(oa.prototype), { + constructor: ua, + isDirectionalLightShadow: !0, + updateMatrices: function(t) { + oa.prototype.updateMatrices.call(this, t) + } + }), da.prototype = Object.assign(Object.create(ia.prototype), { + constructor: da, + isDirectionalLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.target = t.target.clone(), this.shadow = t.shadow.clone(), this + } + }), pa.prototype = Object.assign(Object.create(ia.prototype), { + constructor: pa, + isAmbientLight: !0 + }), fa.prototype = Object.assign(Object.create(ia.prototype), { + constructor: fa, + isRectAreaLight: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.width = t.width, this.height = t.height, this + }, + toJSON: function(t) { + const e = ia.prototype.toJSON.call(this, t); + return e.object.width = this.width, e.object.height = this.height, e + } + }); + class ma { + constructor() { + Object.defineProperty(this, "isSphericalHarmonics3", { + value: !0 + }), this.coefficients = []; + for (let t = 0; t < 9; t++) this.coefficients.push(new T) + } + set(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].copy(t[e]); + return this + } + zero() { + for (let t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0); + return this + } + getAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + o = this.coefficients; + return e.copy(o[0]).multiplyScalar(.282095), e.addScaledVector(o[1], .488603 * i), e.addScaledVector(o[2], .488603 * r), e.addScaledVector(o[3], .488603 * n), e.addScaledVector(o[4], n * i * 1.092548), e.addScaledVector(o[5], i * r * 1.092548), e.addScaledVector(o[6], .315392 * (3 * r * r - 1)), e.addScaledVector(o[7], n * r * 1.092548), e.addScaledVector(o[8], .546274 * (n * n - i * i)), e + } + getIrradianceAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + o = this.coefficients; + return e.copy(o[0]).multiplyScalar(.886227), e.addScaledVector(o[1], 1.023328 * i), e.addScaledVector(o[2], 1.023328 * r), e.addScaledVector(o[3], 1.023328 * n), e.addScaledVector(o[4], .858086 * n * i), e.addScaledVector(o[5], .858086 * i * r), e.addScaledVector(o[6], .743125 * r * r - .247708), e.addScaledVector(o[7], .858086 * n * r), e.addScaledVector(o[8], .429043 * (n * n - i * i)), e + } + add(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]); + return this + } + addScaledSH(t, e) { + for (let n = 0; n < 9; n++) this.coefficients[n].addScaledVector(t.coefficients[n], e); + return this + } + scale(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t); + return this + } + lerp(t, e) { + for (let n = 0; n < 9; n++) this.coefficients[n].lerp(t.coefficients[n], e); + return this + } + equals(t) { + for (let e = 0; e < 9; e++) + if (!this.coefficients[e].equals(t.coefficients[e])) return !1; + return !0 + } + copy(t) { + return this.set(t.coefficients) + } + clone() { + return (new this.constructor).copy(this) + } + fromArray(t, e = 0) { + const n = this.coefficients; + for (let i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i); + return this + } + toArray(t = [], e = 0) { + const n = this.coefficients; + for (let i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i); + return t + } + static getBasisAt(t, e) { + const n = t.x, + i = t.y, + r = t.z; + e[0] = .282095, e[1] = .488603 * i, e[2] = .488603 * r, e[3] = .488603 * n, e[4] = 1.092548 * n * i, e[5] = 1.092548 * i * r, e[6] = .315392 * (3 * r * r - 1), e[7] = 1.092548 * n * r, e[8] = .546274 * (n * n - i * i) + } + } + + function ga(t, e) { + ia.call(this, void 0, e), this.type = "LightProbe", this.sh = void 0 !== t ? t : new ma + } + + function va(t) { + Es.call(this, t), this.textures = {} + } + ga.prototype = Object.assign(Object.create(ia.prototype), { + constructor: ga, + isLightProbe: !0, + copy: function(t) { + return ia.prototype.copy.call(this, t), this.sh.copy(t.sh), this + }, + fromJSON: function(t) { + return this.intensity = t.intensity, this.sh.fromArray(t.sh), this + }, + toJSON: function(t) { + const e = ia.prototype.toJSON.call(this, t); + return e.object.sh = this.sh.toArray(), e + } + }), va.prototype = Object.assign(Object.create(Es.prototype), { + constructor: va, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + e(r.parse(JSON.parse(n))) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + }, + parse: function(t) { + const e = this.textures; + + function n(t) { + return void 0 === e[t] && console.warn("THREE.MaterialLoader: Undefined texture", t), e[t] + } + const i = new as[t.type]; + if (void 0 !== t.uuid && (i.uuid = t.uuid), void 0 !== t.name && (i.name = t.name), void 0 !== t.color && void 0 !== i.color && i.color.setHex(t.color), void 0 !== t.roughness && (i.roughness = t.roughness), void 0 !== t.metalness && (i.metalness = t.metalness), void 0 !== t.sheen && (i.sheen = (new Yt).setHex(t.sheen)), void 0 !== t.emissive && void 0 !== i.emissive && i.emissive.setHex(t.emissive), void 0 !== t.specular && void 0 !== i.specular && i.specular.setHex(t.specular), void 0 !== t.shininess && (i.shininess = t.shininess), void 0 !== t.clearcoat && (i.clearcoat = t.clearcoat), void 0 !== t.clearcoatRoughness && (i.clearcoatRoughness = t.clearcoatRoughness), void 0 !== t.fog && (i.fog = t.fog), void 0 !== t.flatShading && (i.flatShading = t.flatShading), void 0 !== t.blending && (i.blending = t.blending), void 0 !== t.combine && (i.combine = t.combine), void 0 !== t.side && (i.side = t.side), void 0 !== t.opacity && (i.opacity = t.opacity), void 0 !== t.transparent && (i.transparent = t.transparent), void 0 !== t.alphaTest && (i.alphaTest = t.alphaTest), void 0 !== t.depthTest && (i.depthTest = t.depthTest), void 0 !== t.depthWrite && (i.depthWrite = t.depthWrite), void 0 !== t.colorWrite && (i.colorWrite = t.colorWrite), void 0 !== t.stencilWrite && (i.stencilWrite = t.stencilWrite), void 0 !== t.stencilWriteMask && (i.stencilWriteMask = t.stencilWriteMask), void 0 !== t.stencilFunc && (i.stencilFunc = t.stencilFunc), void 0 !== t.stencilRef && (i.stencilRef = t.stencilRef), void 0 !== t.stencilFuncMask && (i.stencilFuncMask = t.stencilFuncMask), void 0 !== t.stencilFail && (i.stencilFail = t.stencilFail), void 0 !== t.stencilZFail && (i.stencilZFail = t.stencilZFail), void 0 !== t.stencilZPass && (i.stencilZPass = t.stencilZPass), void 0 !== t.wireframe && (i.wireframe = t.wireframe), void 0 !== t.wireframeLinewidth && (i.wireframeLinewidth = t.wireframeLinewidth), void 0 !== t.wireframeLinecap && (i.wireframeLinecap = t.wireframeLinecap), void 0 !== t.wireframeLinejoin && (i.wireframeLinejoin = t.wireframeLinejoin), void 0 !== t.rotation && (i.rotation = t.rotation), 1 !== t.linewidth && (i.linewidth = t.linewidth), void 0 !== t.dashSize && (i.dashSize = t.dashSize), void 0 !== t.gapSize && (i.gapSize = t.gapSize), void 0 !== t.scale && (i.scale = t.scale), void 0 !== t.polygonOffset && (i.polygonOffset = t.polygonOffset), void 0 !== t.polygonOffsetFactor && (i.polygonOffsetFactor = t.polygonOffsetFactor), void 0 !== t.polygonOffsetUnits && (i.polygonOffsetUnits = t.polygonOffsetUnits), void 0 !== t.skinning && (i.skinning = t.skinning), void 0 !== t.morphTargets && (i.morphTargets = t.morphTargets), void 0 !== t.morphNormals && (i.morphNormals = t.morphNormals), void 0 !== t.dithering && (i.dithering = t.dithering), void 0 !== t.vertexTangents && (i.vertexTangents = t.vertexTangents), void 0 !== t.visible && (i.visible = t.visible), void 0 !== t.toneMapped && (i.toneMapped = t.toneMapped), void 0 !== t.userData && (i.userData = t.userData), void 0 !== t.vertexColors && ("number" == typeof t.vertexColors ? i.vertexColors = t.vertexColors > 0 : i.vertexColors = t.vertexColors), void 0 !== t.uniforms) + for (const e in t.uniforms) { + const r = t.uniforms[e]; + switch (i.uniforms[e] = {}, r.type) { + case "t": + i.uniforms[e].value = n(r.value); + break; + case "c": + i.uniforms[e].value = (new Yt).setHex(r.value); + break; + case "v2": + i.uniforms[e].value = (new v).fromArray(r.value); + break; + case "v3": + i.uniforms[e].value = (new T).fromArray(r.value); + break; + case "v4": + i.uniforms[e].value = (new M).fromArray(r.value); + break; + case "m3": + i.uniforms[e].value = (new y).fromArray(r.value); + break; + case "m4": + i.uniforms[e].value = (new et).fromArray(r.value); + break; + default: + i.uniforms[e].value = r.value + } + } + if (void 0 !== t.defines && (i.defines = t.defines), void 0 !== t.vertexShader && (i.vertexShader = t.vertexShader), void 0 !== t.fragmentShader && (i.fragmentShader = t.fragmentShader), void 0 !== t.extensions) + for (const e in t.extensions) i.extensions[e] = t.extensions[e]; + if (void 0 !== t.shading && (i.flatShading = 1 === t.shading), void 0 !== t.size && (i.size = t.size), void 0 !== t.sizeAttenuation && (i.sizeAttenuation = t.sizeAttenuation), void 0 !== t.map && (i.map = n(t.map)), void 0 !== t.matcap && (i.matcap = n(t.matcap)), void 0 !== t.alphaMap && (i.alphaMap = n(t.alphaMap)), void 0 !== t.bumpMap && (i.bumpMap = n(t.bumpMap)), void 0 !== t.bumpScale && (i.bumpScale = t.bumpScale), void 0 !== t.normalMap && (i.normalMap = n(t.normalMap)), void 0 !== t.normalMapType && (i.normalMapType = t.normalMapType), void 0 !== t.normalScale) { + let e = t.normalScale; + !1 === Array.isArray(e) && (e = [e, e]), i.normalScale = (new v).fromArray(e) + } + return void 0 !== t.displacementMap && (i.displacementMap = n(t.displacementMap)), void 0 !== t.displacementScale && (i.displacementScale = t.displacementScale), void 0 !== t.displacementBias && (i.displacementBias = t.displacementBias), void 0 !== t.roughnessMap && (i.roughnessMap = n(t.roughnessMap)), void 0 !== t.metalnessMap && (i.metalnessMap = n(t.metalnessMap)), void 0 !== t.emissiveMap && (i.emissiveMap = n(t.emissiveMap)), void 0 !== t.emissiveIntensity && (i.emissiveIntensity = t.emissiveIntensity), void 0 !== t.specularMap && (i.specularMap = n(t.specularMap)), void 0 !== t.envMap && (i.envMap = n(t.envMap)), void 0 !== t.envMapIntensity && (i.envMapIntensity = t.envMapIntensity), void 0 !== t.reflectivity && (i.reflectivity = t.reflectivity), void 0 !== t.refractionRatio && (i.refractionRatio = t.refractionRatio), void 0 !== t.lightMap && (i.lightMap = n(t.lightMap)), void 0 !== t.lightMapIntensity && (i.lightMapIntensity = t.lightMapIntensity), void 0 !== t.aoMap && (i.aoMap = n(t.aoMap)), void 0 !== t.aoMapIntensity && (i.aoMapIntensity = t.aoMapIntensity), void 0 !== t.gradientMap && (i.gradientMap = n(t.gradientMap)), void 0 !== t.clearcoatMap && (i.clearcoatMap = n(t.clearcoatMap)), void 0 !== t.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = n(t.clearcoatRoughnessMap)), void 0 !== t.clearcoatNormalMap && (i.clearcoatNormalMap = n(t.clearcoatNormalMap)), void 0 !== t.clearcoatNormalScale && (i.clearcoatNormalScale = (new v).fromArray(t.clearcoatNormalScale)), void 0 !== t.transmission && (i.transmission = t.transmission), void 0 !== t.transmissionMap && (i.transmissionMap = n(t.transmissionMap)), i + }, + setTextures: function(t) { + return this.textures = t, this + } + }); + const ya = function(t) { + const e = t.lastIndexOf("/"); + return -1 === e ? "./" : t.substr(0, e + 1) + }; + + function Aa() { + be.call(this), this.type = "InstancedBufferGeometry", this.instanceCount = 1 / 0 + } + + function xa(t, e, n, i) { + "number" == typeof n && (i = n, n = !1, console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), ee.call(this, t, e, n), this.meshPerAttribute = i || 1 + } + + function _a(t) { + Es.call(this, t) + } + + function ba(t) { + "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), Es.call(this, t), this.options = { + premultiplyAlpha: "none" + } + } + + function wa() { + this.type = "ShapePath", this.color = new Yt, this.subPaths = [], this.currentPath = null + } + Aa.prototype = Object.assign(Object.create(be.prototype), { + constructor: Aa, + isInstancedBufferGeometry: !0, + copy: function(t) { + return be.prototype.copy.call(this, t), this.instanceCount = t.instanceCount, this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + const t = be.prototype.toJSON.call(this); + return t.instanceCount = this.instanceCount, t.isInstancedBufferGeometry = !0, t + } + }), xa.prototype = Object.assign(Object.create(ee.prototype), { + constructor: xa, + isInstancedBufferAttribute: !0, + copy: function(t) { + return ee.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this + }, + toJSON: function() { + const t = ee.prototype.toJSON.call(this); + return t.meshPerAttribute = this.meshPerAttribute, t.isInstancedBufferAttribute = !0, t + } + }), _a.prototype = Object.assign(Object.create(Es.prototype), { + constructor: _a, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + e(r.parse(JSON.parse(n))) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + }, + parse: function(t) { + const e = {}, + n = {}; + + function i(t, i) { + if (void 0 !== e[i]) return e[i]; + const r = t.interleavedBuffers[i], + o = function(t, e) { + if (void 0 !== n[e]) return n[e]; + const i = t.arrayBuffers[e], + r = new Uint32Array(i).buffer; + return n[e] = r, r + }(t, r.buffer), + s = new dr(fe(r.type, o), r.stride); + return s.uuid = r.uuid, e[i] = s, s + } + const r = t.isInstancedBufferGeometry ? new Aa : new be, + o = t.data.index; + if (void 0 !== o) { + const t = fe(o.type, o.array); + r.setIndex(new ee(t, 1)) + } + const s = t.data.attributes; + for (const e in s) { + const n = s[e]; + let o; + if (n.isInterleavedBufferAttribute) { + o = new fr(i(t.data, n.data), n.itemSize, n.offset, n.normalized) + } else { + const t = fe(n.type, n.array); + o = new(n.isInstancedBufferAttribute ? xa : ee)(t, n.itemSize, n.normalized) + } + void 0 !== n.name && (o.name = n.name), r.setAttribute(e, o) + } + const a = t.data.morphAttributes; + if (a) + for (const e in a) { + const n = a[e], + o = []; + for (let e = 0, r = n.length; e < r; e++) { + const r = n[e]; + let s; + if (r.isInterleavedBufferAttribute) { + s = new fr(i(t.data, r.data), r.itemSize, r.offset, r.normalized) + } else { + s = new ee(fe(r.type, r.array), r.itemSize, r.normalized) + } + void 0 !== r.name && (s.name = r.name), o.push(s) + } + r.morphAttributes[e] = o + } + t.data.morphTargetsRelative && (r.morphTargetsRelative = !0); + const l = t.data.groups || t.data.drawcalls || t.data.offsets; + if (void 0 !== l) + for (let t = 0, e = l.length; t !== e; ++t) { + const e = l[t]; + r.addGroup(e.start, e.count, e.materialIndex) + } + const c = t.data.boundingSphere; + if (void 0 !== c) { + const t = new T; + void 0 !== c.center && t.fromArray(c.center), r.boundingSphere = new X(t, c.radius) + } + return t.name && (r.name = t.name), t.userData && (r.userData = t.userData), r + } + }), ba.prototype = Object.assign(Object.create(Es.prototype), { + constructor: ba, + isImageBitmapLoader: !0, + setOptions: function(t) { + return this.options = t, this + }, + load: function(t, e, n, i) { + void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); + const r = this, + o = ws.get(t); + if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { + e && e(o), r.manager.itemEnd(t) + }), 0), o; + const s = {}; + s.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include", fetch(t, s).then((function(t) { + return t.blob() + })).then((function(t) { + return createImageBitmap(t, r.options) + })).then((function(n) { + ws.add(t, n), e && e(n), r.manager.itemEnd(t) + })).catch((function(e) { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + })), r.manager.itemStart(t) + } + }), Object.assign(wa.prototype, { + moveTo: function(t, e) { + return this.currentPath = new ea, this.subPaths.push(this.currentPath), this.currentPath.moveTo(t, e), this + }, + lineTo: function(t, e) { + return this.currentPath.lineTo(t, e), this + }, + quadraticCurveTo: function(t, e, n, i) { + return this.currentPath.quadraticCurveTo(t, e, n, i), this + }, + bezierCurveTo: function(t, e, n, i, r, o) { + return this.currentPath.bezierCurveTo(t, e, n, i, r, o), this + }, + splineThru: function(t) { + return this.currentPath.splineThru(t), this + }, + toShapes: function(t, e) { + function n(t) { + const e = []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n], + r = new na; + r.curves = i.curves, e.push(r) + } + return e + } + + function i(t, e) { + const n = e.length; + let i = !1; + for (let r = n - 1, o = 0; o < n; r = o++) { + let n = e[r], + s = e[o], + a = s.x - n.x, + l = s.y - n.y; + if (Math.abs(l) > Number.EPSILON) { + if (l < 0 && (n = e[o], a = -a, s = e[r], l = -l), t.y < n.y || t.y > s.y) continue; + if (t.y === n.y) { + if (t.x === n.x) return !0 + } else { + const e = l * (t.x - n.x) - a * (t.y - n.y); + if (0 === e) return !0; + if (e < 0) continue; + i = !i + } + } else { + if (t.y !== n.y) continue; + if (s.x <= t.x && t.x <= n.x || n.x <= t.x && t.x <= s.x) return !0 + } + } + return i + } + const r = ko.isClockWise, + o = this.subPaths; + if (0 === o.length) return []; + if (!0 === e) return n(o); + let s, a, l; + const c = []; + if (1 === o.length) return a = o[0], l = new na, l.curves = a.curves, c.push(l), c; + let h = !r(o[0].getPoints()); + h = t ? !h : h; + const u = [], + d = []; + let p, f, m = [], + g = 0; + d[g] = void 0, m[g] = []; + for (let e = 0, n = o.length; e < n; e++) a = o[e], p = a.getPoints(), s = r(p), s = t ? !s : s, s ? (!h && d[g] && g++, d[g] = { + s: new na, + p: p + }, d[g].s.curves = a.curves, h && g++, m[g] = []) : m[g].push({ + h: a, + p: p[0] + }); + if (!d[0]) return n(o); + if (d.length > 1) { + let t = !1; + const e = []; + for (let t = 0, e = d.length; t < e; t++) u[t] = []; + for (let n = 0, r = d.length; n < r; n++) { + const r = m[n]; + for (let o = 0; o < r.length; o++) { + const s = r[o]; + let a = !0; + for (let r = 0; r < d.length; r++) i(s.p, d[r].p) && (n !== r && e.push({ + froms: n, + tos: r, + hole: o + }), a ? (a = !1, u[r].push(s)) : t = !0); + a && u[n].push(s) + } + } + e.length > 0 && (t || (m = u)) + } + for (let t = 0, e = d.length; t < e; t++) { + l = d[t].s, c.push(l), f = m[t]; + for (let t = 0, e = f.length; t < e; t++) l.holes.push(f[t].h) + } + return c + } + }); + class Ma { + constructor(t) { + Object.defineProperty(this, "isFont", { + value: !0 + }), this.type = "Font", this.data = t + } + generateShapes(t, e = 100) { + const n = [], + i = function(t, e, n) { + const i = Array.from ? Array.from(t) : String(t).split(""), + r = e / n.resolution, + o = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * r, + s = []; + let a = 0, + l = 0; + for (let t = 0; t < i.length; t++) { + const e = i[t]; + if ("\n" === e) a = 0, l -= o; + else { + const t = Ea(e, r, a, l, n); + a += t.offsetX, s.push(t.path) + } + } + return s + }(t, e, this.data); + for (let t = 0, e = i.length; t < e; t++) Array.prototype.push.apply(n, i[t].toShapes()); + return n + } + } + + function Ea(t, e, n, i, r) { + const o = r.glyphs[t] || r.glyphs["?"]; + if (!o) return void console.error('THREE.Font: character "' + t + '" does not exists in font family ' + r.familyName + "."); + const s = new wa; + let a, l, c, h, u, d, p, f; + if (o.o) { + const t = o._cachedOutline || (o._cachedOutline = o.o.split(" ")); + for (let r = 0, o = t.length; r < o;) { + switch (t[r++]) { + case "m": + a = t[r++] * e + n, l = t[r++] * e + i, s.moveTo(a, l); + break; + case "l": + a = t[r++] * e + n, l = t[r++] * e + i, s.lineTo(a, l); + break; + case "q": + c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, s.quadraticCurveTo(u, d, c, h); + break; + case "b": + c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, p = t[r++] * e + n, f = t[r++] * e + i, s.bezierCurveTo(u, d, p, f, c, h) + } + } + } + return { + offsetX: o.ha * e, + path: s + } + } + + function Sa(t) { + Es.call(this, t) + } + let Ta; + Sa.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Sa, + load: function(t, e, n, i) { + const r = this, + o = new Ts(this.manager); + o.setPath(this.path), o.setRequestHeader(this.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(t) { + let n; + try { + n = JSON.parse(t) + } catch (e) { + console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), n = JSON.parse(t.substring(65, t.length - 2)) + } + const i = r.parse(n); + e && e(i) + }), n, i) + }, + parse: function(t) { + return new Ma(t) + } + }); + const La = function() { + return void 0 === Ta && (Ta = new(window.AudioContext || window.webkitAudioContext)), Ta + }; + + function Ra(t) { + Es.call(this, t) + } + + function Ca(t, e, n) { + ga.call(this, void 0, n); + const i = (new Yt).set(t), + r = (new Yt).set(e), + o = new T(i.r, i.g, i.b), + s = new T(r.r, r.g, r.b), + a = Math.sqrt(Math.PI), + l = a * Math.sqrt(.75); + this.sh.coefficients[0].copy(o).add(s).multiplyScalar(a), this.sh.coefficients[1].copy(o).sub(s).multiplyScalar(l) + } + + function Pa(t, e) { + ga.call(this, void 0, e); + const n = (new Yt).set(t); + this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(2 * Math.sqrt(Math.PI)) + } + Ra.prototype = Object.assign(Object.create(Es.prototype), { + constructor: Ra, + load: function(t, e, n, i) { + const r = this, + o = new Ts(r.manager); + o.setResponseType("arraybuffer"), o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { + try { + const t = n.slice(0); + La().decodeAudioData(t, (function(t) { + e(t) + })) + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t) + } + }), n, i) + } + }), Ca.prototype = Object.assign(Object.create(ga.prototype), { + constructor: Ca, + isHemisphereLightProbe: !0, + copy: function(t) { + return ga.prototype.copy.call(this, t), this + }, + toJSON: function(t) { + return ga.prototype.toJSON.call(this, t) + } + }), Pa.prototype = Object.assign(Object.create(ga.prototype), { + constructor: Pa, + isAmbientLightProbe: !0, + copy: function(t) { + return ga.prototype.copy.call(this, t), this + }, + toJSON: function(t) { + return ga.prototype.toJSON.call(this, t) + } + }); + const Da = new et, + Ia = new et; + Object.assign(function() { + this.type = "StereoCamera", this.aspect = 1, this.eyeSep = .064, this.cameraL = new Ye, this.cameraL.layers.enable(1), this.cameraL.matrixAutoUpdate = !1, this.cameraR = new Ye, this.cameraR.layers.enable(2), this.cameraR.matrixAutoUpdate = !1, this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + } + }.prototype, { + update: function(t) { + const e = this._cache; + if (e.focus !== t.focus || e.fov !== t.fov || e.aspect !== t.aspect * this.aspect || e.near !== t.near || e.far !== t.far || e.zoom !== t.zoom || e.eyeSep !== this.eyeSep) { + e.focus = t.focus, e.fov = t.fov, e.aspect = t.aspect * this.aspect, e.near = t.near, e.far = t.far, e.zoom = t.zoom, e.eyeSep = this.eyeSep; + const n = t.projectionMatrix.clone(), + i = e.eyeSep / 2, + r = i * e.near / e.focus, + o = e.near * Math.tan(g.DEG2RAD * e.fov * .5) / e.zoom; + let s, a; + Ia.elements[12] = -i, Da.elements[12] = i, s = -o * e.aspect + r, a = o * e.aspect + r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraL.projectionMatrix.copy(n), s = -o * e.aspect - r, a = o * e.aspect - r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraR.projectionMatrix.copy(n) + } + this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Ia), this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(Da) + } + }); + + function Oa(t, e, n) { + let i, r, o; + switch (this.binding = t, this.valueSize = n, e) { + case "quaternion": + i = this._slerp, r = this._slerpAdditive, o = this._setAdditiveIdentityQuaternion, this.buffer = new Float64Array(6 * n), this._workIndex = 5; + break; + case "string": + case "bool": + i = this._select, r = this._select, o = this._setAdditiveIdentityOther, this.buffer = new Array(5 * n); + break; + default: + i = this._lerp, r = this._lerpAdditive, o = this._setAdditiveIdentityNumeric, this.buffer = new Float64Array(5 * n) + } + this._mixBufferRegion = i, this._mixBufferRegionAdditive = r, this._setIdentity = o, this._origIndex = 3, this._addIndex = 4, this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, this.useCount = 0, this.referenceCount = 0 + } + Object.assign(Oa.prototype, { + accumulate: function(t, e) { + const n = this.buffer, + i = this.valueSize, + r = t * i + i; + let o = this.cumulativeWeight; + if (0 === o) { + for (let t = 0; t !== i; ++t) n[r + t] = n[t]; + o = e + } else { + o += e; + const t = e / o; + this._mixBufferRegion(n, r, 0, t, i) + } + this.cumulativeWeight = o + }, + accumulateAdditive: function(t) { + const e = this.buffer, + n = this.valueSize, + i = n * this._addIndex; + 0 === this.cumulativeWeightAdditive && this._setIdentity(), this._mixBufferRegionAdditive(e, i, 0, t, n), this.cumulativeWeightAdditive += t + }, + apply: function(t) { + const e = this.valueSize, + n = this.buffer, + i = t * e + e, + r = this.cumulativeWeight, + o = this.cumulativeWeightAdditive, + s = this.binding; + if (this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, r < 1) { + const t = e * this._origIndex; + this._mixBufferRegion(n, i, t, 1 - r, e) + } + o > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e); + for (let t = e, r = e + e; t !== r; ++t) + if (n[t] !== n[t + e]) { + s.setValue(n, i); + break + } + }, + saveOriginalState: function() { + const t = this.binding, + e = this.buffer, + n = this.valueSize, + i = n * this._origIndex; + t.getValue(e, i); + for (let t = n, r = i; t !== r; ++t) e[t] = e[i + t % n]; + this._setIdentity(), this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0 + }, + restoreOriginalState: function() { + const t = 3 * this.valueSize; + this.binding.setValue(this.buffer, t) + }, + _setAdditiveIdentityNumeric: function() { + const t = this._addIndex * this.valueSize, + e = t + this.valueSize; + for (let n = t; n < e; n++) this.buffer[n] = 0 + }, + _setAdditiveIdentityQuaternion: function() { + this._setAdditiveIdentityNumeric(), this.buffer[this._addIndex * this.valueSize + 3] = 1 + }, + _setAdditiveIdentityOther: function() { + const t = this._origIndex * this.valueSize, + e = this._addIndex * this.valueSize; + for (let n = 0; n < this.valueSize; n++) this.buffer[e + n] = this.buffer[t + n] + }, + _select: function(t, e, n, i, r) { + if (i >= .5) + for (let i = 0; i !== r; ++i) t[e + i] = t[n + i] + }, + _slerp: function(t, e, n, i) { + S.slerpFlat(t, e, t, e, t, n, i) + }, + _slerpAdditive: function(t, e, n, i, r) { + const o = this._workIndex * r; + S.multiplyQuaternionsFlat(t, o, t, e, t, n), S.slerpFlat(t, e, t, e, t, o, i) + }, + _lerp: function(t, e, n, i, r) { + const o = 1 - i; + for (let s = 0; s !== r; ++s) { + const r = e + s; + t[r] = t[r] * o + t[n + s] * i + } + }, + _lerpAdditive: function(t, e, n, i, r) { + for (let o = 0; o !== r; ++o) { + const r = e + o; + t[r] = t[r] + t[n + o] * i + } + } + }); + const Na = new RegExp("[\\[\\]\\.:\\/]", "g"), + Ba = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]", + Fa = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + za = /(WCOD+)?/.source.replace("WCOD", Ba), + Ua = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + Ha = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + Ga = new RegExp("^" + Fa + za + Ua + Ha + "$"), + Va = ["material", "materials", "bones"]; + + function ka(t, e, n) { + const i = n || Wa.parseTrackName(e); + this._targetGroup = t, this._bindings = t.subscribe_(e, i) + } + + function Wa(t, e, n) { + this.path = e, this.parsedPath = n || Wa.parseTrackName(e), this.node = Wa.findNode(t, this.parsedPath.nodeName) || t, this.rootNode = t + } + Object.assign(ka.prototype, { + getValue: function(t, e) { + this.bind(); + const n = this._targetGroup.nCachedObjects_, + i = this._bindings[n]; + void 0 !== i && i.getValue(t, e) + }, + setValue: function(t, e) { + const n = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) n[i].setValue(t, e) + }, + bind: function() { + const t = this._bindings; + for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].bind() + }, + unbind: function() { + const t = this._bindings; + for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].unbind() + } + }), Object.assign(Wa, { + Composite: ka, + create: function(t, e, n) { + return t && t.isAnimationObjectGroup ? new Wa.Composite(t, e, n) : new Wa(t, e, n) + }, + sanitizeNodeName: function(t) { + return t.replace(/\s/g, "_").replace(Na, "") + }, + parseTrackName: function(t) { + const e = Ga.exec(t); + if (!e) throw new Error("PropertyBinding: Cannot parse trackName: " + t); + const n = { + nodeName: e[2], + objectName: e[3], + objectIndex: e[4], + propertyName: e[5], + propertyIndex: e[6] + }, + i = n.nodeName && n.nodeName.lastIndexOf("."); + if (void 0 !== i && -1 !== i) { + const t = n.nodeName.substring(i + 1); - 1 !== Va.indexOf(t) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = t) + } + if (null === n.propertyName || 0 === n.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + t); + return n + }, + findNode: function(t, e) { + if (!e || "" === e || "." === e || -1 === e || e === t.name || e === t.uuid) return t; + if (t.skeleton) { + const n = t.skeleton.getBoneByName(e); + if (void 0 !== n) return n + } + if (t.children) { + const n = function(t) { + for (let i = 0; i < t.length; i++) { + const r = t[i]; + if (r.name === e || r.uuid === e) return r; + const o = n(r.children); + if (o) return o + } + return null + }, + i = n(t.children); + if (i) return i + } + return null + } + }), Object.assign(Wa.prototype, { + _getValue_unavailable: function() {}, + _setValue_unavailable: function() {}, + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + GetterByBindingType: [function(t, e) { + t[e] = this.node[this.propertyName] + }, function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) t[e++] = n[i] + }, function(t, e) { + t[e] = this.resolvedProperty[this.propertyIndex] + }, function(t, e) { + this.resolvedProperty.toArray(t, e) + }], + SetterByBindingTypeAndVersioning: [ + [function(t, e) { + this.targetObject[this.propertyName] = t[e] + }, function(t, e) { + this.targetObject[this.propertyName] = t[e], this.targetObject.needsUpdate = !0 + }, function(t, e) { + this.targetObject[this.propertyName] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++] + }, function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; + this.targetObject.needsUpdate = !0 + }, function(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; + this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e] + }, function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.needsUpdate = !0 + }, function(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function(t, e) { + this.resolvedProperty.fromArray(t, e) + }, function(t, e) { + this.resolvedProperty.fromArray(t, e), this.targetObject.needsUpdate = !0 + }, function(t, e) { + this.resolvedProperty.fromArray(t, e), this.targetObject.matrixWorldNeedsUpdate = !0 + }] + ], + getValue: function(t, e) { + this.bind(), this.getValue(t, e) + }, + setValue: function(t, e) { + this.bind(), this.setValue(t, e) + }, + bind: function() { + let t = this.node; + const e = this.parsedPath, + n = e.objectName, + i = e.propertyName; + let r = e.propertyIndex; + if (t || (t = Wa.findNode(this.rootNode, e.nodeName) || this.rootNode, this.node = t), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !t) return void console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found."); + if (n) { + let i = e.objectIndex; + switch (n) { + case "materials": + if (!t.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!t.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + t = t.material.materials; + break; + case "bones": + if (!t.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + t = t.skeleton.bones; + for (let e = 0; e < t.length; e++) + if (t[e].name === i) { + i = e; + break + } break; + default: + if (void 0 === t[n]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + t = t[n] + } + if (void 0 !== i) { + if (void 0 === t[i]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, t); + t = t[i] + } + } + const o = t[i]; + if (void 0 === o) { + const n = e.nodeName; + return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", t) + } + let s = this.Versioning.None; + this.targetObject = t, void 0 !== t.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== t.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate); + let a = this.BindingType.Direct; + if (void 0 !== r) { + if ("morphTargetInfluences" === i) { + if (!t.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + if (!t.geometry.isBufferGeometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.", this); + if (!t.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + void 0 !== t.morphTargetDictionary[r] && (r = t.morphTargetDictionary[r]) + } + a = this.BindingType.ArrayElement, this.resolvedProperty = o, this.propertyIndex = r + } else void 0 !== o.fromArray && void 0 !== o.toArray ? (a = this.BindingType.HasFromToArray, this.resolvedProperty = o) : Array.isArray(o) ? (a = this.BindingType.EntireArray, this.resolvedProperty = o) : this.propertyName = i; + this.getValue = this.GetterByBindingType[a], this.setValue = this.SetterByBindingTypeAndVersioning[a][s] + }, + unbind: function() { + this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound + } + }), Object.assign(Wa.prototype, { + _getValue_unbound: Wa.prototype.getValue, + _setValue_unbound: Wa.prototype.setValue + }), Object.assign(function() { + this.uuid = g.generateUUID(), this._objects = Array.prototype.slice.call(arguments), this.nCachedObjects_ = 0; + const t = {}; + this._indicesByUUID = t; + for (let e = 0, n = arguments.length; e !== n; ++e) t[arguments[e].uuid] = e; + this._paths = [], this._parsedPaths = [], this._bindings = [], this._bindingsIndicesByPath = {}; + const e = this; + this.stats = { + objects: { + get total() { + return e._objects.length + }, + get inUse() { + return this.total - e.nCachedObjects_ + } + }, + get bindingsPerObject() { + return e._bindings.length + } + } + }.prototype, { + isAnimationObjectGroup: !0, + add: function() { + const t = this._objects, + e = this._indicesByUUID, + n = this._paths, + i = this._parsedPaths, + r = this._bindings, + o = r.length; + let s = void 0, + a = t.length, + l = this.nCachedObjects_; + for (let c = 0, h = arguments.length; c !== h; ++c) { + const h = arguments[c], + u = h.uuid; + let d = e[u]; + if (void 0 === d) { + d = a++, e[u] = d, t.push(h); + for (let t = 0, e = o; t !== e; ++t) r[t].push(new Wa(h, n[t], i[t])) + } else if (d < l) { + s = t[d]; + const a = --l, + c = t[a]; + e[c.uuid] = d, t[d] = c, e[u] = a, t[a] = h; + for (let t = 0, e = o; t !== e; ++t) { + const e = r[t], + o = e[a]; + let s = e[d]; + e[d] = o, void 0 === s && (s = new Wa(h, n[t], i[t])), e[a] = s + } + } else t[d] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.") + } + this.nCachedObjects_ = l + }, + remove: function() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length; + let r = this.nCachedObjects_; + for (let o = 0, s = arguments.length; o !== s; ++o) { + const s = arguments[o], + a = s.uuid, + l = e[a]; + if (void 0 !== l && l >= r) { + const o = r++, + c = t[o]; + e[c.uuid] = l, t[l] = c, e[a] = o, t[o] = s; + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[o], + r = e[l]; + e[l] = i, e[o] = r + } + } + } + this.nCachedObjects_ = r + }, + uncache: function() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length; + let r = this.nCachedObjects_, + o = t.length; + for (let s = 0, a = arguments.length; s !== a; ++s) { + const a = arguments[s].uuid, + l = e[a]; + if (void 0 !== l) + if (delete e[a], l < r) { + const s = --r, + a = t[s], + c = --o, + h = t[c]; + e[a.uuid] = l, t[l] = a, e[h.uuid] = s, t[s] = h, t.pop(); + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[s], + r = e[c]; + e[l] = i, e[s] = r, e.pop() + } + } else { + const r = --o, + s = t[r]; + r > 0 && (e[s.uuid] = l), t[l] = s, t.pop(); + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t]; + e[l] = e[r], e.pop() + } + } + } + this.nCachedObjects_ = r + }, + subscribe_: function(t, e) { + const n = this._bindingsIndicesByPath; + let i = n[t]; + const r = this._bindings; + if (void 0 !== i) return r[i]; + const o = this._paths, + s = this._parsedPaths, + a = this._objects, + l = a.length, + c = this.nCachedObjects_, + h = new Array(l); + i = r.length, n[t] = i, o.push(t), s.push(e), r.push(h); + for (let n = c, i = a.length; n !== i; ++n) { + const i = a[n]; + h[n] = new Wa(i, t, e) + } + return h + }, + unsubscribe_: function(t) { + const e = this._bindingsIndicesByPath, + n = e[t]; + if (void 0 !== n) { + const i = this._paths, + r = this._parsedPaths, + o = this._bindings, + s = o.length - 1, + a = o[s]; + e[t[s]] = n, o[n] = a, o.pop(), r[n] = r[s], r.pop(), i[n] = i[s], i.pop() + } + } + }); + class ja { + constructor(t, e, n = null, i = e.blendMode) { + this._mixer = t, this._clip = e, this._localRoot = n, this.blendMode = i; + const r = e.tracks, + o = r.length, + s = new Array(o), + a = { + endingStart: 2400, + endingEnd: 2400 + }; + for (let t = 0; t !== o; ++t) { + const e = r[t].createInterpolant(null); + s[t] = e, e.settings = a + } + this._interpolantSettings = a, this._interpolants = s, this._propertyBindings = new Array(o), this._cacheIndex = null, this._byClipCacheIndex = null, this._timeScaleInterpolant = null, this._weightInterpolant = null, this.loop = 2201, this._loopCount = -1, this._startTime = null, this.time = 0, this.timeScale = 1, this._effectiveTimeScale = 1, this.weight = 1, this._effectiveWeight = 1, this.repetitions = 1 / 0, this.paused = !1, this.enabled = !0, this.clampWhenFinished = !1, this.zeroSlopeAtStart = !0, this.zeroSlopeAtEnd = !0 + } + play() { + return this._mixer._activateAction(this), this + } + stop() { + return this._mixer._deactivateAction(this), this.reset() + } + reset() { + return this.paused = !1, this.enabled = !0, this.time = 0, this._loopCount = -1, this._startTime = null, this.stopFading().stopWarping() + } + isRunning() { + return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) + } + isScheduled() { + return this._mixer._isActiveAction(this) + } + startAt(t) { + return this._startTime = t, this + } + setLoop(t, e) { + return this.loop = t, this.repetitions = e, this + } + setEffectiveWeight(t) { + return this.weight = t, this._effectiveWeight = this.enabled ? t : 0, this.stopFading() + } + getEffectiveWeight() { + return this._effectiveWeight + } + fadeIn(t) { + return this._scheduleFading(t, 0, 1) + } + fadeOut(t) { + return this._scheduleFading(t, 1, 0) + } + crossFadeFrom(t, e, n) { + if (t.fadeOut(e), this.fadeIn(e), n) { + const n = this._clip.duration, + i = t._clip.duration, + r = i / n, + o = n / i; + t.warp(1, r, e), this.warp(o, 1, e) + } + return this + } + crossFadeTo(t, e, n) { + return t.crossFadeFrom(this, e, n) + } + stopFading() { + const t = this._weightInterpolant; + return null !== t && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this + } + setEffectiveTimeScale(t) { + return this.timeScale = t, this._effectiveTimeScale = this.paused ? 0 : t, this.stopWarping() + } + getEffectiveTimeScale() { + return this._effectiveTimeScale + } + setDuration(t) { + return this.timeScale = this._clip.duration / t, this.stopWarping() + } + syncWith(t) { + return this.time = t.time, this.timeScale = t.timeScale, this.stopWarping() + } + halt(t) { + return this.warp(this._effectiveTimeScale, 0, t) + } + warp(t, e, n) { + const i = this._mixer, + r = i.time, + o = this.timeScale; + let s = this._timeScaleInterpolant; + null === s && (s = i._lendControlInterpolant(), this._timeScaleInterpolant = s); + const a = s.parameterPositions, + l = s.sampleValues; + return a[0] = r, a[1] = r + n, l[0] = t / o, l[1] = e / o, this + } + stopWarping() { + const t = this._timeScaleInterpolant; + return null !== t && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this + } + getMixer() { + return this._mixer + } + getClip() { + return this._clip + } + getRoot() { + return this._localRoot || this._mixer._root + } + _update(t, e, n, i) { + if (!this.enabled) return void this._updateWeight(t); + const r = this._startTime; + if (null !== r) { + const i = (t - r) * n; + if (i < 0 || 0 === n) return; + this._startTime = null, e = n * i + } + e *= this._updateTimeScale(t); + const o = this._updateTime(e), + s = this._updateWeight(t); + if (s > 0) { + const t = this._interpolants, + e = this._propertyBindings; + switch (this.blendMode) { + case 2501: + for (let n = 0, i = t.length; n !== i; ++n) t[n].evaluate(o), e[n].accumulateAdditive(s); + break; + case 2500: + default: + for (let n = 0, r = t.length; n !== r; ++n) t[n].evaluate(o), e[n].accumulate(i, s) + } + } + } + _updateWeight(t) { + let e = 0; + if (this.enabled) { + e = this.weight; + const n = this._weightInterpolant; + if (null !== n) { + const i = n.evaluate(t)[0]; + e *= i, t > n.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1)) + } + } + return this._effectiveWeight = e, e + } + _updateTimeScale(t) { + let e = 0; + if (!this.paused) { + e = this.timeScale; + const n = this._timeScaleInterpolant; + if (null !== n) { + e *= n.evaluate(t)[0], t > n.parameterPositions[1] && (this.stopWarping(), 0 === e ? this.paused = !0 : this.timeScale = e) + } + } + return this._effectiveTimeScale = e, e + } + _updateTime(t) { + const e = this._clip.duration, + n = this.loop; + let i = this.time + t, + r = this._loopCount; + const o = 2202 === n; + if (0 === t) return -1 === r ? i : o && 1 == (1 & r) ? e - i : i; + if (2200 === n) { + -1 === r && (this._loopCount = 0, this._setEndings(!0, !0, !1)); + t: { + if (i >= e) i = e; + else { + if (!(i < 0)) { + this.time = i; + break t + } + i = 0 + } + this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, + this.time = i, + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: t < 0 ? -1 : 1 + }) + } + } else { + if (-1 === r && (t >= 0 ? (r = 0, this._setEndings(!0, 0 === this.repetitions, o)) : this._setEndings(0 === this.repetitions, !0, o)), i >= e || i < 0) { + const n = Math.floor(i / e); + i -= e * n, r += Math.abs(n); + const s = this.repetitions - r; + if (s <= 0) this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, i = t > 0 ? e : 0, this.time = i, this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: t > 0 ? 1 : -1 + }); + else { + if (1 === s) { + const e = t < 0; + this._setEndings(e, !e, o) + } else this._setEndings(!1, !1, o); + this._loopCount = r, this.time = i, this._mixer.dispatchEvent({ + type: "loop", + action: this, + loopDelta: n + }) + } + } else this.time = i; + if (o && 1 == (1 & r)) return e - i + } + return i + } + _setEndings(t, e, n) { + const i = this._interpolantSettings; + n ? (i.endingStart = 2401, i.endingEnd = 2401) : (i.endingStart = t ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402) + } + _scheduleFading(t, e, n) { + const i = this._mixer, + r = i.time; + let o = this._weightInterpolant; + null === o && (o = i._lendControlInterpolant(), this._weightInterpolant = o); + const s = o.parameterPositions, + a = o.sampleValues; + return s[0] = r, a[0] = e, s[1] = r + t, a[1] = n, this + } + } + + function Xa(t) { + this._root = t, this._initMemoryManager(), this._accuIndex = 0, this.time = 0, this.timeScale = 1 + } + Xa.prototype = Object.assign(Object.create(p.prototype), { + constructor: Xa, + _bindAction: function(t, e) { + const n = t._localRoot || this._root, + i = t._clip.tracks, + r = i.length, + o = t._propertyBindings, + s = t._interpolants, + a = n.uuid, + l = this._bindingsByRootAndName; + let c = l[a]; + void 0 === c && (c = {}, l[a] = c); + for (let t = 0; t !== r; ++t) { + const r = i[t], + l = r.name; + let h = c[l]; + if (void 0 !== h) o[t] = h; + else { + if (h = o[t], void 0 !== h) { + null === h._cacheIndex && (++h.referenceCount, this._addInactiveBinding(h, a, l)); + continue + } + const i = e && e._propertyBindings[t].binding.parsedPath; + h = new Oa(Wa.create(n, l, i), r.ValueTypeName, r.getValueSize()), ++h.referenceCount, this._addInactiveBinding(h, a, l), o[t] = h + } + s[t].resultBuffer = h.buffer + } + }, + _activateAction: function(t) { + if (!this._isActiveAction(t)) { + if (null === t._cacheIndex) { + const e = (t._localRoot || this._root).uuid, + n = t._clip.uuid, + i = this._actionsByClip[n]; + this._bindAction(t, i && i.knownActions[0]), this._addInactiveAction(t, n, e) + } + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == n.useCount++ && (this._lendBinding(n), n.saveOriginalState()) + } + this._lendAction(t) + } + }, + _deactivateAction: function(t) { + if (this._isActiveAction(t)) { + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == --n.useCount && (n.restoreOriginalState(), this._takeBackBinding(n)) + } + this._takeBackAction(t) + } + }, + _initMemoryManager: function() { + this._actions = [], this._nActiveActions = 0, this._actionsByClip = {}, this._bindings = [], this._nActiveBindings = 0, this._bindingsByRootAndName = {}, this._controlInterpolants = [], this._nActiveControlInterpolants = 0; + const t = this; + this.stats = { + actions: { + get total() { + return t._actions.length + }, + get inUse() { + return t._nActiveActions + } + }, + bindings: { + get total() { + return t._bindings.length + }, + get inUse() { + return t._nActiveBindings + } + }, + controlInterpolants: { + get total() { + return t._controlInterpolants.length + }, + get inUse() { + return t._nActiveControlInterpolants + } + } + } + }, + _isActiveAction: function(t) { + const e = t._cacheIndex; + return null !== e && e < this._nActiveActions + }, + _addInactiveAction: function(t, e, n) { + const i = this._actions, + r = this._actionsByClip; + let o = r[e]; + if (void 0 === o) o = { + knownActions: [t], + actionByRoot: {} + }, t._byClipCacheIndex = 0, r[e] = o; + else { + const e = o.knownActions; + t._byClipCacheIndex = e.length, e.push(t) + } + t._cacheIndex = i.length, i.push(t), o.actionByRoot[n] = t + }, + _removeInactiveAction: function(t) { + const e = this._actions, + n = e[e.length - 1], + i = t._cacheIndex; + n._cacheIndex = i, e[i] = n, e.pop(), t._cacheIndex = null; + const r = t._clip.uuid, + o = this._actionsByClip, + s = o[r], + a = s.knownActions, + l = a[a.length - 1], + c = t._byClipCacheIndex; + l._byClipCacheIndex = c, a[c] = l, a.pop(), t._byClipCacheIndex = null; + delete s.actionByRoot[(t._localRoot || this._root).uuid], 0 === a.length && delete o[r], this._removeInactiveBindingsForAction(t) + }, + _removeInactiveBindingsForAction: function(t) { + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == --n.referenceCount && this._removeInactiveBinding(n) + } + }, + _lendAction: function(t) { + const e = this._actions, + n = t._cacheIndex, + i = this._nActiveActions++, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _takeBackAction: function(t) { + const e = this._actions, + n = t._cacheIndex, + i = --this._nActiveActions, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _addInactiveBinding: function(t, e, n) { + const i = this._bindingsByRootAndName, + r = this._bindings; + let o = i[e]; + void 0 === o && (o = {}, i[e] = o), o[n] = t, t._cacheIndex = r.length, r.push(t) + }, + _removeInactiveBinding: function(t) { + const e = this._bindings, + n = t.binding, + i = n.rootNode.uuid, + r = n.path, + o = this._bindingsByRootAndName, + s = o[i], + a = e[e.length - 1], + l = t._cacheIndex; + a._cacheIndex = l, e[l] = a, e.pop(), delete s[r], 0 === Object.keys(s).length && delete o[i] + }, + _lendBinding: function(t) { + const e = this._bindings, + n = t._cacheIndex, + i = this._nActiveBindings++, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _takeBackBinding: function(t) { + const e = this._bindings, + n = t._cacheIndex, + i = --this._nActiveBindings, + r = e[i]; + t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r + }, + _lendControlInterpolant: function() { + const t = this._controlInterpolants, + e = this._nActiveControlInterpolants++; + let n = t[e]; + return void 0 === n && (n = new us(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer), n.__cacheIndex = e, t[e] = n), n + }, + _takeBackControlInterpolant: function(t) { + const e = this._controlInterpolants, + n = t.__cacheIndex, + i = --this._nActiveControlInterpolants, + r = e[i]; + t.__cacheIndex = i, e[i] = t, r.__cacheIndex = n, e[n] = r + }, + _controlInterpolantsResultBuffer: new Float32Array(1), + clipAction: function(t, e, n) { + const i = e || this._root, + r = i.uuid; + let o = "string" == typeof t ? _s.findByName(i, t) : t; + const s = null !== o ? o.uuid : t, + a = this._actionsByClip[s]; + let l = null; + if (void 0 === n && (n = null !== o ? o.blendMode : 2500), void 0 !== a) { + const t = a.actionByRoot[r]; + if (void 0 !== t && t.blendMode === n) return t; + l = a.knownActions[0], null === o && (o = l._clip) + } + if (null === o) return null; + const c = new ja(this, o, e, n); + return this._bindAction(c, l), this._addInactiveAction(c, s, r), c + }, + existingAction: function(t, e) { + const n = e || this._root, + i = n.uuid, + r = "string" == typeof t ? _s.findByName(n, t) : t, + o = r ? r.uuid : t, + s = this._actionsByClip[o]; + return void 0 !== s && s.actionByRoot[i] || null + }, + stopAllAction: function() { + const t = this._actions; + for (let e = this._nActiveActions - 1; e >= 0; --e) t[e].stop(); + return this + }, + update: function(t) { + t *= this.timeScale; + const e = this._actions, + n = this._nActiveActions, + i = this.time += t, + r = Math.sign(t), + o = this._accuIndex ^= 1; + for (let s = 0; s !== n; ++s) { + e[s]._update(i, t, r, o) + } + const s = this._bindings, + a = this._nActiveBindings; + for (let t = 0; t !== a; ++t) s[t].apply(o); + return this + }, + setTime: function(t) { + this.time = 0; + for (let t = 0; t < this._actions.length; t++) this._actions[t].time = 0; + return this.update(t) + }, + getRoot: function() { + return this._root + }, + uncacheClip: function(t) { + const e = this._actions, + n = t.uuid, + i = this._actionsByClip, + r = i[n]; + if (void 0 !== r) { + const t = r.knownActions; + for (let n = 0, i = t.length; n !== i; ++n) { + const i = t[n]; + this._deactivateAction(i); + const r = i._cacheIndex, + o = e[e.length - 1]; + i._cacheIndex = null, i._byClipCacheIndex = null, o._cacheIndex = r, e[r] = o, e.pop(), this._removeInactiveBindingsForAction(i) + } + delete i[n] + } + }, + uncacheRoot: function(t) { + const e = t.uuid, + n = this._actionsByClip; + for (const t in n) { + const i = n[t].actionByRoot[e]; + void 0 !== i && (this._deactivateAction(i), this._removeInactiveAction(i)) + } + const i = this._bindingsByRootAndName[e]; + if (void 0 !== i) + for (const t in i) { + const e = i[t]; + e.restoreOriginalState(), this._removeInactiveBinding(e) + } + }, + uncacheAction: function(t, e) { + const n = this.existingAction(t, e); + null !== n && (this._deactivateAction(n), this._removeInactiveAction(n)) + } + }); + class qa { + constructor(t) { + "string" == typeof t && (console.warn("THREE.Uniform: Type parameter is no longer needed."), t = arguments[1]), this.value = t + } + clone() { + return new qa(void 0 === this.value.clone ? this.value : this.value.clone()) + } + } + + function Ya(t, e, n) { + dr.call(this, t, e), this.meshPerAttribute = n || 1 + } + + function Qa(t, e, n, i, r) { + this.buffer = t, this.type = e, this.itemSize = n, this.elementSize = i, this.count = r, this.version = 0 + } + + function Za(t, e, n, i) { + this.ray = new tt(t, e), this.near = n || 0, this.far = i || 1 / 0, this.camera = null, this.layers = new dt, this.params = { + Mesh: {}, + Line: { + threshold: 1 + }, + LOD: {}, + Points: { + threshold: 1 + }, + Sprite: {} + }, Object.defineProperties(this.params, { + PointCloud: { + get: function() { + return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."), this.Points + } + } + }) + } + + function Ja(t, e) { + return t.distance - e.distance + } + + function Ka(t, e, n, i) { + if (t.layers.test(e.layers) && t.raycast(e, n), !0 === i) { + const i = t.children; + for (let t = 0, r = i.length; t < r; t++) Ka(i[t], e, n, !0) + } + } + Ya.prototype = Object.assign(Object.create(dr.prototype), { + constructor: Ya, + isInstancedInterleavedBuffer: !0, + copy: function(t) { + return dr.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this + }, + clone: function(t) { + const e = dr.prototype.clone.call(this, t); + return e.meshPerAttribute = this.meshPerAttribute, e + }, + toJSON: function(t) { + const e = dr.prototype.toJSON.call(this, t); + return e.isInstancedInterleavedBuffer = !0, e.meshPerAttribute = this.meshPerAttribute, e + } + }), Object.defineProperty(Qa.prototype, "needsUpdate", { + set: function(t) { + !0 === t && this.version++ + } + }), Object.assign(Qa.prototype, { + isGLBufferAttribute: !0, + setBuffer: function(t) { + return this.buffer = t, this + }, + setType: function(t, e) { + return this.type = t, this.elementSize = e, this + }, + setItemSize: function(t) { + return this.itemSize = t, this + }, + setCount: function(t) { + return this.count = t, this + } + }), Object.assign(Za.prototype, { + set: function(t, e) { + this.ray.set(t, e) + }, + setFromCamera: function(t, e) { + e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(t.x, t.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type: " + e.type) + }, + intersectObject: function(t, e, n) { + const i = n || []; + return Ka(t, this, i, e), i.sort(Ja), i + }, + intersectObjects: function(t, e, n) { + const i = n || []; + if (!1 === Array.isArray(t)) return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), i; + for (let n = 0, r = t.length; n < r; n++) Ka(t[n], this, i, e); + return i.sort(Ja), i + } + }); + class $a { + constructor(t = 1, e = 0, n = 0) { + return this.radius = t, this.phi = e, this.theta = n, this + } + set(t, e, n) { + return this.radius = t, this.phi = e, this.theta = n, this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.radius = t.radius, this.phi = t.phi, this.theta = t.theta, this + } + makeSafe() { + return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), this + } + setFromVector3(t) { + return this.setFromCartesianCoords(t.x, t.y, t.z) + } + setFromCartesianCoords(t, e, n) { + return this.radius = Math.sqrt(t * t + e * e + n * n), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(t, n), this.phi = Math.acos(g.clamp(e / this.radius, -1, 1))), this + } + } + const tl = new v; + const el = new T, + nl = new T; + + function il(t) { + St.call(this), this.material = t, this.render = function() {}, this.hasPositions = !1, this.hasNormals = !1, this.hasColors = !1, this.hasUvs = !1, this.positionArray = null, this.normalArray = null, this.colorArray = null, this.uvArray = null, this.count = 0 + } + il.prototype = Object.create(St.prototype), il.prototype.constructor = il, il.prototype.isImmediateRenderObject = !0; + const rl = new T, + ol = new et, + sl = new et; + const al = new Kt({ + side: 1, + depthWrite: !1, + depthTest: !1 + }); + new He(new Ve, al); + + function ll(t) { + console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), Vs.call(this, t), this.type = "catmullrom" + } + Os.create = function(t, e) { + return console.log("THREE.Curve.create() has been deprecated"), t.prototype = Object.create(Os.prototype), t.prototype.constructor = t, t.prototype.getPoint = e, t + }, Object.assign(ea.prototype, { + fromPoints: function(t) { + return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), this.setFromPoints(t) + } + }), ll.prototype = Object.create(Vs.prototype), Object.assign(ll.prototype, { + initFromArray: function() { + console.error("THREE.Spline: .initFromArray() has been removed.") + }, + getControlPointsArray: function() { + console.error("THREE.Spline: .getControlPointsArray() has been removed.") + }, + reparametrizeByArcLength: function() { + console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.") + } + }), class extends ro { + constructor(t = 10, e = 10, n = 4473924, i = 8947848) { + n = new Yt(n), i = new Yt(i); + const r = e / 2, + o = t / e, + s = t / 2, + a = [], + l = []; + for (let t = 0, c = 0, h = -s; t <= e; t++, h += o) { + a.push(-s, 0, h, s, 0, h), a.push(h, 0, -s, h, 0, s); + const e = t === r ? n : i; + e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3 + } + const c = new be; + c.setAttribute("position", new he(a, 3)), c.setAttribute("color", new he(l, 3)); + super(c, new Qr({ + vertexColors: !0, + toneMapped: !1 + })), this.type = "GridHelper" + } + }.prototype.setColors = function() { + console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.") + }, class extends ro { + constructor(t) { + const e = function t(e) { + const n = []; + e && e.isBone && n.push(e); + for (let i = 0; i < e.children.length; i++) n.push.apply(n, t(e.children[i])); + return n + }(t), + n = new be, + i = [], + r = [], + o = new Yt(0, 0, 1), + s = new Yt(0, 1, 0); + for (let t = 0; t < e.length; t++) { + const n = e[t]; + n.parent && n.parent.isBone && (i.push(0, 0, 0), i.push(0, 0, 0), r.push(o.r, o.g, o.b), r.push(s.r, s.g, s.b)) + } + n.setAttribute("position", new he(i, 3)), n.setAttribute("color", new he(r, 3)); + super(n, new Qr({ + vertexColors: !0, + depthTest: !1, + depthWrite: !1, + toneMapped: !1, + transparent: !0 + })), this.type = "SkeletonHelper", this.isSkeletonHelper = !0, this.root = t, this.bones = e, this.matrix = t.matrixWorld, this.matrixAutoUpdate = !1 + } + updateMatrixWorld(t) { + const e = this.bones, + n = this.geometry, + i = n.getAttribute("position"); + sl.copy(this.root.matrixWorld).invert(); + for (let t = 0, n = 0; t < e.length; t++) { + const r = e[t]; + r.parent && r.parent.isBone && (ol.multiplyMatrices(sl, r.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n, rl.x, rl.y, rl.z), ol.multiplyMatrices(sl, r.parent.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n + 1, rl.x, rl.y, rl.z), n += 2) + } + n.getAttribute("position").needsUpdate = !0, super.updateMatrixWorld(t) + } + }.prototype.update = function() { + console.error("THREE.SkeletonHelper: update() no longer needs to be called.") + }, Object.assign(Es.prototype, { + extractUrlBase: function(t) { + return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), ya(t) + } + }), Es.Handlers = { + add: function() { + console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.") + }, + get: function() { + console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.") + } + }, Object.assign(class { + constructor(t, e) { + Object.defineProperty(this, "isBox2", { + value: !0 + }), this.min = void 0 !== t ? t : new v(1 / 0, 1 / 0), this.max = void 0 !== e ? e : new v(-1 / 0, -1 / 0) + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this + } + setFromPoints(t) { + this.makeEmpty(); + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this + } + setFromCenterAndSize(t, e) { + const n = tl.copy(e).multiplyScalar(.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + } + makeEmpty() { + return this.min.x = this.min.y = 1 / 0, this.max.x = this.max.y = -1 / 0, this + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y + } + getCenter(t) { + return void 0 === t && (console.warn("THREE.Box2: .getCenter() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) + } + getSize(t) { + return void 0 === t && (console.warn("THREE.Box2: .getSize() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min) + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + } + containsPoint(t) { + return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y) + } + containsBox(t) { + return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y + } + getParameter(t, e) { + return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), e = new v), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y)) + } + intersectsBox(t) { + return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y) + } + clampPoint(t, e) { + return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), e = new v), e.copy(t).clamp(this.min, this.max) + } + distanceToPoint(t) { + return tl.copy(t).clamp(this.min, this.max).sub(t).length() + } + intersect(t) { + return this.min.max(t.min), this.max.min(t.max), this + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this + } + translate(t) { + return this.min.add(t), this.max.add(t), this + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + }.prototype, { + center: function(t) { + return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), this.getCenter(t) + }, + empty: function() { + return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), this.isEmpty() + }, + isIntersectionBox: function(t) { + return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) + }, + size: function(t) { + return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), this.getSize(t) + } + }), Object.assign(C.prototype, { + center: function(t) { + return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), this.getCenter(t) + }, + empty: function() { + return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), this.isEmpty() + }, + isIntersectionBox: function(t) { + return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) + }, + isIntersectionSphere: function(t) { + return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) + }, + size: function(t) { + return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), this.getSize(t) + } + }), Object.assign(X.prototype, { + empty: function() { + return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."), this.isEmpty() + } + }), en.prototype.setFromMatrix = function(t) { + return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), this.setFromProjectionMatrix(t) + }, class { + constructor(t, e) { + this.start = void 0 !== t ? t : new T, this.end = void 0 !== e ? e : new T + } + set(t, e) { + return this.start.copy(t), this.end.copy(e), this + } + clone() { + return (new this.constructor).copy(this) + } + copy(t) { + return this.start.copy(t.start), this.end.copy(t.end), this + } + getCenter(t) { + return void 0 === t && (console.warn("THREE.Line3: .getCenter() target is now required"), t = new T), t.addVectors(this.start, this.end).multiplyScalar(.5) + } + delta(t) { + return void 0 === t && (console.warn("THREE.Line3: .delta() target is now required"), t = new T), t.subVectors(this.end, this.start) + } + distanceSq() { + return this.start.distanceToSquared(this.end) + } + distance() { + return this.start.distanceTo(this.end) + } + at(t, e) { + return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), e = new T), this.delta(e).multiplyScalar(t).add(this.start) + } + closestPointToPointParameter(t, e) { + el.subVectors(t, this.start), nl.subVectors(this.end, this.start); + const n = nl.dot(nl); + let i = nl.dot(el) / n; + return e && (i = g.clamp(i, 0, 1)), i + } + closestPointToPoint(t, e, n) { + const i = this.closestPointToPointParameter(t, e); + return void 0 === n && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), n = new T), this.delta(n).multiplyScalar(i).add(this.start) + } + applyMatrix4(t) { + return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this + } + equals(t) { + return t.start.equals(this.start) && t.end.equals(this.end) + } + }.prototype.center = function(t) { + return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), this.getCenter(t) + }, Object.assign(g, { + random16: function() { + return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), Math.random() + }, + nearestPowerOfTwo: function(t) { + return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), g.floorPowerOfTwo(t) + }, + nextPowerOfTwo: function(t) { + return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), g.ceilPowerOfTwo(t) + } + }), Object.assign(y.prototype, { + flattenToArrayOffset: function(t, e) { + return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) + }, + multiplyVector3: function(t) { + return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) + }, + multiplyVector3Array: function() { + console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.") + }, + applyToBufferAttribute: function(t) { + return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) + }, + applyToVector3Array: function() { + console.error("THREE.Matrix3: .applyToVector3Array() has been removed.") + }, + getInverse: function(t) { + return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() + } + }), Object.assign(et.prototype, { + extractPosition: function(t) { + return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), this.copyPosition(t) + }, + flattenToArrayOffset: function(t, e) { + return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) + }, + getPosition: function() { + return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), (new T).setFromMatrixColumn(this, 3) + }, + setRotationFromQuaternion: function(t) { + return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), this.makeRotationFromQuaternion(t) + }, + multiplyToArray: function() { + console.warn("THREE.Matrix4: .multiplyToArray() has been removed.") + }, + multiplyVector3: function(t) { + return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + multiplyVector4: function(t) { + return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + multiplyVector3Array: function() { + console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.") + }, + rotateAxis: function(t) { + console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), t.transformDirection(this) + }, + crossVector: function(t) { + return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + translate: function() { + console.error("THREE.Matrix4: .translate() has been removed.") + }, + rotateX: function() { + console.error("THREE.Matrix4: .rotateX() has been removed.") + }, + rotateY: function() { + console.error("THREE.Matrix4: .rotateY() has been removed.") + }, + rotateZ: function() { + console.error("THREE.Matrix4: .rotateZ() has been removed.") + }, + rotateByAxis: function() { + console.error("THREE.Matrix4: .rotateByAxis() has been removed.") + }, + applyToBufferAttribute: function(t) { + return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) + }, + applyToVector3Array: function() { + console.error("THREE.Matrix4: .applyToVector3Array() has been removed.") + }, + makeFrustum: function(t, e, n, i, r, o) { + return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), this.makePerspective(t, e, i, n, r, o) + }, + getInverse: function(t) { + return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() + } + }), Ct.prototype.isIntersectionLine = function(t) { + return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), this.intersectsLine(t) + }, Object.assign(S.prototype, { + multiplyVector3: function(t) { + return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), t.applyQuaternion(this) + }, + inverse: function() { + return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."), this.invert() + } + }), Object.assign(tt.prototype, { + isIntersectionBox: function(t) { + return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) + }, + isIntersectionPlane: function(t) { + return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), this.intersectsPlane(t) + }, + isIntersectionSphere: function(t) { + return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) + } + }), Object.assign(Gt.prototype, { + area: function() { + return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), this.getArea() + }, + barycoordFromPoint: function(t, e) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), this.getBarycoord(t, e) + }, + midpoint: function(t) { + return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), this.getMidpoint(t) + }, + normal: function(t) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), this.getNormal(t) + }, + plane: function(t) { + return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), this.getPlane(t) + } + }), Object.assign(Gt, { + barycoordFromPoint: function(t, e, n, i, r) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), Gt.getBarycoord(t, e, n, i, r) + }, + normal: function(t, e, n, i) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), Gt.getNormal(t, e, n, i) + } + }), Object.assign(na.prototype, { + extractAllPoints: function(t) { + return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), this.extractPoints(t) + }, + extrude: function(t) { + return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), new Xo(this, t) + }, + makeGeometry: function(t) { + return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), new Qo(this, t) + } + }), Object.assign(v.prototype, { + fromAttribute: function(t, e, n) { + return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) + }, + distanceToManhattan: function(t) { + return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() + } + }), Object.assign(T.prototype, { + setEulerFromRotationMatrix: function() { + console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.") + }, + setEulerFromQuaternion: function() { + console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.") + }, + getPositionFromMatrix: function(t) { + return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), this.setFromMatrixPosition(t) + }, + getScaleFromMatrix: function(t) { + return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), this.setFromMatrixScale(t) + }, + getColumnFromMatrix: function(t, e) { + return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), this.setFromMatrixColumn(e, t) + }, + applyProjection: function(t) { + return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), this.applyMatrix4(t) + }, + fromAttribute: function(t, e, n) { + return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) + }, + distanceToManhattan: function(t) { + return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() + } + }), Object.assign(M.prototype, { + fromAttribute: function(t, e, n) { + return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() + } + }), Object.assign(St.prototype, { + getChildByName: function(t) { + return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), this.getObjectByName(t) + }, + renderDepth: function() { + console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.") + }, + translate: function(t, e) { + return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), this.translateOnAxis(e, t) + }, + getWorldRotation: function() { + console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.") + }, + applyMatrix: function(t) { + return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) + } + }), Object.defineProperties(St.prototype, { + eulerOrder: { + get: function() { + return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order + }, + set: function(t) { + console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order = t + } + }, + useQuaternion: { + get: function() { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + }, + set: function() { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + } + } + }), Object.assign(He.prototype, { + setDrawMode: function() { + console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + }), Object.defineProperties(He.prototype, { + drawMode: { + get: function() { + return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), 0 + }, + set: function() { + console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + } + }), Object.defineProperties(Ir.prototype, { + objects: { + get: function() { + return console.warn("THREE.LOD: .objects has been renamed to .levels."), this.levels + } + } + }), Object.defineProperty(kr.prototype, "useVertexTexture", { + get: function() { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + }, + set: function() { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + } + }), Ur.prototype.initBones = function() { + console.error("THREE.SkinnedMesh: initBones() has been removed.") + }, Object.defineProperty(Os.prototype, "__arcLengthDivisions", { + get: function() { + return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions + }, + set: function(t) { + console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions = t + } + }), Ye.prototype.setLens = function(t, e) { + console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), void 0 !== e && (this.filmGauge = e), this.setFocalLength(t) + }, Object.defineProperties(ia.prototype, { + onlyShadow: { + set: function() { + console.warn("THREE.Light: .onlyShadow has been removed.") + } + }, + shadowCameraFov: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), this.shadow.camera.fov = t + } + }, + shadowCameraLeft: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), this.shadow.camera.left = t + } + }, + shadowCameraRight: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), this.shadow.camera.right = t + } + }, + shadowCameraTop: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), this.shadow.camera.top = t + } + }, + shadowCameraBottom: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), this.shadow.camera.bottom = t + } + }, + shadowCameraNear: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), this.shadow.camera.near = t + } + }, + shadowCameraFar: { + set: function(t) { + console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), this.shadow.camera.far = t + } + }, + shadowCameraVisible: { + set: function() { + console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.") + } + }, + shadowBias: { + set: function(t) { + console.warn("THREE.Light: .shadowBias is now .shadow.bias."), this.shadow.bias = t + } + }, + shadowDarkness: { + set: function() { + console.warn("THREE.Light: .shadowDarkness has been removed.") + } + }, + shadowMapWidth: { + set: function(t) { + console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), this.shadow.mapSize.width = t + } + }, + shadowMapHeight: { + set: function(t) { + console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), this.shadow.mapSize.height = t + } + } + }), Object.defineProperties(ee.prototype, { + length: { + get: function() { + return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."), this.array.length + } + }, + dynamic: { + get: function() { + return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), 35048 === this.usage + }, + set: function() { + console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), this.setUsage(35048) + } + } + }), Object.assign(ee.prototype, { + setDynamic: function(t) { + return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this + }, + copyIndicesArray: function() { + console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.") + }, + setArray: function() { + console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), Object.assign(be.prototype, { + addIndex: function(t) { + console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), this.setIndex(t) + }, + addAttribute: function(t, e) { + return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === t ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), this.setIndex(e), this) : this.setAttribute(t, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.setAttribute(t, new ee(arguments[1], arguments[2]))) + }, + addDrawCall: function(t, e, n) { + void 0 !== n && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), this.addGroup(t, e) + }, + clearDrawCalls: function() { + console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), this.clearGroups() + }, + computeOffsets: function() { + console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.") + }, + removeAttribute: function(t) { + return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), this.deleteAttribute(t) + }, + applyMatrix: function(t) { + return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) + } + }), Object.defineProperties(be.prototype, { + drawcalls: { + get: function() { + return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."), this.groups + } + }, + offsets: { + get: function() { + return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."), this.groups + } + } + }), Object.defineProperties(Aa.prototype, { + maxInstancedCount: { + get: function() { + return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount + }, + set: function(t) { + console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount = t + } + } + }), Object.defineProperties(Za.prototype, { + linePrecision: { + get: function() { + return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold + }, + set: function(t) { + console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold = t + } + } + }), Object.defineProperties(dr.prototype, { + dynamic: { + get: function() { + return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), 35048 === this.usage + }, + set: function(t) { + console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), this.setUsage(t) + } + } + }), Object.assign(dr.prototype, { + setDynamic: function(t) { + return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this + }, + setArray: function() { + console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), Object.assign(Xo.prototype, { + getArrays: function() { + console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.") + }, + addShapeList: function() { + console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.") + }, + addShape: function() { + console.error("THREE.ExtrudeGeometry: .addShape() has been removed.") + } + }), Object.assign(ur.prototype, { + dispose: function() { + console.error("THREE.Scene: .dispose() has been removed.") + } + }), Object.defineProperties(qa.prototype, { + dynamic: { + set: function() { + console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.") + } + }, + onUpdate: { + value: function() { + return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."), this + } + } + }), Object.defineProperties(Jt.prototype, { + wrapAround: { + get: function() { + console.warn("THREE.Material: .wrapAround has been removed.") + }, + set: function() { + console.warn("THREE.Material: .wrapAround has been removed.") + } + }, + overdraw: { + get: function() { + console.warn("THREE.Material: .overdraw has been removed.") + }, + set: function() { + console.warn("THREE.Material: .overdraw has been removed.") + } + }, + wrapRGB: { + get: function() { + return console.warn("THREE.Material: .wrapRGB has been removed."), new Yt + } + }, + shading: { + get: function() { + console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.") + }, + set: function(t) { + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === t + } + }, + stencilMask: { + get: function() { + return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask + }, + set: function(t) { + console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask = t + } + } + }), Object.defineProperties(es.prototype, { + metal: { + get: function() { + return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."), !1 + }, + set: function() { + console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead") + } + } + }), Object.defineProperties(ts.prototype, { + transparency: { + get: function() { + return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission + }, + set: function(t) { + console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission = t + } + } + }), Object.defineProperties(Xe.prototype, { + derivatives: { + get: function() { + return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives + }, + set: function(t) { + console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives = t + } + } + }), Object.assign(cr.prototype, { + clearTarget: function(t, e, n, i) { + console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), this.setRenderTarget(t), this.clear(e, n, i) + }, + animate: function(t) { + console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), this.setAnimationLoop(t) + }, + getCurrentRenderTarget: function() { + return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."), this.getRenderTarget() + }, + getMaxAnisotropy: function() { + return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."), this.capabilities.getMaxAnisotropy() + }, + getPrecision: function() { + return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."), this.capabilities.precision + }, + resetGLState: function() { + return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."), this.state.reset() + }, + supportsFloatTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."), this.extensions.get("OES_texture_float") + }, + supportsHalfFloatTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."), this.extensions.get("OES_texture_half_float") + }, + supportsStandardDerivatives: function() { + return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."), this.extensions.get("OES_standard_derivatives") + }, + supportsCompressedTextureS3TC: function() { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."), this.extensions.get("WEBGL_compressed_texture_s3tc") + }, + supportsCompressedTexturePVRTC: function() { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."), this.extensions.get("WEBGL_compressed_texture_pvrtc") + }, + supportsBlendMinMax: function() { + return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."), this.extensions.get("EXT_blend_minmax") + }, + supportsVertexTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."), this.capabilities.vertexTextures + }, + supportsInstancedArrays: function() { + return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."), this.extensions.get("ANGLE_instanced_arrays") + }, + enableScissorTest: function(t) { + console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), this.setScissorTest(t) + }, + initMaterial: function() { + console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.") + }, + addPrePlugin: function() { + console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.") + }, + addPostPlugin: function() { + console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.") + }, + updateShadowMap: function() { + console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.") + }, + setFaceCulling: function() { + console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.") + }, + allocTextureUnit: function() { + console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.") + }, + setTexture: function() { + console.warn("THREE.WebGLRenderer: .setTexture() has been removed.") + }, + setTexture2D: function() { + console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.") + }, + setTextureCube: function() { + console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.") + }, + getActiveMipMapLevel: function() { + return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."), this.getActiveMipmapLevel() + } + }), Object.defineProperties(cr.prototype, { + shadowMapEnabled: { + get: function() { + return this.shadowMap.enabled + }, + set: function(t) { + console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), this.shadowMap.enabled = t + } + }, + shadowMapType: { + get: function() { + return this.shadowMap.type + }, + set: function(t) { + console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), this.shadowMap.type = t + } + }, + shadowMapCullFace: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + } + }, + context: { + get: function() { + return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."), this.getContext() + } + }, + vr: { + get: function() { + return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"), this.xr + } + }, + gammaInput: { + get: function() { + return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."), !1 + }, + set: function() { + console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.") + } + }, + gammaOutput: { + get: function() { + return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), !1 + }, + set: function(t) { + console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), this.outputEncoding = !0 === t ? 3001 : 3e3 + } + }, + toneMappingWhitePoint: { + get: function() { + return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."), 1 + }, + set: function() { + console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.") + } + } + }), Object.defineProperties(tr.prototype, { + cullFace: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + } + }, + renderReverseSided: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + } + }, + renderSingleSided: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + } + } + }), Object.defineProperties(E.prototype, { + wrapS: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS = t + } + }, + wrapT: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT = t + } + }, + magFilter: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter = t + } + }, + minFilter: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter = t + } + }, + anisotropy: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy = t + } + }, + offset: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset = t + } + }, + repeat: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat = t + } + }, + format: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format = t + } + }, + type: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type = t + } + }, + generateMipmaps: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps + }, + set: function(t) { + console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps = t + } + } + }), Object.defineProperties(class extends St { + constructor(t) { + super(), this.type = "Audio", this.listener = t, this.context = t.context, this.gain = this.context.createGain(), this.gain.connect(t.getInput()), this.autoplay = !1, this.buffer = null, this.detune = 0, this.loop = !1, this.loopStart = 0, this.loopEnd = 0, this.offset = 0, this.duration = void 0, this.playbackRate = 1, this.isPlaying = !1, this.hasPlaybackControl = !0, this.source = null, this.sourceType = "empty", this._startedAt = 0, this._progress = 0, this._connected = !1, this.filters = [] + } + getOutput() { + return this.gain + } + setNodeSource(t) { + return this.hasPlaybackControl = !1, this.sourceType = "audioNode", this.source = t, this.connect(), this + } + setMediaElementSource(t) { + return this.hasPlaybackControl = !1, this.sourceType = "mediaNode", this.source = this.context.createMediaElementSource(t), this.connect(), this + } + setMediaStreamSource(t) { + return this.hasPlaybackControl = !1, this.sourceType = "mediaStreamNode", this.source = this.context.createMediaStreamSource(t), this.connect(), this + } + setBuffer(t) { + return this.buffer = t, this.sourceType = "buffer", this.autoplay && this.play(), this + } + play(t = 0) { + if (!0 === this.isPlaying) return void console.warn("THREE.Audio: Audio is already playing."); + if (!1 === this.hasPlaybackControl) return void console.warn("THREE.Audio: this Audio has no playback control."); + this._startedAt = this.context.currentTime + t; + const e = this.context.createBufferSource(); + return e.buffer = this.buffer, e.loop = this.loop, e.loopStart = this.loopStart, e.loopEnd = this.loopEnd, e.onended = this.onEnded.bind(this), e.start(this._startedAt, this._progress + this.offset, this.duration), this.isPlaying = !0, this.source = e, this.setDetune(this.detune), this.setPlaybackRate(this.playbackRate), this.connect() + } + pause() { + if (!1 !== this.hasPlaybackControl) return !0 === this.isPlaying && (this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, !0 === this.loop && (this._progress = this._progress % (this.duration || this.buffer.duration)), this.source.stop(), this.source.onended = null, this.isPlaying = !1), this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + stop() { + if (!1 !== this.hasPlaybackControl) return this._progress = 0, this.source.stop(), this.source.onended = null, this.isPlaying = !1, this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + connect() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].connect(this.filters[t]); + this.filters[this.filters.length - 1].connect(this.getOutput()) + } else this.source.connect(this.getOutput()); + return this._connected = !0, this + } + disconnect() { + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].disconnect(this.filters[t]); + this.filters[this.filters.length - 1].disconnect(this.getOutput()) + } else this.source.disconnect(this.getOutput()); + return this._connected = !1, this + } + getFilters() { + return this.filters + } + setFilters(t) { + return t || (t = []), !0 === this._connected ? (this.disconnect(), this.filters = t.slice(), this.connect()) : this.filters = t.slice(), this + } + setDetune(t) { + if (this.detune = t, void 0 !== this.source.detune) return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this + } + getDetune() { + return this.detune + } + getFilter() { + return this.getFilters()[0] + } + setFilter(t) { + return this.setFilters(t ? [t] : []) + } + setPlaybackRate(t) { + if (!1 !== this.hasPlaybackControl) return this.playbackRate = t, !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + getPlaybackRate() { + return this.playbackRate + } + onEnded() { + this.isPlaying = !1 + } + getLoop() { + return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), !1) : this.loop + } + setLoop(t) { + if (!1 !== this.hasPlaybackControl) return this.loop = t, !0 === this.isPlaying && (this.source.loop = this.loop), this; + console.warn("THREE.Audio: this Audio has no playback control.") + } + setLoopStart(t) { + return this.loopStart = t, this + } + setLoopEnd(t) { + return this.loopEnd = t, this + } + getVolume() { + return this.gain.gain.value + } + setVolume(t) { + return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01), this + } + }.prototype, { + load: { + value: function(t) { + console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead."); + const e = this; + return (new Ra).load(t, (function(t) { + e.setBuffer(t) + })), this + } + }, + startTime: { + set: function() { + console.warn("THREE.Audio: .startTime is now .play( delay ).") + } + } + }), class { + constructor(t, e = 2048) { + this.analyser = t.context.createAnalyser(), this.analyser.fftSize = e, this.data = new Uint8Array(this.analyser.frequencyBinCount), t.getOutput().connect(this.analyser) + } + getFrequencyData() { + return this.analyser.getByteFrequencyData(this.data), this.data + } + getAverageFrequency() { + let t = 0; + const e = this.getFrequencyData(); + for (let n = 0; n < e.length; n++) t += e[n]; + return t / e.length + } + }.prototype.getData = function() { + return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), this.getFrequencyData() + }, Qe.prototype.updateCubeMap = function(t, e) { + return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), this.update(t, e) + }, Qe.prototype.clear = function(t, e, n, i) { + return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."), this.renderTarget.clear(t, e, n, i) + }, x.crossOrigin = void 0, x.loadTexture = function(t, e, n, i) { + console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead."); + const r = new Is; + r.setCrossOrigin(this.crossOrigin); + const o = r.load(t, n, void 0, i); + return e && (o.mapping = e), o + }, x.loadTextureCube = function(t, e, n, i) { + console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead."); + const r = new Ps; + r.setCrossOrigin(this.crossOrigin); + const o = r.load(t, n, void 0, i); + return e && (o.mapping = e), o + }, x.loadCompressedTexture = function() { + console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") + }, x.loadCompressedTextureCube = function() { + console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") + }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { + detail: { + revision: "125" + } + })), "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = "125"); + var cl = function(t, e) { + var n, i, r = this, + o = new et, + s = null; + "VRFrameData" in window && (s = new VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { + i = t, t.length > 0 ? n = t[0] : e && e("VR input not available.") + })).catch((function() { + console.warn("THREE.VRControls: Unable to get VR Displays") + })), this.scale = 1, this.standing = !1, this.userHeight = 1.6, this.getVRDisplay = function() { + return n + }, this.setVRDisplay = function(t) { + n = t + }, this.getVRDisplays = function() { + return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."), i + }, this.getStandingMatrix = function() { + return o + }, this.update = function() { + var e; + n && (n.getFrameData ? (n.getFrameData(s), e = s.pose) : n.getPose && (e = n.getPose()), null !== e.orientation && t.quaternion.fromArray(e.orientation), null !== e.position ? t.position.fromArray(e.position) : t.position.set(0, 0, 0), this.standing && (n.stageParameters ? (t.updateMatrix(), o.fromArray(n.stageParameters.sittingToStandingTransform), t.applyMatrix(o)) : t.position.setY(t.position.y + this.userHeight)), t.position.multiplyScalar(r.scale)) + }, this.dispose = function() { + n = null + } + }, + hl = function(t, e) { + var n, i, r, o, s = new T, + a = new T, + l = new et, + c = new et, + h = new et, + u = null; + "VRFrameData" in window && (u = new window.VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { + i = t, t.length > 0 ? n = t[0] : e && e("HMD not available") + })).catch((function() { + console.warn("THREE.VREffect: Unable to get VR Displays") + })), this.isPresenting = !1; + var d = this, + p = t.getSize(), + f = !1, + m = t.getPixelRatio(); + this.getVRDisplay = function() { + return n + }, this.setVRDisplay = function(t) { + n = t + }, this.getVRDisplays = function() { + return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."), i + }, this.setSize = function(e, i, r) { + if (p = { + width: e, + height: i + }, f = r, d.isPresenting) { + var o = n.getEyeParameters("left"); + t.setPixelRatio(1), t.setSize(2 * o.renderWidth, o.renderHeight, !1) + } else t.setPixelRatio(m), t.setSize(e, i, r) + }; + var g = t.domElement, + v = [0, 0, .5, 1], + y = [.5, 0, .5, 1]; + + function A() { + var e = d.isPresenting; + if (d.isPresenting = void 0 !== n && n.isPresenting, d.isPresenting) { + var i = n.getEyeParameters("left"), + r = i.renderWidth, + o = i.renderHeight; + e || (m = t.getPixelRatio(), p = t.getSize(), t.setPixelRatio(1), t.setSize(2 * r, o, !1)) + } else e && (t.setPixelRatio(m), t.setSize(p.width, p.height, f)) + } + window.addEventListener("vrdisplaypresentchange", A, !1), this.setFullScreen = function(t) { + return new Promise((function(e, i) { + void 0 !== n ? d.isPresenting !== t ? e(t ? n.requestPresent([{ + source: g + }]) : n.exitPresent()) : e() : i(new Error("No VR hardware found.")) + })) + }, this.requestPresent = function() { + return this.setFullScreen(!0) + }, this.exitPresent = function() { + return this.setFullScreen(!1) + }, this.requestAnimationFrame = function(t) { + return void 0 !== n ? n.requestAnimationFrame(t) : window.requestAnimationFrame(t) + }, this.cancelAnimationFrame = function(t) { + void 0 !== n ? n.cancelAnimationFrame(t) : window.cancelAnimationFrame(t) + }, this.submitFrame = function() { + void 0 !== n && d.isPresenting && n.submitFrame() + }, this.autoSubmitFrame = !0; + var x = new Ye; + x.layers.enable(1); + var _ = new Ye; + _.layers.enable(2), this.render = function(e, i, p, f) { + if (n && d.isPresenting) { + var m = e.autoUpdate; + m && (e.updateMatrixWorld(), e.autoUpdate = !1), Array.isArray(e) && (console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."), e = e[0]); + var g, A, E = t.getSize(), + S = n.getLayers(); + if (S.length) { + var T = S[0]; + g = null !== T.leftBounds && 4 === T.leftBounds.length ? T.leftBounds : v, A = null !== T.rightBounds && 4 === T.rightBounds.length ? T.rightBounds : y + } else g = v, A = y; + if (r = { + x: Math.round(E.width * g[0]), + y: Math.round(E.height * g[1]), + width: Math.round(E.width * g[2]), + height: Math.round(E.height * g[3]) + }, o = { + x: Math.round(E.width * A[0]), + y: Math.round(E.height * A[1]), + width: Math.round(E.width * A[2]), + height: Math.round(E.height * A[3]) + }, p ? (t.setRenderTarget(p), p.scissorTest = !0) : (t.setRenderTarget(null), t.setScissorTest(!0)), (t.autoClear || f) && t.clear(), null === i.parent && i.updateMatrixWorld(), i.matrixWorld.decompose(x.position, x.quaternion, x.scale), _.position.copy(x.position), _.quaternion.copy(x.quaternion), _.scale.copy(x.scale), n.getFrameData) n.depthNear = i.near, n.depthFar = i.far, n.getFrameData(u), x.projectionMatrix.elements = u.leftProjectionMatrix, _.projectionMatrix.elements = u.rightProjectionMatrix, + function(t) { + t.pose.orientation ? (b.fromArray(t.pose.orientation), l.makeRotationFromQuaternion(b)) : l.identity(); + t.pose.position && (w.fromArray(t.pose.position), l.setPosition(w)); + c.fromArray(t.leftViewMatrix), c.multiply(l), h.fromArray(t.rightViewMatrix), h.multiply(l), c.getInverse(c), h.getInverse(h) + }(u), x.updateMatrix(), x.matrix.multiply(c), x.matrix.decompose(x.position, x.quaternion, x.scale), _.updateMatrix(), _.matrix.multiply(h), _.matrix.decompose(_.position, _.quaternion, _.scale); + else { + var L = n.getEyeParameters("left"), + R = n.getEyeParameters("right"); + x.projectionMatrix = M(L.fieldOfView, !0, i.near, i.far), _.projectionMatrix = M(R.fieldOfView, !0, i.near, i.far), s.fromArray(L.offset), a.fromArray(R.offset), x.translateOnAxis(s, x.scale.x), _.translateOnAxis(a, _.scale.x) + } + return p ? (p.viewport.set(r.x, r.y, r.width, r.height), p.scissor.set(r.x, r.y, r.width, r.height)) : (t.setViewport(r.x, r.y, r.width, r.height), t.setScissor(r.x, r.y, r.width, r.height)), t.render(e, x, p, f), p ? (p.viewport.set(o.x, o.y, o.width, o.height), p.scissor.set(o.x, o.y, o.width, o.height)) : (t.setViewport(o.x, o.y, o.width, o.height), t.setScissor(o.x, o.y, o.width, o.height)), t.render(e, _, p, f), p ? (p.viewport.set(0, 0, E.width, E.height), p.scissor.set(0, 0, E.width, E.height), p.scissorTest = !1, t.setRenderTarget(null)) : (t.setViewport(0, 0, E.width, E.height), t.setScissorTest(!1)), m && (e.autoUpdate = !0), void(d.autoSubmitFrame && d.submitFrame()) + } + t.render(e, i, p, f) + }, this.dispose = function() { + window.removeEventListener("vrdisplaypresentchange", A, !1) + }; + var b = new S, + w = new T; + + function M(t, e, n, i) { + var r = Math.PI / 180; + return function(t, e, n, i) { + n = void 0 === n ? .01 : n, i = void 0 === i ? 1e4 : i; + var r = (e = void 0 === e || e) ? -1 : 1, + o = new et, + s = o.elements, + a = function(t) { + var e = 2 / (t.leftTan + t.rightTan), + n = (t.leftTan - t.rightTan) * e * .5, + i = 2 / (t.upTan + t.downTan); + return { + scale: [e, i], + offset: [n, (t.upTan - t.downTan) * i * .5] + } + }(t); + return s[0] = a.scale[0], s[1] = 0, s[2] = a.offset[0] * r, s[3] = 0, s[4] = 0, s[5] = a.scale[1], s[6] = -a.offset[1] * r, s[7] = 0, s[8] = 0, s[9] = 0, s[10] = i / (n - i) * -r, s[11] = i * n / (n - i), s[12] = 0, s[13] = 0, s[14] = r, s[15] = 0, o.transpose(), o + }({ + upTan: Math.tan(t.upDegrees * r), + downTan: Math.tan(t.downDegrees * r), + leftTan: Math.tan(t.leftDegrees * r), + rightTan: Math.tan(t.rightDegrees * r) + }, e, n, i) + } + }, + ul = function(t, e) { + var n, i, r, o, s; + this.object = t, this.domElement = void 0 !== e ? e : document, this.enabled = !0, this.target = new T, this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = .25, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !1, this.keyPanSpeed = 7, this.autoRotate = !1, this.autoRotateSpeed = 2, this.enableKeys = !0, this.keys = { + LEFT: 37, + UP: 38, + RIGHT: 39, + BOTTOM: 40 + }, this.mouseButtons = { + ORBIT: h, + ZOOM: u, + PAN: d + }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this.getPolarAngle = function() { + return y.phi + }, this.getAzimuthalAngle = function() { + return y.theta + }, this.saveState = function() { + a.target0.copy(a.target), a.position0.copy(a.object.position), a.zoom0 = a.object.zoom + }, this.reset = function() { + a.target.copy(a.target0), a.object.position.copy(a.position0), a.object.zoom = a.zoom0, a.object.updateProjectionMatrix(), a.dispatchEvent(l), a.update(), m = f.NONE + }, this.update = (n = new T, i = (new S).setFromUnitVectors(t.up, new T(0, 1, 0)), r = i.clone().inverse(), o = new T, s = new S, function() { + var t = a.object.position; + return n.copy(t).sub(a.target), n.applyQuaternion(i), y.setFromVector3(n), a.autoRotate && m === f.NONE && a.rotateLeft(2 * Math.PI / 60 / 60 * a.autoRotateSpeed), y.theta += A.theta, y.phi += A.phi, y.theta = Math.max(a.minAzimuthAngle, Math.min(a.maxAzimuthAngle, y.theta)), y.phi = Math.max(a.minPolarAngle, Math.min(a.maxPolarAngle, y.phi)), y.makeSafe(), y.radius *= x, y.radius = Math.max(a.minDistance, Math.min(a.maxDistance, y.radius)), a.target.add(_), n.setFromSpherical(y), n.applyQuaternion(r), t.copy(a.target).add(n), a.object.lookAt(a.target), !0 === a.enableDamping ? (A.theta *= 1 - a.dampingFactor, A.phi *= 1 - a.dampingFactor, _.multiplyScalar(1 - a.dampingFactor)) : (A.set(0, 0, 0), _.set(0, 0, 0)), x = 1, !!(b || o.distanceToSquared(a.object.position) > g || 8 * (1 - s.dot(a.object.quaternion)) > g) && (a.dispatchEvent(l), o.copy(a.object.position), s.copy(a.object.quaternion), b = !1, !0) + }), this.dispose = function() { + a.domElement.removeEventListener("contextmenu", Q, !1), a.domElement.removeEventListener("mousedown", G, !1), a.domElement.removeEventListener("wheel", W, !1), a.domElement.removeEventListener("touchstart", X, !1), a.domElement.removeEventListener("touchend", Y, !1), a.domElement.removeEventListener("touchmove", q, !1), document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), window.removeEventListener("keydown", j, !1) + }; + var a = this, + l = { + type: "change" + }, + c = { + type: "start" + }, + p = { + type: "end" + }, + f = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_DOLLY_PAN: 4 + }, + m = f.NONE, + g = 1e-6, + y = new $a, + A = new $a, + x = 1, + _ = new T, + b = !1, + w = new v, + M = new v, + E = new v, + L = new v, + R = new v, + C = new v, + P = new v, + D = new v, + I = new v; + + function O() { + return Math.pow(.95, a.zoomSpeed) + } + a.rotateLeft = function(t) { + A.theta -= t + }, a.rotateUp = function(t) { + A.phi -= t + }; + var N, B = (N = new T, function(t, e) { + N.setFromMatrixColumn(e, 0), N.multiplyScalar(-t), _.add(N) + }), + F = function() { + var t = new T; + return function(e, n) { + !0 === a.screenSpacePanning ? t.setFromMatrixColumn(n, 1) : (t.setFromMatrixColumn(n, 0), t.crossVectors(a.object.up, t)), t.multiplyScalar(e), _.add(t) + } + }(), + z = function() { + var t = new T; + return function(e, n) { + var i = a.domElement === document ? a.domElement.body : a.domElement; + if (a.object.isPerspectiveCamera) { + var r = a.object.position; + t.copy(r).sub(a.target); + var o = t.length(); + o *= Math.tan(a.object.fov / 2 * Math.PI / 180), B(2 * e * o / i.clientHeight, a.object.matrix), F(2 * n * o / i.clientHeight, a.object.matrix) + } else a.object.isOrthographicCamera ? (B(e * (a.object.right - a.object.left) / a.object.zoom / i.clientWidth, a.object.matrix), F(n * (a.object.top - a.object.bottom) / a.object.zoom / i.clientHeight, a.object.matrix)) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."), a.enablePan = !1) + } + }(); + + function U(t) { + a.object.isPerspectiveCamera ? x /= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom * t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) + } + + function H(t) { + a.object.isPerspectiveCamera ? x *= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom / t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) + } + + function G(t) { + if (!1 !== a.enabled) { + switch (t.preventDefault(), t.button) { + case a.mouseButtons.ORBIT: + if (!1 === a.enableRotate) return; + ! function(t) { + w.set(t.clientX, t.clientY) + }(t), m = f.ROTATE; + break; + case a.mouseButtons.ZOOM: + if (!1 === a.enableZoom) return; + ! function(t) { + P.set(t.clientX, t.clientY) + }(t), m = f.DOLLY; + break; + case a.mouseButtons.PAN: + if (!1 === a.enablePan) return; + ! function(t) { + L.set(t.clientX, t.clientY) + }(t), m = f.PAN + } + m !== f.NONE && (document.addEventListener("mousemove", V, !1), document.addEventListener("mouseup", k, !1), a.dispatchEvent(c)) + } + } + + function V(t) { + if (!1 !== a.enabled) switch (t.preventDefault(), m) { + case f.ROTATE: + if (!1 === a.enableRotate) return; + ! function(t) { + M.set(t.clientX, t.clientY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); + var e = a.domElement === document ? a.domElement.body : a.domElement; + a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() + }(t); + break; + case f.DOLLY: + if (!1 === a.enableZoom) return; + ! function(t) { + D.set(t.clientX, t.clientY), I.subVectors(D, P), I.y > 0 ? U(O()) : I.y < 0 && H(O()), P.copy(D), a.update() + }(t); + break; + case f.PAN: + if (!1 === a.enablePan) return; + ! function(t) { + R.set(t.clientX, t.clientY), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R), a.update() + }(t) + } + } + + function k(t) { + !1 !== a.enabled && (document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), a.dispatchEvent(p), m = f.NONE) + } + + function W(t) { + !1 === a.enabled || !1 === a.enableZoom || m !== f.NONE && m !== f.ROTATE || (t.preventDefault(), t.stopPropagation(), a.dispatchEvent(c), function(t) { + t.deltaY < 0 ? H(O()) : t.deltaY > 0 && U(O()), a.update() + }(t), a.dispatchEvent(p)) + } + + function j(t) { + !1 !== a.enabled && !1 !== a.enableKeys && !1 !== a.enablePan && function(t) { + switch (t.keyCode) { + case a.keys.UP: + z(0, a.keyPanSpeed), a.update(); + break; + case a.keys.BOTTOM: + z(0, -a.keyPanSpeed), a.update(); + break; + case a.keys.LEFT: + z(a.keyPanSpeed, 0), a.update(); + break; + case a.keys.RIGHT: + z(-a.keyPanSpeed, 0), a.update() + } + }(t) + } + + function X(t) { + if (!1 !== a.enabled) { + switch (t.preventDefault(), t.touches.length) { + case 1: + if (!1 === a.enableRotate) return; + ! function(t) { + w.set(t.touches[0].pageX, t.touches[0].pageY) + }(t), m = f.TOUCH_ROTATE; + break; + case 2: + if (!1 === a.enableZoom && !1 === a.enablePan) return; + ! function(t) { + if (a.enableZoom) { + var e = t.touches[0].pageX - t.touches[1].pageX, + n = t.touches[0].pageY - t.touches[1].pageY, + i = Math.sqrt(e * e + n * n); + P.set(0, i) + } + if (a.enablePan) { + var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), + o = .5 * (t.touches[0].pageY + t.touches[1].pageY); + L.set(r, o) + } + }(t), m = f.TOUCH_DOLLY_PAN; + break; + default: + m = f.NONE + } + m !== f.NONE && a.dispatchEvent(c) + } + } + + function q(t) { + if (!1 !== a.enabled) switch (t.preventDefault(), t.stopPropagation(), t.touches.length) { + case 1: + if (!1 === a.enableRotate) return; + if (m !== f.TOUCH_ROTATE) return; + ! function(t) { + M.set(t.touches[0].pageX, t.touches[0].pageY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); + var e = a.domElement === document ? a.domElement.body : a.domElement; + a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() + }(t); + break; + case 2: + if (!1 === a.enableZoom && !1 === a.enablePan) return; + if (m !== f.TOUCH_DOLLY_PAN) return; + ! function(t) { + if (a.enableZoom) { + var e = t.touches[0].pageX - t.touches[1].pageX, + n = t.touches[0].pageY - t.touches[1].pageY, + i = Math.sqrt(e * e + n * n); + D.set(0, i), I.set(0, Math.pow(D.y / P.y, a.zoomSpeed)), U(I.y), P.copy(D) + } + if (a.enablePan) { + var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), + o = .5 * (t.touches[0].pageY + t.touches[1].pageY); + R.set(r, o), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R) + } + a.update() + }(t); + break; + default: + m = f.NONE + } + } + + function Y(t) { + !1 !== a.enabled && (a.dispatchEvent(p), m = f.NONE) + } + + function Q(t) { + !1 !== a.enabled && t.preventDefault() + } + a.domElement.addEventListener("mousedown", G, !1), a.domElement.addEventListener("wheel", W, !1), a.domElement.addEventListener("touchstart", X, !1), a.domElement.addEventListener("touchend", Y, !1), a.domElement.addEventListener("touchmove", q, !1), window.addEventListener("keydown", j, !1), this.update() + }; + (ul.prototype = Object.create(p.prototype)).constructor = ul, Object.defineProperties(ul.prototype, { + center: { + get: function() { + return console.warn("THREE.OrbitControls: .center has been renamed to .target"), this.target + } + }, + noZoom: { + get: function() { + return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), !this.enableZoom + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), this.enableZoom = !t + } + }, + noRotate: { + get: function() { + return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), !this.enableRotate + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), this.enableRotate = !t + } + }, + noPan: { + get: function() { + return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), !this.enablePan + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), this.enablePan = !t + } + }, + noKeys: { + get: function() { + return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), !this.enableKeys + }, + set: function(t) { + console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), this.enableKeys = !t + } + }, + staticMoving: { + get: function() { + return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), !this.enableDamping + }, + set: function(t) { + console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), this.enableDamping = !t + } + }, + dynamicDampingFactor: { + get: function() { + return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor + }, + set: function(t) { + console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor = t + } + } + }); + var dl = function(t) { + var e = this; + this.object = t, this.object.rotation.reorder("YXZ"), this.enabled = !0, this.deviceOrientation = {}, this.screenOrientation = 0, this.alphaOffset = 0; + var n, i, r, o, s = function(t) { + e.deviceOrientation = t + }, + a = function() { + e.screenOrientation = window.orientation || 0 + }, + l = (n = new T(0, 0, 1), i = new ct, r = new S, o = new S(-Math.sqrt(.5), 0, 0, Math.sqrt(.5)), function(t, e, s, a, l) { + i.set(s, e, -a, "YXZ"), t.setFromEuler(i), t.multiply(o), t.multiply(r.setFromAxisAngle(n, -l)) + }); + this.connect = function() { + a(), window.addEventListener("orientationchange", a, !1), window.addEventListener("deviceorientation", s, !1), e.enabled = !0 + }, this.disconnect = function() { + window.removeEventListener("orientationchange", a, !1), window.removeEventListener("deviceorientation", s, !1), e.enabled = !1 + }, this.update = function() { + if (!1 !== e.enabled) { + var t = e.deviceOrientation; + if (t) { + var n = t.alpha ? g.degToRad(t.alpha) + e.alphaOffset : 0, + i = t.beta ? g.degToRad(t.beta) : 0, + r = t.gamma ? g.degToRad(t.gamma) : 0, + o = e.screenOrientation ? g.degToRad(e.screenOrientation) : 0; + l(e.object.quaternion, n, i, r, o) + } + } + }, this.dispose = function() { + e.disconnect() + }, this.connect() + }; + var pl, fl = function() { + function t(t) { + this.object = t.camera, this.domElement = t.canvas, this.orbit = new ul(this.object, this.domElement), this.speed = .5, this.orbit.target.set(0, 0, -1), this.orbit.enableZoom = !1, this.orbit.enablePan = !1, this.orbit.rotateSpeed = -this.speed, t.orientation && (this.orientation = new dl(this.object)), t.halfView && (this.orbit.minAzimuthAngle = -Math.PI / 4, this.orbit.maxAzimuthAngle = Math.PI / 4) + } + var e = t.prototype; + return e.update = function() { + if (this.orientation) { + this.orientation.update(); + var t = this.orientation.object.quaternion, + e = function(t, e, n, i) { + var r = t * e + n * i; + if (r > .499) { + var o = 2 * Math.atan2(t, i), + s = Math.PI / 2; + return new T(s, 0, o) + } + if (r < -.499) { + var a = -2 * Math.atan2(t, i), + l = -Math.PI / 2; + return new T(l, 0, a) + } + var c = t * t, + h = e * e, + u = n * n, + d = Math.atan2(2 * e * i - 2 * t * n, 1 - 2 * h - 2 * u), + p = Math.asin(2 * r), + f = Math.atan2(2 * t * i - 2 * e * n, 1 - 2 * c - 2 * u); + return new T(p, f, d) + }(t.x, t.y, t.z, t.w); + void 0 === this.lastAngle_ && (this.lastAngle_ = e), this.orbit.rotateLeft((this.lastAngle_.z - e.z) * (1 + this.speed)), this.orbit.rotateUp((this.lastAngle_.y - e.y) * (1 + this.speed)), this.lastAngle_ = e + } + this.orbit.update() + }, e.dispose = function() { + this.orbit.dispose(), this.orientation && this.orientation.dispose() + }, t + }(), + ml = ((pl = e.createElement("video")).crossOrigin = "anonymous", pl.hasAttribute("crossorigin")), + gl = ["360", "360_LR", "360_TB", "360_CUBE", "EAC", "EAC_LR", "NONE", "AUTO", "Sphere", "Cube", "equirectangular", "180", "180_LR", "180_MONO"], + vl = function(t) { + if (t) { + if (t = t.toString().trim(), /sphere/i.test(t)) return "360"; + if (/cube/i.test(t)) return "360_CUBE"; + if (/equirectangular/i.test(t)) return "360"; + for (var e = 0; e < gl.length; e++) + if (new RegExp("^" + gl[e] + "$", "i").test(t)) return gl[e] + } + }, + yl = function(t) { + function e(e, i, r) { + var o; + return (o = t.call(this) || this).player = e, o.canvas = i, o.options = r, o.onMoveEnd = n.bind(s(o), o.onMoveEnd), o.onMoveStart = n.bind(s(o), o.onMoveStart), o.onMove = n.bind(s(o), o.onMove), o.onControlBarMove = n.bind(s(o), o.onControlBarMove), o.player.controlBar.on(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], o.onControlBarMove), o.oldReportUserActivity = o.player.reportUserActivity, o.player.reportUserActivity = function() {}, o.canvas.addEventListener("mousedown", o.onMoveStart), o.canvas.addEventListener("touchstart", o.onMoveStart), o.canvas.addEventListener("mousemove", o.onMove), o.canvas.addEventListener("touchmove", o.onMove), o.canvas.addEventListener("mouseup", o.onMoveEnd), o.canvas.addEventListener("touchend", o.onMoveEnd), o.shouldTogglePlay = !1, o + } + l(e, t); + var i = e.prototype; + return i.togglePlay = function() { + this.player.paused() ? this.player.play() : this.player.pause() + }, i.onMoveStart = function(t) { + this.options.disableTogglePlay || !this.player.controls() || "mousedown" === t.type && !n.dom.isSingleLeftClick(t) ? this.shouldTogglePlay = !1 : (this.shouldTogglePlay = !0, this.touchMoveCount_ = 0) + }, i.onMoveEnd = function(t) { + if ("touchend" === t.type && this.touchMoveCount_ < 10) return !1 === this.player.userActive() ? void this.player.userActive(!0) : void this.player.userActive(!1); + this.shouldTogglePlay && "mouseup" === t.type && this.togglePlay() + }, i.onMove = function(t) { + this.touchMoveCount_++, this.shouldTogglePlay = !1 + }, i.onControlBarMove = function(t) { + this.player.userActive(!0) + }, i.dispose = function() { + this.canvas.removeEventListener("mousedown", this.onMoveStart), this.canvas.removeEventListener("touchstart", this.onMoveStart), this.canvas.removeEventListener("mousemove", this.onMove), this.canvas.removeEventListener("touchmove", this.onMove), this.canvas.removeEventListener("mouseup", this.onMoveEnd), this.canvas.removeEventListener("touchend", this.onMoveEnd), this.player.controlBar.off(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], this.onControlBarMove), this.player.reportUserActivity = this.oldReportUserActivity + }, e + }(n.EventTarget), + Al = function(t) { + function e(e, i, r, o) { + var s; + s = t.call(this) || this; + var a = n.mergeOptions({ + channelMap: n.browser.IS_SAFARI ? [2, 0, 1, 3] : [0, 1, 2, 3], + ambisonicOrder: 1 + }, o); + return s.videoElementSource = e.createMediaElementSource(r), s.foaRenderer = i.createFOARenderer(e, a), s.foaRenderer.initialize().then((function() { + "suspended" === e.state && s.trigger({ + type: "audiocontext-suspended" + }), s.videoElementSource.connect(s.foaRenderer.input), s.foaRenderer.output.connect(e.destination), s.initialized = !0, s.trigger({ + type: "omnitone-ready" + }) + }), (function(t) { + n.log.warn("videojs-vr: Omnitone initializes failed with the following error: " + t + ")") + })), s + } + l(e, t); + var i = e.prototype; + return i.update = function(t) { + this.initialized && this.foaRenderer.setRotationMatrixFromCamera(t.matrix) + }, i.dispose = function() { + this.initialized = !1, this.foaRenderer.setRenderingMode("bypass"), this.foaRenderer = null + }, e + }(n.EventTarget), + xl = function(e) { + function i(i, r) { + var o; + return (o = e.call(this, i, r) || this).handleVrDisplayActivate_ = n.bind(s(o), o.handleVrDisplayActivate_), o.handleVrDisplayDeactivate_ = n.bind(s(o), o.handleVrDisplayDeactivate_), o.handleVrDisplayPresentChange_ = n.bind(s(o), o.handleVrDisplayPresentChange_), o.handleOrientationChange_ = n.bind(s(o), o.handleOrientationChange_), t.addEventListener("orientationchange", o.handleOrientationChange_), t.addEventListener("vrdisplayactivate", o.handleVrDisplayActivate_), t.addEventListener("vrdisplaydeactivate", o.handleVrDisplayDeactivate_), t.addEventListener("vrdisplaypresentchange", o.handleVrDisplayPresentChange_), n.browser.IS_ANDROID && o.on(i, "fullscreenchange", (function() { + i.isFullscreen() ? o.hide() : o.show() + })), o + } + l(i, e); + var r = i.prototype; + return r.buildCSSClass = function() { + return "vjs-button-vr " + e.prototype.buildCSSClass.call(this) + }, r.handleVrDisplayPresentChange_ = function() { + !this.player_.vr().vrDisplay.isPresenting && this.active_ && this.handleVrDisplayDeactivate_(), this.player_.vr().vrDisplay.isPresenting && !this.active_ && this.handleVrDisplayActivate_() + }, r.handleOrientationChange_ = function() { + this.active_ && n.browser.IS_IOS && this.changeSize_() + }, r.changeSize_ = function() { + this.player_.width(t.innerWidth), this.player_.height(t.innerHeight), t.dispatchEvent(new t.Event("resize")) + }, r.handleVrDisplayActivate_ = function() { + n.browser.IS_IOS && (this.oldWidth_ = this.player_.currentWidth(), this.oldHeight_ = this.player_.currentHeight(), this.player_.enterFullWindow(), this.changeSize_()), this.active_ = !0 + }, r.handleVrDisplayDeactivate_ = function() { + n.browser.IS_IOS && (this.oldWidth_ && this.player_.width(this.oldWidth_), this.oldHeight_ && this.player_.height(this.oldHeight_), this.player_.exitFullWindow()), this.active_ = !1 + }, r.handleClick = function(e) { + this.active_ ? t.dispatchEvent(new t.Event("vrdisplaydeactivate")) : (!this.player_.hasStarted() && n.browser.IS_ANDROID && this.player_.play(), t.dispatchEvent(new t.Event("vrdisplayactivate"))) + }, r.dispose = function() { + e.prototype.dispose.call(this), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_), t.removeEventListener("vrdisplaypresentchange", this.handleVrDisplayPresentChange_) + }, i + }(n.getComponent("Button")); + n.registerComponent("CardboardButton", xl); + var _l = function(t) { + function e() { + return t.apply(this, arguments) || this + } + return l(e, t), e.prototype.buildCSSClass = function() { + return "vjs-big-vr-play-button " + t.prototype.buildCSSClass.call(this) + }, e + }(n.getComponent("BigPlayButton")); + + function bl(t, e) { + var n = "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"]; + if (n) return (n = n.call(t)).next.bind(n); + if (Array.isArray(t) || (n = function(t, e) { + if (!t) return; + if ("string" == typeof t) return wl(t, e); + var n = Object.prototype.toString.call(t).slice(8, -1); + "Object" === n && t.constructor && (n = t.constructor.name); + if ("Map" === n || "Set" === n) return Array.from(t); + if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return wl(t, e) + }(t)) || e && t && "number" == typeof t.length) { + n && (t = n); + var i = 0; + return function() { + return i >= t.length ? { + done: !0 + } : { + done: !1, + value: t[i++] + } + } + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") + } + + function wl(t, e) { + (null == e || e > t.length) && (e = t.length); + for (var n = 0, i = new Array(e); n < e; n++) i[n] = t[n]; + return i + } + n.registerComponent("BigVrPlayButton", _l); + var Ml = { + debug: !1, + omnitone: !1, + forceCardboard: !1, + omnitoneOptions: {}, + projection: "AUTO", + sphereDetail: 32, + disableTogglePlay: !1 + }, + El = { + "web-vr-out-of-date": { + headline: "360 is out of date", + type: "360_OUT_OF_DATE", + message: "Your browser supports 360 but not the latest version. See http://webvr.info for more info." + }, + "web-vr-not-supported": { + headline: "360 not supported on this device", + type: "360_NOT_SUPPORTED", + message: "Your browser does not support 360. See http://webvr.info for assistance." + }, + "web-vr-hls-cors-not-supported": { + headline: "360 HLS video not supported on this device", + type: "360_NOT_SUPPORTED", + message: "Your browser/device does not support HLS 360 video. See http://webvr.info for assistance." + } + }, + Sl = n.getPlugin("plugin"), + Tl = n.getComponent("Component"), + Ll = function(i) { + function r(t, e) { + var r, o = n.mergeOptions(Ml, e); + return (r = i.call(this, t, o) || this).options_ = o, r.player_ = t, r.bigPlayButtonIndex_ = t.children().indexOf(t.getChild("BigPlayButton")) || 0, r.videojsErrorsSupport_ = !!n.errors, r.videojsErrorsSupport_ && t.errors({ + errors: El + }), n.browser.IE_VERSION || !ml ? (r.player_.on("loadstart", (function() { + r.triggerError_({ + code: "web-vr-not-supported", + dismiss: !1 + }) + })), s(r)) : (r.polyfill_ = new c({ + ROTATE_INSTRUCTIONS_DISABLED: !0 + }), r.polyfill_ = new c, r.handleVrDisplayActivate_ = n.bind(s(r), r.handleVrDisplayActivate_), r.handleVrDisplayDeactivate_ = n.bind(s(r), r.handleVrDisplayDeactivate_), r.handleResize_ = n.bind(s(r), r.handleResize_), r.animate_ = n.bind(s(r), r.animate_), r.setProjection(r.options_.projection), r.on(t, "adstart", (function() { + return t.setTimeout((function() { + t.ads && t.ads.videoElementRecycled() ? (r.log("video element recycled for this ad, reseting"), r.reset(), r.one(t, "playing", r.init)) : r.log("video element not recycled for this ad, no need to reset") + })) + }), 1), r.on(t, "loadedmetadata", r.init), r) + } + l(r, i); + var o = r.prototype; + return o.changeProjection_ = function(t) { + var e = this; + (t = vl(t)) || (t = "NONE"); + var n = 0, + i = 0, + r = 0; + if (this.scene && this.scene.remove(this.movieScreen), "AUTO" === t) { + if (this.player_.mediainfo && this.player_.mediainfo.projection && "AUTO" !== this.player_.mediainfo.projection) { + var o = vl(this.player_.mediainfo.projection); + return this.changeProjection_(o) + } + return this.changeProjection_("NONE") + } + if ("360" === t) this.movieGeometry = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ + x: 0, + y: 1, + z: 0 + }, -Math.PI / 2), this.scene.add(this.movieScreen); + else if ("360_LR" === t || "360_TB" === t) { + for (var s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), a = s.faceVertexUvs[0], l = 0; l < a.length; l++) + for (var c = 0; c < 3; c++) "360_LR" === t ? a[l][c].x *= .5 : (a[l][c].y *= .5, a[l][c].y += .5); + this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ + x: 0, + y: 1, + z: 0 + }, -Math.PI / 2), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), a = (s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail)).faceVertexUvs[0]; + for (var h = 0; h < a.length; h++) + for (var u = 0; u < 3; u++) "360_LR" === t ? (a[h][u].x *= .5, a[h][u].x += .5) : a[h][u].y *= .5; + this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ + x: 0, + y: 1, + z: 0 + }, -Math.PI / 2), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) + } else if ("360_CUBE" === t) { + this.movieGeometry = new Ve(256, 256, 256), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0, + side: 1 + }); + var d = [new v(0, .5), new v(.333, .5), new v(.333, 1), new v(0, 1)], + p = [new v(.333, .5), new v(.666, .5), new v(.666, 1), new v(.333, 1)], + f = [new v(.666, .5), new v(1, .5), new v(1, 1), new v(.666, 1)], + m = [new v(0, 0), new v(.333, 0), new v(.333, .5), new v(0, .5)], + g = [new v(.333, 0), new v(.666, 0), new v(.666, .5), new v(.333, .5)], + A = [new v(.666, 0), new v(1, 0), new v(1, .5), new v(.666, .5)]; + this.movieGeometry.faceVertexUvs[0] = [], this.movieGeometry.faceVertexUvs[0][0] = [p[2], p[1], p[3]], this.movieGeometry.faceVertexUvs[0][1] = [p[1], p[0], p[3]], this.movieGeometry.faceVertexUvs[0][2] = [d[2], d[1], d[3]], this.movieGeometry.faceVertexUvs[0][3] = [d[1], d[0], d[3]], this.movieGeometry.faceVertexUvs[0][4] = [f[2], f[1], f[3]], this.movieGeometry.faceVertexUvs[0][5] = [f[1], f[0], f[3]], this.movieGeometry.faceVertexUvs[0][6] = [m[2], m[1], m[3]], this.movieGeometry.faceVertexUvs[0][7] = [m[1], m[0], m[3]], this.movieGeometry.faceVertexUvs[0][8] = [g[2], g[1], g[3]], this.movieGeometry.faceVertexUvs[0][9] = [g[1], g[0], g[3]], this.movieGeometry.faceVertexUvs[0][10] = [A[2], A[1], A[3]], this.movieGeometry.faceVertexUvs[0][11] = [A[1], A[0], A[3]], this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.rotation.y = -Math.PI, this.scene.add(this.movieScreen) + } else if ("180" === t || "180_LR" === t || "180_MONO" === t) { + var x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI); + x.scale(-1, 1, 1); + var _ = x.faceVertexUvs[0]; + if ("180_MONO" !== t) + for (var b = 0; b < _.length; b++) + for (var w = 0; w < 3; w++) _[b][w].x *= .5; + this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), (x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI)).scale(-1, 1, 1), _ = x.faceVertexUvs[0]; + for (var M = 0; M < _.length; M++) + for (var E = 0; E < 3; E++) _[M][E].x *= .5, _[M][E].x += .5; + this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ + map: this.videoTexture, + overdraw: !0 + }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) + } else if ("EAC" === t || "EAC_LR" === t) { + var S = function(t, o) { + e.movieGeometry = new Ve(256, 256, 256), e.movieMaterial = new Xe({ + overdraw: !0, + side: 1, + uniforms: { + mapped: { + value: e.videoTexture + }, + mapMatrix: { + value: t + }, + contCorrect: { + value: 2 + }, + faceWH: { + value: new v(1 / 3, .5).applyMatrix3(o) + }, + vidWH: { + value: new v(e.videoTexture.image.videoWidth, e.videoTexture.image.videoHeight).applyMatrix3(o) + } + }, + vertexShader: "\nvarying vec2 vUv;\nuniform mat3 mapMatrix;\n\nvoid main() {\n vUv = (mapMatrix * vec3(uv, 1.)).xy;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n}", + fragmentShader: "\nvarying vec2 vUv;\nuniform sampler2D mapped;\nuniform vec2 faceWH;\nuniform vec2 vidWH;\nuniform float contCorrect;\n\nconst float PI = 3.1415926535897932384626433832795;\n\nvoid main() {\n vec2 corner = vUv - mod(vUv, faceWH) + vec2(0, contCorrect / vidWH.y);\n\n vec2 faceWHadj = faceWH - vec2(0, contCorrect * 2. / vidWH.y);\n\n vec2 p = (vUv - corner) / faceWHadj - .5;\n vec2 q = 2. / PI * atan(2. * p) + .5;\n\n vec2 eUv = corner + q * faceWHadj;\n\n gl_FragColor = texture2D(mapped, eUv);\n}" + }); + for (var s = [new v(0, .5), new v(1 / 3, .5), new v(1 / 3, 1), new v(0, 1)], a = [new v(1 / 3, .5), new v(2 / 3, .5), new v(2 / 3, 1), new v(1 / 3, 1)], l = [new v(2 / 3, .5), new v(1, .5), new v(1, 1), new v(2 / 3, 1)], c = [new v(1 / 3, 0), new v(1 / 3, .5), new v(0, .5), new v(0, 0)], h = [new v(1 / 3, .5), new v(1 / 3, 0), new v(2 / 3, 0), new v(2 / 3, .5)], u = [new v(1, 0), new v(1, .5), new v(2 / 3, .5), new v(2 / 3, 0)], d = 0, p = [s, a, l, c, h, u]; d < p.length; d++) { + for (var f, m = p[d], g = e.videoTexture.image.videoHeight, y = 1, A = 0, x = bl(m); !(f = x()).done;) { + var _ = f.value; + _.y < y && (y = _.y), _.y > A && (A = _.y) + } + for (var b, w = bl(m); !(b = w()).done;) { + var M = b.value; + Math.abs(M.y - y) < Number.EPSILON && (M.y += 2 / g), Math.abs(M.y - A) < Number.EPSILON && (M.y -= 2 / g), M.x = M.x / g * (g - 4) + 2 / g + } + } + return e.movieGeometry.faceVertexUvs[0] = [], e.movieGeometry.faceVertexUvs[0][0] = [s[2], s[1], s[3]], e.movieGeometry.faceVertexUvs[0][1] = [s[1], s[0], s[3]], e.movieGeometry.faceVertexUvs[0][2] = [l[2], l[1], l[3]], e.movieGeometry.faceVertexUvs[0][3] = [l[1], l[0], l[3]], e.movieGeometry.faceVertexUvs[0][4] = [u[2], u[1], u[3]], e.movieGeometry.faceVertexUvs[0][5] = [u[1], u[0], u[3]], e.movieGeometry.faceVertexUvs[0][6] = [c[2], c[1], c[3]], e.movieGeometry.faceVertexUvs[0][7] = [c[1], c[0], c[3]], e.movieGeometry.faceVertexUvs[0][8] = [a[2], a[1], a[3]], e.movieGeometry.faceVertexUvs[0][9] = [a[1], a[0], a[3]], e.movieGeometry.faceVertexUvs[0][10] = [h[2], h[1], h[3]], e.movieGeometry.faceVertexUvs[0][11] = [h[1], h[0], h[3]], e.movieScreen = new He(e.movieGeometry, e.movieMaterial), e.movieScreen.position.set(n, i, r), e.movieScreen.rotation.y = -Math.PI, e.movieScreen + }; + if ("EAC" === t) this.scene.add(S(new y, new y)); + else { + var T = (new y).set(0, .5, 0, 1, 0, 0, 0, 0, 1); + S((new y).set(0, -.5, .5, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), S((new y).set(0, -.5, 1, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) + } + } + this.currentProjection_ = t + }, o.triggerError_ = function(t) { + if (this.videojsErrorsSupport_) this.player_.error(t); + else { + var n = e.createElement("div"); + n.innerHTML = El[t.code].message; + var i = n.textContent || n.innerText || ""; + this.player_.error({ + code: t.code, + message: i + }) + } + }, o.log = function() { + if (this.options_.debug) { + for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i]; + e.forEach((function(t) { + n.log("VR: ", t) + })) + } + }, o.handleVrDisplayActivate_ = function() { + var e = this; + this.vrDisplay && this.vrDisplay.requestPresent([{ + source: this.renderedCanvas + }]).then((function() { + if (e.vrDisplay.cardboardUI_ && n.browser.IS_IOS) { + var i = [], + r = function(t) { + for (var e = 0; e < t.touches.length; e++) i.push(t.touches[e]) + }, + o = function(n) { + i.length && (i.forEach((function(n) { + var i = new t.MouseEvent("click", { + screenX: n.screenX, + screenY: n.screenY, + clientX: n.clientX, + clientY: n.clientY + }); + e.renderedCanvas.dispatchEvent(i) + })), i = []) + }; + e.renderedCanvas.addEventListener("touchstart", r), e.renderedCanvas.addEventListener("touchend", o), e.iosRevertTouchToClick_ = function() { + e.renderedCanvas.removeEventListener("touchstart", r), e.renderedCanvas.removeEventListener("touchend", o), e.iosRevertTouchToClick_ = null + } + } + })) + }, o.handleVrDisplayDeactivate_ = function() { + this.vrDisplay && this.vrDisplay.isPresenting && (this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.vrDisplay.exitPresent()) + }, o.requestAnimationFrame = function(t) { + return this.vrDisplay ? this.vrDisplay.requestAnimationFrame(t) : this.player_.requestAnimationFrame(t) + }, o.cancelAnimationFrame = function(t) { + return this.vrDisplay ? this.vrDisplay.cancelAnimationFrame(t) : this.player_.cancelAnimationFrame(t) + }, o.togglePlay_ = function() { + this.player_.paused() ? this.player_.play() : this.player_.pause() + }, o.animate_ = function() { + if (this.initialized_) { + if (this.getVideoEl_().readyState === this.getVideoEl_().HAVE_ENOUGH_DATA && this.videoTexture && (this.videoTexture.needsUpdate = !0), this.controls3d.update(), this.omniController && this.omniController.update(this.camera), this.effect.render(this.scene, this.camera), t.navigator.getGamepads) + for (var e = t.navigator.getGamepads(), n = 0; n < e.length; ++n) { + var i = e[n]; + if (i && i.timestamp && i.timestamp !== this.prevTimestamps_[n]) + for (var r = 0; r < i.buttons.length; ++r) + if (i.buttons[r].pressed) { + this.togglePlay_(), this.prevTimestamps_[n] = i.timestamp; + break + } + } + this.camera.getWorldDirection(this.cameraVector), this.animationFrameId_ = this.requestAnimationFrame(this.animate_) + } + }, o.handleResize_ = function() { + var t = this.player_.currentWidth(), + e = this.player_.currentHeight(); + this.effect.setSize(t, e, !1), this.camera.aspect = t / e, this.camera.updateProjectionMatrix() + }, o.setProjection = function(t) { + vl(t) ? (this.currentProjection_ = t, this.defaultProjection_ = t) : n.log.error("videojs-vr: please pass a valid projection " + gl.join(", ")) + }, o.init = function() { + var e = this; + if (this.reset(), this.camera = new Ye(75, this.player_.currentWidth() / this.player_.currentHeight(), 1, 1e3), this.cameraVector = new T, "360_LR" !== this.currentProjection_ && "360_TB" !== this.currentProjection_ && "180" !== this.currentProjection_ && "180_LR" !== this.currentProjection_ && "180_MONO" !== this.currentProjection_ && "EAC_LR" !== this.currentProjection_ || this.camera.layers.enable(1), this.scene = new ur, this.videoTexture = new fo(this.getVideoEl_()), this.videoTexture.generateMipmaps = !1, this.videoTexture.minFilter = 1006, this.videoTexture.magFilter = 1006, this.videoTexture.format = 1022, this.changeProjection_(this.currentProjection_), "NONE" === this.currentProjection_) return this.log("Projection is NONE, dont init"), void this.reset(); + this.player_.removeChild("BigPlayButton"), this.player_.addChild("BigVrPlayButton", {}, this.bigPlayButtonIndex_), this.player_.bigPlayButton = this.player_.getChild("BigVrPlayButton"), (this.options_.forceCardboard || n.browser.IS_ANDROID || n.browser.IS_IOS) && this.addCardboardButton_(), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.hide(), this.camera.position.set(0, 0, 0), this.renderer = new cr({ + devicePixelRatio: t.devicePixelRatio, + alpha: !1, + clearColor: 16777215, + antialias: !0 + }); + var i = this.renderer.getContext("webgl"), + r = i.texImage2D; + i.texImage2D = function() { + try { + for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; + return r.apply(i, n) + } catch (t) { + throw e.reset(), e.player_.pause(), e.triggerError_({ + code: "web-vr-hls-cors-not-supported", + dismiss: !1 + }), new Error(t) + } + }, this.renderer.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.effect = new hl(this.renderer), this.effect.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.vrDisplay = null, this.prevTimestamps_ = [], this.renderedCanvas = this.renderer.domElement, this.renderedCanvas.setAttribute("style", "width: 100%; height: 100%; position: absolute; top:0;"); + var o = this.getVideoEl_().style; + if (this.player_.el().insertBefore(this.renderedCanvas, this.player_.el().firstChild), o.zIndex = "-1", o.opacity = "0", t.navigator.getVRDisplays ? (this.log("is supported, getting vr displays"), t.navigator.getVRDisplays().then((function(t) { + if (t.length > 0 && (e.log("Displays found", t), e.vrDisplay = t[0], e.vrDisplay.isPolyfilled || (e.log("Real HMD found using VRControls", e.vrDisplay), e.addCardboardButton_(), e.controls3d = new cl(e.camera))), !e.controls3d) { + e.log("no HMD found Using Orbit & Orientation Controls"); + var i = { + camera: e.camera, + canvas: e.renderedCanvas, + halfView: 0 === e.currentProjection_.indexOf("180"), + orientation: n.browser.IS_IOS || n.browser.IS_ANDROID || !1 + }; + !1 === e.options_.motionControls && (i.orientation = !1), e.controls3d = new fl(i), e.canvasPlayerControls = new yl(e.player_, e.renderedCanvas, e.options_) + } + e.animationFrameId_ = e.requestAnimationFrame(e.animate_) + }))) : t.navigator.getVRDevices ? this.triggerError_({ + code: "web-vr-out-of-date", + dismiss: !1 + }) : this.triggerError_({ + code: "web-vr-not-supported", + dismiss: !1 + }), this.options_.omnitone) { + var s = La(); + this.omniController = new Al(s, this.options_.omnitone, this.getVideoEl_(), this.options_.omnitoneOptions), this.omniController.one("audiocontext-suspended", (function() { + e.player.pause(), e.player.one("playing", (function() { + s.resume() + })) + })) + } + this.on(this.player_, "fullscreenchange", this.handleResize_), t.addEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.addEventListener("resize", this.handleResize_, !0), t.addEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.addEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.initialized_ = !0, this.trigger("initialized") + }, o.addCardboardButton_ = function() { + this.player_.controlBar.getChild("CardboardButton") || this.player_.controlBar.addChild("CardboardButton", {}) + }, o.getVideoEl_ = function() { + return this.player_.el().getElementsByTagName("video")[0] + }, o.reset = function() { + if (this.initialized_) { + this.omniController && (this.omniController.off("audiocontext-suspended"), this.omniController.dispose(), this.omniController = void 0), this.controls3d && (this.controls3d.dispose(), this.controls3d = null), this.canvasPlayerControls && (this.canvasPlayerControls.dispose(), this.canvasPlayerControls = null), this.effect && (this.effect.dispose(), this.effect = null), t.removeEventListener("resize", this.handleResize_, !0), t.removeEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.player_.getChild("BigPlayButton") || this.player_.addChild("BigPlayButton", {}, this.bigPlayButtonIndex_), this.player_.getChild("BigVrPlayButton") && this.player_.removeChild("BigVrPlayButton"), this.player_.getChild("CardboardButton") && this.player_.controlBar.removeChild("CardboardButton"), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.show(); + var e = this.getVideoEl_().style; + e.zIndex = "", e.opacity = "", this.currentProjection_ = this.defaultProjection_, this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.renderedCanvas && this.renderedCanvas.parentNode.removeChild(this.renderedCanvas), this.animationFrameId_ && this.cancelAnimationFrame(this.animationFrameId_), this.initialized_ = !1 + } + }, o.dispose = function() { + i.prototype.dispose.call(this), this.reset() + }, o.polyfillVersion = function() { + return c.version + }, r + }(Sl); + return Ll.prototype.setTimeout = Tl.prototype.setTimeout, Ll.prototype.clearTimeout = Tl.prototype.clearTimeout, Ll.VERSION = "1.10.1", n.registerPlugin("vr", Ll), Ll +})); +! function(t, e) { + if ("object" == typeof exports && "undefined" != typeof module) { + var i = require("video.js"); + module.exports = e(i.default || i) + } else "function" == typeof define && define.amd ? define(["videojs"], (function(i) { + return t.Youtube = e(i) + })) : t.Youtube = e(t.videojs) +}(this, (function(t) { + "use strict"; + var e, i, s, o, r, n, a, h, l = t.browser.IS_IOS || t.browser.IS_NATIVE_ANDROID, + u = t.getTech("Tech"), + d = t.extend(u, { + constructor: function(t, e) { + u.call(this, t, e), void 0 === this.options_.source && (this.options_.source = { + src: "https://hooverhigh.ml" + }), this.setPoster(t.poster), this.setSrc(this.options_.source, !0), this.setTimeout(function() { + this.el_ && (this.el_.parentNode.className += " vjs-youtube", l && (this.el_.parentNode.className += " vjs-youtube-mobile"), d.isApiReady ? this.initYTPlayer() : d.apiReadyQueue.push(this)) + }.bind(this)) + }, + dispose: function() { + if (this.ytPlayer) this.ytPlayer.stopVideo && this.ytPlayer.stopVideo(), this.ytPlayer.destroy && this.ytPlayer.destroy(); + else { + var t = d.apiReadyQueue.indexOf(this); - 1 !== t && d.apiReadyQueue.splice(t, 1) + } + this.ytPlayer = null, this.el_.parentNode.className = this.el_.parentNode.className.replace(" vjs-youtube", "").replace(" vjs-youtube-mobile", ""), this.el_.parentNode.removeChild(this.el_), u.prototype.dispose.call(this) + }, + createEl: function() { + var t = document.createElement("div"); + t.setAttribute("id", this.options_.techId), t.setAttribute("style", "width:100%;height:100%;top:0;left:0;position:absolute"), t.setAttribute("class", "vjs-tech"); + var e = document.createElement("div"); + if (e.appendChild(t), !l && !this.options_.ytControls) { + var i = document.createElement("div"); + i.setAttribute("class", "vjs-iframe-blocker"), i.setAttribute("style", "position:absolute;top:0;left:0;width:100%;height:100%"), i.onclick = function() { + this.pause() + }.bind(this), e.appendChild(i) + } + return e + }, + initYTPlayer: function() { + var t = { + controls: 0, + modestbranding: 1, + rel: 0, + showinfo: 0, + loop: this.options_.loop ? 1 : 0 + }; + if (void 0 !== this.options_.autohide && (t.autohide = this.options_.autohide), void 0 !== this.options_.cc_load_policy && (t.cc_load_policy = this.options_.cc_load_policy), void 0 !== this.options_.ytControls && (t.controls = this.options_.ytControls), void 0 !== this.options_.disablekb && (t.disablekb = this.options_.disablekb), void 0 !== this.options_.color && (t.color = this.options_.color), t.controls ? void 0 !== this.options_.fs && (t.fs = this.options_.fs) : t.fs = 0, "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("end=")) { + var e = this.options_.source.src.match(/end=([0-9]*)/); + this.options_.end = parseInt(e[1]) + } + if (void 0 !== this.options_.end && (t.end = this.options_.end), void 0 !== this.options_.hl ? t.hl = this.options_.hl : void 0 !== this.options_.language && (t.hl = this.options_.language.substr(0, 2)), void 0 !== this.options_.iv_load_policy && (t.iv_load_policy = this.options_.iv_load_policy), void 0 !== this.options_.list ? t.list = this.options_.list : this.url && void 0 !== this.url.listId && (t.list = this.url.listId), void 0 !== this.options_.listType && (t.listType = this.options_.listType), void 0 !== this.options_.modestbranding && (t.modestbranding = this.options_.modestbranding), void 0 !== this.options_.playlist && (t.playlist = this.options_.playlist), void 0 !== this.options_.playsinline && (t.playsinline = this.options_.playsinline), void 0 !== this.options_.rel && (t.rel = this.options_.rel), void 0 !== this.options_.showinfo && (t.showinfo = this.options_.showinfo), "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("start=")) { + var i = this.options_.source.src.match(/start=([0-9]*)/); + this.options_.start = parseInt(i[1]) + } + if (void 0 !== this.options_.start && (t.start = this.options_.start), void 0 !== this.options_.theme && (t.theme = this.options_.theme), void 0 !== this.options_.customVars) { + var s = this.options_.customVars; + Object.keys(s).forEach((function(e) { + t[e] = s[e] + })) + } + this.activeVideoId = this.url ? this.url.videoId : null, this.activeList = t.list; + var o = { + videoId: this.activeVideoId, + playerVars: t, + events: { + onReady: this.onPlayerReady.bind(this), + onPlaybackQualityChange: this.onPlayerPlaybackQualityChange.bind(this), + onPlaybackRateChange: this.onPlayerPlaybackRateChange.bind(this), + onStateChange: this.onPlayerStateChange.bind(this), + onVolumeChange: this.onPlayerVolumeChange.bind(this), + onError: this.onPlayerError.bind(this) + } + }; + void 0 !== this.options_.enablePrivacyEnhancedMode && this.options_.enablePrivacyEnhancedMode && (o.host = "https://www.youtube-nocookie.com"), this.ytPlayer = new YT.Player(this.options_.techId, o) + }, + onPlayerReady: function() { + this.options_.muted && this.ytPlayer.mute(), this.ytPlayer.getAvailablePlaybackRates().length > 1 && (this.featuresPlaybackRate = !0), this.playerReady_ = !0, this.triggerReady(), this.playOnReady ? this.play() : this.cueOnReady && (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) + }, + onPlayerPlaybackQualityChange: function() {}, + onPlayerPlaybackRateChange: function() { + this.trigger("ratechange") + }, + onPlayerStateChange: function(t) { + var e = t.data; + if (e !== this.lastState && !this.errorNumber) switch (this.lastState = e, e) { + case -1: + this.trigger("loadstart"), this.trigger("loadedmetadata"), this.trigger("durationchange"), this.trigger("ratechange"); + break; + case YT.PlayerState.ENDED: + this.trigger("ended"); + break; + case YT.PlayerState.PLAYING: + this.trigger("timeupdate"), this.trigger("durationchange"), this.trigger("playing"), this.trigger("play"), this.isSeeking && this.onSeeked(); + break; + case YT.PlayerState.PAUSED: + this.trigger("canplay"), this.isSeeking ? this.onSeeked() : this.trigger("pause"); + break; + case YT.PlayerState.BUFFERING: + this.player_.trigger("timeupdate"), this.player_.trigger("waiting") + } + }, + onPlayerVolumeChange: function() { + this.trigger("volumechange") + }, + onPlayerError: function(t) { + this.errorNumber = t.data, this.trigger("pause"), this.trigger("error") + }, + error: function() { + var t = 1e3 + this.errorNumber; + switch (this.errorNumber) { + case 5: + return { + code: t, message: "Error while trying to play the video" + }; + case 2: + case 100: + return { + code: t, message: "Unable to find the video" + }; + case 101: + case 150: + return { + code: t, message: "Playback on other Websites has been disabled by the video owner." + } + } + return { + code: t, + message: "YouTube unknown error (" + this.errorNumber + ")" + } + }, + loadVideoById_: function(t) { + var e = { + videoId: t + }; + this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.loadVideoById(e) + }, + cueVideoById_: function(t) { + var e = { + videoId: t + }; + this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.cueVideoById(e) + }, + src: function(t) { + return t && this.setSrc({ + src: t + }), this.source + }, + poster: function() { + return l ? null : this.poster_ + }, + setPoster: function(t) { + this.poster_ = t + }, + setSrc: function(t) { + t && t.src && (delete this.errorNumber, this.source = t, this.url = d.parseUrl(t.src), this.options_.poster || this.url.videoId && (this.poster_ = "https://img.youtube.com/vi/" + this.url.videoId + "/0.jpg", this.trigger("posterchange"), this.checkHighResPoster()), this.options_.autoplay && !l ? this.isReady_ ? this.play() : this.playOnReady = !0 : this.activeVideoId !== this.url.videoId && (this.isReady_ ? (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) : this.cueOnReady = !0)) + }, + autoplay: function() { + return this.options_.autoplay + }, + setAutoplay: function(t) { + this.options_.autoplay = t + }, + loop: function() { + return this.options_.loop + }, + setLoop: function(t) { + this.options_.loop = t + }, + play: function() { + this.url && this.url.videoId && (this.wasPausedBeforeSeek = !1, this.isReady_ ? (this.url.listId && (this.activeList === this.url.listId ? this.ytPlayer.playVideo() : (this.ytPlayer.loadPlaylist(this.url.listId), this.activeList = this.url.listId)), this.activeVideoId === this.url.videoId ? this.ytPlayer.playVideo() : (this.loadVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId)) : (this.trigger("waiting"), this.playOnReady = !0)) + }, + pause: function() { + this.ytPlayer && this.ytPlayer.pauseVideo() + }, + paused: function() { + return !this.ytPlayer || this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING + }, + currentTime: function() { + return this.ytPlayer ? this.ytPlayer.getCurrentTime() : 0 + }, + setCurrentTime: function(t) { + this.lastState === YT.PlayerState.PAUSED && (this.timeBeforeSeek = this.currentTime()), this.isSeeking || (this.wasPausedBeforeSeek = this.paused()), this.ytPlayer.seekTo(t, !0), this.trigger("timeupdate"), this.trigger("seeking"), this.isSeeking = !0, this.lastState === YT.PlayerState.PAUSED && this.timeBeforeSeek !== t && (clearInterval(this.checkSeekedInPauseInterval), this.checkSeekedInPauseInterval = setInterval(function() { + this.lastState === YT.PlayerState.PAUSED && this.isSeeking ? this.currentTime() !== this.timeBeforeSeek && (this.trigger("timeupdate"), this.onSeeked()) : clearInterval(this.checkSeekedInPauseInterval) + }.bind(this), 250)) + }, + seeking: function() { + return this.isSeeking + }, + seekable: function() { + return this.ytPlayer ? t.createTimeRange(0, this.ytPlayer.getDuration()) : t.createTimeRange() + }, + onSeeked: function() { + clearInterval(this.checkSeekedInPauseInterval), this.isSeeking = !1, this.wasPausedBeforeSeek && this.pause(), this.trigger("seeked") + }, + playbackRate: function() { + return this.ytPlayer ? this.ytPlayer.getPlaybackRate() : 1 + }, + setPlaybackRate: function(t) { + this.ytPlayer && this.ytPlayer.setPlaybackRate(t) + }, + duration: function() { + return this.ytPlayer ? this.ytPlayer.getDuration() : 0 + }, + currentSrc: function() { + return this.source && this.source.src + }, + ended: function() { + return !!this.ytPlayer && this.lastState === YT.PlayerState.ENDED + }, + volume: function() { + return this.ytPlayer ? this.ytPlayer.getVolume() / 100 : 1 + }, + setVolume: function(t) { + this.ytPlayer && this.ytPlayer.setVolume(100 * t) + }, + muted: function() { + return !!this.ytPlayer && this.ytPlayer.isMuted() + }, + setMuted: function(t) { + this.ytPlayer && (this.muted(!0), t ? this.ytPlayer.mute() : this.ytPlayer.unMute(), this.setTimeout((function() { + this.trigger("volumechange") + }), 50)) + }, + buffered: function() { + if (!this.ytPlayer || !this.ytPlayer.getVideoLoadedFraction) return t.createTimeRange(); + var e = this.ytPlayer.getVideoLoadedFraction() * this.ytPlayer.getDuration(); + return t.createTimeRange(0, e) + }, + preload: function() {}, + load: function() {}, + reset: function() {}, + networkState: function() { + if (!this.ytPlayer) return 0; + switch (this.ytPlayer.getPlayerState()) { + case -1: + return 0; + case 3: + return 2; + default: + return 1 + } + }, + readyState: function() { + if (!this.ytPlayer) return 0; + switch (this.ytPlayer.getPlayerState()) { + case -1: + return 0; + case 5: + return 1; + case 3: + return 2; + default: + return 4 + } + }, + supportsFullScreen: function() { + return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled + }, + checkHighResPoster: function() { + var t = "https://img.youtube.com/vi/" + this.url.videoId + "/maxresdefault.jpg"; + try { + var e = new Image; + e.onload = function() { + if ("naturalHeight" in e) { + if (e.naturalHeight <= 90 || e.naturalWidth <= 120) return + } else if (e.height <= 90 || e.width <= 120) return; + this.poster_ = t, this.trigger("posterchange") + }.bind(this), e.onerror = function() {}, e.src = t + } catch (t) {} + } + }); + d.isSupported = function() { + return !0 + }, d.canPlaySource = function(t) { + return d.canPlayType(t.type) + }, d.canPlayType = function(t) { + return "video/youtube" === t + }, d.parseUrl = function(t) { + var e = { + videoId: null + }, + i = t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/); + i && 11 === i[2].length && (e.videoId = i[2]); + return (i = t.match(/[?&]list=([^#\&\?]+)/)) && i[1] && (e.listId = i[1]), e + }, d.apiReadyQueue = [], "undefined" != typeof document && (o = "https://www.youtube.com/iframe_api", r = function() { + YT.ready((function() { + d.isApiReady = !0; + for (var t = 0; t < d.apiReadyQueue.length; ++t) d.apiReadyQueue[t].initYTPlayer() + })) + }, n = !1, a = document.createElement("script"), (h = document.getElementsByTagName("script")[0]) && (h.parentNode.insertBefore(a, h), a.onload = function() { + n || (n = !0, r()) + }, a.onreadystatechange = function() { + n || "complete" !== this.readyState && "loaded" !== this.readyState || (n = !0, r()) + }, a.src = o), e = ".vjs-youtube .vjs-iframe-blocker { display: none; }.vjs-youtube.vjs-user-inactive .vjs-iframe-blocker { display: block; }.vjs-youtube .vjs-poster { background-size: cover; }.vjs-youtube-mobile .vjs-big-play-button { display: none; }", i = document.head || document.getElementsByTagName("head")[0], (s = document.createElement("style")).type = "text/css", s.styleSheet ? s.styleSheet.cssText = e : s.appendChild(document.createTextNode(e)), i.appendChild(s)), void 0 !== t.registerTech ? t.registerTech("Youtube", d) : t.registerComponent("Youtube", d) +})); diff --git a/js/videojs-bundle.min.js b/js/videojs-bundle.min.js new file mode 100644 index 0000000..abc8182 --- /dev/null +++ b/js/videojs-bundle.min.js @@ -0,0 +1,225 @@ +/** + * This script includes a bundle of videojs plugins designed for hooverhigh + * HooverHighVideoPlayer 2 + * Copyright oxmc. + */ + +/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).videojsErrors=o(e.videojs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=o(e),i="6.0.0";const n=t.default.getComponent("Flash"),r=!t.default.browser.IS_IPHONE,s=t.default.registerPlugin||t.default.plugin,d={header:"",code:"",message:"",timeout:45e3,backgroundTimeout:3e5,dismiss:r,errors:{1:{type:"MEDIA_ERR_ABORTED",headline:"The video download was cancelled"},2:{type:"MEDIA_ERR_NETWORK",headline:"The video connection was lost, please confirm you are connected to the internet"},3:{type:"MEDIA_ERR_DECODE",headline:"The video is bad or in a format that cannot be played on your browser"},4:{type:"MEDIA_ERR_SRC_NOT_SUPPORTED",headline:"This video is either unavailable or not supported in this browser"},5:{type:"MEDIA_ERR_ENCRYPTED",headline:"The video you are trying to watch is encrypted and we do not know how to decrypt it"},unknown:{type:"MEDIA_ERR_UNKNOWN",headline:"An unanticipated problem was encountered, check back soon and try again"},"-1":{type:"PLAYER_ERR_NO_SRC",headline:"No video has been loaded"},"-2":{type:"PLAYER_ERR_TIMEOUT",headline:"It looks like you're having playback issues. Reloading the video may help."},PLAYER_ERR_DOMAIN_RESTRICTED:{headline:"This video is restricted from playing on your current domain"},PLAYER_ERR_IP_RESTRICTED:{headline:"This video is restricted at your current IP address"},PLAYER_ERR_GEO_RESTRICTED:{headline:"This video is restricted from playing in your current geographic region"},FLASHLS_ERR_CROSS_DOMAIN:{headline:"The video could not be loaded: crossdomain access denied."}}},a=function(e,o){let r,s,l;const c=[],u=function(e){o.errors=t.default.mergeOptions(o.errors,e),Object.keys(o.errors).forEach((e=>{const t=o.errors[e];t.type||(t.type=e)}))};u();const f=function(){e.error()&&-2===e.error().code&&e.error(null),e.clearTimeout(s),e.clearTimeout(r),l&&(l=!1,e.removeClass("vjs-waiting"));const t=[1/0,-1],i=(e,o)=>-1!==e.indexOf(o);"hidden"===document.visibilityState&&(e.muted()||i(t,o.backgroundTimeout))||"visible"===document.visibilityState&&i(t,o.timeout)||(s=e.setTimeout((function(){e.error()||e.paused()||e.ended()||(l=!0,e.addClass("vjs-waiting"))}),1e3),r=e.setTimeout((function(){e.error()||e.paused()||e.ended()||e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"})}),"hidden"===document.visibilityState?o.backgroundTimeout:o.timeout))},h=function(){let o;for(;c.length;)o=c.shift(),e.off(o[0],o[1]);e.clearTimeout(r),e.clearTimeout(s)},p=function(){let o=0;h(),f(),function(o,t){const i=function(){if(!e.error()){const o=e.$(".vjs-tech");if(o&&"application/x-shockwave-flash"===o.type&&!o.vjs_getProperty)return void e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"});if(e.paused())return f();if(e.ended())return f()}t.call(this)};e.on(o,i),c.push([o,i])}(["timeupdate","adtimeupdate"],(function(){const t=e.currentTime();t!==o&&(o=t,f())})),e.off(document,"visibilitychange",p),e.on(document,"visibilitychange",p)},m=function(){e.currentSrc()||e.error({code:-1,type:"PLAYER_ERR_NO_SRC"})},v=function(){let i="",r=e.error();const s=document.createElement("div");let d="";if(!r)return;if(e.off(document,"visibilitychange",p),r=t.default.mergeOptions(r,o.errors[r.code||r.type||0]),r.message&&(i=`
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`),4===r.code&&n&&!n.isSupported()){i+=`${e.localize("If you are using an older browser please try upgrading or installing Flash.")}`}const a=e.getChild("errorDisplay");s.className="vjs-errors-dialog";const l=`
${this.localize("Error Code")}: ${r.type||r.code}
`,c=-2===r.code;d=`
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`;const u=a.closeable(!("dismiss"in r)||r.dismiss);if(c){d+=`
\n \n \n
`,s.innerHTML=d,a.fillWith(s),a.getChild("closeButton").hide();const o=a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"),t=a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child");e.on(o,"click",(function(){const o=e.currentSource();e.reset(),e.src(o)})),e.on(t,"click",(function(){a.close()})),a.one("modalclose",(()=>{e.off(o),e.off(t)}))}else if(u){d+=`
\n \n
`,s.innerHTML=d,a.fillWith(s),a.contentEl().firstChild.appendChild(a.getChild("closeButton").el());const o=a.el().querySelector(".vjs-errors-ok-button");e.on(o,"click",(function(){a.close()}))}else s.innerHTML=d,a.fillWith(s);(e.currentWidth()<=600||e.currentHeight()<=250)&&a.addClass("vjs-xs"),a.one("modalclose",(()=>e.error(null)))},y=function(){h(),e.removeClass("vjs-errors"),e.off("play",p),e.off(document,"visibilitychange",p),e.off("play",m),e.off("dispose",y),e.off(["aderror","error"],v)},R=function(o){y(),a(e,t.default.mergeOptions(d,o))};R.extend=e=>u(e),R.getAll=()=>t.default.mergeOptions(o.errors),R.timeout=function(t){if(void 0===t)return o.timeout;t!==o.timeout&&(o.timeout=t,e.paused()||p())},R.backgroundTimeout=function(t){if(void 0===t)return o.backgroundTimeout;t!==o.backgroundTimeout&&(o.backgroundTimeout=t,e.paused()||p())},R.disableProgress=()=>{},e.on("play",p),e.on("play",m),e.on("dispose",y),e.on(["aderror","contenterror","error"],v),e.ready((()=>{e.addClass("vjs-errors")})),e.paused()||p(),R.VERSION=i,e.errors=R},l=function(e){a(this,t.default.mergeOptions(d,e))};return["extend","getAll"].forEach((e=>{l[e]=function(){t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`)}})),l.VERSION=i,s("errors",l),l})); + +/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ +!function(e,t){if("undefined"!=typeof window&&window.videojs)t(window.videojs);else if("function"==typeof define&&define.amd)define("videojs-hotkeys",["video.js"],function(e){return t(e.default||e)});else if("undefined"!=typeof module&&module.exports){var n=require("video.js");module.exports=t(n.default||n)}}(0,function(x){"use strict";"undefined"!=typeof window&&(window.videojs_hotkeys={version:"0.2.28"});(x.registerPlugin||x.plugin)("hotkeys",function(m){var f=this,y=f.el(),v=document,e={volumeStep:.1,seekStep:5,enableMute:!0,enableVolumeScroll:!0,enableHoverScroll:!1,enableFullscreen:!0,enableNumbers:!0,enableJogStyle:!1,alwaysCaptureHotkeys:!1,captureDocumentHotkeys:!1,documentHotkeysFocusElementFilter:function(){return!1},enableModifiersForNumbers:!0,enableInactiveFocus:!0,skipInitialFocus:!1,playPauseKey:function(e){return 32===e.which||179===e.which},rewindKey:function(e){return 37===e.which||177===e.which},forwardKey:function(e){return 39===e.which||176===e.which},volumeUpKey:function(e){return 38===e.which},volumeDownKey:function(e){return 40===e.which},muteKey:function(e){return 77===e.which},fullscreenKey:function(e){return 70===e.which},customKeys:{}},t=x.mergeOptions||x.util.mergeOptions,d=(m=t(e,m||{})).volumeStep,n=m.seekStep,p=m.enableMute,o=m.enableVolumeScroll,r=m.enableHoverScroll,b=m.enableFullscreen,h=m.enableNumbers,w=m.enableJogStyle,k=m.alwaysCaptureHotkeys,S=m.captureDocumentHotkeys,K=m.documentHotkeysFocusElementFilter,F=m.enableModifiersForNumbers,u=m.enableInactiveFocus,l=m.skipInitialFocus,i=x.VERSION;y.hasAttribute("tabIndex")||y.setAttribute("tabIndex","-1"),y.style.outline="none",!k&&f.autoplay()||l||f.one("play",function(){y.focus()}),u&&f.on("userinactive",function(){var n=function(){clearTimeout(e)},e=setTimeout(function(){f.off("useractive",n);var e=v.activeElement,t=y.querySelector(".vjs-control-bar");e&&e.parentElement==t&&y.focus()},10);f.one("useractive",n)}),f.on("play",function(){var e=y.querySelector(".iframeblocker");e&&""===e.style.display&&(e.style.display="block",e.style.bottom="39px")});var c=function(e){var t,n,o=e.which,r=e.preventDefault.bind(e),u=f.duration();if(f.controls()){var l=v.activeElement;if(k||S&&K(l)||l==y||l==y.querySelector(".vjs-tech")||l==y.querySelector(".vjs-control-bar")||l==y.querySelector(".iframeblocker"))switch(j(e,f)){case 1:r(),(k||S)&&e.stopPropagation(),f.paused()?E(f.play()):f.pause();break;case 2:t=!f.paused(),r(),t&&f.pause(),(n=f.currentTime()-T(e))<=0&&(n=0),f.currentTime(n),t&&E(f.play());break;case 3:t=!f.paused(),r(),t&&f.pause(),u<=(n=f.currentTime()+T(e))&&(n=t?u-.001:u),f.currentTime(n),t&&E(f.play());break;case 5:r(),w?(n=f.currentTime()-1,f.currentTime()<=1&&(n=0),f.currentTime(n)):f.volume(f.volume()-d);break;case 4:r(),w?(u<=(n=f.currentTime()+1)&&(n=u),f.currentTime(n)):f.volume(f.volume()+d);break;case 6:p&&f.muted(!f.muted());break;case 7:b&&(f.isFullscreen()?f.exitFullscreen():f.requestFullscreen());break;default:if((47 "+n.constructor._getName());for(var a=arguments.length,o=new Array(a>1?a-1:0),r=1;r0?t.currentTime()-t.seekable().end(0):t.currentTime();var a=t.$(".vjs-tech"),o=t.textTracks?t.textTracks():[],r=[],i={ended:t.ended(),currentSrc:t.currentSrc(),sources:t.currentSources(),src:t.tech_.src(),currentTime:n,type:t.currentType()};a&&(i.style=a.getAttribute("style"));for(var s=0;s0?t.seekable().end(0)+a.currentTime:t.currentTime(),t.currentTime(n)),t.paused()){var o=t.play();o&&o.catch&&o.catch(function(t){e.log.warn("Play promise rejected in IOS snapshot resume",t)})}}else if(a.ended)t.currentTime(t.duration());else{t.currentTime(a.currentTime);var r=t.play();r&&r.catch&&r.catch(function(t){e.log.warn("Play promise rejected in snapshot resume",t)})}t.ads.shouldRemoveAutoplay_&&(t.autoplay(!1),t.ads.shouldRemoveAutoplay_=!1)},u=function n(){if(t.off("contentcanplay",n),L&&t.clearTimeout(L),(r=t.el().querySelector(".vjs-tech")).readyState>1)return l();if(void 0===r.seekable)return l();if(r.seekable.length>0)return l();if(i--)t.setTimeout(n,50);else try{l()}catch(t){e.log.warn("Failed to resume the content after an advertisement",t)}};if("style"in a&&r.setAttribute("style",a.style||""),t.ads.videoElementRecycled())t.one("resumeended",function(){delete t.ads.snapshot,n()}),t.one("contentloadedmetadata",d),e.browser.IS_IOS&&!t.autoplay()&&(t.autoplay(!0),t.ads.shouldRemoveAutoplay_=!0),t.src(a.sources),t.one("contentcanplay",u),L=t.setTimeout(u,2e3);else{if(d(),!t.ended()){var c=t.play();c&&c.catch&&c.catch(function(t){e.log.warn("Play promise rejected in snapshot restore",t)})}delete t.ads.snapshot,n()}}(t,n):(t.volume(t.ads.preAdVolume_),n())}},j=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Preroll"};var a=n.prototype;return a.init=function(e,t,n){if(this.waitingForAdBreak=!0,e.addClass("vjs-ad-loading"),n||e.ads.nopreroll_)return this.resumeAfterNoPreroll(e);var a=e.ads.settings.timeout;"number"==typeof e.ads.settings.prerollTimeout&&(a=e.ads.settings.prerollTimeout),this._timeout=e.setTimeout(function(){e.trigger("adtimeout")},a),t?this.handleAdsReady():this.adsReady=!1},a.onAdsReady=function(t){t.ads.inAdBreak()?e.log.warn("Unexpected adsready event (Preroll)"):(t.ads.debug("Received adsready event (Preroll)"),this.handleAdsReady())},a.handleAdsReady=function(){this.adsReady=!0,this.readyForPreroll()},a.afterLoadStart=function(e){var t=this.player;t.ads._hasThereBeenALoadStartDuringPlayerLife?e():(t.ads.debug("Waiting for loadstart..."),t.one("loadstart",function(){t.ads.debug("Received loadstart event"),e()}))},a.noPreroll=function(){var e=this;this.afterLoadStart(function(){e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"),e.resumeAfterNoPreroll(e.player)})},a.readyForPreroll=function(){var e=this.player;this.afterLoadStart(function(){e.ads.debug("Triggered readyforpreroll event (Preroll)"),e.trigger("readyforpreroll")})},a.onAdsCanceled=function(e){var t=this;e.ads.debug("adscanceled (Preroll)"),this.afterLoadStart(function(){t.resumeAfterNoPreroll(e)})},a.onAdsError=function(t){var n=this;e.log("adserror (Preroll)"),this.inAdBreak()?t.ads.endLinearAdMode():this.afterLoadStart(function(){n.resumeAfterNoPreroll(t)})},a.startLinearAdMode=function(){var t=this.player;!this.adsReady||t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Preroll)"):(this.clearTimeout(t),t.ads.adType="preroll",this.waitingForAdBreak=!1,M.start(t),t.ads._shouldBlockPlay=!1)},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(e.removeClass("vjs-ad-loading"),e.addClass("vjs-ad-content-resuming"),this.contentResuming=!0,M.end(e))},a.skipLinearAdMode=function(){var t=this,n=this.player;n.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):this.afterLoadStart(function(){n.trigger("adskip"),n.ads.debug("skipLinearAdMode (Preroll)"),t.resumeAfterNoPreroll(n)})},a.onAdTimeout=function(e){var t=this;this.afterLoadStart(function(){e.ads.debug("adtimeout (Preroll)"),t.resumeAfterNoPreroll(e)})},a.onNoPreroll=function(t){t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected nopreroll event (Preroll)"):this.noPreroll()},a.resumeAfterNoPreroll=function(e){if(this.contentResuming=!0,e.ads._shouldBlockPlay=!1,this.cleanupPartial(e),e.ads._playRequested||e.ads._pausedOnContentupdate)if(e.paused()){e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)");var t=e.play();t&&t.then&&t.then(null,function(e){})}else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"),e.trigger("play"),e.trigger("playing")},a.cleanup=function(t){t.ads._hasThereBeenALoadStartDuringPlayerLife||e.log.warn("Leaving Preroll state before loadstart event can cause issues."),this.cleanupPartial(t)},a.cleanupPartial=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming"),this.clearTimeout(e)},a.clearTimeout=function(e){e.clearTimeout(this._timeout),this._timeout=null},n}(k.getState("AdState"));k.registerState("Preroll",j);var I=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"BeforePreroll"};var n=t.prototype;return n.init=function(e){this.adsReady=!1,this.shouldResumeToContent=!1,e.ads._shouldBlockPlay=!e.ads.settings.allowVjsAutoplay||!e.autoplay()},n.onAdsReady=function(e){e.ads.debug("Received adsready event (BeforePreroll)"),this.adsReady=!0},n.onPlay=function(e){var t=k.getState("Preroll");e.ads.debug("Received play event (BeforePreroll)"),this.transitionTo(t,this.adsReady,this.shouldResumeToContent)},n.onAdsCanceled=function(e){e.ads.debug("adscanceled (BeforePreroll)"),this.shouldResumeToContent=!0},n.onAdsError=function(){this.player.ads.debug("adserror (BeforePreroll)"),this.shouldResumeToContent=!0},n.onNoPreroll=function(){this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"),this.shouldResumeToContent=!0},n.skipLinearAdMode=function(){var e=this.player;e.trigger("adskip"),e.ads.debug("skipLinearAdMode (BeforePreroll)"),this.shouldResumeToContent=!0},n.onContentChanged=function(){this.init(this.player)},t}(k.getState("ContentState"));k.registerState("BeforePreroll",I);var N=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"Midroll"};var n=t.prototype;return n.init=function(e){e.ads.adType="midroll",M.start(e),e.addClass("vjs-ad-loading")},n.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},n.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(this.contentResuming=!0,e.addClass("vjs-ad-content-resuming"),e.removeClass("vjs-ad-loading"),M.end(e))},n.onAdsError=function(e){this.inAdBreak()&&e.ads.endLinearAdMode()},n.cleanup=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming")},t}(k.getState("AdState"));k.registerState("Midroll",N);var E=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Postroll"};var a=n.prototype;return a.init=function(e){if(this.waitingForAdBreak=!0,e.ads._contentEnding=!0,e.ads.nopostroll_){this.resumeContent(e);var t=k.getState("AdsDone");this.transitionTo(t)}else{e.addClass("vjs-ad-loading");var n=e.ads.settings.timeout;"number"==typeof e.ads.settings.postrollTimeout&&(n=e.ads.settings.postrollTimeout),this._postrollTimeout=e.setTimeout(function(){e.trigger("adtimeout")},n)}},a.startLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Postroll)"):(t.ads.adType="postroll",t.clearTimeout(this._postrollTimeout),this.waitingForAdBreak=!1,M.start(t))},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this,t=this.player,n=k.getState("AdsDone");this.inAdBreak()&&(t.removeClass("vjs-ad-loading"),this.resumeContent(t),M.end(t,function(){e.transitionTo(n)}))},a.skipLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):(t.ads.debug("Postroll abort (skipLinearAdMode)"),t.trigger("adskip"),this.abort(t))},a.onAdTimeout=function(e){e.ads.debug("Postroll abort (adtimeout)"),this.abort(e)},a.onAdsError=function(e){e.ads.debug("Postroll abort (adserror)"),e.ads.inAdBreak()?e.ads.endLinearAdMode():this.abort(e)},a.onContentChanged=function(e){if(this.isContentResuming()){var t=k.getState("BeforePreroll");this.transitionTo(t)}else if(!this.inAdBreak()){var n=k.getState("Preroll");this.transitionTo(n)}},a.onNoPostroll=function(t){this.isContentResuming()||this.inAdBreak()?e.log.warn("Unexpected nopostroll event (Postroll)"):this.abort(t)},a.resumeContent=function(e){this.contentResuming=!0,e.addClass("vjs-ad-content-resuming")},a.abort=function(e){var t=k.getState("AdsDone");this.resumeContent(e),e.removeClass("vjs-ad-loading"),this.transitionTo(t)},a.cleanup=function(e){e.removeClass("vjs-ad-content-resuming"),e.clearTimeout(this._postrollTimeout),e.ads._contentEnding=!1},n}(k.getState("AdState"));k.registerState("Postroll",E);var x=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"ContentPlayback"};var n=t.prototype;return n.init=function(e){e.ads._shouldBlockPlay=!1},n.onAdsReady=function(e){e.ads.debug("Received adsready event (ContentPlayback)"),e.ads.nopreroll_||(e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"),e.trigger("readyforpreroll"))},n.onReadyForPostroll=function(e){var t=k.getState("Postroll");e.ads.debug("Received readyforpostroll event"),this.transitionTo(t)},n.startLinearAdMode=function(){var e=k.getState("Midroll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("ContentPlayback",x);var D=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedContentPlayback"};var n=t.prototype;return n.init=function(){this.player.ads._shouldBlockPlay=!1},n.onContentChanged=function(){this.player.ads.debug("Received contentchanged event ("+this.constructor._getName()+")")},n.startLinearAdMode=function(){var e=k.getState("StitchedAdRoll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("StitchedContentPlayback",D);var O=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedAdRoll"};var n=t.prototype;return n.init=function(){this.waitingForAdBreak=!1,this.contentResuming=!1,this.player.ads.adType="stitched",M.start(this.player)},n.onPlaying=function(){},n.onContentResumed=function(){},n.onAdEnded=function(){this.endLinearAdMode(),this.player.trigger("ended")},n.endLinearAdMode=function(){var e=k.getState("StitchedContentPlayback");M.end(this.player),this.transitionTo(e)},t}(k.getState("AdState"));k.registerState("StitchedAdRoll",O);var F=A.isMiddlewareMediatorSupported,U=e.getTech("Html5").Events,V={timeout:5e3,prerollTimeout:void 0,postrollTimeout:void 0,debug:!1,stitchedAds:!1,contentIsLive:void 0,liveCuePoints:!0,allowVjsAutoplay:e.options.normalizeAutoplay||!1},q=function(o){var r=this,i=e.mergeOptions(V,o),s=[];U.concat(["firstplay","loadedalldata"]).forEach(function(e){-1===s.indexOf(e)&&s.push(e)}),r.on(s,u),F()||function(t,n){n&&e.log("Using cancelContentPlay to block content playback"),t.on("play",m)}(r,i.debug),r.setTimeout(function(){r.ads._hasThereBeenALoadStartDuringPlayerLife||""===r.src()||e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html")},5e3),r.on("ended",function(){r.hasClass("vjs-has-started")||r.addClass("vjs-has-started")}),r.on("contenttimeupdate",function(){r.removeClass("vjs-waiting")}),r.on(["addurationchange","adcanplay"],function(){if(!r.ads.settings.stitchedAds&&!r.hasStarted()&&(!r.ads.snapshot||r.currentSrc()!==r.ads.snapshot.currentSrc)&&r.ads.inAdBreak()){var t=r.play();t&&t.catch&&t.catch(function(t){e.log.warn("Play promise rejected when playing ad",t)})}}),r.on("nopreroll",function(){r.ads.debug("Received nopreroll event"),r.ads.nopreroll_=!0}),r.on("nopostroll",function(){r.ads.debug("Received nopostroll event"),r.ads.nopostroll_=!0}),r.on("playing",function(){r.ads._cancelledPlay=!1,r.ads._pausedOnContentupdate=!1}),r.on("play",function(){r.ads._playRequested=!0}),r.one("loadstart",function(){r.ads._hasThereBeenALoadStartDuringPlayerLife=!0}),r.on("loadeddata",function(){r.ads._hasThereBeenALoadedData=!0}),r.on("loadedmetadata",function(){r.ads._hasThereBeenALoadedMetaData=!0}),r.ads=function(t){return{disableNextSnapshotRestore:!1,_contentEnding:!1,_contentHasEnded:!1,_hasThereBeenALoadStartDuringPlayerLife:!1,_hasThereBeenALoadedData:!1,_hasThereBeenALoadedMetaData:!1,_inLinearAdMode:!1,_shouldBlockPlay:!1,_playBlocked:!1,_playRequested:!1,adType:null,VERSION:a,reset:function(){t.ads.disableNextSnapshotRestore=!1,t.ads._contentEnding=!1,t.ads._contentHasEnded=!1,t.ads.snapshot=null,t.ads.adType=null,t.ads._hasThereBeenALoadedData=!1,t.ads._hasThereBeenALoadedMetaData=!1,t.ads._cancelledPlay=!1,t.ads._shouldBlockPlay=!1,t.ads._playBlocked=!1,t.ads.nopreroll_=!1,t.ads.nopostroll_=!1,t.ads._playRequested=!1},startLinearAdMode:function(){t.ads._state.startLinearAdMode()},endLinearAdMode:function(){t.ads._state.endLinearAdMode()},skipLinearAdMode:function(){t.ads._state.skipLinearAdMode()},stitchedAds:function(t){return void 0!==t&&(e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."),this.settings.stitchedAds=!!t),this.settings.stitchedAds},videoElementRecycled:function(){if(t.ads.shouldPlayContentBehindAd(t))return!1;if(!this.snapshot)throw new Error("You cannot use videoElementRecycled while there is no snapshot.");var e=t.tech_.src()!==this.snapshot.src,n=t.currentSrc()!==this.snapshot.currentSrc;return e||n},isLive:function(n){return void 0===n&&(n=t),"boolean"==typeof n.ads.settings.contentIsLive?n.ads.settings.contentIsLive:n.duration()===1/0||"8"===e.browser.IOS_VERSION&&0===n.duration()},shouldPlayContentBehindAd:function(n){if(void 0===n&&(n=t),n)return!!n.ads.settings.liveCuePoints&&!e.browser.IS_IOS&&!e.browser.IS_ANDROID&&n.duration()===1/0;throw new Error("shouldPlayContentBehindAd requires a player as a param")},shouldTakeSnapshots:function(e){return void 0===e&&(e=t),!this.shouldPlayContentBehindAd(e)&&!this.stitchedAds()},isInAdMode:function(){return this._state.isAdState()},isWaitingForAdBreak:function(){return this._state.isWaitingForAdBreak()},isContentResuming:function(){return this._state.isContentResuming()},isAdPlaying:function(){return this._state.inAdBreak()},inAdBreak:function(){return this._state.inAdBreak()},removeNativePoster:function(){var e=t.$(".vjs-tech");e&&e.removeAttribute("poster")},debug:function(){if(this.settings.debug){for(var t=arguments.length,n=new Array(t),a=0;a=n:n===e},i.show=function(){return t.prototype.show.call(this),this.isVisible=!0,this.off(this.player(),this.startEvent_,this.startListener_),this.debug("shown"),this.debug('unbound `startListener_` from "'+this.startEvent_+'"'),u(this.options_.start)&&(this.player().paused()&&0!==this.options_.start||this.player().trigger("show-overlay",{id:this.options_.cta_id,align:this.options_.align})),this.endEvent_&&(this.debug('bound `endListener_` to "'+this.endEvent_+'"'),this.on(this.player(),this.endEvent_,this.endListener_)),this},i.shouldShow_=function(t,e){var n=this.options_.start,i=this.options_.end;return u(n)?u(i)?t>=n&&t=n):n===e},i.startListener_=function(t){var e=this.player().currentTime();this.shouldShow_(e,t.type)&&this.show()},i.endListener_=function(t){var e=this.player().currentTime();this.shouldHide_(e,t.type)&&this.hide()},i.rewindListener_=function(t){var e=this.player().currentTime(),n=this.previousTime_,i=this.options_.start,o=this.options_.end;e + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):t.videojsShare=e(t.videojs)}(this,function(t){"use strict";function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}function i(){}function o(t,e){for(;t&&t.nodeType!==G;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}function r(t,e,n,i,o){var r=l.apply(this,arguments);return t.addEventListener(n,r,o),{destroy:function(){t.removeEventListener(n,r,o)}}}function a(t,e,n,i,o){return"function"==typeof t.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return r(t,e,n,i,o)}))}function l(t,e,n,i){return function(n){n.delegateTarget=K(n.target,e),n.delegateTarget&&i.call(t,n)}}function s(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!X.string(e))throw new TypeError("Second argument must be a String");if(!X.fn(n))throw new TypeError("Third argument must be a Function");if(X.node(t))return c(t,e,n);if(X.nodeList(t))return u(t,e,n);if(X.string(t))return h(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function u(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function h(t,e,n){return Q(document.body,t,e,n)}function d(t){return Object.keys(t).filter(function(e){return void 0!==t[e]&&""!==t[e]}).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}function f(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var o=d({app_id:e,display:"popup",redirect_uri:i,link:n});return window.open("https://www.facebook.com/dialog/feed?"+o,"_blank",tt)}function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.hashtag,o=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var r=d({app_id:e,display:"popup",redirect_uri:o,href:n,hashtag:i});return window.open("https://www.facebook.com/dialog/share?"+r,"_blank",tt)}function v(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url;if(!t)throw new Error("url is not defined");var e=d({kid_directed_site:"0",sdk:"joey",u:t,display:"popup",ref:"plugin",src:"share_button"});return window.open("https://www.facebook.com/sharer/sharer.php?"+e,"_blank",tt)}function g(){var t=d({url:(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url});return window.open("https://plus.google.com/share?"+t,"_blank",tt)}function w(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({share_url:t.url,title:t.title,description:t.description,imageurl:t.image});return window.open("http://connect.mail.ru/share?"+e,"_blank",tt)}function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.description,o=(n||"")+"\r\n"+(i||"")+"\r\n"+(e||""),r="mailto:?body="+encodeURIComponent(o);return window.location.assign(r)}function y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({"st.cmd":"addShare","st._surl":t.url,title:t.title});return window.open("https://ok.ru/dk?"+e,"_blank",tt)}function b(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,text:t.title});return window.open("https://t.me/share/url?"+e,"_blank",tt)}function k(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=t.hashtags,o=d({text:e,url:n,hashtags:(void 0===i?[]:i).join(",")});return window.open("https://twitter.com/intent/tweet?"+o,"_blank",tt)}function _(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,title:t.title});return window.open("https://www.reddit.com/submit?"+e,"_blank",tt)}function C(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.description,n=d({url:t.url,description:e,media:t.media});return window.open("https://pinterest.com/pin/create/button/?"+n,"_blank",tt)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.caption,o=t.tags,r=void 0===o?[]:o,a=t.posttype,l=void 0===a?"link":a,s=d({canonicalUrl:e,title:n,caption:i,tags:r.join(","),posttype:l});return window.open("https://www.tumblr.com/widgets/share/tool?"+s,"_blank",tt)}function E(){return!!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/)}function S(t){return E()?window.open(t):window.location.assign(t)}function j(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title;if(!e&&!n)throw new Error("url and title not specified");return S("viber://forward?"+d({text:[n,e].filter(function(t){return t}).join(" ")}))}function F(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.image,i=t.isVkParse,o=t.description,r=t.title;o&&o.length>et&&(o=o.substr(0,et)+"..."),r&&r.length>et&&(r=r.substr(0,et)+"...");return"https://vk.com/share.php?"+d(i?{url:e}:{url:e,title:r,description:o,image:n,noparse:!0})}function A(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return window.open(F(t),"_blank",tt)}function T(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.phone,n=d({text:[t.title,t.url].filter(function(t){return t}).join(" "),phone:e});return window.open("https://api.whatsapp.com/send?"+n,"_blank",tt)}function z(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=d({title:e,summary:t.description,url:n});return window.open("https://www.linkedin.com/shareArticle?mini=true&"+i,"_blank",tt)}function M(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url;if(!e)throw new Error("fbAppId is not defined");var i=d({app_id:e,link:n});return window.location.assign("fb-messenger://share?"+i)}function O(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url;if(!n)throw new Error("url is not defined");var i=encodeURIComponent(""+n);return e&&(i=""+encodeURIComponent(e+" ")+i),window.open("https://line.me/R/msg/text/?"+i,"_blank",tt)}function L(){return"ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0}function V(){return/Android/.test(window.navigator.userAgent)||/iP(hone|ad|od)/i.test(window.navigator.userAgent)}function H(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?V()?t:t.filter(function(t){return!it.includes(t)}):t}t=t&&t.hasOwnProperty("default")?t.default:t;var I=function(){return"undefined"==typeof window?"":window.location.href}(),P={mobileVerification:!0,title:"Video",url:I,socials:["fbFeed","tw","reddit","gp","messenger","linkedin","vk","ok","mail","email","telegram","whatsapp","viber"],embedCode:function(){return""}(),redirectUri:function(){return I+"#close_window"}()},R=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},U=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})});i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,h.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(u.default);t.exports=p})})),tt="scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0",et=80,nt=(Object.freeze||Object)({fbFeed:f,fbShare:p,fbButton:v,gp:g,mail:w,email:m,ok:y,telegram:b,tw:k,reddit:_,pinterest:C,tumblr:x,viber:j,getVkUrl:F,vk:A,whatsapp:T,linkedin:z,messenger:M,line:O}),it=["whatsapp","viber","messenger"],ot={fbFeed:'\n \n\n',tw:'\n \n\n',reddit:'\n \n\n',gp:'\n \n\n',messenger:'\n \n \n\n',linkedin:'\n \n\n',vk:'\n \n\n',ok:'\n \n\n',mail:'\n \n\n',email:'\n \n\n',telegram:'\n \n\n',whatsapp:'\n \n\n',viber:'\n \n\n'},rt=function(){function t(e,n){R(this,t),this.player=e,this.options=n,this.socials=H(n.socials,n.mobileVerification),this.copyBtnTextClass="vjs-share__btn-text",this.socialBtnClass="vjs-share__social",this._createContent(),this._initToggle(),this._initClipboard(),this._initSharing()}return t.prototype.getContent=function(){return this.content},t.prototype._createContent=function(){var t='\n \n \n \n '+this.player.localize("Copy")+"\n ",e=document.createElement("div"),n="";this.options.embedCode&&(n='\n \n "),e.innerHTML='
\n \n\n
\n \n \n\n "+n+'\n
\n\n
\n
\n '+this._getSocialItems().join("")+"\n
\n
\n
",this.content=e.firstChild},t.prototype._initClipboard=function(){var t=this;new $(".vjs-share__btn",{target:function(t){return t.previousElementSibling}}).on("success",function(e){var n=e.trigger.querySelector("."+t.copyBtnTextClass),i=function(){n.innerText=t.player.localize("Copy"),e.clearSelection()};n.innerText=t.player.localize("Copied"),L()?setTimeout(i,1e3):n.parentElement.addEventListener("mouseleave",function(){setTimeout(i,300)})})},t.prototype._initSharing=function(){var t=this,e=this.content.querySelectorAll("."+this.socialBtnClass);Array.from(e).forEach(function(e){e.addEventListener("click",function(e){var n=e.currentTarget.getAttribute("data-social"),i=nt[n];"function"==typeof i&&i(t.socialOptions)})})},t.prototype._initToggle=function(){var t=this.content.querySelector(".vjs-share__socials");this.socials.length>10||window.innerWidth<=180&&this.socials.length>6?t.style.height="calc((2em + 5px) * 2)":t.classList.add("horizontal")},t.prototype._getSocialItems=function(){var t=[];return this.socials.forEach(function(e){ot[e]&&t.push('\n \n ")}),t},U(t,[{key:"socialOptions",get:function(){var t=this.options;return{url:t.url,title:t.title,description:t.description,image:t.image,fbAppId:t.fbAppId,isVkParse:t.isVkParse,redirectUri:t.redirectUri}}}]),t}(),at=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.playerClassName="vjs-videojs-share_open",o}return N(e,t),e.prototype.open=function(){var e=this.player();e.addClass(this.playerClassName),t.prototype.open.call(this),e.trigger("sharing:opened")},e.prototype.close=function(){var e=this.player();e.removeClass(this.playerClassName),t.prototype.close.call(this),e.trigger("sharing:closed")},e}(t.getComponent("ModalDialog")),lt=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.player=n,o.options=i,o}return N(e,t),e.prototype._createModal=function(){var t=new rt(this.player,this.options).getContent();this.modal=new at(this.player,{content:t,temporary:!0}),this.el=this.modal.contentEl(),this.player.addChild(this.modal)},e.prototype.open=function(){this._createModal(),this.modal.open()},e}(t.getComponent("Component")),st=function(e){function n(i,o){R(this,n);var r=B(this,e.call(this,i));return r.options=t.mergeOptions(P,o),r.player.ready(function(){r.player.addClass("vjs-share"),i.addClass("vjs-videojs-share"),i.getChild("controlBar").addChild("ShareButton",o),i.addChild("ShareOverlay",o)}),r}return N(n,e),n}(t.getPlugin("plugin"));return st.defaultState={},st.VERSION="3.2.1",t.registerComponent("ShareButton",q),t.registerComponent("ShareOverlay",lt),t.registerPlugin("share",st),st}); + +/** + * videojs-watermark + * @version 2.0.0 + * @copyright 2017 Brooks Lyrette + * @license Apache-2.0 + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.videojsWatermark=e()}}(function(){return function e(n,t,i){function o(d,a){if(!t[d]){if(!n[d]){var f="function"==typeof require&&require;if(!a&&f)return f(d,!0);if(r)return r(d,!0);var u=new Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var l=t[d]={exports:{}};n[d][0].call(l.exports,function(e){var t=n[d][1][e];return o(t||e)},l,l.exports,e,n,t,i)}return t[d].exports}for(var r="function"==typeof require&&require,d=0;dt.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),i.push(null,null);break}r||(r=t.getParameter(t.ACTIVE_TEXTURE)),t.activeTexture(l),i.push(t.getParameter(s),null);break;case t.ACTIVE_TEXTURE:r=t.getParameter(t.ACTIVE_TEXTURE),i.push(null);break;default:i.push(t.getParameter(s))}for(n(t),o=0;ot.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_2D,a);break;case t.TEXTURE_BINDING_CUBE_MAP:var l;if((l=e[++o])t.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_CUBE_MAP,a);break;case t.VIEWPORT:t.viewport(a[0],a[1],a[2],a[3]);break;case t.BLEND:case t.CULL_FACE:case t.DEPTH_TEST:case t.SCISSOR_TEST:case t.STENCIL_TEST:a?t.enable(s):t.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}r&&t.activeTexture(r)}}else n(t)},R=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),C=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function P(t,e,n,i){this.gl=t,this.cardboardUI=e,this.bufferScale=n,this.dirtySubmitFrameBindings=i,this.ctxAttribs=t.getContextAttributes(),this.instanceExt=t.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=t.drawingBufferWidth,this.bufferHeight=t.drawingBufferHeight,this.realBindFramebuffer=t.bindFramebuffer,this.realEnable=t.enable,this.realDisable=t.disable,this.realColorMask=t.colorMask,this.realClearColor=t.clearColor,this.realViewport=t.viewport,a()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=A(t,R,C,this.attribs),this.uniforms=x(t,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.indexCount=0,this.renderTarget=t.createTexture(),this.framebuffer=t.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=t.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=t.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=t.createRenderbuffer()),this.patch(),this.onResize()}P.prototype.destroy=function(){var t=this.gl;this.unpatch(),t.deleteProgram(this.program),t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer),t.deleteTexture(this.renderTarget),t.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&t.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&t.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&t.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},P.prototype.onResize=function(){var t=this.gl,e=this,n=[t.RENDERBUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0];L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.framebuffer),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.texImage2D(t.TEXTURE_2D,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,e.bufferWidth,e.bufferHeight,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.renderTarget,0),e.ctxAttribs.depth&&e.ctxAttribs.stencil?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthStencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e.depthStencilBuffer)):e.ctxAttribs.depth?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e.depthBuffer)):e.ctxAttribs.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,e.stencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.STENCIL_INDEX8,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.STENCIL_ATTACHMENT,t.RENDERBUFFER,e.stencilBuffer)),!t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),e.realClearColor.apply(t,e.clearColor)})),this.cardboardUI&&this.cardboardUI.onResize()},P.prototype.patch=function(){if(!this.isPatched){var t=this,e=this.gl.canvas,n=this.gl;a()||(e.width=g()*this.bufferScale,e.height=v()*this.bufferScale,Object.defineProperty(e,"width",{configurable:!0,enumerable:!0,get:function(){return t.bufferWidth},set:function(n){t.bufferWidth=n,t.realCanvasWidth.set.call(e,n),t.onResize()}}),Object.defineProperty(e,"height",{configurable:!0,enumerable:!0,get:function(){return t.bufferHeight},set:function(n){t.bufferHeight=n,t.realCanvasHeight.set.call(e,n),t.onResize()}})),this.lastBoundFramebuffer=n.getParameter(n.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(n.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(e,i){t.lastBoundFramebuffer=i||t.framebuffer,t.realBindFramebuffer.call(n,e,t.lastBoundFramebuffer)},this.cullFace=n.getParameter(n.CULL_FACE),this.depthTest=n.getParameter(n.DEPTH_TEST),this.blend=n.getParameter(n.BLEND),this.scissorTest=n.getParameter(n.SCISSOR_TEST),this.stencilTest=n.getParameter(n.STENCIL_TEST),n.enable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!0;break;case n.DEPTH_TEST:t.depthTest=!0;break;case n.BLEND:t.blend=!0;break;case n.SCISSOR_TEST:t.scissorTest=!0;break;case n.STENCIL_TEST:t.stencilTest=!0}t.realEnable.call(n,e)},n.disable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!1;break;case n.DEPTH_TEST:t.depthTest=!1;break;case n.BLEND:t.blend=!1;break;case n.SCISSOR_TEST:t.scissorTest=!1;break;case n.STENCIL_TEST:t.stencilTest=!1}t.realDisable.call(n,e)},this.colorMask=n.getParameter(n.COLOR_WRITEMASK),n.colorMask=function(e,i,r,o){t.colorMask[0]=e,t.colorMask[1]=i,t.colorMask[2]=r,t.colorMask[3]=o,t.realColorMask.call(n,e,i,r,o)},this.clearColor=n.getParameter(n.COLOR_CLEAR_VALUE),n.clearColor=function(e,i,r,o){t.clearColor[0]=e,t.clearColor[1]=i,t.clearColor[2]=r,t.clearColor[3]=o,t.realClearColor.call(n,e,i,r,o)},this.viewport=n.getParameter(n.VIEWPORT),n.viewport=function(e,i,r,o){t.viewport[0]=e,t.viewport[1]=i,t.viewport[2]=r,t.viewport[3]=o,t.realViewport.call(n,e,i,r,o)},this.isPatched=!0,w(e)}},P.prototype.unpatch=function(){if(this.isPatched){var t=this.gl,e=this.gl.canvas;a()||(Object.defineProperty(e,"width",this.realCanvasWidth),Object.defineProperty(e,"height",this.realCanvasHeight)),e.width=this.bufferWidth,e.height=this.bufferHeight,t.bindFramebuffer=this.realBindFramebuffer,t.enable=this.realEnable,t.disable=this.realDisable,t.colorMask=this.realColorMask,t.clearColor=this.realClearColor,t.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&t.bindFramebuffer(t.FRAMEBUFFER,null),this.isPatched=!1,setTimeout((function(){w(e)}),1)}},P.prototype.setTextureBounds=function(t,e){t||(t=[0,0,.5,1]),e||(e=[.5,0,.5,1]),this.viewportOffsetScale[0]=t[0],this.viewportOffsetScale[1]=t[1],this.viewportOffsetScale[2]=t[2],this.viewportOffsetScale[3]=t[3],this.viewportOffsetScale[4]=e[0],this.viewportOffsetScale[5]=e[1],this.viewportOffsetScale[6]=e[2],this.viewportOffsetScale[7]=e[3]},P.prototype.submitFrame=function(){var t=this.gl,e=this,n=[];if(this.dirtySubmitFrameBindings||n.push(t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0),L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null);var n=0,i=0;e.instanceExt&&(n=t.getVertexAttrib(e.attribs.position,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),i=t.getVertexAttrib(e.attribs.texCoord,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),e.cullFace&&e.realDisable.call(t,t.CULL_FACE),e.depthTest&&e.realDisable.call(t,t.DEPTH_TEST),e.blend&&e.realDisable.call(t,t.BLEND),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realDisable.call(t,t.STENCIL_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),(e.ctxAttribs.alpha||a())&&(e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)),t.useProgram(e.program),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.enableVertexAttribArray(e.attribs.position),t.enableVertexAttribArray(e.attribs.texCoord),t.vertexAttribPointer(e.attribs.position,2,t.FLOAT,!1,20,0),t.vertexAttribPointer(e.attribs.texCoord,3,t.FLOAT,!1,20,8),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,0),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,0)),t.activeTexture(t.TEXTURE0),t.uniform1i(e.uniforms.diffuse,0),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.uniform4fv(e.uniforms.viewportOffsetScale,e.viewportOffsetScale),t.drawElements(t.TRIANGLES,e.indexCount,t.UNSIGNED_SHORT,0),e.cardboardUI&&e.cardboardUI.renderNoState(),e.realBindFramebuffer.call(e.gl,t.FRAMEBUFFER,e.framebuffer),e.ctxAttribs.preserveDrawingBuffer||(e.realClearColor.call(t,0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)),e.dirtySubmitFrameBindings||e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.cullFace&&e.realEnable.call(t,t.CULL_FACE),e.depthTest&&e.realEnable.call(t,t.DEPTH_TEST),e.blend&&e.realEnable.call(t,t.BLEND),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realEnable.call(t,t.STENCIL_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),!e.ctxAttribs.alpha&&e.ctxAttribs.preserveDrawingBuffer||e.realClearColor.apply(t,e.clearColor),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,n),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,i))})),a()){var i=t.canvas;i.width==e.bufferWidth&&i.height==e.bufferHeight||(e.bufferWidth=i.width,e.bufferHeight=i.height,e.onResize())}},P.prototype.updateDeviceInfo=function(t){var e=this.gl,n=this,i=[e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING];L(e,i,(function(e){var i=n.computeMeshVertices_(n.meshWidth,n.meshHeight,t);if(e.bindBuffer(e.ARRAY_BUFFER,n.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW),!n.indexCount){var r=n.computeMeshIndices_(n.meshWidth,n.meshHeight);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,r,e.STATIC_DRAW),n.indexCount=r.length}}))},P.prototype.computeMeshVertices_=function(t,e,n){for(var i=new Float32Array(2*t*e*5),r=n.getLeftEyeVisibleTanAngles(),o=n.getLeftEyeNoLensTanAngles(),a=n.getLeftEyeVisibleScreenRect(o),l=0,c=0;c<2;c++){for(var h=0;hr-42&&i.clientXn.clientHeight-42?t(i):i.clientX<42&&i.clientY<42&&e(i)},n.addEventListener("click",this.listener,!1)},N.prototype.onResize=function(){var t=this.gl,e=this,n=[t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){var n=[],i=t.drawingBufferWidth/2,r=Math.max(screen.width,screen.height)*window.devicePixelRatio,o=t.drawingBufferWidth/r*window.devicePixelRatio,s=4*o/2,a=42*o,l=28*o/2,c=14*o;function h(t,e){var r=(90-t)*O,o=Math.cos(r),s=Math.sin(r);n.push(.3125*o*l+i,.3125*s*l+l),n.push(e*o*l+i,e*s*l+l)}n.push(i-s,a),n.push(i-s,t.drawingBufferHeight),n.push(i+s,a),n.push(i+s,t.drawingBufferHeight),e.gearOffset=n.length/2;for(var u=0;u<=6;u++){var d=60*u;h(d,1),h(d+12,1),h(d+20,.75),h(d+40,.75),h(d+48,1)}function p(e,i){n.push(c+e,t.drawingBufferHeight-c-i)}e.gearVertexCount=n.length/2-e.gearOffset,e.arrowOffset=n.length/2;var f=s/Math.sin(45*O);p(0,l),p(l,0),p(l+f,f),p(f,l+f),p(f,l-f),p(0,l),p(l,2*l),p(l+f,2*l-f),p(f,l-f),p(0,l),p(f,l-s),p(28*o,l-s),p(f,l+s),p(28*o,l+s),e.arrowVertexCount=n.length/2-e.arrowOffset,t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(n),t.STATIC_DRAW)}))},N.prototype.render=function(){var t=this.gl,e=this,n=[t.CULL_FACE,t.DEPTH_TEST,t.BLEND,t.SCISSOR_TEST,t.STENCIL_TEST,t.COLOR_WRITEMASK,t.VIEWPORT,t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.BLEND),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.colorMask(!0,!0,!0,!0),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.renderNoState()}))},N.prototype.renderNoState=function(){var t,e,n,i,r,o,s,a,l,c,h=this.gl;h.useProgram(this.program),h.bindBuffer(h.ARRAY_BUFFER,this.vertexBuffer),h.enableVertexAttribArray(this.attribs.position),h.vertexAttribPointer(this.attribs.position,2,h.FLOAT,!1,8,0),h.uniform4f(this.uniforms.color,1,1,1,1),t=this.projMat,e=0,n=h.drawingBufferWidth,i=0,r=h.drawingBufferHeight,a=1/(e-n),l=1/(i-r),c=1/((o=.1)-(s=1024)),t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*a,t[13]=(r+i)*l,t[14]=(s+o)*c,t[15]=1,h.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),h.drawArrays(h.TRIANGLE_STRIP,0,4),h.drawArrays(h.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),h.drawArrays(h.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},B.prototype.distortInverse=function(t){for(var e=0,n=1,i=t-this.distort(e);Math.abs(n-e)>1e-4;){var r=t-this.distort(n),o=n-r*((n-e)/(r-i));e=n,n=o,i=r}return n},B.prototype.distort=function(t){for(var e=t*t,n=0,i=0;i=1)return this.w=o,this.x=n,this.y=i,this.z=r,this;var a=Math.acos(s),l=Math.sqrt(1-s*s);if(Math.abs(l)<.001)return this.w=.5*(o+this.w),this.x=.5*(n+this.x),this.y=.5*(i+this.y),this.z=.5*(r+this.z),this;var c=Math.sin((1-e)*a)/l,h=Math.sin(e*a)/l;return this.w=o*c+this.w*h,this.x=n*c+this.x*h,this.y=i*c+this.y*h,this.z=r*c+this.z*h,this},setFromUnitVectors:function(t,e){return void 0===H&&(H=new U),(G=t.dot(e)+1)<1e-6?(G=0,Math.abs(t.x)>Math.abs(t.z)?H.set(-t.y,t.x,0):H.set(0,-t.z,t.y)):H.crossVectors(t,e),this.x=H.x,this.y=H.y,this.z=H.z,this.w=G,this.normalize(),this}};var W=new k({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),j=new k({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),X={CardboardV1:new Y({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new Y({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};function q(t,e){this.viewer=X.CardboardV2,this.updateDeviceParams(t),this.distortion=new B(this.viewer.distortionCoefficients);for(var n=0;n=200&&n.status<=299?(i.dpdb=JSON.parse(n.response),i.recalculateDeviceParams_()):console.error("Error loading online DPDB!")})),n.send()}}function J(t){this.xdpi=t.xdpi,this.ydpi=t.ydpi,this.bevelMm=t.bevelMm}function K(t,e){this.set(t,e)}function $(t,e){this.kFilter=t,this.isDebug=e,this.currentAccelMeasurement=new K,this.currentGyroMeasurement=new K,this.previousGyroMeasurement=new K,a()?this.filterQ=new V(-1,0,0,1):this.filterQ=new V(1,0,0,1),this.previousFilterQ=new V,this.previousFilterQ.copy(this.filterQ),this.accelQ=new V,this.isOrientationInitialized=!1,this.estimatedGravity=new U,this.measuredGravity=new U,this.gyroIntegralQ=new V}function tt(t,e){this.predictionTimeS=t,this.isDebug=e,this.previousQ=new V,this.previousTimestampS=null,this.deltaQ=new V,this.outQ=new V}function et(t,e,n,i){this.yawOnly=n,this.accelerometer=new U,this.gyroscope=new U,this.filter=new $(t,i),this.posePredictor=new tt(e,i),this.isFirefoxAndroid=h(),this.isIOS=a();var r=u();this.isDeviceMotionInRadians=!this.isIOS&&r&&r<66,this.isWithoutDeviceMotion=p()||d(),this.filterToWorldQ=new V,a()?this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new V,this.worldToScreenQ=new V,this.originalPoseAdjustQ=new V,this.originalPoseAdjustQ.setFromAxisAngle(new U(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),m()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new V,this.orientationOut_=new Float32Array(4),this.start()}Z.prototype.getDeviceParams=function(){return this.deviceParams},Z.prototype.recalculateDeviceParams_=function(){var t=this.calcDeviceParams_();t?(this.deviceParams=t,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Z.prototype.calcDeviceParams_=function(){var t=this.dpdb;if(!t)return console.error("DPDB not available."),null;if(1!=t.format)return console.error("DPDB has unexpected format version."),null;if(!t.devices||!t.devices.length)return console.error("DPDB does not have a devices section."),null;var e=navigator.userAgent||navigator.vendor||window.opera,n=g(),i=v();if(!t.devices)return console.error("DPDB has no devices section."),null;for(var r=0;r1||this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},$.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);var n=new V;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var i,r=new V;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",z*((i=r).w>1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(i.w)),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var o=new V;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},$.prototype.getOrientation=function(){return this.filterQ},$.prototype.accelToQuaternion_=function(t){var e=new U;e.copy(t),e.normalize();var n=new V;return n.setFromUnitVectors(new U(0,0,-1),e),n.inverse(),n},$.prototype.gyroToQuaternionDelta_=function(t,e){var n=new V,i=new U;return i.copy(t),i.normalize(),n.setFromAxisAngle(i,t.length()*e),n},tt.prototype.getPrediction=function(t,e,n){if(!this.previousTimestampS)return this.previousQ.copy(t),this.previousTimestampS=n,t;var i=new U;i.copy(e),i.normalize();var r=e.length();if(r<20*F)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(z*r).toFixed(1)),this.outQ.copy(t),this.previousQ.copy(t),this.outQ;var o=r*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(i,o),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(t),this.previousTimestampS=n,this.outQ},et.prototype.getPosition=function(){return null},et.prototype.getOrientation=function(){var t=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ)return this.deviceOrientationFixQ=this.deviceOrientationFixQ||(n=(new V).setFromAxisAngle(new U(0,0,-1),0),i=new V,-90===window.orientation?i.setFromAxisAngle(new U(0,1,0),Math.PI/-2):i.setFromAxisAngle(new U(0,1,0),Math.PI/2),n.multiply(i)),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||((e=new V).setFromAxisAngle(new U(1,0,0),-Math.PI/2),e),t=this._deviceOrientationQ,(r=new V).copy(t),r.multiply(this.deviceOrientationFilterToWorldQ),r.multiply(this.resetQ),r.multiply(this.worldToScreenQ),r.multiplyQuaternions(this.deviceOrientationFixQ,r),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_;var e,n,i,r,o=this.filter.getOrientation();return t=this.posePredictor.getPrediction(o,this.gyroscope,this.previousTimestampS),(r=new V).copy(this.filterToWorldQ),r.multiply(this.resetQ),r.multiply(t),r.multiply(this.worldToScreenQ),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_},et.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),m()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)},et.prototype.onDeviceOrientation_=function(t){this._deviceOrientationQ=this._deviceOrientationQ||new V;var e=t.alpha,n=t.beta,i=t.gamma;e=(e||0)*Math.PI/180,n=(n||0)*Math.PI/180,i=(i||0)*Math.PI/180,this._deviceOrientationQ.setFromEulerYXZ(n,e,-i)},et.prototype.onDeviceMotion_=function(t){this.updateDeviceMotion_(t)},et.prototype.updateDeviceMotion_=function(t){var e=t.accelerationIncludingGravity,n=t.rotationRate,i=t.timeStamp/1e3,r=i-this.previousTimestampS;return r<0?(S("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"),void(this.previousTimestampS=i)):r<=.001||r>1?(S("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=i)):(this.accelerometer.set(-e.x,-e.y,-e.z),n&&(f()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,i)),this.filter.addAccelMeasurement(this.accelerometer,i),void(this.previousTimestampS=i))},et.prototype.onOrientationChange_=function(t){this.setScreenTransform_()},et.prototype.onMessage_=function(t){var e=t.data;e&&e.type&&"devicemotion"===e.type.toLowerCase()&&this.updateDeviceMotion_(e.deviceMotionEvent)},et.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},et.prototype.start=function(){var t,e,n;this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),a()&&(t=window.self!==window.top,e=E(document.referrer),n=E(window.location.href),t&&e!==n)&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},et.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var nt=new U(1,0,0),it=new U(0,0,1),rt=new V;rt.setFromAxisAngle(nt,-Math.PI/2),rt.multiply((new V).setFromAxisAngle(it,Math.PI/2));var ot=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.config=e,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new V,this._outQ=new V,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return r(t,[{key:"init",value:function(){var t=null;try{(t=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"})).addEventListener("error",this._onSensorError)}catch(t){this.errors.push(t),"SecurityError"===t.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===t.name?this.useDeviceMotion():console.error(t)}t&&(this.api="sensor",this.sensor=t,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new et(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var t=this.sensor.quaternion;this._sensorQ.set(t[0],t[1],t[2],t[3]);var e=this._outQ;return e.copy(rt),e.multiply(this._sensorQ),this.config.YAW_ONLY&&(e.x=e.z=0,e.normalize()),this._out[0]=e.x,this._out[1]=e.y,this._out[2]=e.z,this._out[3]=e.w,this._out}},{key:"_onSensorError",value:function(t){this.errors.push(t.error),"NotAllowedError"===t.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===t.error.name?console.error("Sensor could not be read"):console.error(t.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),t}();function st(){this.loadIcon_();var t=document.createElement("div");(o=t.style).position="fixed",o.top=0,o.right=0,o.bottom=0,o.left=0,o.backgroundColor="gray",o.fontFamily="sans-serif",o.zIndex=1e6;var e=document.createElement("img");e.src=this.icon,(o=e.style).marginLeft="25%",o.marginTop="25%",o.width="50%",t.appendChild(e);var n=document.createElement("div");(o=n.style).textAlign="center",o.fontSize="16px",o.lineHeight="24px",o.margin="24px 25%",o.width="50%",n.innerHTML="Place your phone into your Cardboard viewer.",t.appendChild(n);var i=document.createElement("div");(o=i.style).backgroundColor="#CFD8DC",o.position="fixed",o.bottom=0,o.width="100%",o.height="48px",o.padding="14px 24px",o.boxSizing="border-box",o.color="#656A6B",t.appendChild(i);var r=document.createElement("div");r.style.float="left",r.innerHTML="No Cardboard viewer?";var o,s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank",(o=s.style).float="right",o.fontWeight=600,o.textTransform="uppercase",o.borderLeft="1px solid gray",o.paddingLeft="24px",o.textDecoration="none",o.color="#656A6B",i.appendChild(r),i.appendChild(s),this.overlay=t,this.text=n,this.hide()}function at(t){try{this.selectedKey=localStorage.getItem("WEBVR_CARDBOARD_VIEWER")}catch(t){console.error("Failed to load viewer profile: %s",t)}this.selectedKey||(this.selectedKey=t||"CardboardV1"),this.dialog=this.createDialog_(q.Viewers),this.root=null,this.onChangeCallbacks_=[]}st.prototype.show=function(t){t||this.overlay.parentElement?t&&(this.overlay.parentElement&&this.overlay.parentElement!=t&&this.overlay.parentElement.removeChild(this.overlay),t.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var e=this.overlay.querySelector("img").style;m()?(e.width="20%",e.marginLeft="40%",e.marginTop="3%"):(e.width="50%",e.marginLeft="25%",e.marginTop="25%")},st.prototype.hide=function(){this.overlay.style.display="none"},st.prototype.showTemporarily=function(t,e){this.show(e),this.timer=setTimeout(this.hide.bind(this),t)},st.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},st.prototype.update=function(){this.disableShowTemporarily(),!m()&&_()?this.show():this.hide()},st.prototype.loadIcon_=function(){this.icon="data:image/svg+xml,"+encodeURIComponent("")},at.prototype.show=function(t){this.root=t,t.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},at.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},at.prototype.getCurrentViewer=function(){return q.Viewers[this.selectedKey]},at.prototype.getSelectedKey_=function(){var t=this.dialog.querySelector("input[name=field]:checked");return t?t.id:null},at.prototype.onChange=function(t){this.onChangeCallbacks_.push(t)},at.prototype.fireOnChange_=function(t){for(var e=0;e.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return i(t,[{key:"enable",value:function(){o?(this.disable(),this.noSleepTimer=window.setInterval((function(){window.location.href="/",window.setTimeout(window.stop,0)}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){o?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),t}();t.exports=s},function(t,e,n){t.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])}))})))&<.__esModule&&Object.prototype.hasOwnProperty.call(lt,"default")?lt.default:lt,ht=1e3,ut=[0,0,.5,1],dt=[.5,0,.5,1],pt=window.requestAnimationFrame,ft=window.cancelAnimationFrame;function mt(t){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:t.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:t.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:t.canPresent},maxLayers:{writable:!1,enumerable:!0,value:t.maxLayers},hasOrientation:{enumerable:!0,get:function(){return T("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),t.hasOrientation}}})}function gt(t){var e=!("wakelock"in(t=t||{}))||t.wakelock;this.isPolyfilled=!0,this.displayId=ht++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return T("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new mt({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,e&&_()&&(this.wakelock_=new ct)}gt.prototype.getFrameData=function(t){return M(t,this._getPose(),this)},gt.prototype.getPose=function(){return T("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.resetPose=function(){return T("VRDisplay.prototype.resetPose"),this._resetPose()},gt.prototype.getImmediatePose=function(){return T("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.requestAnimationFrame=function(t){return pt(t)},gt.prototype.cancelAnimationFrame=function(t){return ft(t)},gt.prototype.wrapForFullscreen=function(t){if(a())return t;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var e=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",e.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==t)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=t,this.originalParent_=t.parentElement,this.originalParent_||document.body.appendChild(t),!this.fullscreenWrapper_.parentElement){var n=this.fullscreenElement_.parentElement;n.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),n.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var i=this;return function(){if(i.fullscreenElement_){var t=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];i.fullscreenElement_.setAttribute("style",t.join("; ")+";")}}(),this.fullscreenWrapper_},gt.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var t=this.fullscreenElement_;this.fullscreenElementCachedStyle_?t.setAttribute("style",this.fullscreenElementCachedStyle_):t.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var e=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(t),this.originalParent_===e?e.insertBefore(t,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(t),e.removeChild(this.fullscreenWrapper_),t}},gt.prototype.requestPresent=function(t){var e=this.isPresenting,n=this;return t instanceof Array||(T("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),t=[t]),new Promise((function(i,r){if(n.capabilities.canPresent)if(0==t.length||t.length>n.capabilities.maxLayers)r(new Error("Invalid number of layers."));else{var o=t[0];if(o.source){var s=o.leftBounds||ut,c=o.rightBounds||dt;if(e){var h=n.layer_;h.source!==o.source&&(h.source=o.source);for(var u=0;u<4;u++)h.leftBounds[u]=s[u],h.rightBounds[u]=c[u];return n.wrapForFullscreen(n.layer_.source),n.updatePresent_(),void i()}if(n.layer_={predistorted:o.predistorted,source:o.source,leftBounds:s.slice(0),rightBounds:c.slice(0)},n.waitingForPresent_=!1,n.layer_&&n.layer_.source){var d=n.wrapForFullscreen(n.layer_.source);n.addFullscreenListeners_(d,(function(){var t=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;n.isPresenting=d===t,n.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch((function(t){console.error("screen.orientation.lock() failed due to",t.message)})),n.waitingForPresent_=!1,n.beginPresent_(),i()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),n.removeFullscreenWrapper(),n.disableWakeLock(),n.endPresent_(),n.removeFullscreenListeners_()),n.fireVRDisplayPresentChange_()}),(function(){n.waitingForPresent_&&(n.removeFullscreenWrapper(),n.removeFullscreenListeners_(),n.disableWakeLock(),n.waitingForPresent_=!1,n.isPresenting=!1,r(new Error("Unable to present.")))})),function(t){if(l())return!1;if(t.requestFullscreen)t.requestFullscreen();else if(t.webkitRequestFullscreen)t.webkitRequestFullscreen();else if(t.mozRequestFullScreen)t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)return!1;t.msRequestFullscreen()}return!0}(d)?(n.enableWakeLock(),n.waitingForPresent_=!0):(a()||l())&&(n.enableWakeLock(),n.isPresenting=!0,n.beginPresent_(),n.fireVRDisplayPresentChange_(),i())}n.waitingForPresent_||a()||(y(),r(new Error("Unable to present.")))}else i()}else r(new Error("VRDisplay is not capable of presenting."))}))},gt.prototype.exitPresent=function(){var t=this.isPresenting,e=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise((function(n,i){t?(!y()&&a()&&(e.endPresent_(),e.fireVRDisplayPresentChange_()),l()&&(e.removeFullscreenWrapper(),e.removeFullscreenListeners_(),e.endPresent_(),e.fireVRDisplayPresentChange_()),n()):i(new Error("Was not presenting to VRDisplay."))}))},gt.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},gt.prototype.fireVRDisplayPresentChange_=function(){var t=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.fireVRDisplayConnect_=function(){var t=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.addFullscreenListeners_=function(t,e,n){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=t,this.fullscreenChangeHandler_=e,this.fullscreenErrorHandler_=n,e&&(document.fullscreenEnabled?t.addEventListener("fullscreenchange",e,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenchange",e,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",e,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenchange",e,!1)),n&&(document.fullscreenEnabled?t.addEventListener("fullscreenerror",n,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenerror",n,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",n,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenerror",n,!1))},gt.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var t=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var e=this.fullscreenChangeHandler_;t.removeEventListener("fullscreenchange",e,!1),t.removeEventListener("webkitfullscreenchange",e,!1),document.removeEventListener("mozfullscreenchange",e,!1),t.removeEventListener("msfullscreenchange",e,!1)}if(this.fullscreenErrorHandler_){var n=this.fullscreenErrorHandler_;t.removeEventListener("fullscreenerror",n,!1),t.removeEventListener("webkitfullscreenerror",n,!1),document.removeEventListener("mozfullscreenerror",n,!1),t.removeEventListener("msfullscreenerror",n,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},gt.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},gt.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},gt.prototype.beginPresent_=function(){},gt.prototype.endPresent_=function(){},gt.prototype.submitFrame=function(t){},gt.prototype.getEyeParameters=function(t){return null};var vt={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},yt="left",At="right";function xt(t){var e=b({},vt);t=b(e,t||{}),gt.call(this,{wakelock:t.MOBILE_WAKE_LOCK}),this.config=t,this.displayName="Cardboard VRDisplay",this.capabilities=new mt({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new ot(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Z(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new q(this.dpdb_.getDeviceParams(),t.ADDITIONAL_VIEWERS),this.viewerSelector_=new at(t.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new st),a()&&window.addEventListener("resize",this.onResize_.bind(this))}return xt.prototype=Object.create(gt.prototype),xt.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},xt.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},xt.prototype._getFieldOfView=function(t){var e;if(t==yt)e=this.deviceInfo_.getFieldOfViewLeftEye();else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=this.deviceInfo_.getFieldOfViewRightEye()}return e},xt.prototype._getEyeOffset=function(t){var e;if(t==yt)e=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return e},xt.prototype.getEyeParameters=function(t){var e=this._getEyeOffset(t),n=this._getFieldOfView(t),i={offset:e,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(i,"fieldOfView",{enumerable:!0,get:function(){return T("VRFieldOfView","VRFrameData's projection matrices"),n}}),i},xt.prototype.onDeviceParamsUpdated_=function(t){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},xt.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},xt.prototype.beginPresent_=function(){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2")),t&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(t.canvas.width=g()*this.bufferScale_,t.canvas.height=v()*this.bufferScale_,this.cardboardUI_=new N(t)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new N(t)),this.distorter_=new P(t,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(t){this.viewerSelector_.show(this.layer_.source.parentElement),t.stopPropagation(),t.preventDefault()}.bind(this),function(t){this.exitPresent(),t.stopPropagation(),t.preventDefault()}.bind(this)),this.rotateInstructions_&&(m()&&_()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},xt.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},xt.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},xt.prototype.submitFrame=function(t){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2"));var n=e.canvas;n.width==this.lastWidth&&n.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=n.width,this.lastHeight=n.height,this.cardboardUI_.render()}},xt.prototype.onOrientationChange_=function(t){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},xt.prototype.onResize_=function(t){if(this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e.canvas.setAttribute("style",["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"].join("; ")+";"),w(e.canvas)}},xt.prototype.onViewerChanged_=function(t){this.deviceInfo_.setViewer(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},xt.prototype.fireVRDisplayDeviceParamsChange_=function(){var t=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(t)},xt.VRFrameData=function(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null},xt.VRDisplay=gt,xt}()})))&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,a={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};function l(t){this.config=o(o({},a),t),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&n())&&(this.enable(),this.getVRDisplays().then((function(t){t&&t[0]&&t[0].fireVRDisplayConnect_&&t[0].fireVRDisplayConnect_()})))}l.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(n()){var t=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(t)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},l.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var t=this.native.VRFrameData,e=new this.native.VRFrameData,n=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(i){i instanceof t?n.call(this,i):(n.call(this,e),i.pose=e.pose,r(e.leftProjectionMatrix,i.leftProjectionMatrix),r(e.rightProjectionMatrix,i.rightProjectionMatrix),r(e.leftViewMatrix,i.leftViewMatrix),r(e.rightViewMatrix,i.rightViewMatrix))}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},l.prototype.getVRDisplays=function(){var t=this;return this.config,this.hasNative?this.native.getVRDisplays.call(navigator).then((function(e){return e.length>0?e:t.getPolyfillDisplays()})):Promise.resolve(this.getPolyfillDisplays())},l.version="0.10.12",l.VRFrameData=s.VRFrameData,l.VRDisplay=s.VRDisplay;var c=Object.freeze({default:l}),h=c&&l||c;return void 0!==e&&e.window&&(e.document||(e.document=e.window.document),e.navigator||(e.navigator=e.window.navigator)),h}()})));const h=0,u=1,d=2;function p(){}Object.assign(p.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)},removeEventListener:function(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}},dispatchEvent:function(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+f[t>>16&255]+f[t>>24&255]+"-"+f[255&e]+f[e>>8&255]+"-"+f[e>>16&15|64]+f[e>>24&255]+"-"+f[63&n|128]+f[n>>8&255]+"-"+f[n>>16&255]+f[n>>24&255]+f[255&i]+f[i>>8&255]+f[i>>16&255]+f[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},damp:function(t,e,n,i){return g.lerp(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(g.euclideanModulo(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(m=t%2147483647),m=16807*m%2147483647,(m-1)/2147483646},degToRad:function(t){return t*g.DEG2RAD},radToDeg:function(t){return t*g.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,s=Math.sin,a=o(n/2),l=s(n/2),c=o((e+i)/2),h=s((e+i)/2),u=o((e-i)/2),d=s((e-i)/2),p=o((i-e)/2),f=s((i-e)/2);switch(r){case"XYX":t.set(a*h,l*u,l*d,a*c);break;case"YZY":t.set(l*d,a*h,l*u,a*c);break;case"ZXZ":t.set(l*u,l*d,a*h,a*c);break;case"XZX":t.set(a*h,l*f,l*p,a*c);break;case"YXY":t.set(l*p,a*h,l*f,a*c);break;case"ZYZ":t.set(l*f,l*p,a*h,a*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class v{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class y{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=o,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],A=i[7],x=i[2],_=i[5],b=i[8];return r[0]=o*f+s*v+a*x,r[3]=o*m+s*y+a*_,r[6]=o*g+s*A+a*b,r[1]=l*f+c*v+h*x,r[4]=l*m+c*y+h*_,r[7]=l*g+c*A+h*b,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*A+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8];return e*o*c-e*s*l-n*r*c+n*s*a+i*r*l-i*o*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=c*o-s*l,u=s*a-c*r,d=l*r-o*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*o)*f,t[3]=u*f,t[4]=(c*e-i*a)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*a-l*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,s){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*o+l*s)+o+t,-i*l,i*a,-i*(-l*o+a*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],s=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*o+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*a,i[4]=-n*o+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let A;const x={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===A&&(A=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),A.width=t.width,A.height=t.height;const n=A.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=A}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let _=0;function b(t=b.DEFAULT_IMAGE,e=b.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,s=1023,a=1009,l=1,c=3e3){Object.defineProperty(this,"id",{value:_++}),this.uuid=g.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=a,this.offset=new v(0,0),this.repeat=new v(1,1),this.center=new v(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new y,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}function w(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?x.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}b.DEFAULT_IMAGE=void 0,b.DEFAULT_MAPPING=300,b.prototype=Object.assign(Object.create(p.prototype),{constructor:b,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=g.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(b.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class M{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=t.elements,s=o[0],a=o[4],l=o[8],c=o[1],h=o[5],u=o[9],d=o[2],p=o[6],f=o[10];if(Math.abs(a-c)<.01&&Math.abs(l-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(a+c)<.1&&Math.abs(l+d)<.1&&Math.abs(u+p)<.1&&Math.abs(s+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(s+1)/2,o=(h+1)/2,m=(f+1)/2,g=(a+c)/4,v=(l+d)/4,y=(u+p)/4;return t>o&&t>m?t<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):o>m?o<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=g/i,r=y/i):m<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(c-a)*(c-a));return Math.abs(m)<.001&&(m=1),this.x=(p-u)/m,this.y=(l-d)/m,this.z=(c-a)/m,this.w=Math.acos((s+h+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}class E extends p{constructor(t,e,n){super(),Object.defineProperty(this,"isWebGLRenderTarget",{value:!0}),this.width=t,this.height=e,this.scissor=new M(0,0,t,e),this.scissorTest=!1,this.viewport=new M(0,0,t,e),n=n||{},this.texture=new b(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:1006,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setSize(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.texture.image.width=t,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}}class S{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isQuaternion",{value:!0}),this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return n.copy(t).slerp(e,i)}static slerpFlat(t,e,n,i,r,o,s){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[o+0],d=r[o+1],p=r[o+2],f=r[o+3];if(h!==f||a!==u||l!==d||c!==p){let t=1-s;const e=a*u+l*d+c*p+h*f,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,s=Math.sin(s*o)/r}const r=s*n;if(a=a*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const s=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=s*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-a*h,t[e+3]=c*p-s*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,s=Math.cos,a=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=a(n/2),d=a(i/2),p=a(r/2);switch(o){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],s=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(o-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(o-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(g.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,s=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+o*s+i*l-r*a,this._y=i*c+o*a+r*s-n*l,this._z=r*c+o*l+n*a-i*s,this._w=o*c-n*s-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let s=o*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const a=1-s*s;if(a<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class T{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(R.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(R.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,s=t.z,a=t.w,l=a*e+o*i-s*n,c=a*n+s*e-r*i,h=a*i+r*n-o*e,u=-r*e-o*n-s*i;return this.x=l*a+u*-r+c*-s-h*-o,this.y=c*a+u*-o+h*-r-l*-s,this.z=h*a+u*-s+l*-o-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return L.copy(this).projectOnVector(t),this.sub(L)}reflect(t){return this.sub(L.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(g.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const L=new T,R=new S;class C{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new T(1/0,1/0,1/0),this.max=void 0!==e?e:new T(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.length;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.count;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new T),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,I),I.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(G),V.subVectors(this.max,G),N.subVectors(t.a,G),B.subVectors(t.b,G),F.subVectors(t.c,G),z.subVectors(B,N),U.subVectors(F,B),H.subVectors(N,F);let e=[0,-z.z,z.y,0,-U.z,U.y,0,-H.z,H.y,z.z,0,-z.x,U.z,0,-U.x,H.z,0,-H.x,-z.y,z.x,0,-U.y,U.x,0,-H.y,H.x,0];return!!P(e,N,B,F,V)&&(e=[1,0,0,0,1,0,0,0,1],!!P(e,N,B,F,V)&&(k.crossVectors(z,U),e=[k.x,k.y,k.z],P(e,N,B,F,V)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new T),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return I.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(I).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(D[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),D[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),D[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),D[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),D[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),D[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),D[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),D[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(D)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function P(t,e,n,i,r){for(let o=0,s=t.length-3;o<=s;o+=3){W.fromArray(t,o);const s=r.x*Math.abs(W.x)+r.y*Math.abs(W.y)+r.z*Math.abs(W.z),a=e.dot(W),l=n.dot(W),c=i.dot(W);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>s)return!1}return!0}const D=[new T,new T,new T,new T,new T,new T,new T,new T],I=new T,O=new C,N=new T,B=new T,F=new T,z=new T,U=new T,H=new T,G=new T,V=new T,k=new T,W=new T,j=new C;class X{constructor(t,e){this.center=void 0!==t?t:new T,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):j.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new C),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const q=new T,Y=new T,Q=new T,Z=new T,J=new T,K=new T,$=new T;class tt{constructor(t,e){this.origin=void 0!==t?t:new T,this.direction=void 0!==e?e:new T(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new T),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,q)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new T),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=q.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(q.copy(this.direction).multiplyScalar(e).add(this.origin),q.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Y.copy(t).add(e).multiplyScalar(.5),Q.copy(e).sub(t).normalize(),Z.copy(this.origin).sub(Y);const r=.5*t.distanceTo(e),o=-this.direction.dot(Q),s=Z.dot(this.direction),a=-Z.dot(Q),l=Z.lengthSq(),c=Math.abs(1-o*o);let h,u,d,p;if(c>0)if(h=o*a-s,u=o*s-a,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+o*u+2*s)+u*(o*h+u+2*a)+l}else u=r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u=-r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u<=-p?(h=Math.max(0,-(-o*r+s)),u=h>0?-r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-a),r),d=u*(u+2*a)+l):(h=Math.max(0,-(o*r+s)),u=h>0?r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l);else u=o>0?-r:r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Q).multiplyScalar(u).add(Y),d}intersectSphere(t,e){q.subVectors(t.center,this.origin);const n=q.dot(this.direction),i=q.dot(q)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),s=n-o,a=n+o;return s<0&&a<0?null:s<0?this.at(a,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,s,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,o=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,o=(t.min.y-u.y)*c),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(s=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||s>i?null:((s>n||n!=n)&&(n=s),(a=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,q)}intersectTriangle(t,e,n,i,r){J.subVectors(e,t),K.subVectors(n,t),$.crossVectors(J,K);let o,s=this.direction.dot($);if(s>0){if(i)return null;o=1}else{if(!(s<0))return null;o=-1,s=-s}Z.subVectors(this.origin,t);const a=o*this.direction.dot(K.crossVectors(Z,K));if(a<0)return null;const l=o*this.direction.dot(J.cross(Z));if(l<0)return null;if(a+l>s)return null;const c=-o*Z.dot($);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class et{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=s,g[13]=a,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new et).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/nt.setFromMatrixColumn(t,0).length(),r=1/nt.setFromMatrixColumn(t,1).length(),o=1/nt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),s=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=o*a}else if("YXZ"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=o*l,e[1]=o*h,e[5]=o*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=o*a}else if("ZXY"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-o*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=o*c,e[9]=r-t*s,e[2]=-o*l,e[6]=s,e[10]=o*a}else if("ZYX"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*a,e[10]=o*a}else if("YZX"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=o*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rt,t,ot)}lookAt(t,e,n){const i=this.elements;return lt.subVectors(t,e),0===lt.lengthSq()&&(lt.z=1),lt.normalize(),st.crossVectors(n,lt),0===st.lengthSq()&&(1===Math.abs(n.z)?lt.x+=1e-4:lt.z+=1e-4,lt.normalize(),st.crossVectors(n,lt)),st.normalize(),at.crossVectors(lt,st),i[0]=st.x,i[4]=at.x,i[8]=lt.x,i[1]=st.y,i[5]=at.y,i[9]=lt.y,i[2]=st.z,i[6]=at.z,i[10]=lt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],A=n[11],x=n[15],_=i[0],b=i[4],w=i[8],M=i[12],E=i[1],S=i[5],T=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],O=i[7],N=i[11],B=i[15];return r[0]=o*_+s*E+a*R+l*I,r[4]=o*b+s*S+a*C+l*O,r[8]=o*w+s*T+a*P+l*N,r[12]=o*M+s*L+a*D+l*B,r[1]=c*_+h*E+u*R+d*I,r[5]=c*b+h*S+u*C+d*O,r[9]=c*w+h*T+u*P+d*N,r[13]=c*M+h*L+u*D+d*B,r[2]=p*_+f*E+m*R+g*I,r[6]=p*b+f*S+m*C+g*O,r[10]=p*w+f*T+m*P+g*N,r[14]=p*M+f*L+m*D+g*B,r[3]=v*_+y*E+A*R+x*I,r[7]=v*b+y*S+A*C+x*O,r[11]=v*w+y*T+A*P+x*N,r[15]=v*M+y*L+A*D+x*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],s=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*a*h-i*l*h-r*s*u+n*l*u+i*s*d-n*a*d)+t[7]*(+e*a*d-e*l*u+r*o*u-i*o*d+i*l*c-r*a*c)+t[11]*(+e*l*h-e*s*d-r*o*h+n*o*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*a*h+e*s*u+i*o*h-n*o*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*a*d-s*m*d-h*a*g+s*u*g,y=p*u*l-c*m*l-p*a*d+o*m*d+c*a*g-o*u*g,A=c*f*l-p*h*l+p*s*d-o*f*d-c*s*g+o*h*g,x=p*h*a-c*f*a-p*s*u+o*f*u+c*s*m-o*h*m,_=e*v+n*y+i*A+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/_;return t[0]=v*b,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*b,t[2]=(s*m*r-f*a*r+f*i*l-n*m*l-s*i*g+n*a*g)*b,t[3]=(h*a*r-s*u*r-h*i*l+n*u*l+s*i*d-n*a*d)*b,t[4]=y*b,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*b,t[6]=(p*a*r-o*m*r-p*i*l+e*m*l+o*i*g-e*a*g)*b,t[7]=(o*u*r-c*a*r+c*i*l-e*u*l-o*i*d+e*a*d)*b,t[8]=A*b,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*b,t[10]=(o*f*r-p*s*r+p*n*l-e*f*l-o*n*g+e*s*g)*b,t[11]=(c*s*r-o*h*r-c*n*l+e*h*l+o*n*d-e*s*d)*b,t[12]=x*b,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*b,t[14]=(p*s*i-o*f*i-p*n*a+e*f*a+o*n*m-e*s*m)*b,t[15]=(o*h*i-c*s*i+c*n*a-e*h*a-o*n*u+e*s*u)*b,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,s=t.y,a=t.z,l=r*o,c=r*s;return this.set(l*o+n,l*s-i*a,l*a+i*s,0,l*s+i*a,c*s+n,c*a-i*o,0,l*a-i*s,c*a+i*o,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,s=e._z,a=e._w,l=r+r,c=o+o,h=s+s,u=r*l,d=r*c,p=r*h,f=o*c,m=o*h,g=s*h,v=a*l,y=a*c,A=a*h,x=n.x,_=n.y,b=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+A)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-A)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*b,i[9]=(m-v)*b,i[10]=(1-(u+f))*b,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=nt.set(i[0],i[1],i[2]).length();const o=nt.set(i[4],i[5],i[6]).length(),s=nt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],it.copy(this);const a=1/r,l=1/o,c=1/s;return it.elements[0]*=a,it.elements[1]*=a,it.elements[2]*=a,it.elements[4]*=l,it.elements[5]*=l,it.elements[6]*=l,it.elements[8]*=c,it.elements[9]*=c,it.elements[10]*=c,e.setFromRotationMatrix(it),n.x=r,n.y=o,n.z=s,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return s[0]=a,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,o){const s=this.elements,a=1/(e-t),l=1/(n-i),c=1/(o-r),h=(e+t)*a,u=(n+i)*l,d=(o+r)*c;return s[0]=2*a,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const nt=new T,it=new et,rt=new T(0,0,0),ot=new T(1,1,1),st=new T,at=new T,lt=new T;class ct{constructor(t=0,e=0,n=0,i=ct.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=g.clamp,r=t.elements,o=r[0],s=r[4],a=r[8],l=r[1],c=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-s,o)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(l,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,o)):(this._x=0,this._z=Math.atan2(-s,c));break;case"YZX":this._z=Math.asin(i(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(a,p));break;case"XZY":this._z=Math.asin(-i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return ht.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ht,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return ut.setFromEuler(this),this.setFromQuaternion(ut,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new T(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ct.DefaultOrder="XYZ",ct.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const ht=new et,ut=new S;class dt{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new T),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Rt.getNormalMatrix(t),i=this.coplanarPoint(Tt).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const Pt=new T,Dt=new T,It=new T,Ot=new T,Nt=new T,Bt=new T,Ft=new T,zt=new T,Ut=new T,Ht=new T;class Gt{constructor(t,e,n){this.a=void 0!==t?t:new T,this.b=void 0!==e?e:new T,this.c=void 0!==n?n:new T}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new T),i.subVectors(n,e),Pt.subVectors(t,e),i.cross(Pt);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Pt.subVectors(i,e),Dt.subVectors(n,e),It.subVectors(t,e);const o=Pt.dot(Pt),s=Pt.dot(Dt),a=Pt.dot(It),l=Dt.dot(Dt),c=Dt.dot(It),h=o*l-s*s;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new T),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*a-s*c)*u,p=(o*c-s*a)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Ot),Ot.x>=0&&Ot.y>=0&&Ot.x+Ot.y<=1}static getUV(t,e,n,i,r,o,s,a){return this.getBarycoord(t,e,n,i,Ot),a.set(0,0),a.addScaledVector(r,Ot.x),a.addScaledVector(o,Ot.y),a.addScaledVector(s,Ot.z),a}static isFrontFacing(t,e,n,i){return Pt.subVectors(n,e),Dt.subVectors(t,e),Pt.cross(Dt).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Pt.subVectors(this.c,this.b),Dt.subVectors(this.a,this.b),.5*Pt.cross(Dt).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new T),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Gt.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ct),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Gt.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Gt.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Gt.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Gt.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new T);const n=this.a,i=this.b,r=this.c;let o,s;Nt.subVectors(i,n),Bt.subVectors(r,n),zt.subVectors(t,n);const a=Nt.dot(zt),l=Bt.dot(zt);if(a<=0&&l<=0)return e.copy(n);Ut.subVectors(t,i);const c=Nt.dot(Ut),h=Bt.dot(Ut);if(c>=0&&h<=c)return e.copy(i);const u=a*h-c*l;if(u<=0&&a>=0&&c<=0)return o=a/(a-c),e.copy(n).addScaledVector(Nt,o);Ht.subVectors(t,r);const d=Nt.dot(Ht),p=Bt.dot(Ht);if(p>=0&&d<=p)return e.copy(r);const f=d*l-a*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(Bt,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return Ft.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Ft,s);const g=1/(m+f+u);return o=f*g,s=u*g,e.copy(n).addScaledVector(Nt,o).addScaledVector(Bt,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Vt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kt={h:0,s:0,l:0},Wt={h:0,s:0,l:0};function jt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Xt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function qt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Yt{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=g.euclideanModulo(t,1),e=g.clamp(e,0,1),n=g.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=jt(r,i,t+1/3),this.g=jt(r,i,t),this.b=jt(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Vt[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Xt(t.r),this.g=Xt(t.g),this.b=Xt(t.b),this}copyLinearToSRGB(t){return this.r=qt(t.r),this.g=qt(t.g),this.b=qt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let s,a;const l=(o+r)/2;if(o===r)s=0,a=0;else{const t=r-o;switch(a=l<=.5?t/(r+o):t/(2-r-o),r){case e:s=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Jt.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Kt.prototype=Object.create(Jt.prototype),Kt.prototype.constructor=Kt,Kt.prototype.isMeshBasicMaterial=!0,Kt.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const $t=new T,te=new v;function ee(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}function ne(t,e,n){ee.call(this,new Int8Array(t),e,n)}function ie(t,e,n){ee.call(this,new Uint8Array(t),e,n)}function re(t,e,n){ee.call(this,new Uint8ClampedArray(t),e,n)}function oe(t,e,n){ee.call(this,new Int16Array(t),e,n)}function se(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function ae(t,e,n){ee.call(this,new Int32Array(t),e,n)}function le(t,e,n){ee.call(this,new Uint32Array(t),e,n)}function ce(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function he(t,e,n){ee.call(this,new Float32Array(t),e,n)}function ue(t,e,n){ee.call(this,new Float64Array(t),e,n)}function de(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}Object.defineProperty(ee.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(ee.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i65535?le:se)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new y).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return ge.makeRotationX(t),this.applyMatrix4(ge),this},rotateY:function(t){return ge.makeRotationY(t),this.applyMatrix4(ge),this},rotateZ:function(t){return ge.makeRotationZ(t),this.applyMatrix4(ge),this},translate:function(t,e,n){return ge.makeTranslation(t,e,n),this.applyMatrix4(ge),this},scale:function(t,e,n){return ge.makeScale(t,e,n),this.applyMatrix4(ge),this},lookAt:function(t){return ve.lookAt(t),ve.updateMatrix(),this.applyMatrix4(ve.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ye).negate(),this.translate(ye.x,ye.y,ye.z),this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t},clone:function(){return(new be).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:c,point:Ue.clone(),object:t}}(t,e,n,i,Se,Te,Le,ze);if(p){a&&(Ne.fromBufferAttribute(a,c),Be.fromBufferAttribute(a,h),Fe.fromBufferAttribute(a,u),p.uv=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v)),l&&(Ne.fromBufferAttribute(l,c),Be.fromBufferAttribute(l,h),Fe.fromBufferAttribute(l,u),p.uv2=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v));const t=new Qt(c,h,u);Gt.getNormal(Se,Te,Le,t.normal),p.face=t}return p}He.prototype=Object.assign(Object.create(St.prototype),{constructor:He,isMesh:!0,copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ee.copy(n.boundingSphere),Ee.applyMatrix4(r),!1===t.ray.intersectsSphere(Ee))return;if(we.copy(r).invert(),Me.copy(t.ray).applyMatrix4(we),null!==n.boundingBox&&!1===Me.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0?1:-1,c.push(L.x,L.y,L.z),h.push(a/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},qe.prototype=Object.assign(Object.create(St.prototype),{constructor:qe,isCamera:!0,copy:function(t,e){return St.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new T),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){St.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Ye.prototype=Object.assign(Object.create(qe.prototype),{constructor:Ye,isPerspectiveCamera:!0,copy:function(t,e){return qe.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*g.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*g.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*g.RAD2DEG*Math.atan(Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,s=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/s,i*=o.width/t,n*=o.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=St.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});function Qe(t,e,n){if(St.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Ye(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new T(1,0,0)),this.add(i);const r=new Ye(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new T(-1,0,0)),this.add(r);const o=new Ye(90,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new T(0,1,0)),this.add(o);const s=new Ye(90,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new T(0,-1,0)),this.add(s);const a=new Ye(90,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new T(0,0,1)),this.add(a);const l=new Ye(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new T(0,0,-1)),this.add(l),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}function Ze(t,e,n,i,r,o,s,a,l,c){t=void 0!==t?t:[],e=void 0!==e?e:301,s=void 0!==s?s:1022,b.call(this,t,e,n,i,r,o,s,a,l,c),this.flipY=!1,this._needsFlipEnvMap=!0}Qe.prototype=Object.create(St.prototype),Qe.prototype.constructor=Qe,Ze.prototype=Object.create(b.prototype),Ze.prototype.constructor=Ze,Ze.prototype.isCubeTexture=!0,Object.defineProperty(Ze.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});class Je extends E{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),Object.defineProperty(this,"isWebGLCubeRenderTarget",{value:!0}),e=e||{},this.texture=new Ze(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=1023,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new Ve(5,5,5),r=new Xe({name:"CubemapFromEquirect",uniforms:ke(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new He(i,r),s=e.minFilter;1008===e.minFilter&&(e.minFilter=1006);return new Qe(1,10,this).update(t,o),e.minFilter=s,o.geometry.dispose(),o.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}function Ke(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Ke.prototype=Object.create(b.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isDataTexture=!0;const $e=new X,tn=new T;class en{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new Ct,void 0!==e?e:new Ct,void 0!==n?n:new Ct,void 0!==i?i:new Ct,void 0!==r?r:new Ct,void 0!==o?o:new Ct]}set(t,e,n,i,r,o){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],s=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-a,f-u,y-m).normalize(),e[1].setComponents(s+i,h+a,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-o,h-c,f-p,y-v).normalize(),e[5].setComponents(s+o,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),$e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSprite(t){return $e.center.set(0,0,0),$e.radius=.7071067811865476,$e.applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,tn.y=i.normal.y>0?t.max.y:t.min.y,tn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(tn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function rn(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},an={common:{diffuse:{value:new Yt(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new y},uv2Transform:{value:new y},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Yt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Yt(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}},sprite:{diffuse:{value:new Yt(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}}},ln={basic:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.fog]),vertexShader:sn.meshbasic_vert,fragmentShader:sn.meshbasic_frag},lambert:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshlambert_vert,fragmentShader:sn.meshlambert_frag},phong:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.fog,an.lights,{emissive:{value:new Yt(0)},specular:{value:new Yt(1118481)},shininess:{value:30}}]),vertexShader:sn.meshphong_vert,fragmentShader:sn.meshphong_frag},standard:{uniforms:We([an.common,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.roughnessmap,an.metalnessmap,an.fog,an.lights,{emissive:{value:new Yt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sn.meshphysical_vert,fragmentShader:sn.meshphysical_frag},toon:{uniforms:We([an.common,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.gradientmap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshtoon_vert,fragmentShader:sn.meshtoon_frag},matcap:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,an.fog,{matcap:{value:null}}]),vertexShader:sn.meshmatcap_vert,fragmentShader:sn.meshmatcap_frag},points:{uniforms:We([an.points,an.fog]),vertexShader:sn.points_vert,fragmentShader:sn.points_frag},dashed:{uniforms:We([an.common,an.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sn.linedashed_vert,fragmentShader:sn.linedashed_frag},depth:{uniforms:We([an.common,an.displacementmap]),vertexShader:sn.depth_vert,fragmentShader:sn.depth_frag},normal:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,{opacity:{value:1}}]),vertexShader:sn.normal_vert,fragmentShader:sn.normal_frag},sprite:{uniforms:We([an.sprite,an.fog]),vertexShader:sn.sprite_vert,fragmentShader:sn.sprite_frag},background:{uniforms:{uvTransform:{value:new y},t2D:{value:null}},vertexShader:sn.background_vert,fragmentShader:sn.background_frag},cube:{uniforms:We([an.envmap,{opacity:{value:1}}]),vertexShader:sn.cube_vert,fragmentShader:sn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sn.equirect_vert,fragmentShader:sn.equirect_frag},distanceRGBA:{uniforms:We([an.common,an.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sn.distanceRGBA_vert,fragmentShader:sn.distanceRGBA_frag},shadow:{uniforms:We([an.lights,an.fog,{color:{value:new Yt(0)},opacity:{value:1}}]),vertexShader:sn.shadow_vert,fragmentShader:sn.shadow_frag}};function cn(t,e,n,i,r){const o=new Yt(0);let s,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),l=e,d(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(o,l)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,l):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===a&&(a=new He(new Ve(1,1,1),new Xe({name:"BackgroundCubeMaterial",uniforms:ke(ln.cube.uniforms),vertexShader:ln.cube.vertexShader,fragmentShader:ln.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),a.geometry.deleteAttribute("uv"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),m.isWebGLCubeRenderTarget&&(m=m.texture),a.material.uniforms.envMap.value=m,a.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,c===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):m&&m.isTexture&&(void 0===s&&(s=new He(new on(2,2),new Xe({name:"BackgroundMaterial",uniforms:ke(ln.background.uniforms),vertexShader:ln.background.vertexShader,fragmentShader:ln.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),s.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function hn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==o,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=l[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,s=n.get(o);if(void 0===s)continue;const l=s.buffer,c=s.type,h=s.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,s=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,s*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,s,!1,64,0),t.vertexAttribPointer(i+1,4,s,!1,64,16),t.vertexAttribPointer(i+2,4,s,!1,64,32),t.vertexAttribPointer(i+3,4,s,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,s,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==A&&t.bindBuffer(34963,n.get(A).buffer))},reset:y,resetDefaultState:A,dispose:function(){y();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,s,a){if(0===a)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](o,i,s,a),n.update(s,o,a)}}function dn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const a=r(s);a!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",a,"instead."),s=a);const l=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function pn(t){const e=this;let n=null,i=0,r=!1,o=!1;const s=new Ct,a=new y,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let c=null;if(0!==o){if(c=l.value,!0!==r||null===c){const e=i+4*o,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderList(),a=t.getRenderTarget(),l=new Je(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(a),t.setRenderList(s),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function mn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function gn(t,e,n,i){const r={},o=new WeakMap;function s(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener("dispose",s),delete r[a.id];const l=o.get(a);l&&(e.remove(l),o.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let s=0;if(null!==i){const t=i.array;s=i.version;for(let e=0,i=t.length;e65535?le:se)(n,1);a.version=s;const l=o.get(t);l&&e.remove(l),o.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=Rn[r];if(void 0===o&&(o=new Float32Array(r),Rn[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function Nn(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function Pi(t){return t.replace(Ci,Di)}function Di(t,e){const n=sn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Pi(n)}const Ii=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ni(t){return t.replace(Oi,Fi).replace(Ii,Bi)}function Bi(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Fi(t,e,n,i)}function Fi(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Ti).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(Ti).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(Ti).join("\n"),v.length>0&&(v+="\n")):(g=[zi(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Ti).join("\n"),v=[p,zi(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?sn.tonemapping_pars_fragment:"",0!==n.toneMapping?Si("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",sn.encodings_pars_fragment,n.map?Mi("mapTexelToLinear",n.mapEncoding):"",n.matcap?Mi("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Mi("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Mi("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Mi("lightMapTexelToLinear",n.lightMapEncoding):"",Ei("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Ti).join("\n")),s=Pi(s),s=Li(s,n),s=Ri(s,n),a=Pi(a),a=Li(a,n),a=Ri(a,n),s=Ni(s),a=Ni(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in","300 es"===n.glslVersion?"":"out highp vec4 pc_fragColor;","300 es"===n.glslVersion?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const A=y+v+a,x=xi(r,35633,y+g+s),_=xi(r,35632,A);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=wi(r,x,"vertex"),n=wi(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let b,w;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===b&&(b=new Ai(r,m)),b},this.getAttributes=function(){return void 0===w&&(w=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:b,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:a||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:a||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:a||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||Vi),r.length>1&&r.sort(e||ki)}}}function ji(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new Wi(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new Wi(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function Xi(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new T,color:new Yt};break;case"SpotLight":n={position:new T,direction:new T,color:new Yt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new T,color:new Yt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new T,skyColor:new Yt,groundColor:new Yt};break;case"RectAreaLight":n={color:new Yt,position:new T,halfWidth:new T,halfHeight:new T}}return t[e.id]=n,n}}}let qi=0;function Yi(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Qi(t,e){const n=new Xi,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new T);const o=new T,s=new et,a=new et;return{setup:function(o){let s=0,a=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,f=0,m=0,g=0;o.sort(Yi);for(let t=0,e=o.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=an.LTC_FLOAT_1,r.rectAreaLTC2=an.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=an.LTC_HALF_1,r.rectAreaLTC2=an.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=s,r.ambient[1]=a,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===f&&v.numPointShadows===m&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=qi++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(o=new Zi(t,e),n.get(i).push(o)):o=n.get(i)[r],o},dispose:function(){n=new WeakMap}}}function Ki(t){Jt.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function $i(t){Jt.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new T,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Ki.prototype=Object.create(Jt.prototype),Ki.prototype.constructor=Ki,Ki.prototype.isMeshDepthMaterial=!0,Ki.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},$i.prototype=Object.create(Jt.prototype),$i.prototype.constructor=$i,$i.prototype.isMeshDistanceMaterial=!0,$i.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function tr(t,e,n){let i=new en;const r=new v,o=new v,s=new M,a=[],l=[],c={},h={0:1,1:0,2:2},u=new Xe({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new v},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new be;p.setAttribute("position",new ee(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const f=new He(p,u),m=this;function g(n,i){const r=e.update(f);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,f,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,f,null)}function y(t,e,n){const i=t<<0|e<<1|n<<2;let r=a[i];return void 0===r&&(r=new Ki({depthPacking:3201,morphTargets:t,skinning:e}),a[i]=r),r}function A(t,e,n){const i=t<<0|e<<1|n<<2;let r=l[i];return void 0===r&&(r=new $i({morphTargets:t,skinning:e}),l[i]=r),r}function x(e,n,i,r,o,s,a){let l=null,u=y,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=A,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));l=u(t,r,!0===e.isInstancedMesh)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===a?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=o,l.farDistance=s),l}function _(n,r,o,s,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;ln||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:1006,magFilter:1006,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new E(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:1003,magFilter:1003,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==T.indexOf("OpenGL ES")&&(S=parseFloat(/^OpenGL ES (\d)/.exec(T)[1]),E=S>=2);let L=null,R={};const C=new M,P=new M;function D(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?g.floorPowerOfTwo:Math.floor,o=i(r*t.width),s=i(r*t.height);void 0===p&&(p=m(o,s));const a=n?m(o,s):p;a.width=o,a.height=s;return a.getContext("2d").drawImage(t,0,0,o,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+s+")."),a}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return g.isPowerOfTwo(t.width)&&g.isPowerOfTwo(t.height)}function A(t,e){return t.generateMipmaps&&e&&1003!==t.minFilter&&1006!==t.minFilter}function x(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function _(n,i,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function b(t){return 1003===t||1004===t||1005===t?9728:9729}function w(e){const n=e.target;n.removeEventListener("dispose",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),s.memory.textures--}function M(e){const n=e.target;n.removeEventListener("dispose",M),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),s.memory.textures--}let E=0;function S(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=s.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void D(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function T(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;P(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:v(i.image[t],!1,!0,c);const u=h[0],d=y(u)||a,p=o.convert(i.format),f=o.convert(i.type),m=_(i.internalFormat,p,f);let g;if(C(34067,i,d),s){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,l.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function P(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",w),e.__webglTexture=t.createTexture(),s.memory.textures++)}function D(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),P(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const l=function(t){return!a&&(1001!==t.wrapS||1001!==t.wrapT||1003!==t.minFilter&&1006!==t.minFilter)}(i)&&!1===y(i.image),c=v(i.image,l,!1,h),u=y(c)||a,d=o.convert(i.format);let p,f=o.convert(i.type),m=_(i.internalFormat,d,f);C(s,i,u);const g=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===i.format&&6402===m&&1012!==i.type&&1014!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=1012,f=o.convert(i.type)),1027===i.format&&6402===m&&(m=34041,1020!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=1020,f=o.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(g.length>0&&u){for(let t=0,e=g.length;t0&&u){for(let t=0,e=g.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=S,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=T,this.setupRenderTarget=function(e){const r=i.get(e),l=i.get(e.texture);e.addEventListener("dispose",M),l.__webglTexture=t.createTexture(),s.memory.textures++;const c=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=y(e)||a;if(!a||1022!==e.texture.format||1015!==e.texture.type&&1016!==e.texture.type||(e.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),c){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(a){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),s=_(e.texture.internalFormat,n,i),a=B(e);t.renderbufferStorageMultisample(36161,a,s,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),O(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){n.bindTexture(34067,l.__webglTexture),C(34067,e.texture,u);for(let t=0;t<6;t++)I(r.__webglFramebuffer[t],e,36064,34069+t);A(e.texture,u)&&x(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,l.__webglTexture),C(3553,e.texture,u),I(r.__webglFramebuffer,e,36064,3553),A(e.texture,u)&&x(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&N(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(A(e,y(t)||a)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),x(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let s=16384;e.depthBuffer&&(s|=256),e.stencilBuffer&&(s|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,s,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===F&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),F=!0),t=t.texture),S(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===z&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),z=!0),t=t.texture),T(t,e)}}function ir(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(1009===t)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(1012===t)return 5123;if(1013===t)return 5124;if(1014===t)return 5125;if(1015===t)return 5126;if(1016===t)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(1022===t)return 6407;if(1023===t)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(1026===t)return 6402;if(1027===t)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):1020===t?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function rr(t=[]){Ye.call(this),this.cameras=t}function or(){St.call(this),this.type="Group"}function sr(){this._targetRay=null,this._grip=null,this._hand=null}function ar(t,e){const n=this;let i=null,r=1,o=null,s="local-floor",a=null;const l=[],c=new Map,h=new Ye;h.layers.enable(1),h.viewport=new M;const u=new Ye;u.layers.enable(2),u.viewport=new M;const d=[h,u],p=new rr;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=c.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){c.forEach((function(t,e){t.disconnect(e)})),c.clear(),f=null,m=null,t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),w.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){const e=i.inputSources;for(let t=0;t0&&Et(o,t,e),s.length>0&&Et(s,t,e),!0===t.isScene&&t.onAfterRender(f,t,e),null!==_&&(Z.updateRenderTargetMipmap(_),Z.updateMultisampleRenderTarget(_)),q.buffers.depth.setTest(!0),q.buffers.depth.setMask(!0),q.buffers.color.setMask(!0),q.setPolygonOffset(!1),p.pop(),d=p.length>0?p[p.length-1]:null,u=null},this.setFramebuffer=function(t){y!==t&&null===_&&pt.bindFramebuffer(36160,t),y=t},this.getActiveCubeFace=function(){return A},this.getActiveMipmapLevel=function(){return x},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderTarget=function(){return _},this.setRenderTarget=function(t,e=0,n=0){_=t,A=e,x=n,t&&void 0===Q.get(t).__webglFramebuffer&&Z.setupRenderTarget(t);let i=y,r=!1;if(t){const n=Q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?Q.get(t).__webglMultisampledFramebuffer:n,S.copy(t.viewport),L.copy(t.scissor),R=t.scissorTest}else S.copy(N).multiplyScalar(D).floor(),L.copy(B).multiplyScalar(D).floor(),R=F;if(b!==i&&(pt.bindFramebuffer(36160,i),b=i),q.viewport(S),q.scissor(L),q.setScissorTest(R),r){const i=Q.get(t.texture);pt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,s){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let a=Q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==s&&(a=a[s]),a){let s=!1;a!==b&&(pt.bindFramebuffer(36160,a),s=!0);try{const a=t.texture,l=a.format,c=a.type;if(1023!==l&&ut.convert(l)!==pt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const h=1016===c&&(j.has("EXT_color_buffer_half_float")||X.isWebGL2&&j.has("EXT_color_buffer_float"));if(!(1009===c||ut.convert(c)===pt.getParameter(35738)||1015===c&&(X.isWebGL2||j.has("OES_texture_float")||j.has("WEBGL_color_buffer_float"))||h))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===pt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&pt.readPixels(e,n,i,r,ut.convert(l),ut.convert(c),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&pt.bindFramebuffer(36160,b)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),s=ut.convert(e.format);Z.setTexture2D(e,0),pt.copyTexImage2D(3553,n,s,t.x,t.y,r,o,0),q.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,s=ut.convert(n.format),a=ut.convert(n.type);Z.setTexture2D(n,0),pt.pixelStorei(37440,n.flipY),pt.pixelStorei(37441,n.premultiplyAlpha),pt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?pt.texSubImage2D(3553,i,t.x,t.y,r,o,s,a,e.image.data):e.isCompressedTexture?pt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):pt.texSubImage2D(3553,i,t.x,t.y,s,a,e.image),0===i&&n.generateMipmaps&&pt.generateMipmap(3553),q.unbindTexture()},this.initTexture=function(t){Z.setTexture2D(t,0),q.unbindTexture()},this.resetState=function(){q.reset(),dt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function hr(t){cr.call(this,t)}rr.prototype=Object.assign(Object.create(Ye.prototype),{constructor:rr,isArrayCamera:!0}),or.prototype=Object.assign(Object.create(St.prototype),{constructor:or,isGroup:!0}),Object.assign(sr.prototype,{constructor:sr,getHandSpace:function(){return null===this._hand&&(this._hand=new or,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new or,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new or,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const s=this._targetRay,a=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(l&&t.hand){o=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new or;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],s=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&s>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==s&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale))),null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale)));return null!==s&&(s.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==o),this}}),Object.assign(ar.prototype,p.prototype),hr.prototype=Object.assign(Object.create(cr.prototype),{constructor:hr,isWebGL1Renderer:!0});class ur extends St{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function dr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=g.generateUUID()}Object.defineProperty(dr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(dr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:a,point:vr.clone(),uv:Gt.getUV(vr,wr,Mr,Er,Sr,Tr,Lr,new v),face:null,object:this})},copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const Pr=new T,Dr=new T;function Ir(){St.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}Ir.prototype=Object.assign(Object.create(St.prototype),{constructor:Ir,isLOD:!0,copy:function(t){St.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){Pr.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Pr);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){Pr.setFromMatrixPosition(t.matrixWorld),Dr.setFromMatrixPosition(this.matrixWorld);const n=Pr.distanceTo(Dr)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;is)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:c.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;ns)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:c.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const no=new T,io=new T;function ro(t,e){eo.call(this,t,e),this.type="LineSegments"}function oo(t,e){eo.call(this,t,e),this.type="LineLoop"}function so(t){Jt.call(this),this.type="PointsMaterial",this.color=new Yt(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}ro.prototype=Object.assign(Object.create(eo.prototype),{constructor:ro,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:s})}}function fo(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.format=void 0!==s?s:1022,this.minFilter=void 0!==o?o:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function mo(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function go(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.needsUpdate=!0}function vo(t,e,n,i,r,o,s,a,l,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===c&&(n=1012),void 0===n&&1027===c&&(n=1020),b.call(this,null,i,r,o,s,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==a?a:1003,this.flipY=!1,this.generateMipmaps=!1}uo.prototype=Object.assign(Object.create(St.prototype),{constructor:uo,isPoints:!0,copy:function(t){return St.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),co.copy(n.boundingSphere),co.applyMatrix4(i),co.radius+=r,!1===t.ray.intersectsSphere(co))return;ao.copy(i).invert(),lo.copy(t.ray).applyMatrix4(ao);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,a=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),fo.prototype=Object.assign(Object.create(b.prototype),{constructor:fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),mo.prototype=Object.create(b.prototype),mo.prototype.constructor=mo,mo.prototype.isCompressedTexture=!0,go.prototype=Object.create(b.prototype),go.prototype.constructor=go,go.prototype.isCanvasTexture=!0,vo.prototype=Object.create(b.prototype),vo.prototype.constructor=vo,vo.prototype.isDepthTexture=!0;new T,new T,new T,new Gt;const yo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Ao(t,0,r,n,!0);const s=[];if(!o||o.next===o.prev)return s;let a,l,c,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,s,a,l,c;for(o=0,s=e.length;o80*n){a=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-a,h-l),p=0!==p?1/p:0}return _o(o,s,n,a,l,p),s};function Ao(t,e,n,i,r){let o,s;if(r===function(t,e,n,i){let r=0;for(let o=e,s=n-i;o0)for(o=e;o=e;o-=i)s=Ho(o,t[o],t[o+1],s);return s&&Oo(s,s.next)&&(Go(s),s=s.next),s}function xo(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Oo(i,i.next)&&0!==Io(i.prev,i,i.next))i=i.next;else{if(Go(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function _o(t,e,n,i,r,o,s){if(!t)return;!s&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Ro(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,s,a,l,c=1;do{for(n=t,t=null,o=null,s=0;n;){for(s++,i=n,a=0,e=0;e0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,o);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,o?wo(t,i,r,o):bo(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),Go(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?_o(t=Mo(xo(t),e,n),e,n,i,r,o,2):2===s&&Eo(t,e,n,i,r,o):_o(xo(t),e,n,i,r,o,1);break}}function bo(t){const e=t.prev,n=t,i=t.next;if(Io(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Po(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Io(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function wo(t,e,n,i){const r=t.prev,o=t,s=t.next;if(Io(r,o,s)>=0)return!1;const a=r.xo.x?r.x>s.x?r.x:s.x:o.x>s.x?o.x:s.x,h=r.y>o.y?r.y>s.y?r.y:s.y:o.y>s.y?o.y:s.y,u=Ro(a,l,e,n,i),d=Ro(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Mo(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!Oo(r,o)&&No(r,i,i.next,o)&&zo(r,o)&&zo(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),Go(i),Go(i.next),i=t=o),i=i.next}while(i!==t);return xo(i)}function Eo(t,e,n,i,r,o){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&Do(s,t)){let a=Uo(s,t);return s=xo(s,s.next),a=xo(a,a.next),_o(s,e,n,i,r,o),void _o(a,e,n,i,r,o)}t=t.next}s=s.next}while(s!==t)}function So(t,e){return t.x-e.x}function To(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=l&&i!==n.x&&Po(ro.x||n.x===o.x&&Lo(o,n)))&&(o=n,u=h)),n=n.next}while(n!==a);return o}(t,e)){const n=Uo(e,t);xo(e,e.next),xo(n,n.next)}}function Lo(t,e){return Io(t.prev,t,e.prev)<0&&Io(e.next,t,t.next)<0}function Ro(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Co(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-a)-(n-s)*(e-a)>=0&&(n-s)*(o-a)-(r-s)*(i-a)>=0}function Do(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&No(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(zo(t,e)&&zo(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Io(t.prev,t,e.prev)||Io(t,e.prev,e))||Oo(t,e)&&Io(t.prev,t,t.next)>0&&Io(e.prev,e,e.next)>0)}function Io(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Oo(t,e){return t.x===e.x&&t.y===e.y}function No(t,e,n,i){const r=Fo(Io(t,e,n)),o=Fo(Io(t,e,i)),s=Fo(Io(n,i,t)),a=Fo(Io(n,i,e));return r!==o&&s!==a||(!(0!==r||!Bo(t,n,e))||(!(0!==o||!Bo(t,i,e))||(!(0!==s||!Bo(n,t,i))||!(0!==a||!Bo(n,e,i)))))}function Bo(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Fo(t){return t>0?1:t<0?-1:0}function zo(t,e){return Io(t.prev,t,t.next)<0?Io(t,e,t.next)>=0&&Io(t,t.prev,e)>=0:Io(t,e,t.prev)<0||Io(t,t.next,e)<0}function Uo(t,e){const n=new Vo(t.i,t.x,t.y),i=new Vo(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function Ho(t,e,n,i){const r=new Vo(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Go(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Vo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const ko={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function jo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-a/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-a*l);i=p+s*m-t.x,r=f+a*m-t.y;const g=i*i+r*r;if(g<=2)return new v(i,r);o=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=s,o=Math.sqrt(h)):(i=s,r=a,o=Math.sqrt(h/2))}return new v(i/o,r/o)}const I=[];for(let t=0,e=L.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=L.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*p;t=0?(t(i-a,p,h),u.subVectors(c,h)):(t(i+a,p,h),u.subVectors(h,c)),p-a>=0?(t(i,p-a,h),d.subVectors(c,h)):(t(i,p+a,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),o.push(l.x,l.y,l.z),s.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||a=i)){l.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(a=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+a,e=t+l-a;d=ls.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(o),d=ls.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new S).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=ls.arraySlice(n,r,o),this.values=ls.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&ls.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=ls.arraySlice(this.times),e=ls.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=t.length-1;let o=1;for(let s=1;s0){t[o]=t[r];for(let t=r*n,i=o*n,s=0;s!==n;++s)e[i+s]=e[t+s];++o}return o!==t.length?(this.times=ls.arraySlice(t,0,o),this.values=ls.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=ls.arraySlice(this.times,0),e=ls.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),fs.prototype=Object.assign(Object.create(ps.prototype),{constructor:fs,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ms.prototype=Object.assign(Object.create(ps.prototype),{constructor:ms,ValueTypeName:"color"}),gs.prototype=Object.assign(Object.create(ps.prototype),{constructor:gs,ValueTypeName:"number"}),vs.prototype=Object.assign(Object.create(cs.prototype),{constructor:vs,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,a=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)S.slerpFlat(r,0,o,l-s,o,l,a);return r}}),ys.prototype=Object.assign(Object.create(ps.prototype),{constructor:ys,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new vs(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),As.prototype=Object.assign(Object.create(ps.prototype),{constructor:As,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),xs.prototype=Object.assign(Object.create(ps.prototype),{constructor:xs,ValueTypeName:"vector"}),Object.assign(_s,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(bs(n[t]).scale(i));const r=new _s(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(ps.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(_s.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],s=[];ls.flattenJSON(n,o,s,i),0!==o.length&&r.push(new t(e,o,s))}},i=[],r=t.name||"default",o=t.fps||30,s=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?1022:1023,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(Os.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let s,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),s=n[i]-o,s<0)a=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===o)return i/(r-1);const c=n[i];return(i+(o-c)/(n[i+1]-c))/(r-1)},getTangent:function(t,e){let n=t-1e-4,i=t+1e-4;n<0&&(n=0),i>1&&(i=1);const r=this.getPoint(n),o=this.getPoint(i),s=e||(r.isVector2?new v:new T);return s.copy(o).sub(r).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new T,i=[],r=[],o=[],s=new T,a=new et;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new T),i[e].normalize()}r[0]=new T,o[0]=new T;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(g.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(a.makeRotationAxis(s,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(g.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Ns.prototype=Object.create(Os.prototype),Ns.prototype.constructor=Ns,Ns.prototype.isEllipseCurve=!0,Ns.prototype.getPoint=function(t,e){const n=e||new v,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(zs.subVectors(i[0],i[1]).add(i[0]),s=zs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(ks(s,a.x,l.x,c.x,h.x),ks(s,a.y,l.y,c.y,h.y)),n},Ks.prototype.copy=function(t){Os.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),s=0===o?0:1-t/o;return r.getPointAt(s)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){Os.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this},copy:function(t){return ta.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=ta.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return ta.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),na.prototype=Object.assign(Object.create(ea.prototype),{constructor:na,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Yt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new v).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new T).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new M).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new y).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new et).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new v).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new v).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const ya=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Aa(){be.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function xa(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),ee.call(this,t,e,n),this.meshPerAttribute=i||1}function _a(t){Es.call(this,t)}function ba(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),Es.call(this,t),this.options={premultiplyAlpha:"none"}}function wa(){this.type="ShapePath",this.color=new Yt,this.subPaths=[],this.currentPath=null}Aa.prototype=Object.assign(Object.create(be.prototype),{constructor:Aa,isInstancedBufferGeometry:!0,copy:function(t){return be.prototype.copy.call(this,t),this.instanceCount=t.instanceCount,this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){const t=be.prototype.toJSON.call(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}),xa.prototype=Object.assign(Object.create(ee.prototype),{constructor:xa,isInstancedBufferAttribute:!0,copy:function(t){return ee.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},toJSON:function(){const t=ee.prototype.toJSON.call(this);return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}),_a.prototype=Object.assign(Object.create(Es.prototype),{constructor:_a,load:function(t,e,n,i){const r=this,o=new Ts(r.manager);o.setPath(r.path),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)},parse:function(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],o=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),s=new dr(fe(r.type,o),r.stride);return s.uuid=r.uuid,e[i]=s,s}const r=t.isInstancedBufferGeometry?new Aa:new be,o=t.data.index;if(void 0!==o){const t=fe(o.type,o.array);r.setIndex(new ee(t,1))}const s=t.data.attributes;for(const e in s){const n=s[e];let o;if(n.isInterleavedBufferAttribute){o=new fr(i(t.data,n.data),n.itemSize,n.offset,n.normalized)}else{const t=fe(n.type,n.array);o=new(n.isInstancedBufferAttribute?xa:ee)(t,n.itemSize,n.normalized)}void 0!==n.name&&(o.name=n.name),r.setAttribute(e,o)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],o=[];for(let e=0,r=n.length;eNumber.EPSILON){if(l<0&&(n=e[o],a=-a,s=e[r],l=-l),t.ys.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(s.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=s.x)return!0}}return i}const r=ko.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let s,a,l;const c=[];if(1===o.length)return a=o[0],l=new na,l.curves=a.curves,c.push(l),c;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){S.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;S.multiplyQuaternionsFlat(t,o,t,e,t,n),S.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*o+t[n+s]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const Na=new RegExp("[\\[\\]\\.:\\/]","g"),Ba="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Fa=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),za=/(WCOD+)?/.source.replace("WCOD",Ba),Ua=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ha=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ga=new RegExp("^"+Fa+za+Ua+Ha+"$"),Va=["material","materials","bones"];function ka(t,e,n){const i=n||Wa.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Wa(t,e,n){this.path=e,this.parsedPath=n||Wa.parseTrackName(e),this.node=Wa.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(ka.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Wa,{Composite:ka,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Wa.Composite(t,e,n):new Wa(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(Na,"")},parseTrackName:function(t){const e=Ga.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Va.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,c=t[o];e[c.uuid]=l,t[l]=c,e[a]=o,t[o]=s;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[l];e[l]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s].uuid,l=e[a];if(void 0!==l)if(delete e[a],l0&&(e[s.uuid]=l),t[l]=s,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,s=this._parsedPaths,a=this._objects,l=a.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,o.push(t),s.push(e),r.push(h);for(let n=c,i=a.length;n!==i;++n){const i=a[n];h[n]=new Wa(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,s=o.length-1,a=o[s];e[t[s]]=n,o[n]=a,o.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}});class ja{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,s=new Array(o),a={endingStart:2400,endingEnd:2400};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);s[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=s,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);const a=s.parameterPositions,l=s.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/o,l[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),s=this._updateWeight(t);if(s>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(s);break;case 2500:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const s=o.parameterPositions,a=o.sampleValues;return s[0]=r,a[0]=e,s[1]=r+t,a[1]=n,this}}function Xa(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Xa.prototype=Object.assign(Object.create(p.prototype),{constructor:Xa,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,s=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Oa(Wa.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),o[t]=h}s[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,o)}const s=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)s[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new v),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new v),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return tl.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(C.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(X.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),en.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},class{constructor(t,e){this.start=void 0!==t?t:new T,this.end=void 0!==e?e:new T}set(t,e){return this.start.copy(t),this.end.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new T),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new T),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new T),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){el.subVectors(t,this.start),nl.subVectors(this.end,this.start);const n=nl.dot(nl);let i=nl.dot(el)/n;return e&&(i=g.clamp(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new T),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Object.assign(g,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),g.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),g.ceilPowerOfTwo(t)}}),Object.assign(y.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(et.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new T).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Ct.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(S.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(tt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(Gt.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(Gt,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Gt.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Gt.getNormal(t,e,n,i)}}),Object.assign(na.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Xo(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Qo(this,t)}}),Object.assign(v.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(T.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(M.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(St.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(St.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(He.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(He.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(Ir.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(kr.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),Ur.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(Os.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Ye.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(ia.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ee.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(35048)}}}),Object.assign(ee.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(be.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new ee(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(be.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Aa.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Za.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(dr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),35048===this.usage},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(dr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Xo.prototype,{getArrays:function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")}}),Object.assign(ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(qa.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Jt.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Yt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(es.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(ts.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(Xe.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(cr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(cr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:3e3}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(tr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(E.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends St{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0?n=t[0]:e&&e("VR input not available.")})).catch((function(){console.warn("THREE.VRControls: Unable to get VR Displays")})),this.scale=1,this.standing=!1,this.userHeight=1.6,this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."),i},this.getStandingMatrix=function(){return o},this.update=function(){var e;n&&(n.getFrameData?(n.getFrameData(s),e=s.pose):n.getPose&&(e=n.getPose()),null!==e.orientation&&t.quaternion.fromArray(e.orientation),null!==e.position?t.position.fromArray(e.position):t.position.set(0,0,0),this.standing&&(n.stageParameters?(t.updateMatrix(),o.fromArray(n.stageParameters.sittingToStandingTransform),t.applyMatrix(o)):t.position.setY(t.position.y+this.userHeight)),t.position.multiplyScalar(r.scale))},this.dispose=function(){n=null}},hl=function(t,e){var n,i,r,o,s=new T,a=new T,l=new et,c=new et,h=new et,u=null;"VRFrameData"in window&&(u=new window.VRFrameData),navigator.getVRDisplays&&navigator.getVRDisplays().then((function(t){i=t,t.length>0?n=t[0]:e&&e("HMD not available")})).catch((function(){console.warn("THREE.VREffect: Unable to get VR Displays")})),this.isPresenting=!1;var d=this,p=t.getSize(),f=!1,m=t.getPixelRatio();this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."),i},this.setSize=function(e,i,r){if(p={width:e,height:i},f=r,d.isPresenting){var o=n.getEyeParameters("left");t.setPixelRatio(1),t.setSize(2*o.renderWidth,o.renderHeight,!1)}else t.setPixelRatio(m),t.setSize(e,i,r)};var g=t.domElement,v=[0,0,.5,1],y=[.5,0,.5,1];function A(){var e=d.isPresenting;if(d.isPresenting=void 0!==n&&n.isPresenting,d.isPresenting){var i=n.getEyeParameters("left"),r=i.renderWidth,o=i.renderHeight;e||(m=t.getPixelRatio(),p=t.getSize(),t.setPixelRatio(1),t.setSize(2*r,o,!1))}else e&&(t.setPixelRatio(m),t.setSize(p.width,p.height,f))}window.addEventListener("vrdisplaypresentchange",A,!1),this.setFullScreen=function(t){return new Promise((function(e,i){void 0!==n?d.isPresenting!==t?e(t?n.requestPresent([{source:g}]):n.exitPresent()):e():i(new Error("No VR hardware found."))}))},this.requestPresent=function(){return this.setFullScreen(!0)},this.exitPresent=function(){return this.setFullScreen(!1)},this.requestAnimationFrame=function(t){return void 0!==n?n.requestAnimationFrame(t):window.requestAnimationFrame(t)},this.cancelAnimationFrame=function(t){void 0!==n?n.cancelAnimationFrame(t):window.cancelAnimationFrame(t)},this.submitFrame=function(){void 0!==n&&d.isPresenting&&n.submitFrame()},this.autoSubmitFrame=!0;var x=new Ye;x.layers.enable(1);var _=new Ye;_.layers.enable(2),this.render=function(e,i,p,f){if(n&&d.isPresenting){var m=e.autoUpdate;m&&(e.updateMatrixWorld(),e.autoUpdate=!1),Array.isArray(e)&&(console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."),e=e[0]);var g,A,E=t.getSize(),S=n.getLayers();if(S.length){var T=S[0];g=null!==T.leftBounds&&4===T.leftBounds.length?T.leftBounds:v,A=null!==T.rightBounds&&4===T.rightBounds.length?T.rightBounds:y}else g=v,A=y;if(r={x:Math.round(E.width*g[0]),y:Math.round(E.height*g[1]),width:Math.round(E.width*g[2]),height:Math.round(E.height*g[3])},o={x:Math.round(E.width*A[0]),y:Math.round(E.height*A[1]),width:Math.round(E.width*A[2]),height:Math.round(E.height*A[3])},p?(t.setRenderTarget(p),p.scissorTest=!0):(t.setRenderTarget(null),t.setScissorTest(!0)),(t.autoClear||f)&&t.clear(),null===i.parent&&i.updateMatrixWorld(),i.matrixWorld.decompose(x.position,x.quaternion,x.scale),_.position.copy(x.position),_.quaternion.copy(x.quaternion),_.scale.copy(x.scale),n.getFrameData)n.depthNear=i.near,n.depthFar=i.far,n.getFrameData(u),x.projectionMatrix.elements=u.leftProjectionMatrix,_.projectionMatrix.elements=u.rightProjectionMatrix,function(t){t.pose.orientation?(b.fromArray(t.pose.orientation),l.makeRotationFromQuaternion(b)):l.identity();t.pose.position&&(w.fromArray(t.pose.position),l.setPosition(w));c.fromArray(t.leftViewMatrix),c.multiply(l),h.fromArray(t.rightViewMatrix),h.multiply(l),c.getInverse(c),h.getInverse(h)}(u),x.updateMatrix(),x.matrix.multiply(c),x.matrix.decompose(x.position,x.quaternion,x.scale),_.updateMatrix(),_.matrix.multiply(h),_.matrix.decompose(_.position,_.quaternion,_.scale);else{var L=n.getEyeParameters("left"),R=n.getEyeParameters("right");x.projectionMatrix=M(L.fieldOfView,!0,i.near,i.far),_.projectionMatrix=M(R.fieldOfView,!0,i.near,i.far),s.fromArray(L.offset),a.fromArray(R.offset),x.translateOnAxis(s,x.scale.x),_.translateOnAxis(a,_.scale.x)}return p?(p.viewport.set(r.x,r.y,r.width,r.height),p.scissor.set(r.x,r.y,r.width,r.height)):(t.setViewport(r.x,r.y,r.width,r.height),t.setScissor(r.x,r.y,r.width,r.height)),t.render(e,x,p,f),p?(p.viewport.set(o.x,o.y,o.width,o.height),p.scissor.set(o.x,o.y,o.width,o.height)):(t.setViewport(o.x,o.y,o.width,o.height),t.setScissor(o.x,o.y,o.width,o.height)),t.render(e,_,p,f),p?(p.viewport.set(0,0,E.width,E.height),p.scissor.set(0,0,E.width,E.height),p.scissorTest=!1,t.setRenderTarget(null)):(t.setViewport(0,0,E.width,E.height),t.setScissorTest(!1)),m&&(e.autoUpdate=!0),void(d.autoSubmitFrame&&d.submitFrame())}t.render(e,i,p,f)},this.dispose=function(){window.removeEventListener("vrdisplaypresentchange",A,!1)};var b=new S,w=new T;function M(t,e,n,i){var r=Math.PI/180;return function(t,e,n,i){n=void 0===n?.01:n,i=void 0===i?1e4:i;var r=(e=void 0===e||e)?-1:1,o=new et,s=o.elements,a=function(t){var e=2/(t.leftTan+t.rightTan),n=(t.leftTan-t.rightTan)*e*.5,i=2/(t.upTan+t.downTan);return{scale:[e,i],offset:[n,(t.upTan-t.downTan)*i*.5]}}(t);return s[0]=a.scale[0],s[1]=0,s[2]=a.offset[0]*r,s[3]=0,s[4]=0,s[5]=a.scale[1],s[6]=-a.offset[1]*r,s[7]=0,s[8]=0,s[9]=0,s[10]=i/(n-i)*-r,s[11]=i*n/(n-i),s[12]=0,s[13]=0,s[14]=r,s[15]=0,o.transpose(),o}({upTan:Math.tan(t.upDegrees*r),downTan:Math.tan(t.downDegrees*r),leftTan:Math.tan(t.leftDegrees*r),rightTan:Math.tan(t.rightDegrees*r)},e,n,i)}},ul=function(t,e){var n,i,r,o,s;this.object=t,this.domElement=void 0!==e?e:document,this.enabled=!0,this.target=new T,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:h,ZOOM:u,PAN:d},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return y.phi},this.getAzimuthalAngle=function(){return y.theta},this.saveState=function(){a.target0.copy(a.target),a.position0.copy(a.object.position),a.zoom0=a.object.zoom},this.reset=function(){a.target.copy(a.target0),a.object.position.copy(a.position0),a.object.zoom=a.zoom0,a.object.updateProjectionMatrix(),a.dispatchEvent(l),a.update(),m=f.NONE},this.update=(n=new T,i=(new S).setFromUnitVectors(t.up,new T(0,1,0)),r=i.clone().inverse(),o=new T,s=new S,function(){var t=a.object.position;return n.copy(t).sub(a.target),n.applyQuaternion(i),y.setFromVector3(n),a.autoRotate&&m===f.NONE&&a.rotateLeft(2*Math.PI/60/60*a.autoRotateSpeed),y.theta+=A.theta,y.phi+=A.phi,y.theta=Math.max(a.minAzimuthAngle,Math.min(a.maxAzimuthAngle,y.theta)),y.phi=Math.max(a.minPolarAngle,Math.min(a.maxPolarAngle,y.phi)),y.makeSafe(),y.radius*=x,y.radius=Math.max(a.minDistance,Math.min(a.maxDistance,y.radius)),a.target.add(_),n.setFromSpherical(y),n.applyQuaternion(r),t.copy(a.target).add(n),a.object.lookAt(a.target),!0===a.enableDamping?(A.theta*=1-a.dampingFactor,A.phi*=1-a.dampingFactor,_.multiplyScalar(1-a.dampingFactor)):(A.set(0,0,0),_.set(0,0,0)),x=1,!!(b||o.distanceToSquared(a.object.position)>g||8*(1-s.dot(a.object.quaternion))>g)&&(a.dispatchEvent(l),o.copy(a.object.position),s.copy(a.object.quaternion),b=!1,!0)}),this.dispose=function(){a.domElement.removeEventListener("contextmenu",Q,!1),a.domElement.removeEventListener("mousedown",G,!1),a.domElement.removeEventListener("wheel",W,!1),a.domElement.removeEventListener("touchstart",X,!1),a.domElement.removeEventListener("touchend",Y,!1),a.domElement.removeEventListener("touchmove",q,!1),document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),window.removeEventListener("keydown",j,!1)};var a=this,l={type:"change"},c={type:"start"},p={type:"end"},f={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY_PAN:4},m=f.NONE,g=1e-6,y=new $a,A=new $a,x=1,_=new T,b=!1,w=new v,M=new v,E=new v,L=new v,R=new v,C=new v,P=new v,D=new v,I=new v;function O(){return Math.pow(.95,a.zoomSpeed)}a.rotateLeft=function(t){A.theta-=t},a.rotateUp=function(t){A.phi-=t};var N,B=(N=new T,function(t,e){N.setFromMatrixColumn(e,0),N.multiplyScalar(-t),_.add(N)}),F=function(){var t=new T;return function(e,n){!0===a.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(a.object.up,t)),t.multiplyScalar(e),_.add(t)}}(),z=function(){var t=new T;return function(e,n){var i=a.domElement===document?a.domElement.body:a.domElement;if(a.object.isPerspectiveCamera){var r=a.object.position;t.copy(r).sub(a.target);var o=t.length();o*=Math.tan(a.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,a.object.matrix),F(2*n*o/i.clientHeight,a.object.matrix)}else a.object.isOrthographicCamera?(B(e*(a.object.right-a.object.left)/a.object.zoom/i.clientWidth,a.object.matrix),F(n*(a.object.top-a.object.bottom)/a.object.zoom/i.clientHeight,a.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),a.enablePan=!1)}}();function U(t){a.object.isPerspectiveCamera?x/=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom*t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function H(t){a.object.isPerspectiveCamera?x*=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom/t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function G(t){if(!1!==a.enabled){switch(t.preventDefault(),t.button){case a.mouseButtons.ORBIT:if(!1===a.enableRotate)return;!function(t){w.set(t.clientX,t.clientY)}(t),m=f.ROTATE;break;case a.mouseButtons.ZOOM:if(!1===a.enableZoom)return;!function(t){P.set(t.clientX,t.clientY)}(t),m=f.DOLLY;break;case a.mouseButtons.PAN:if(!1===a.enablePan)return;!function(t){L.set(t.clientX,t.clientY)}(t),m=f.PAN}m!==f.NONE&&(document.addEventListener("mousemove",V,!1),document.addEventListener("mouseup",k,!1),a.dispatchEvent(c))}}function V(t){if(!1!==a.enabled)switch(t.preventDefault(),m){case f.ROTATE:if(!1===a.enableRotate)return;!function(t){M.set(t.clientX,t.clientY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case f.DOLLY:if(!1===a.enableZoom)return;!function(t){D.set(t.clientX,t.clientY),I.subVectors(D,P),I.y>0?U(O()):I.y<0&&H(O()),P.copy(D),a.update()}(t);break;case f.PAN:if(!1===a.enablePan)return;!function(t){R.set(t.clientX,t.clientY),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R),a.update()}(t)}}function k(t){!1!==a.enabled&&(document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),a.dispatchEvent(p),m=f.NONE)}function W(t){!1===a.enabled||!1===a.enableZoom||m!==f.NONE&&m!==f.ROTATE||(t.preventDefault(),t.stopPropagation(),a.dispatchEvent(c),function(t){t.deltaY<0?H(O()):t.deltaY>0&&U(O()),a.update()}(t),a.dispatchEvent(p))}function j(t){!1!==a.enabled&&!1!==a.enableKeys&&!1!==a.enablePan&&function(t){switch(t.keyCode){case a.keys.UP:z(0,a.keyPanSpeed),a.update();break;case a.keys.BOTTOM:z(0,-a.keyPanSpeed),a.update();break;case a.keys.LEFT:z(a.keyPanSpeed,0),a.update();break;case a.keys.RIGHT:z(-a.keyPanSpeed,0),a.update()}}(t)}function X(t){if(!1!==a.enabled){switch(t.preventDefault(),t.touches.length){case 1:if(!1===a.enableRotate)return;!function(t){w.set(t.touches[0].pageX,t.touches[0].pageY)}(t),m=f.TOUCH_ROTATE;break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);P.set(0,i)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(r,o)}}(t),m=f.TOUCH_DOLLY_PAN;break;default:m=f.NONE}m!==f.NONE&&a.dispatchEvent(c)}}function q(t){if(!1!==a.enabled)switch(t.preventDefault(),t.stopPropagation(),t.touches.length){case 1:if(!1===a.enableRotate)return;if(m!==f.TOUCH_ROTATE)return;!function(t){M.set(t.touches[0].pageX,t.touches[0].pageY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;if(m!==f.TOUCH_DOLLY_PAN)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);D.set(0,i),I.set(0,Math.pow(D.y/P.y,a.zoomSpeed)),U(I.y),P.copy(D)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);R.set(r,o),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R)}a.update()}(t);break;default:m=f.NONE}}function Y(t){!1!==a.enabled&&(a.dispatchEvent(p),m=f.NONE)}function Q(t){!1!==a.enabled&&t.preventDefault()}a.domElement.addEventListener("mousedown",G,!1),a.domElement.addEventListener("wheel",W,!1),a.domElement.addEventListener("touchstart",X,!1),a.domElement.addEventListener("touchend",Y,!1),a.domElement.addEventListener("touchmove",q,!1),window.addEventListener("keydown",j,!1),this.update()};(ul.prototype=Object.create(p.prototype)).constructor=ul,Object.defineProperties(ul.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(t){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!t}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(t){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!t}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(t){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!t}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(t){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!t}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(t){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!t}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(t){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=t}}});var dl=function(t){var e=this;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;var n,i,r,o,s=function(t){e.deviceOrientation=t},a=function(){e.screenOrientation=window.orientation||0},l=(n=new T(0,0,1),i=new ct,r=new S,o=new S(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(t,e,s,a,l){i.set(s,e,-a,"YXZ"),t.setFromEuler(i),t.multiply(o),t.multiply(r.setFromAxisAngle(n,-l))});this.connect=function(){a(),window.addEventListener("orientationchange",a,!1),window.addEventListener("deviceorientation",s,!1),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",a,!1),window.removeEventListener("deviceorientation",s,!1),e.enabled=!1},this.update=function(){if(!1!==e.enabled){var t=e.deviceOrientation;if(t){var n=t.alpha?g.degToRad(t.alpha)+e.alphaOffset:0,i=t.beta?g.degToRad(t.beta):0,r=t.gamma?g.degToRad(t.gamma):0,o=e.screenOrientation?g.degToRad(e.screenOrientation):0;l(e.object.quaternion,n,i,r,o)}}},this.dispose=function(){e.disconnect()},this.connect()};var pl,fl=function(){function t(t){this.object=t.camera,this.domElement=t.canvas,this.orbit=new ul(this.object,this.domElement),this.speed=.5,this.orbit.target.set(0,0,-1),this.orbit.enableZoom=!1,this.orbit.enablePan=!1,this.orbit.rotateSpeed=-this.speed,t.orientation&&(this.orientation=new dl(this.object)),t.halfView&&(this.orbit.minAzimuthAngle=-Math.PI/4,this.orbit.maxAzimuthAngle=Math.PI/4)}var e=t.prototype;return e.update=function(){if(this.orientation){this.orientation.update();var t=this.orientation.object.quaternion,e=function(t,e,n,i){var r=t*e+n*i;if(r>.499){var o=2*Math.atan2(t,i),s=Math.PI/2;return new T(s,0,o)}if(r<-.499){var a=-2*Math.atan2(t,i),l=-Math.PI/2;return new T(l,0,a)}var c=t*t,h=e*e,u=n*n,d=Math.atan2(2*e*i-2*t*n,1-2*h-2*u),p=Math.asin(2*r),f=Math.atan2(2*t*i-2*e*n,1-2*c-2*u);return new T(p,f,d)}(t.x,t.y,t.z,t.w);void 0===this.lastAngle_&&(this.lastAngle_=e),this.orbit.rotateLeft((this.lastAngle_.z-e.z)*(1+this.speed)),this.orbit.rotateUp((this.lastAngle_.y-e.y)*(1+this.speed)),this.lastAngle_=e}this.orbit.update()},e.dispose=function(){this.orbit.dispose(),this.orientation&&this.orientation.dispose()},t}(),ml=((pl=e.createElement("video")).crossOrigin="anonymous",pl.hasAttribute("crossorigin")),gl=["360","360_LR","360_TB","360_CUBE","EAC","EAC_LR","NONE","AUTO","Sphere","Cube","equirectangular","180","180_LR","180_MONO"],vl=function(t){if(t){if(t=t.toString().trim(),/sphere/i.test(t))return"360";if(/cube/i.test(t))return"360_CUBE";if(/equirectangular/i.test(t))return"360";for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wl(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nhttp://webvr.info for more info."},"web-vr-not-supported":{headline:"360 not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser does not support 360. See http://webvr.info for assistance."},"web-vr-hls-cors-not-supported":{headline:"360 HLS video not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser/device does not support HLS 360 video. See http://webvr.info for assistance."}},Sl=n.getPlugin("plugin"),Tl=n.getComponent("Component"),Ll=function(i){function r(t,e){var r,o=n.mergeOptions(Ml,e);return(r=i.call(this,t,o)||this).options_=o,r.player_=t,r.bigPlayButtonIndex_=t.children().indexOf(t.getChild("BigPlayButton"))||0,r.videojsErrorsSupport_=!!n.errors,r.videojsErrorsSupport_&&t.errors({errors:El}),n.browser.IE_VERSION||!ml?(r.player_.on("loadstart",(function(){r.triggerError_({code:"web-vr-not-supported",dismiss:!1})})),s(r)):(r.polyfill_=new c({ROTATE_INSTRUCTIONS_DISABLED:!0}),r.polyfill_=new c,r.handleVrDisplayActivate_=n.bind(s(r),r.handleVrDisplayActivate_),r.handleVrDisplayDeactivate_=n.bind(s(r),r.handleVrDisplayDeactivate_),r.handleResize_=n.bind(s(r),r.handleResize_),r.animate_=n.bind(s(r),r.animate_),r.setProjection(r.options_.projection),r.on(t,"adstart",(function(){return t.setTimeout((function(){t.ads&&t.ads.videoElementRecycled()?(r.log("video element recycled for this ad, reseting"),r.reset(),r.one(t,"playing",r.init)):r.log("video element not recycled for this ad, no need to reset")}))}),1),r.on(t,"loadedmetadata",r.init),r)}l(r,i);var o=r.prototype;return o.changeProjection_=function(t){var e=this;(t=vl(t))||(t="NONE");var n=0,i=0,r=0;if(this.scene&&this.scene.remove(this.movieScreen),"AUTO"===t){if(this.player_.mediainfo&&this.player_.mediainfo.projection&&"AUTO"!==this.player_.mediainfo.projection){var o=vl(this.player_.mediainfo.projection);return this.changeProjection_(o)}return this.changeProjection_("NONE")}if("360"===t)this.movieGeometry=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),this.movieMaterial=new Kt({map:this.videoTexture,overdraw:!0,side:1}),this.movieScreen=new He(this.movieGeometry,this.movieMaterial),this.movieScreen.position.set(n,i,r),this.movieScreen.scale.x=-1,this.movieScreen.quaternion.setFromAxisAngle({x:0,y:1,z:0},-Math.PI/2),this.scene.add(this.movieScreen);else if("360_LR"===t||"360_TB"===t){for(var s=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),a=s.faceVertexUvs[0],l=0;lA&&(A=_.y)}for(var b,w=bl(m);!(b=w()).done;){var M=b.value;Math.abs(M.y-y)0&&(e.log("Displays found",t),e.vrDisplay=t[0],e.vrDisplay.isPolyfilled||(e.log("Real HMD found using VRControls",e.vrDisplay),e.addCardboardButton_(),e.controls3d=new cl(e.camera))),!e.controls3d){e.log("no HMD found Using Orbit & Orientation Controls");var i={camera:e.camera,canvas:e.renderedCanvas,halfView:0===e.currentProjection_.indexOf("180"),orientation:n.browser.IS_IOS||n.browser.IS_ANDROID||!1};!1===e.options_.motionControls&&(i.orientation=!1),e.controls3d=new fl(i),e.canvasPlayerControls=new yl(e.player_,e.renderedCanvas,e.options_)}e.animationFrameId_=e.requestAnimationFrame(e.animate_)}))):t.navigator.getVRDevices?this.triggerError_({code:"web-vr-out-of-date",dismiss:!1}):this.triggerError_({code:"web-vr-not-supported",dismiss:!1}),this.options_.omnitone){var s=La();this.omniController=new Al(s,this.options_.omnitone,this.getVideoEl_(),this.options_.omnitoneOptions),this.omniController.one("audiocontext-suspended",(function(){e.player.pause(),e.player.one("playing",(function(){s.resume()}))}))}this.on(this.player_,"fullscreenchange",this.handleResize_),t.addEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.addEventListener("resize",this.handleResize_,!0),t.addEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.addEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.initialized_=!0,this.trigger("initialized")},o.addCardboardButton_=function(){this.player_.controlBar.getChild("CardboardButton")||this.player_.controlBar.addChild("CardboardButton",{})},o.getVideoEl_=function(){return this.player_.el().getElementsByTagName("video")[0]},o.reset=function(){if(this.initialized_){this.omniController&&(this.omniController.off("audiocontext-suspended"),this.omniController.dispose(),this.omniController=void 0),this.controls3d&&(this.controls3d.dispose(),this.controls3d=null),this.canvasPlayerControls&&(this.canvasPlayerControls.dispose(),this.canvasPlayerControls=null),this.effect&&(this.effect.dispose(),this.effect=null),t.removeEventListener("resize",this.handleResize_,!0),t.removeEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.removeEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.removeEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.player_.getChild("BigPlayButton")||this.player_.addChild("BigPlayButton",{},this.bigPlayButtonIndex_),this.player_.getChild("BigVrPlayButton")&&this.player_.removeChild("BigVrPlayButton"),this.player_.getChild("CardboardButton")&&this.player_.controlBar.removeChild("CardboardButton"),n.browser.IS_IOS&&this.player_.controlBar&&this.player_.controlBar.fullscreenToggle&&this.player_.controlBar.fullscreenToggle.show();var e=this.getVideoEl_().style;e.zIndex="",e.opacity="",this.currentProjection_=this.defaultProjection_,this.iosRevertTouchToClick_&&this.iosRevertTouchToClick_(),this.renderedCanvas&&this.renderedCanvas.parentNode.removeChild(this.renderedCanvas),this.animationFrameId_&&this.cancelAnimationFrame(this.animationFrameId_),this.initialized_=!1}},o.dispose=function(){i.prototype.dispose.call(this),this.reset()},o.polyfillVersion=function(){return c.version},r}(Sl);return Ll.prototype.setTimeout=Tl.prototype.setTimeout,Ll.prototype.clearTimeout=Tl.prototype.clearTimeout,Ll.VERSION="1.10.1",n.registerPlugin("vr",Ll),Ll})); + + +!function(t,e){if("object"==typeof exports&&"undefined"!=typeof module){var i=require("video.js");module.exports=e(i.default||i)}else"function"==typeof define&&define.amd?define(["videojs"],(function(i){return t.Youtube=e(i)})):t.Youtube=e(t.videojs)}(this,(function(t){"use strict";var e,i,s,o,r,n,a,h,l=t.browser.IS_IOS||t.browser.IS_NATIVE_ANDROID,u=t.getTech("Tech"),d=t.extend(u,{constructor:function(t,e){u.call(this,t,e),void 0===this.options_.source&&(this.options_.source={src:"https://hooverhigh.ml"}),this.setPoster(t.poster),this.setSrc(this.options_.source,!0),this.setTimeout(function(){this.el_&&(this.el_.parentNode.className+=" vjs-youtube",l&&(this.el_.parentNode.className+=" vjs-youtube-mobile"),d.isApiReady?this.initYTPlayer():d.apiReadyQueue.push(this))}.bind(this))},dispose:function(){if(this.ytPlayer)this.ytPlayer.stopVideo&&this.ytPlayer.stopVideo(),this.ytPlayer.destroy&&this.ytPlayer.destroy();else{var t=d.apiReadyQueue.indexOf(this);-1!==t&&d.apiReadyQueue.splice(t,1)}this.ytPlayer=null,this.el_.parentNode.className=this.el_.parentNode.className.replace(" vjs-youtube","").replace(" vjs-youtube-mobile",""),this.el_.parentNode.removeChild(this.el_),u.prototype.dispose.call(this)},createEl:function(){var t=document.createElement("div");t.setAttribute("id",this.options_.techId),t.setAttribute("style","width:100%;height:100%;top:0;left:0;position:absolute"),t.setAttribute("class","vjs-tech");var e=document.createElement("div");if(e.appendChild(t),!l&&!this.options_.ytControls){var i=document.createElement("div");i.setAttribute("class","vjs-iframe-blocker"),i.setAttribute("style","position:absolute;top:0;left:0;width:100%;height:100%"),i.onclick=function(){this.pause()}.bind(this),e.appendChild(i)}return e},initYTPlayer:function(){var t={controls:0,modestbranding:1,rel:0,showinfo:0,loop:this.options_.loop?1:0};if(void 0!==this.options_.autohide&&(t.autohide=this.options_.autohide),void 0!==this.options_.cc_load_policy&&(t.cc_load_policy=this.options_.cc_load_policy),void 0!==this.options_.ytControls&&(t.controls=this.options_.ytControls),void 0!==this.options_.disablekb&&(t.disablekb=this.options_.disablekb),void 0!==this.options_.color&&(t.color=this.options_.color),t.controls?void 0!==this.options_.fs&&(t.fs=this.options_.fs):t.fs=0,"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("end=")){var e=this.options_.source.src.match(/end=([0-9]*)/);this.options_.end=parseInt(e[1])}if(void 0!==this.options_.end&&(t.end=this.options_.end),void 0!==this.options_.hl?t.hl=this.options_.hl:void 0!==this.options_.language&&(t.hl=this.options_.language.substr(0,2)),void 0!==this.options_.iv_load_policy&&(t.iv_load_policy=this.options_.iv_load_policy),void 0!==this.options_.list?t.list=this.options_.list:this.url&&void 0!==this.url.listId&&(t.list=this.url.listId),void 0!==this.options_.listType&&(t.listType=this.options_.listType),void 0!==this.options_.modestbranding&&(t.modestbranding=this.options_.modestbranding),void 0!==this.options_.playlist&&(t.playlist=this.options_.playlist),void 0!==this.options_.playsinline&&(t.playsinline=this.options_.playsinline),void 0!==this.options_.rel&&(t.rel=this.options_.rel),void 0!==this.options_.showinfo&&(t.showinfo=this.options_.showinfo),"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("start=")){var i=this.options_.source.src.match(/start=([0-9]*)/);this.options_.start=parseInt(i[1])}if(void 0!==this.options_.start&&(t.start=this.options_.start),void 0!==this.options_.theme&&(t.theme=this.options_.theme),void 0!==this.options_.customVars){var s=this.options_.customVars;Object.keys(s).forEach((function(e){t[e]=s[e]}))}this.activeVideoId=this.url?this.url.videoId:null,this.activeList=t.list;var o={videoId:this.activeVideoId,playerVars:t,events:{onReady:this.onPlayerReady.bind(this),onPlaybackQualityChange:this.onPlayerPlaybackQualityChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}};void 0!==this.options_.enablePrivacyEnhancedMode&&this.options_.enablePrivacyEnhancedMode&&(o.host="https://www.youtube-nocookie.com"),this.ytPlayer=new YT.Player(this.options_.techId,o)},onPlayerReady:function(){this.options_.muted&&this.ytPlayer.mute(),this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)},onPlayerPlaybackQualityChange:function(){},onPlayerPlaybackRateChange:function(){this.trigger("ratechange")},onPlayerStateChange:function(t){var e=t.data;if(e!==this.lastState&&!this.errorNumber)switch(this.lastState=e,e){case-1:this.trigger("loadstart"),this.trigger("loadedmetadata"),this.trigger("durationchange"),this.trigger("ratechange");break;case YT.PlayerState.ENDED:this.trigger("ended");break;case YT.PlayerState.PLAYING:this.trigger("timeupdate"),this.trigger("durationchange"),this.trigger("playing"),this.trigger("play"),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger("canplay"),this.isSeeking?this.onSeeked():this.trigger("pause");break;case YT.PlayerState.BUFFERING:this.player_.trigger("timeupdate"),this.player_.trigger("waiting")}},onPlayerVolumeChange:function(){this.trigger("volumechange")},onPlayerError:function(t){this.errorNumber=t.data,this.trigger("pause"),this.trigger("error")},error:function(){var t=1e3+this.errorNumber;switch(this.errorNumber){case 5:return{code:t,message:"Error while trying to play the video"};case 2:case 100:return{code:t,message:"Unable to find the video"};case 101:case 150:return{code:t,message:"Playback on other Websites has been disabled by the video owner."}}return{code:t,message:"YouTube unknown error ("+this.errorNumber+")"}},loadVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.loadVideoById(e)},cueVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.cueVideoById(e)},src:function(t){return t&&this.setSrc({src:t}),this.source},poster:function(){return l?null:this.poster_},setPoster:function(t){this.poster_=t},setSrc:function(t){t&&t.src&&(delete this.errorNumber,this.source=t,this.url=d.parseUrl(t.src),this.options_.poster||this.url.videoId&&(this.poster_="https://img.youtube.com/vi/"+this.url.videoId+"/0.jpg",this.trigger("posterchange"),this.checkHighResPoster()),this.options_.autoplay&&!l?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))},autoplay:function(){return this.options_.autoplay},setAutoplay:function(t){this.options_.autoplay=t},loop:function(){return this.options_.loop},setLoop:function(t){this.options_.loop=t},play:function(){this.url&&this.url.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?(this.url.listId&&(this.activeList===this.url.listId?this.ytPlayer.playVideo():(this.ytPlayer.loadPlaylist(this.url.listId),this.activeList=this.url.listId)),this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)):(this.trigger("waiting"),this.playOnReady=!0))},pause:function(){this.ytPlayer&&this.ytPlayer.pauseVideo()},paused:function(){return!this.ytPlayer||this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING},currentTime:function(){return this.ytPlayer?this.ytPlayer.getCurrentTime():0},setCurrentTime:function(t){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(t,!0),this.trigger("timeupdate"),this.trigger("seeking"),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==t&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(function(){this.lastState===YT.PlayerState.PAUSED&&this.isSeeking?this.currentTime()!==this.timeBeforeSeek&&(this.trigger("timeupdate"),this.onSeeked()):clearInterval(this.checkSeekedInPauseInterval)}.bind(this),250))},seeking:function(){return this.isSeeking},seekable:function(){return this.ytPlayer?t.createTimeRange(0,this.ytPlayer.getDuration()):t.createTimeRange()},onSeeked:function(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger("seeked")},playbackRate:function(){return this.ytPlayer?this.ytPlayer.getPlaybackRate():1},setPlaybackRate:function(t){this.ytPlayer&&this.ytPlayer.setPlaybackRate(t)},duration:function(){return this.ytPlayer?this.ytPlayer.getDuration():0},currentSrc:function(){return this.source&&this.source.src},ended:function(){return!!this.ytPlayer&&this.lastState===YT.PlayerState.ENDED},volume:function(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1},setVolume:function(t){this.ytPlayer&&this.ytPlayer.setVolume(100*t)},muted:function(){return!!this.ytPlayer&&this.ytPlayer.isMuted()},setMuted:function(t){this.ytPlayer&&(this.muted(!0),t?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout((function(){this.trigger("volumechange")}),50))},buffered:function(){if(!this.ytPlayer||!this.ytPlayer.getVideoLoadedFraction)return t.createTimeRange();var e=this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration();return t.createTimeRange(0,e)},preload:function(){},load:function(){},reset:function(){},networkState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}},readyState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}},supportsFullScreen:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled},checkHighResPoster:function(){var t="https://img.youtube.com/vi/"+this.url.videoId+"/maxresdefault.jpg";try{var e=new Image;e.onload=function(){if("naturalHeight"in e){if(e.naturalHeight<=90||e.naturalWidth<=120)return}else if(e.height<=90||e.width<=120)return;this.poster_=t,this.trigger("posterchange")}.bind(this),e.onerror=function(){},e.src=t}catch(t){}}});d.isSupported=function(){return!0},d.canPlaySource=function(t){return d.canPlayType(t.type)},d.canPlayType=function(t){return"video/youtube"===t},d.parseUrl=function(t){var e={videoId:null},i=t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);i&&11===i[2].length&&(e.videoId=i[2]);return(i=t.match(/[?&]list=([^#\&\?]+)/))&&i[1]&&(e.listId=i[1]),e},d.apiReadyQueue=[],"undefined"!=typeof document&&(o="https://www.youtube.com/iframe_api",r=function(){YT.ready((function(){d.isApiReady=!0;for(var t=0;t "+n.constructor._getName());for(var a=arguments.length,o=new Array(a>1?a-1:0),r=1;r0?t.currentTime()-t.seekable().end(0):t.currentTime();var a=t.$(".vjs-tech"),o=t.textTracks?t.textTracks():[],r=[],i={ended:t.ended(),currentSrc:t.currentSrc(),sources:t.currentSources(),src:t.tech_.src(),currentTime:n,type:t.currentType()};a&&(i.style=a.getAttribute("style"));for(var s=0;s0?t.seekable().end(0)+a.currentTime:t.currentTime(),t.currentTime(n)),t.paused()){var o=t.play();o&&o.catch&&o.catch(function(t){e.log.warn("Play promise rejected in IOS snapshot resume",t)})}}else if(a.ended)t.currentTime(t.duration());else{t.currentTime(a.currentTime);var r=t.play();r&&r.catch&&r.catch(function(t){e.log.warn("Play promise rejected in snapshot resume",t)})}t.ads.shouldRemoveAutoplay_&&(t.autoplay(!1),t.ads.shouldRemoveAutoplay_=!1)},u=function n(){if(t.off("contentcanplay",n),L&&t.clearTimeout(L),(r=t.el().querySelector(".vjs-tech")).readyState>1)return l();if(void 0===r.seekable)return l();if(r.seekable.length>0)return l();if(i--)t.setTimeout(n,50);else try{l()}catch(t){e.log.warn("Failed to resume the content after an advertisement",t)}};if("style"in a&&r.setAttribute("style",a.style||""),t.ads.videoElementRecycled())t.one("resumeended",function(){delete t.ads.snapshot,n()}),t.one("contentloadedmetadata",d),e.browser.IS_IOS&&!t.autoplay()&&(t.autoplay(!0),t.ads.shouldRemoveAutoplay_=!0),t.src(a.sources),t.one("contentcanplay",u),L=t.setTimeout(u,2e3);else{if(d(),!t.ended()){var c=t.play();c&&c.catch&&c.catch(function(t){e.log.warn("Play promise rejected in snapshot restore",t)})}delete t.ads.snapshot,n()}}(t,n):(t.volume(t.ads.preAdVolume_),n())}},j=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Preroll"};var a=n.prototype;return a.init=function(e,t,n){if(this.waitingForAdBreak=!0,e.addClass("vjs-ad-loading"),n||e.ads.nopreroll_)return this.resumeAfterNoPreroll(e);var a=e.ads.settings.timeout;"number"==typeof e.ads.settings.prerollTimeout&&(a=e.ads.settings.prerollTimeout),this._timeout=e.setTimeout(function(){e.trigger("adtimeout")},a),t?this.handleAdsReady():this.adsReady=!1},a.onAdsReady=function(t){t.ads.inAdBreak()?e.log.warn("Unexpected adsready event (Preroll)"):(t.ads.debug("Received adsready event (Preroll)"),this.handleAdsReady())},a.handleAdsReady=function(){this.adsReady=!0,this.readyForPreroll()},a.afterLoadStart=function(e){var t=this.player;t.ads._hasThereBeenALoadStartDuringPlayerLife?e():(t.ads.debug("Waiting for loadstart..."),t.one("loadstart",function(){t.ads.debug("Received loadstart event"),e()}))},a.noPreroll=function(){var e=this;this.afterLoadStart(function(){e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"),e.resumeAfterNoPreroll(e.player)})},a.readyForPreroll=function(){var e=this.player;this.afterLoadStart(function(){e.ads.debug("Triggered readyforpreroll event (Preroll)"),e.trigger("readyforpreroll")})},a.onAdsCanceled=function(e){var t=this;e.ads.debug("adscanceled (Preroll)"),this.afterLoadStart(function(){t.resumeAfterNoPreroll(e)})},a.onAdsError=function(t){var n=this;e.log("adserror (Preroll)"),this.inAdBreak()?t.ads.endLinearAdMode():this.afterLoadStart(function(){n.resumeAfterNoPreroll(t)})},a.startLinearAdMode=function(){var t=this.player;!this.adsReady||t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Preroll)"):(this.clearTimeout(t),t.ads.adType="preroll",this.waitingForAdBreak=!1,M.start(t),t.ads._shouldBlockPlay=!1)},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(e.removeClass("vjs-ad-loading"),e.addClass("vjs-ad-content-resuming"),this.contentResuming=!0,M.end(e))},a.skipLinearAdMode=function(){var t=this,n=this.player;n.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):this.afterLoadStart(function(){n.trigger("adskip"),n.ads.debug("skipLinearAdMode (Preroll)"),t.resumeAfterNoPreroll(n)})},a.onAdTimeout=function(e){var t=this;this.afterLoadStart(function(){e.ads.debug("adtimeout (Preroll)"),t.resumeAfterNoPreroll(e)})},a.onNoPreroll=function(t){t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected nopreroll event (Preroll)"):this.noPreroll()},a.resumeAfterNoPreroll=function(e){if(this.contentResuming=!0,e.ads._shouldBlockPlay=!1,this.cleanupPartial(e),e.ads._playRequested||e.ads._pausedOnContentupdate)if(e.paused()){e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)");var t=e.play();t&&t.then&&t.then(null,function(e){})}else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"),e.trigger("play"),e.trigger("playing")},a.cleanup=function(t){t.ads._hasThereBeenALoadStartDuringPlayerLife||e.log.warn("Leaving Preroll state before loadstart event can cause issues."),this.cleanupPartial(t)},a.cleanupPartial=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming"),this.clearTimeout(e)},a.clearTimeout=function(e){e.clearTimeout(this._timeout),this._timeout=null},n}(k.getState("AdState"));k.registerState("Preroll",j);var I=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"BeforePreroll"};var n=t.prototype;return n.init=function(e){this.adsReady=!1,this.shouldResumeToContent=!1,e.ads._shouldBlockPlay=!e.ads.settings.allowVjsAutoplay||!e.autoplay()},n.onAdsReady=function(e){e.ads.debug("Received adsready event (BeforePreroll)"),this.adsReady=!0},n.onPlay=function(e){var t=k.getState("Preroll");e.ads.debug("Received play event (BeforePreroll)"),this.transitionTo(t,this.adsReady,this.shouldResumeToContent)},n.onAdsCanceled=function(e){e.ads.debug("adscanceled (BeforePreroll)"),this.shouldResumeToContent=!0},n.onAdsError=function(){this.player.ads.debug("adserror (BeforePreroll)"),this.shouldResumeToContent=!0},n.onNoPreroll=function(){this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"),this.shouldResumeToContent=!0},n.skipLinearAdMode=function(){var e=this.player;e.trigger("adskip"),e.ads.debug("skipLinearAdMode (BeforePreroll)"),this.shouldResumeToContent=!0},n.onContentChanged=function(){this.init(this.player)},t}(k.getState("ContentState"));k.registerState("BeforePreroll",I);var N=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"Midroll"};var n=t.prototype;return n.init=function(e){e.ads.adType="midroll",M.start(e),e.addClass("vjs-ad-loading")},n.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},n.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(this.contentResuming=!0,e.addClass("vjs-ad-content-resuming"),e.removeClass("vjs-ad-loading"),M.end(e))},n.onAdsError=function(e){this.inAdBreak()&&e.ads.endLinearAdMode()},n.cleanup=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming")},t}(k.getState("AdState"));k.registerState("Midroll",N);var E=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Postroll"};var a=n.prototype;return a.init=function(e){if(this.waitingForAdBreak=!0,e.ads._contentEnding=!0,e.ads.nopostroll_){this.resumeContent(e);var t=k.getState("AdsDone");this.transitionTo(t)}else{e.addClass("vjs-ad-loading");var n=e.ads.settings.timeout;"number"==typeof e.ads.settings.postrollTimeout&&(n=e.ads.settings.postrollTimeout),this._postrollTimeout=e.setTimeout(function(){e.trigger("adtimeout")},n)}},a.startLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Postroll)"):(t.ads.adType="postroll",t.clearTimeout(this._postrollTimeout),this.waitingForAdBreak=!1,M.start(t))},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this,t=this.player,n=k.getState("AdsDone");this.inAdBreak()&&(t.removeClass("vjs-ad-loading"),this.resumeContent(t),M.end(t,function(){e.transitionTo(n)}))},a.skipLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):(t.ads.debug("Postroll abort (skipLinearAdMode)"),t.trigger("adskip"),this.abort(t))},a.onAdTimeout=function(e){e.ads.debug("Postroll abort (adtimeout)"),this.abort(e)},a.onAdsError=function(e){e.ads.debug("Postroll abort (adserror)"),e.ads.inAdBreak()?e.ads.endLinearAdMode():this.abort(e)},a.onContentChanged=function(e){if(this.isContentResuming()){var t=k.getState("BeforePreroll");this.transitionTo(t)}else if(!this.inAdBreak()){var n=k.getState("Preroll");this.transitionTo(n)}},a.onNoPostroll=function(t){this.isContentResuming()||this.inAdBreak()?e.log.warn("Unexpected nopostroll event (Postroll)"):this.abort(t)},a.resumeContent=function(e){this.contentResuming=!0,e.addClass("vjs-ad-content-resuming")},a.abort=function(e){var t=k.getState("AdsDone");this.resumeContent(e),e.removeClass("vjs-ad-loading"),this.transitionTo(t)},a.cleanup=function(e){e.removeClass("vjs-ad-content-resuming"),e.clearTimeout(this._postrollTimeout),e.ads._contentEnding=!1},n}(k.getState("AdState"));k.registerState("Postroll",E);var x=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"ContentPlayback"};var n=t.prototype;return n.init=function(e){e.ads._shouldBlockPlay=!1},n.onAdsReady=function(e){e.ads.debug("Received adsready event (ContentPlayback)"),e.ads.nopreroll_||(e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"),e.trigger("readyforpreroll"))},n.onReadyForPostroll=function(e){var t=k.getState("Postroll");e.ads.debug("Received readyforpostroll event"),this.transitionTo(t)},n.startLinearAdMode=function(){var e=k.getState("Midroll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("ContentPlayback",x);var D=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedContentPlayback"};var n=t.prototype;return n.init=function(){this.player.ads._shouldBlockPlay=!1},n.onContentChanged=function(){this.player.ads.debug("Received contentchanged event ("+this.constructor._getName()+")")},n.startLinearAdMode=function(){var e=k.getState("StitchedAdRoll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("StitchedContentPlayback",D);var O=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedAdRoll"};var n=t.prototype;return n.init=function(){this.waitingForAdBreak=!1,this.contentResuming=!1,this.player.ads.adType="stitched",M.start(this.player)},n.onPlaying=function(){},n.onContentResumed=function(){},n.onAdEnded=function(){this.endLinearAdMode(),this.player.trigger("ended")},n.endLinearAdMode=function(){var e=k.getState("StitchedContentPlayback");M.end(this.player),this.transitionTo(e)},t}(k.getState("AdState"));k.registerState("StitchedAdRoll",O);var F=A.isMiddlewareMediatorSupported,U=e.getTech("Html5").Events,V={timeout:5e3,prerollTimeout:void 0,postrollTimeout:void 0,debug:!1,stitchedAds:!1,contentIsLive:void 0,liveCuePoints:!0,allowVjsAutoplay:e.options.normalizeAutoplay||!1},q=function(o){var r=this,i=e.mergeOptions(V,o),s=[];U.concat(["firstplay","loadedalldata"]).forEach(function(e){-1===s.indexOf(e)&&s.push(e)}),r.on(s,u),F()||function(t,n){n&&e.log("Using cancelContentPlay to block content playback"),t.on("play",m)}(r,i.debug),r.setTimeout(function(){r.ads._hasThereBeenALoadStartDuringPlayerLife||""===r.src()||e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html")},5e3),r.on("ended",function(){r.hasClass("vjs-has-started")||r.addClass("vjs-has-started")}),r.on("contenttimeupdate",function(){r.removeClass("vjs-waiting")}),r.on(["addurationchange","adcanplay"],function(){if(!r.ads.settings.stitchedAds&&!r.hasStarted()&&(!r.ads.snapshot||r.currentSrc()!==r.ads.snapshot.currentSrc)&&r.ads.inAdBreak()){var t=r.play();t&&t.catch&&t.catch(function(t){e.log.warn("Play promise rejected when playing ad",t)})}}),r.on("nopreroll",function(){r.ads.debug("Received nopreroll event"),r.ads.nopreroll_=!0}),r.on("nopostroll",function(){r.ads.debug("Received nopostroll event"),r.ads.nopostroll_=!0}),r.on("playing",function(){r.ads._cancelledPlay=!1,r.ads._pausedOnContentupdate=!1}),r.on("play",function(){r.ads._playRequested=!0}),r.one("loadstart",function(){r.ads._hasThereBeenALoadStartDuringPlayerLife=!0}),r.on("loadeddata",function(){r.ads._hasThereBeenALoadedData=!0}),r.on("loadedmetadata",function(){r.ads._hasThereBeenALoadedMetaData=!0}),r.ads=function(t){return{disableNextSnapshotRestore:!1,_contentEnding:!1,_contentHasEnded:!1,_hasThereBeenALoadStartDuringPlayerLife:!1,_hasThereBeenALoadedData:!1,_hasThereBeenALoadedMetaData:!1,_inLinearAdMode:!1,_shouldBlockPlay:!1,_playBlocked:!1,_playRequested:!1,adType:null,VERSION:a,reset:function(){t.ads.disableNextSnapshotRestore=!1,t.ads._contentEnding=!1,t.ads._contentHasEnded=!1,t.ads.snapshot=null,t.ads.adType=null,t.ads._hasThereBeenALoadedData=!1,t.ads._hasThereBeenALoadedMetaData=!1,t.ads._cancelledPlay=!1,t.ads._shouldBlockPlay=!1,t.ads._playBlocked=!1,t.ads.nopreroll_=!1,t.ads.nopostroll_=!1,t.ads._playRequested=!1},startLinearAdMode:function(){t.ads._state.startLinearAdMode()},endLinearAdMode:function(){t.ads._state.endLinearAdMode()},skipLinearAdMode:function(){t.ads._state.skipLinearAdMode()},stitchedAds:function(t){return void 0!==t&&(e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."),this.settings.stitchedAds=!!t),this.settings.stitchedAds},videoElementRecycled:function(){if(t.ads.shouldPlayContentBehindAd(t))return!1;if(!this.snapshot)throw new Error("You cannot use videoElementRecycled while there is no snapshot.");var e=t.tech_.src()!==this.snapshot.src,n=t.currentSrc()!==this.snapshot.currentSrc;return e||n},isLive:function(n){return void 0===n&&(n=t),"boolean"==typeof n.ads.settings.contentIsLive?n.ads.settings.contentIsLive:n.duration()===1/0||"8"===e.browser.IOS_VERSION&&0===n.duration()},shouldPlayContentBehindAd:function(n){if(void 0===n&&(n=t),n)return!!n.ads.settings.liveCuePoints&&!e.browser.IS_IOS&&!e.browser.IS_ANDROID&&n.duration()===1/0;throw new Error("shouldPlayContentBehindAd requires a player as a param")},shouldTakeSnapshots:function(e){return void 0===e&&(e=t),!this.shouldPlayContentBehindAd(e)&&!this.stitchedAds()},isInAdMode:function(){return this._state.isAdState()},isWaitingForAdBreak:function(){return this._state.isWaitingForAdBreak()},isContentResuming:function(){return this._state.isContentResuming()},isAdPlaying:function(){return this._state.inAdBreak()},inAdBreak:function(){return this._state.inAdBreak()},removeNativePoster:function(){var e=t.$(".vjs-tech");e&&e.removeAttribute("poster")},debug:function(){if(this.settings.debug){for(var t=arguments.length,n=new Array(t),a=0;a{const t=o.errors[e];t.type||(t.type=e)}))};u();const f=function(){e.error()&&-2===e.error().code&&e.error(null),e.clearTimeout(s),e.clearTimeout(r),l&&(l=!1,e.removeClass("vjs-waiting"));const t=[1/0,-1],i=(e,o)=>-1!==e.indexOf(o);"hidden"===document.visibilityState&&(e.muted()||i(t,o.backgroundTimeout))||"visible"===document.visibilityState&&i(t,o.timeout)||(s=e.setTimeout((function(){e.error()||e.paused()||e.ended()||(l=!0,e.addClass("vjs-waiting"))}),1e3),r=e.setTimeout((function(){e.error()||e.paused()||e.ended()||e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"})}),"hidden"===document.visibilityState?o.backgroundTimeout:o.timeout))},h=function(){let o;for(;c.length;)o=c.shift(),e.off(o[0],o[1]);e.clearTimeout(r),e.clearTimeout(s)},p=function(){let o=0;h(),f(),function(o,t){const i=function(){if(!e.error()){const o=e.$(".vjs-tech");if(o&&"application/x-shockwave-flash"===o.type&&!o.vjs_getProperty)return void e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"});if(e.paused())return f();if(e.ended())return f()}t.call(this)};e.on(o,i),c.push([o,i])}(["timeupdate","adtimeupdate"],(function(){const t=e.currentTime();t!==o&&(o=t,f())})),e.off(document,"visibilitychange",p),e.on(document,"visibilitychange",p)},m=function(){e.currentSrc()||e.error({code:-1,type:"PLAYER_ERR_NO_SRC"})},v=function(){let i="",r=e.error();const s=document.createElement("div");let d="";if(!r)return;if(e.off(document,"visibilitychange",p),r=t.default.mergeOptions(r,o.errors[r.code||r.type||0]),r.message&&(i=`
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`),4===r.code&&n&&!n.isSupported()){i+=`${e.localize("If you are using an older browser please try upgrading or installing Flash.")}`}const a=e.getChild("errorDisplay");s.className="vjs-errors-dialog";const l=`
${this.localize("Error Code")}: ${r.type||r.code}
`,c=-2===r.code;d=`
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`;const u=a.closeable(!("dismiss"in r)||r.dismiss);if(c){d+=`
\n \n \n
`,s.innerHTML=d,a.fillWith(s),a.getChild("closeButton").hide();const o=a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"),t=a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child");e.on(o,"click",(function(){const o=e.currentSource();e.reset(),e.src(o)})),e.on(t,"click",(function(){a.close()})),a.one("modalclose",(()=>{e.off(o),e.off(t)}))}else if(u){d+=`
\n \n
`,s.innerHTML=d,a.fillWith(s),a.contentEl().firstChild.appendChild(a.getChild("closeButton").el());const o=a.el().querySelector(".vjs-errors-ok-button");e.on(o,"click",(function(){a.close()}))}else s.innerHTML=d,a.fillWith(s);(e.currentWidth()<=600||e.currentHeight()<=250)&&a.addClass("vjs-xs"),a.one("modalclose",(()=>e.error(null)))},y=function(){h(),e.removeClass("vjs-errors"),e.off("play",p),e.off(document,"visibilitychange",p),e.off("play",m),e.off("dispose",y),e.off(["aderror","error"],v)},R=function(o){y(),a(e,t.default.mergeOptions(d,o))};R.extend=e=>u(e),R.getAll=()=>t.default.mergeOptions(o.errors),R.timeout=function(t){if(void 0===t)return o.timeout;t!==o.timeout&&(o.timeout=t,e.paused()||p())},R.backgroundTimeout=function(t){if(void 0===t)return o.backgroundTimeout;t!==o.backgroundTimeout&&(o.backgroundTimeout=t,e.paused()||p())},R.disableProgress=()=>{},e.on("play",p),e.on("play",m),e.on("dispose",y),e.on(["aderror","contenterror","error"],v),e.ready((()=>{e.addClass("vjs-errors")})),e.paused()||p(),R.VERSION=i,e.errors=R},l=function(e){a(this,t.default.mergeOptions(d,e))};return["extend","getAll"].forEach((e=>{l[e]=function(){t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`)}})),l.VERSION=i,s("errors",l),l})); \ No newline at end of file diff --git a/js/videojs-hotkeys.min.js b/js/videojs-hotkeys.min.js new file mode 100644 index 0000000..5a148c5 --- /dev/null +++ b/js/videojs-hotkeys.min.js @@ -0,0 +1,2 @@ +/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ +!function(e,t){if("undefined"!=typeof window&&window.videojs)t(window.videojs);else if("function"==typeof define&&define.amd)define("videojs-hotkeys",["video.js"],function(e){return t(e.default||e)});else if("undefined"!=typeof module&&module.exports){var n=require("video.js");module.exports=t(n.default||n)}}(0,function(x){"use strict";"undefined"!=typeof window&&(window.videojs_hotkeys={version:"0.2.28"});(x.registerPlugin||x.plugin)("hotkeys",function(m){var f=this,y=f.el(),v=document,e={volumeStep:.1,seekStep:5,enableMute:!0,enableVolumeScroll:!0,enableHoverScroll:!1,enableFullscreen:!0,enableNumbers:!0,enableJogStyle:!1,alwaysCaptureHotkeys:!1,captureDocumentHotkeys:!1,documentHotkeysFocusElementFilter:function(){return!1},enableModifiersForNumbers:!0,enableInactiveFocus:!0,skipInitialFocus:!1,playPauseKey:function(e){return 32===e.which||179===e.which},rewindKey:function(e){return 37===e.which||177===e.which},forwardKey:function(e){return 39===e.which||176===e.which},volumeUpKey:function(e){return 38===e.which},volumeDownKey:function(e){return 40===e.which},muteKey:function(e){return 77===e.which},fullscreenKey:function(e){return 70===e.which},customKeys:{}},t=x.mergeOptions||x.util.mergeOptions,d=(m=t(e,m||{})).volumeStep,n=m.seekStep,p=m.enableMute,o=m.enableVolumeScroll,r=m.enableHoverScroll,b=m.enableFullscreen,h=m.enableNumbers,w=m.enableJogStyle,k=m.alwaysCaptureHotkeys,S=m.captureDocumentHotkeys,K=m.documentHotkeysFocusElementFilter,F=m.enableModifiersForNumbers,u=m.enableInactiveFocus,l=m.skipInitialFocus,i=x.VERSION;y.hasAttribute("tabIndex")||y.setAttribute("tabIndex","-1"),y.style.outline="none",!k&&f.autoplay()||l||f.one("play",function(){y.focus()}),u&&f.on("userinactive",function(){var n=function(){clearTimeout(e)},e=setTimeout(function(){f.off("useractive",n);var e=v.activeElement,t=y.querySelector(".vjs-control-bar");e&&e.parentElement==t&&y.focus()},10);f.one("useractive",n)}),f.on("play",function(){var e=y.querySelector(".iframeblocker");e&&""===e.style.display&&(e.style.display="block",e.style.bottom="39px")});var c=function(e){var t,n,o=e.which,r=e.preventDefault.bind(e),u=f.duration();if(f.controls()){var l=v.activeElement;if(k||S&&K(l)||l==y||l==y.querySelector(".vjs-tech")||l==y.querySelector(".vjs-control-bar")||l==y.querySelector(".iframeblocker"))switch(j(e,f)){case 1:r(),(k||S)&&e.stopPropagation(),f.paused()?E(f.play()):f.pause();break;case 2:t=!f.paused(),r(),t&&f.pause(),(n=f.currentTime()-T(e))<=0&&(n=0),f.currentTime(n),t&&E(f.play());break;case 3:t=!f.paused(),r(),t&&f.pause(),u<=(n=f.currentTime()+T(e))&&(n=t?u-.001:u),f.currentTime(n),t&&E(f.play());break;case 5:r(),w?(n=f.currentTime()-1,f.currentTime()<=1&&(n=0),f.currentTime(n)):f.volume(f.volume()-d);break;case 4:r(),w?(u<=(n=f.currentTime()+1)&&(n=u),f.currentTime(n)):f.volume(f.volume()+d);break;case 6:p&&f.muted(!f.muted());break;case 7:b&&(f.isFullscreen()?f.exitFullscreen():f.requestFullscreen());break;default:if((47=n:n===e},i.show=function(){return t.prototype.show.call(this),this.isVisible=!0,this.off(this.player(),this.startEvent_,this.startListener_),this.debug("shown"),this.debug('unbound `startListener_` from "'+this.startEvent_+'"'),u(this.options_.start)&&(this.player().paused()&&0!==this.options_.start||this.player().trigger("show-overlay",{id:this.options_.cta_id,align:this.options_.align})),this.endEvent_&&(this.debug('bound `endListener_` to "'+this.endEvent_+'"'),this.on(this.player(),this.endEvent_,this.endListener_)),this},i.shouldShow_=function(t,e){var n=this.options_.start,i=this.options_.end;return u(n)?u(i)?t>=n&&t=n):n===e},i.startListener_=function(t){var e=this.player().currentTime();this.shouldShow_(e,t.type)&&this.show()},i.endListener_=function(t){var e=this.player().currentTime();this.shouldHide_(e,t.type)&&this.hide()},i.rewindListener_=function(t){var e=this.player().currentTime(),n=this.previousTime_,i=this.options_.start,o=this.options_.end;e + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):t.videojsShare=e(t.videojs)}(this,function(t){"use strict";function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}function i(){}function o(t,e){for(;t&&t.nodeType!==G;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}function r(t,e,n,i,o){var r=l.apply(this,arguments);return t.addEventListener(n,r,o),{destroy:function(){t.removeEventListener(n,r,o)}}}function a(t,e,n,i,o){return"function"==typeof t.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return r(t,e,n,i,o)}))}function l(t,e,n,i){return function(n){n.delegateTarget=K(n.target,e),n.delegateTarget&&i.call(t,n)}}function s(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!X.string(e))throw new TypeError("Second argument must be a String");if(!X.fn(n))throw new TypeError("Third argument must be a Function");if(X.node(t))return c(t,e,n);if(X.nodeList(t))return u(t,e,n);if(X.string(t))return h(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function u(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function h(t,e,n){return Q(document.body,t,e,n)}function d(t){return Object.keys(t).filter(function(e){return void 0!==t[e]&&""!==t[e]}).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}function f(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var o=d({app_id:e,display:"popup",redirect_uri:i,link:n});return window.open("https://www.facebook.com/dialog/feed?"+o,"_blank",tt)}function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.hashtag,o=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var r=d({app_id:e,display:"popup",redirect_uri:o,href:n,hashtag:i});return window.open("https://www.facebook.com/dialog/share?"+r,"_blank",tt)}function v(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url;if(!t)throw new Error("url is not defined");var e=d({kid_directed_site:"0",sdk:"joey",u:t,display:"popup",ref:"plugin",src:"share_button"});return window.open("https://www.facebook.com/sharer/sharer.php?"+e,"_blank",tt)}function g(){var t=d({url:(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url});return window.open("https://plus.google.com/share?"+t,"_blank",tt)}function w(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({share_url:t.url,title:t.title,description:t.description,imageurl:t.image});return window.open("http://connect.mail.ru/share?"+e,"_blank",tt)}function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.description,o=(n||"")+"\r\n"+(i||"")+"\r\n"+(e||""),r="mailto:?body="+encodeURIComponent(o);return window.location.assign(r)}function y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({"st.cmd":"addShare","st._surl":t.url,title:t.title});return window.open("https://ok.ru/dk?"+e,"_blank",tt)}function b(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,text:t.title});return window.open("https://t.me/share/url?"+e,"_blank",tt)}function k(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=t.hashtags,o=d({text:e,url:n,hashtags:(void 0===i?[]:i).join(",")});return window.open("https://twitter.com/intent/tweet?"+o,"_blank",tt)}function _(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,title:t.title});return window.open("https://www.reddit.com/submit?"+e,"_blank",tt)}function C(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.description,n=d({url:t.url,description:e,media:t.media});return window.open("https://pinterest.com/pin/create/button/?"+n,"_blank",tt)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.caption,o=t.tags,r=void 0===o?[]:o,a=t.posttype,l=void 0===a?"link":a,s=d({canonicalUrl:e,title:n,caption:i,tags:r.join(","),posttype:l});return window.open("https://www.tumblr.com/widgets/share/tool?"+s,"_blank",tt)}function E(){return!!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/)}function S(t){return E()?window.open(t):window.location.assign(t)}function j(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title;if(!e&&!n)throw new Error("url and title not specified");return S("viber://forward?"+d({text:[n,e].filter(function(t){return t}).join(" ")}))}function F(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.image,i=t.isVkParse,o=t.description,r=t.title;o&&o.length>et&&(o=o.substr(0,et)+"..."),r&&r.length>et&&(r=r.substr(0,et)+"...");return"https://vk.com/share.php?"+d(i?{url:e}:{url:e,title:r,description:o,image:n,noparse:!0})}function A(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return window.open(F(t),"_blank",tt)}function T(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.phone,n=d({text:[t.title,t.url].filter(function(t){return t}).join(" "),phone:e});return window.open("https://api.whatsapp.com/send?"+n,"_blank",tt)}function z(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=d({title:e,summary:t.description,url:n});return window.open("https://www.linkedin.com/shareArticle?mini=true&"+i,"_blank",tt)}function M(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url;if(!e)throw new Error("fbAppId is not defined");var i=d({app_id:e,link:n});return window.location.assign("fb-messenger://share?"+i)}function O(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url;if(!n)throw new Error("url is not defined");var i=encodeURIComponent(""+n);return e&&(i=""+encodeURIComponent(e+" ")+i),window.open("https://line.me/R/msg/text/?"+i,"_blank",tt)}function L(){return"ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0}function V(){return/Android/.test(window.navigator.userAgent)||/iP(hone|ad|od)/i.test(window.navigator.userAgent)}function H(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?V()?t:t.filter(function(t){return!it.includes(t)}):t}t=t&&t.hasOwnProperty("default")?t.default:t;var I=function(){return"undefined"==typeof window?"":window.location.href}(),P={mobileVerification:!0,title:"Video",url:I,socials:["fbFeed","tw","reddit","gp","messenger","linkedin","vk","ok","mail","email","telegram","whatsapp","viber"],embedCode:function(){return""}(),redirectUri:function(){return I+"#close_window"}()},R=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},U=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})});i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,h.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(u.default);t.exports=p})})),tt="scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0",et=80,nt=(Object.freeze||Object)({fbFeed:f,fbShare:p,fbButton:v,gp:g,mail:w,email:m,ok:y,telegram:b,tw:k,reddit:_,pinterest:C,tumblr:x,viber:j,getVkUrl:F,vk:A,whatsapp:T,linkedin:z,messenger:M,line:O}),it=["whatsapp","viber","messenger"],ot={fbFeed:'\n \n\n',tw:'\n \n\n',reddit:'\n \n\n',gp:'\n \n\n',messenger:'\n \n \n\n',linkedin:'\n \n\n',vk:'\n \n\n',ok:'\n \n\n',mail:'\n \n\n',email:'\n \n\n',telegram:'\n \n\n',whatsapp:'\n \n\n',viber:'\n \n\n'},rt=function(){function t(e,n){R(this,t),this.player=e,this.options=n,this.socials=H(n.socials,n.mobileVerification),this.copyBtnTextClass="vjs-share__btn-text",this.socialBtnClass="vjs-share__social",this._createContent(),this._initToggle(),this._initClipboard(),this._initSharing()}return t.prototype.getContent=function(){return this.content},t.prototype._createContent=function(){var t='\n \n \n \n '+this.player.localize("Copy")+"\n ",e=document.createElement("div"),n="";this.options.embedCode&&(n='\n \n "),e.innerHTML='
\n \n\n
\n \n \n\n "+n+'\n
\n\n
\n
\n '+this._getSocialItems().join("")+"\n
\n
\n
",this.content=e.firstChild},t.prototype._initClipboard=function(){var t=this;new $(".vjs-share__btn",{target:function(t){return t.previousElementSibling}}).on("success",function(e){var n=e.trigger.querySelector("."+t.copyBtnTextClass),i=function(){n.innerText=t.player.localize("Copy"),e.clearSelection()};n.innerText=t.player.localize("Copied"),L()?setTimeout(i,1e3):n.parentElement.addEventListener("mouseleave",function(){setTimeout(i,300)})})},t.prototype._initSharing=function(){var t=this,e=this.content.querySelectorAll("."+this.socialBtnClass);Array.from(e).forEach(function(e){e.addEventListener("click",function(e){var n=e.currentTarget.getAttribute("data-social"),i=nt[n];"function"==typeof i&&i(t.socialOptions)})})},t.prototype._initToggle=function(){var t=this.content.querySelector(".vjs-share__socials");this.socials.length>10||window.innerWidth<=180&&this.socials.length>6?t.style.height="calc((2em + 5px) * 2)":t.classList.add("horizontal")},t.prototype._getSocialItems=function(){var t=[];return this.socials.forEach(function(e){ot[e]&&t.push('\n \n ")}),t},U(t,[{key:"socialOptions",get:function(){var t=this.options;return{url:t.url,title:t.title,description:t.description,image:t.image,fbAppId:t.fbAppId,isVkParse:t.isVkParse,redirectUri:t.redirectUri}}}]),t}(),at=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.playerClassName="vjs-videojs-share_open",o}return N(e,t),e.prototype.open=function(){var e=this.player();e.addClass(this.playerClassName),t.prototype.open.call(this),e.trigger("sharing:opened")},e.prototype.close=function(){var e=this.player();e.removeClass(this.playerClassName),t.prototype.close.call(this),e.trigger("sharing:closed")},e}(t.getComponent("ModalDialog")),lt=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.player=n,o.options=i,o}return N(e,t),e.prototype._createModal=function(){var t=new rt(this.player,this.options).getContent();this.modal=new at(this.player,{content:t,temporary:!0}),this.el=this.modal.contentEl(),this.player.addChild(this.modal)},e.prototype.open=function(){this._createModal(),this.modal.open()},e}(t.getComponent("Component")),st=function(e){function n(i,o){R(this,n);var r=B(this,e.call(this,i));return r.options=t.mergeOptions(P,o),r.player.ready(function(){r.player.addClass("vjs-share"),i.addClass("vjs-videojs-share"),i.getChild("controlBar").addChild("ShareButton",o),i.addChild("ShareOverlay",o)}),r}return N(n,e),n}(t.getPlugin("plugin"));return st.defaultState={},st.VERSION="3.2.1",t.registerComponent("ShareButton",q),t.registerComponent("ShareOverlay",lt),t.registerPlugin("share",st),st}); \ No newline at end of file diff --git a/js/videojs-vr.min.js b/js/videojs-vr.min.js new file mode 100644 index 0000000..a171b23 --- /dev/null +++ b/js/videojs-vr.min.js @@ -0,0 +1,176 @@ +/*! @name videojs-vr @version 1.10.1 @license MIT */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("global/window"),require("global/document"),require("video.js")):"function"==typeof define&&define.amd?define(["global/window","global/document","video.js"],e):(t=t||self).videojsVr=e(t.window,t.document,t.videojs)}(this,(function(t,e,n){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t,e=e&&e.hasOwnProperty("default")?e.default:e,n=n&&n.hasOwnProperty("default")?n.default:n;var i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function o(t,e){return t(e={exports:{}},e.exports),e.exports}var s=r(o((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0}))),a=o((function(t){function e(n,i){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(n,i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));r(a);var l=r(o((function(t){t.exports=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,a(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),c=r(o((function(t,e){ +/** + * @license + * webvr-polyfill + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @license + * cardboard-vr-display + * Copyright (c) 2015-2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @license + * webvr-polyfill-dpdb + * Copyright (c) 2017 Google + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @license + * wglu-preserve-state + * Copyright (c) 2016, Brandon Jones. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * @license + * nosleep.js + * Copyright (c) 2017, Rich Tibbett + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +t.exports=function(){var t,e="undefined"!=typeof window?window:void 0!==i?i:"undefined"!=typeof self?self:{},n=function(){return/Android/i.test(navigator.userAgent)||/iPhone|iPad|iPod/i.test(navigator.userAgent)},r=function(t,e){for(var n=0,i=t.length;nt.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),i.push(null,null);break}r||(r=t.getParameter(t.ACTIVE_TEXTURE)),t.activeTexture(l),i.push(t.getParameter(s),null);break;case t.ACTIVE_TEXTURE:r=t.getParameter(t.ACTIVE_TEXTURE),i.push(null);break;default:i.push(t.getParameter(s))}for(n(t),o=0;ot.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_2D,a);break;case t.TEXTURE_BINDING_CUBE_MAP:var l;if((l=e[++o])t.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_CUBE_MAP,a);break;case t.VIEWPORT:t.viewport(a[0],a[1],a[2],a[3]);break;case t.BLEND:case t.CULL_FACE:case t.DEPTH_TEST:case t.SCISSOR_TEST:case t.STENCIL_TEST:a?t.enable(s):t.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}r&&t.activeTexture(r)}}else n(t)},R=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),C=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function P(t,e,n,i){this.gl=t,this.cardboardUI=e,this.bufferScale=n,this.dirtySubmitFrameBindings=i,this.ctxAttribs=t.getContextAttributes(),this.instanceExt=t.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=t.drawingBufferWidth,this.bufferHeight=t.drawingBufferHeight,this.realBindFramebuffer=t.bindFramebuffer,this.realEnable=t.enable,this.realDisable=t.disable,this.realColorMask=t.colorMask,this.realClearColor=t.clearColor,this.realViewport=t.viewport,a()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=A(t,R,C,this.attribs),this.uniforms=x(t,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.indexCount=0,this.renderTarget=t.createTexture(),this.framebuffer=t.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=t.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=t.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=t.createRenderbuffer()),this.patch(),this.onResize()}P.prototype.destroy=function(){var t=this.gl;this.unpatch(),t.deleteProgram(this.program),t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer),t.deleteTexture(this.renderTarget),t.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&t.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&t.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&t.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},P.prototype.onResize=function(){var t=this.gl,e=this,n=[t.RENDERBUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0];L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.framebuffer),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.texImage2D(t.TEXTURE_2D,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,e.bufferWidth,e.bufferHeight,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.renderTarget,0),e.ctxAttribs.depth&&e.ctxAttribs.stencil?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthStencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e.depthStencilBuffer)):e.ctxAttribs.depth?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e.depthBuffer)):e.ctxAttribs.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,e.stencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.STENCIL_INDEX8,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.STENCIL_ATTACHMENT,t.RENDERBUFFER,e.stencilBuffer)),!t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),e.realClearColor.apply(t,e.clearColor)})),this.cardboardUI&&this.cardboardUI.onResize()},P.prototype.patch=function(){if(!this.isPatched){var t=this,e=this.gl.canvas,n=this.gl;a()||(e.width=g()*this.bufferScale,e.height=v()*this.bufferScale,Object.defineProperty(e,"width",{configurable:!0,enumerable:!0,get:function(){return t.bufferWidth},set:function(n){t.bufferWidth=n,t.realCanvasWidth.set.call(e,n),t.onResize()}}),Object.defineProperty(e,"height",{configurable:!0,enumerable:!0,get:function(){return t.bufferHeight},set:function(n){t.bufferHeight=n,t.realCanvasHeight.set.call(e,n),t.onResize()}})),this.lastBoundFramebuffer=n.getParameter(n.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(n.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(e,i){t.lastBoundFramebuffer=i||t.framebuffer,t.realBindFramebuffer.call(n,e,t.lastBoundFramebuffer)},this.cullFace=n.getParameter(n.CULL_FACE),this.depthTest=n.getParameter(n.DEPTH_TEST),this.blend=n.getParameter(n.BLEND),this.scissorTest=n.getParameter(n.SCISSOR_TEST),this.stencilTest=n.getParameter(n.STENCIL_TEST),n.enable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!0;break;case n.DEPTH_TEST:t.depthTest=!0;break;case n.BLEND:t.blend=!0;break;case n.SCISSOR_TEST:t.scissorTest=!0;break;case n.STENCIL_TEST:t.stencilTest=!0}t.realEnable.call(n,e)},n.disable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!1;break;case n.DEPTH_TEST:t.depthTest=!1;break;case n.BLEND:t.blend=!1;break;case n.SCISSOR_TEST:t.scissorTest=!1;break;case n.STENCIL_TEST:t.stencilTest=!1}t.realDisable.call(n,e)},this.colorMask=n.getParameter(n.COLOR_WRITEMASK),n.colorMask=function(e,i,r,o){t.colorMask[0]=e,t.colorMask[1]=i,t.colorMask[2]=r,t.colorMask[3]=o,t.realColorMask.call(n,e,i,r,o)},this.clearColor=n.getParameter(n.COLOR_CLEAR_VALUE),n.clearColor=function(e,i,r,o){t.clearColor[0]=e,t.clearColor[1]=i,t.clearColor[2]=r,t.clearColor[3]=o,t.realClearColor.call(n,e,i,r,o)},this.viewport=n.getParameter(n.VIEWPORT),n.viewport=function(e,i,r,o){t.viewport[0]=e,t.viewport[1]=i,t.viewport[2]=r,t.viewport[3]=o,t.realViewport.call(n,e,i,r,o)},this.isPatched=!0,w(e)}},P.prototype.unpatch=function(){if(this.isPatched){var t=this.gl,e=this.gl.canvas;a()||(Object.defineProperty(e,"width",this.realCanvasWidth),Object.defineProperty(e,"height",this.realCanvasHeight)),e.width=this.bufferWidth,e.height=this.bufferHeight,t.bindFramebuffer=this.realBindFramebuffer,t.enable=this.realEnable,t.disable=this.realDisable,t.colorMask=this.realColorMask,t.clearColor=this.realClearColor,t.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&t.bindFramebuffer(t.FRAMEBUFFER,null),this.isPatched=!1,setTimeout((function(){w(e)}),1)}},P.prototype.setTextureBounds=function(t,e){t||(t=[0,0,.5,1]),e||(e=[.5,0,.5,1]),this.viewportOffsetScale[0]=t[0],this.viewportOffsetScale[1]=t[1],this.viewportOffsetScale[2]=t[2],this.viewportOffsetScale[3]=t[3],this.viewportOffsetScale[4]=e[0],this.viewportOffsetScale[5]=e[1],this.viewportOffsetScale[6]=e[2],this.viewportOffsetScale[7]=e[3]},P.prototype.submitFrame=function(){var t=this.gl,e=this,n=[];if(this.dirtySubmitFrameBindings||n.push(t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0),L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null);var n=0,i=0;e.instanceExt&&(n=t.getVertexAttrib(e.attribs.position,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),i=t.getVertexAttrib(e.attribs.texCoord,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),e.cullFace&&e.realDisable.call(t,t.CULL_FACE),e.depthTest&&e.realDisable.call(t,t.DEPTH_TEST),e.blend&&e.realDisable.call(t,t.BLEND),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realDisable.call(t,t.STENCIL_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),(e.ctxAttribs.alpha||a())&&(e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)),t.useProgram(e.program),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.enableVertexAttribArray(e.attribs.position),t.enableVertexAttribArray(e.attribs.texCoord),t.vertexAttribPointer(e.attribs.position,2,t.FLOAT,!1,20,0),t.vertexAttribPointer(e.attribs.texCoord,3,t.FLOAT,!1,20,8),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,0),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,0)),t.activeTexture(t.TEXTURE0),t.uniform1i(e.uniforms.diffuse,0),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.uniform4fv(e.uniforms.viewportOffsetScale,e.viewportOffsetScale),t.drawElements(t.TRIANGLES,e.indexCount,t.UNSIGNED_SHORT,0),e.cardboardUI&&e.cardboardUI.renderNoState(),e.realBindFramebuffer.call(e.gl,t.FRAMEBUFFER,e.framebuffer),e.ctxAttribs.preserveDrawingBuffer||(e.realClearColor.call(t,0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)),e.dirtySubmitFrameBindings||e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.cullFace&&e.realEnable.call(t,t.CULL_FACE),e.depthTest&&e.realEnable.call(t,t.DEPTH_TEST),e.blend&&e.realEnable.call(t,t.BLEND),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realEnable.call(t,t.STENCIL_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),!e.ctxAttribs.alpha&&e.ctxAttribs.preserveDrawingBuffer||e.realClearColor.apply(t,e.clearColor),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,n),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,i))})),a()){var i=t.canvas;i.width==e.bufferWidth&&i.height==e.bufferHeight||(e.bufferWidth=i.width,e.bufferHeight=i.height,e.onResize())}},P.prototype.updateDeviceInfo=function(t){var e=this.gl,n=this,i=[e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING];L(e,i,(function(e){var i=n.computeMeshVertices_(n.meshWidth,n.meshHeight,t);if(e.bindBuffer(e.ARRAY_BUFFER,n.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW),!n.indexCount){var r=n.computeMeshIndices_(n.meshWidth,n.meshHeight);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,r,e.STATIC_DRAW),n.indexCount=r.length}}))},P.prototype.computeMeshVertices_=function(t,e,n){for(var i=new Float32Array(2*t*e*5),r=n.getLeftEyeVisibleTanAngles(),o=n.getLeftEyeNoLensTanAngles(),a=n.getLeftEyeVisibleScreenRect(o),l=0,c=0;c<2;c++){for(var h=0;hr-42&&i.clientXn.clientHeight-42?t(i):i.clientX<42&&i.clientY<42&&e(i)},n.addEventListener("click",this.listener,!1)},N.prototype.onResize=function(){var t=this.gl,e=this,n=[t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){var n=[],i=t.drawingBufferWidth/2,r=Math.max(screen.width,screen.height)*window.devicePixelRatio,o=t.drawingBufferWidth/r*window.devicePixelRatio,s=4*o/2,a=42*o,l=28*o/2,c=14*o;function h(t,e){var r=(90-t)*O,o=Math.cos(r),s=Math.sin(r);n.push(.3125*o*l+i,.3125*s*l+l),n.push(e*o*l+i,e*s*l+l)}n.push(i-s,a),n.push(i-s,t.drawingBufferHeight),n.push(i+s,a),n.push(i+s,t.drawingBufferHeight),e.gearOffset=n.length/2;for(var u=0;u<=6;u++){var d=60*u;h(d,1),h(d+12,1),h(d+20,.75),h(d+40,.75),h(d+48,1)}function p(e,i){n.push(c+e,t.drawingBufferHeight-c-i)}e.gearVertexCount=n.length/2-e.gearOffset,e.arrowOffset=n.length/2;var f=s/Math.sin(45*O);p(0,l),p(l,0),p(l+f,f),p(f,l+f),p(f,l-f),p(0,l),p(l,2*l),p(l+f,2*l-f),p(f,l-f),p(0,l),p(f,l-s),p(28*o,l-s),p(f,l+s),p(28*o,l+s),e.arrowVertexCount=n.length/2-e.arrowOffset,t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(n),t.STATIC_DRAW)}))},N.prototype.render=function(){var t=this.gl,e=this,n=[t.CULL_FACE,t.DEPTH_TEST,t.BLEND,t.SCISSOR_TEST,t.STENCIL_TEST,t.COLOR_WRITEMASK,t.VIEWPORT,t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.BLEND),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.colorMask(!0,!0,!0,!0),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.renderNoState()}))},N.prototype.renderNoState=function(){var t,e,n,i,r,o,s,a,l,c,h=this.gl;h.useProgram(this.program),h.bindBuffer(h.ARRAY_BUFFER,this.vertexBuffer),h.enableVertexAttribArray(this.attribs.position),h.vertexAttribPointer(this.attribs.position,2,h.FLOAT,!1,8,0),h.uniform4f(this.uniforms.color,1,1,1,1),t=this.projMat,e=0,n=h.drawingBufferWidth,i=0,r=h.drawingBufferHeight,a=1/(e-n),l=1/(i-r),c=1/((o=.1)-(s=1024)),t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*a,t[13]=(r+i)*l,t[14]=(s+o)*c,t[15]=1,h.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),h.drawArrays(h.TRIANGLE_STRIP,0,4),h.drawArrays(h.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),h.drawArrays(h.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},B.prototype.distortInverse=function(t){for(var e=0,n=1,i=t-this.distort(e);Math.abs(n-e)>1e-4;){var r=t-this.distort(n),o=n-r*((n-e)/(r-i));e=n,n=o,i=r}return n},B.prototype.distort=function(t){for(var e=t*t,n=0,i=0;i=1)return this.w=o,this.x=n,this.y=i,this.z=r,this;var a=Math.acos(s),l=Math.sqrt(1-s*s);if(Math.abs(l)<.001)return this.w=.5*(o+this.w),this.x=.5*(n+this.x),this.y=.5*(i+this.y),this.z=.5*(r+this.z),this;var c=Math.sin((1-e)*a)/l,h=Math.sin(e*a)/l;return this.w=o*c+this.w*h,this.x=n*c+this.x*h,this.y=i*c+this.y*h,this.z=r*c+this.z*h,this},setFromUnitVectors:function(t,e){return void 0===H&&(H=new U),(G=t.dot(e)+1)<1e-6?(G=0,Math.abs(t.x)>Math.abs(t.z)?H.set(-t.y,t.x,0):H.set(0,-t.z,t.y)):H.crossVectors(t,e),this.x=H.x,this.y=H.y,this.z=H.z,this.w=G,this.normalize(),this}};var W=new k({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),j=new k({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),X={CardboardV1:new Y({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new Y({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};function q(t,e){this.viewer=X.CardboardV2,this.updateDeviceParams(t),this.distortion=new B(this.viewer.distortionCoefficients);for(var n=0;n=200&&n.status<=299?(i.dpdb=JSON.parse(n.response),i.recalculateDeviceParams_()):console.error("Error loading online DPDB!")})),n.send()}}function J(t){this.xdpi=t.xdpi,this.ydpi=t.ydpi,this.bevelMm=t.bevelMm}function K(t,e){this.set(t,e)}function $(t,e){this.kFilter=t,this.isDebug=e,this.currentAccelMeasurement=new K,this.currentGyroMeasurement=new K,this.previousGyroMeasurement=new K,a()?this.filterQ=new V(-1,0,0,1):this.filterQ=new V(1,0,0,1),this.previousFilterQ=new V,this.previousFilterQ.copy(this.filterQ),this.accelQ=new V,this.isOrientationInitialized=!1,this.estimatedGravity=new U,this.measuredGravity=new U,this.gyroIntegralQ=new V}function tt(t,e){this.predictionTimeS=t,this.isDebug=e,this.previousQ=new V,this.previousTimestampS=null,this.deltaQ=new V,this.outQ=new V}function et(t,e,n,i){this.yawOnly=n,this.accelerometer=new U,this.gyroscope=new U,this.filter=new $(t,i),this.posePredictor=new tt(e,i),this.isFirefoxAndroid=h(),this.isIOS=a();var r=u();this.isDeviceMotionInRadians=!this.isIOS&&r&&r<66,this.isWithoutDeviceMotion=p()||d(),this.filterToWorldQ=new V,a()?this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new V,this.worldToScreenQ=new V,this.originalPoseAdjustQ=new V,this.originalPoseAdjustQ.setFromAxisAngle(new U(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),m()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new V,this.orientationOut_=new Float32Array(4),this.start()}Z.prototype.getDeviceParams=function(){return this.deviceParams},Z.prototype.recalculateDeviceParams_=function(){var t=this.calcDeviceParams_();t?(this.deviceParams=t,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Z.prototype.calcDeviceParams_=function(){var t=this.dpdb;if(!t)return console.error("DPDB not available."),null;if(1!=t.format)return console.error("DPDB has unexpected format version."),null;if(!t.devices||!t.devices.length)return console.error("DPDB does not have a devices section."),null;var e=navigator.userAgent||navigator.vendor||window.opera,n=g(),i=v();if(!t.devices)return console.error("DPDB has no devices section."),null;for(var r=0;r1||this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},$.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);var n=new V;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var i,r=new V;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",z*((i=r).w>1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(i.w)),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var o=new V;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},$.prototype.getOrientation=function(){return this.filterQ},$.prototype.accelToQuaternion_=function(t){var e=new U;e.copy(t),e.normalize();var n=new V;return n.setFromUnitVectors(new U(0,0,-1),e),n.inverse(),n},$.prototype.gyroToQuaternionDelta_=function(t,e){var n=new V,i=new U;return i.copy(t),i.normalize(),n.setFromAxisAngle(i,t.length()*e),n},tt.prototype.getPrediction=function(t,e,n){if(!this.previousTimestampS)return this.previousQ.copy(t),this.previousTimestampS=n,t;var i=new U;i.copy(e),i.normalize();var r=e.length();if(r<20*F)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(z*r).toFixed(1)),this.outQ.copy(t),this.previousQ.copy(t),this.outQ;var o=r*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(i,o),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(t),this.previousTimestampS=n,this.outQ},et.prototype.getPosition=function(){return null},et.prototype.getOrientation=function(){var t=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ)return this.deviceOrientationFixQ=this.deviceOrientationFixQ||(n=(new V).setFromAxisAngle(new U(0,0,-1),0),i=new V,-90===window.orientation?i.setFromAxisAngle(new U(0,1,0),Math.PI/-2):i.setFromAxisAngle(new U(0,1,0),Math.PI/2),n.multiply(i)),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||((e=new V).setFromAxisAngle(new U(1,0,0),-Math.PI/2),e),t=this._deviceOrientationQ,(r=new V).copy(t),r.multiply(this.deviceOrientationFilterToWorldQ),r.multiply(this.resetQ),r.multiply(this.worldToScreenQ),r.multiplyQuaternions(this.deviceOrientationFixQ,r),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_;var e,n,i,r,o=this.filter.getOrientation();return t=this.posePredictor.getPrediction(o,this.gyroscope,this.previousTimestampS),(r=new V).copy(this.filterToWorldQ),r.multiply(this.resetQ),r.multiply(t),r.multiply(this.worldToScreenQ),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_},et.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),m()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)},et.prototype.onDeviceOrientation_=function(t){this._deviceOrientationQ=this._deviceOrientationQ||new V;var e=t.alpha,n=t.beta,i=t.gamma;e=(e||0)*Math.PI/180,n=(n||0)*Math.PI/180,i=(i||0)*Math.PI/180,this._deviceOrientationQ.setFromEulerYXZ(n,e,-i)},et.prototype.onDeviceMotion_=function(t){this.updateDeviceMotion_(t)},et.prototype.updateDeviceMotion_=function(t){var e=t.accelerationIncludingGravity,n=t.rotationRate,i=t.timeStamp/1e3,r=i-this.previousTimestampS;return r<0?(S("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"),void(this.previousTimestampS=i)):r<=.001||r>1?(S("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=i)):(this.accelerometer.set(-e.x,-e.y,-e.z),n&&(f()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,i)),this.filter.addAccelMeasurement(this.accelerometer,i),void(this.previousTimestampS=i))},et.prototype.onOrientationChange_=function(t){this.setScreenTransform_()},et.prototype.onMessage_=function(t){var e=t.data;e&&e.type&&"devicemotion"===e.type.toLowerCase()&&this.updateDeviceMotion_(e.deviceMotionEvent)},et.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},et.prototype.start=function(){var t,e,n;this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),a()&&(t=window.self!==window.top,e=E(document.referrer),n=E(window.location.href),t&&e!==n)&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},et.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var nt=new U(1,0,0),it=new U(0,0,1),rt=new V;rt.setFromAxisAngle(nt,-Math.PI/2),rt.multiply((new V).setFromAxisAngle(it,Math.PI/2));var ot=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.config=e,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new V,this._outQ=new V,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return r(t,[{key:"init",value:function(){var t=null;try{(t=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"})).addEventListener("error",this._onSensorError)}catch(t){this.errors.push(t),"SecurityError"===t.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===t.name?this.useDeviceMotion():console.error(t)}t&&(this.api="sensor",this.sensor=t,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new et(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var t=this.sensor.quaternion;this._sensorQ.set(t[0],t[1],t[2],t[3]);var e=this._outQ;return e.copy(rt),e.multiply(this._sensorQ),this.config.YAW_ONLY&&(e.x=e.z=0,e.normalize()),this._out[0]=e.x,this._out[1]=e.y,this._out[2]=e.z,this._out[3]=e.w,this._out}},{key:"_onSensorError",value:function(t){this.errors.push(t.error),"NotAllowedError"===t.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===t.error.name?console.error("Sensor could not be read"):console.error(t.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),t}();function st(){this.loadIcon_();var t=document.createElement("div");(o=t.style).position="fixed",o.top=0,o.right=0,o.bottom=0,o.left=0,o.backgroundColor="gray",o.fontFamily="sans-serif",o.zIndex=1e6;var e=document.createElement("img");e.src=this.icon,(o=e.style).marginLeft="25%",o.marginTop="25%",o.width="50%",t.appendChild(e);var n=document.createElement("div");(o=n.style).textAlign="center",o.fontSize="16px",o.lineHeight="24px",o.margin="24px 25%",o.width="50%",n.innerHTML="Place your phone into your Cardboard viewer.",t.appendChild(n);var i=document.createElement("div");(o=i.style).backgroundColor="#CFD8DC",o.position="fixed",o.bottom=0,o.width="100%",o.height="48px",o.padding="14px 24px",o.boxSizing="border-box",o.color="#656A6B",t.appendChild(i);var r=document.createElement("div");r.style.float="left",r.innerHTML="No Cardboard viewer?";var o,s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank",(o=s.style).float="right",o.fontWeight=600,o.textTransform="uppercase",o.borderLeft="1px solid gray",o.paddingLeft="24px",o.textDecoration="none",o.color="#656A6B",i.appendChild(r),i.appendChild(s),this.overlay=t,this.text=n,this.hide()}function at(t){try{this.selectedKey=localStorage.getItem("WEBVR_CARDBOARD_VIEWER")}catch(t){console.error("Failed to load viewer profile: %s",t)}this.selectedKey||(this.selectedKey=t||"CardboardV1"),this.dialog=this.createDialog_(q.Viewers),this.root=null,this.onChangeCallbacks_=[]}st.prototype.show=function(t){t||this.overlay.parentElement?t&&(this.overlay.parentElement&&this.overlay.parentElement!=t&&this.overlay.parentElement.removeChild(this.overlay),t.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var e=this.overlay.querySelector("img").style;m()?(e.width="20%",e.marginLeft="40%",e.marginTop="3%"):(e.width="50%",e.marginLeft="25%",e.marginTop="25%")},st.prototype.hide=function(){this.overlay.style.display="none"},st.prototype.showTemporarily=function(t,e){this.show(e),this.timer=setTimeout(this.hide.bind(this),t)},st.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},st.prototype.update=function(){this.disableShowTemporarily(),!m()&&_()?this.show():this.hide()},st.prototype.loadIcon_=function(){this.icon="data:image/svg+xml,"+encodeURIComponent("")},at.prototype.show=function(t){this.root=t,t.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},at.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},at.prototype.getCurrentViewer=function(){return q.Viewers[this.selectedKey]},at.prototype.getSelectedKey_=function(){var t=this.dialog.querySelector("input[name=field]:checked");return t?t.id:null},at.prototype.onChange=function(t){this.onChangeCallbacks_.push(t)},at.prototype.fireOnChange_=function(t){for(var e=0;e.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return i(t,[{key:"enable",value:function(){o?(this.disable(),this.noSleepTimer=window.setInterval((function(){window.location.href="/",window.setTimeout(window.stop,0)}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){o?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),t}();t.exports=s},function(t,e,n){t.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])}))})))&<.__esModule&&Object.prototype.hasOwnProperty.call(lt,"default")?lt.default:lt,ht=1e3,ut=[0,0,.5,1],dt=[.5,0,.5,1],pt=window.requestAnimationFrame,ft=window.cancelAnimationFrame;function mt(t){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:t.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:t.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:t.canPresent},maxLayers:{writable:!1,enumerable:!0,value:t.maxLayers},hasOrientation:{enumerable:!0,get:function(){return T("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),t.hasOrientation}}})}function gt(t){var e=!("wakelock"in(t=t||{}))||t.wakelock;this.isPolyfilled=!0,this.displayId=ht++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return T("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new mt({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,e&&_()&&(this.wakelock_=new ct)}gt.prototype.getFrameData=function(t){return M(t,this._getPose(),this)},gt.prototype.getPose=function(){return T("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.resetPose=function(){return T("VRDisplay.prototype.resetPose"),this._resetPose()},gt.prototype.getImmediatePose=function(){return T("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.requestAnimationFrame=function(t){return pt(t)},gt.prototype.cancelAnimationFrame=function(t){return ft(t)},gt.prototype.wrapForFullscreen=function(t){if(a())return t;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var e=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",e.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==t)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=t,this.originalParent_=t.parentElement,this.originalParent_||document.body.appendChild(t),!this.fullscreenWrapper_.parentElement){var n=this.fullscreenElement_.parentElement;n.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),n.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var i=this;return function(){if(i.fullscreenElement_){var t=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];i.fullscreenElement_.setAttribute("style",t.join("; ")+";")}}(),this.fullscreenWrapper_},gt.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var t=this.fullscreenElement_;this.fullscreenElementCachedStyle_?t.setAttribute("style",this.fullscreenElementCachedStyle_):t.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var e=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(t),this.originalParent_===e?e.insertBefore(t,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(t),e.removeChild(this.fullscreenWrapper_),t}},gt.prototype.requestPresent=function(t){var e=this.isPresenting,n=this;return t instanceof Array||(T("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),t=[t]),new Promise((function(i,r){if(n.capabilities.canPresent)if(0==t.length||t.length>n.capabilities.maxLayers)r(new Error("Invalid number of layers."));else{var o=t[0];if(o.source){var s=o.leftBounds||ut,c=o.rightBounds||dt;if(e){var h=n.layer_;h.source!==o.source&&(h.source=o.source);for(var u=0;u<4;u++)h.leftBounds[u]=s[u],h.rightBounds[u]=c[u];return n.wrapForFullscreen(n.layer_.source),n.updatePresent_(),void i()}if(n.layer_={predistorted:o.predistorted,source:o.source,leftBounds:s.slice(0),rightBounds:c.slice(0)},n.waitingForPresent_=!1,n.layer_&&n.layer_.source){var d=n.wrapForFullscreen(n.layer_.source);n.addFullscreenListeners_(d,(function(){var t=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;n.isPresenting=d===t,n.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch((function(t){console.error("screen.orientation.lock() failed due to",t.message)})),n.waitingForPresent_=!1,n.beginPresent_(),i()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),n.removeFullscreenWrapper(),n.disableWakeLock(),n.endPresent_(),n.removeFullscreenListeners_()),n.fireVRDisplayPresentChange_()}),(function(){n.waitingForPresent_&&(n.removeFullscreenWrapper(),n.removeFullscreenListeners_(),n.disableWakeLock(),n.waitingForPresent_=!1,n.isPresenting=!1,r(new Error("Unable to present.")))})),function(t){if(l())return!1;if(t.requestFullscreen)t.requestFullscreen();else if(t.webkitRequestFullscreen)t.webkitRequestFullscreen();else if(t.mozRequestFullScreen)t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)return!1;t.msRequestFullscreen()}return!0}(d)?(n.enableWakeLock(),n.waitingForPresent_=!0):(a()||l())&&(n.enableWakeLock(),n.isPresenting=!0,n.beginPresent_(),n.fireVRDisplayPresentChange_(),i())}n.waitingForPresent_||a()||(y(),r(new Error("Unable to present.")))}else i()}else r(new Error("VRDisplay is not capable of presenting."))}))},gt.prototype.exitPresent=function(){var t=this.isPresenting,e=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise((function(n,i){t?(!y()&&a()&&(e.endPresent_(),e.fireVRDisplayPresentChange_()),l()&&(e.removeFullscreenWrapper(),e.removeFullscreenListeners_(),e.endPresent_(),e.fireVRDisplayPresentChange_()),n()):i(new Error("Was not presenting to VRDisplay."))}))},gt.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},gt.prototype.fireVRDisplayPresentChange_=function(){var t=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.fireVRDisplayConnect_=function(){var t=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.addFullscreenListeners_=function(t,e,n){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=t,this.fullscreenChangeHandler_=e,this.fullscreenErrorHandler_=n,e&&(document.fullscreenEnabled?t.addEventListener("fullscreenchange",e,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenchange",e,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",e,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenchange",e,!1)),n&&(document.fullscreenEnabled?t.addEventListener("fullscreenerror",n,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenerror",n,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",n,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenerror",n,!1))},gt.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var t=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var e=this.fullscreenChangeHandler_;t.removeEventListener("fullscreenchange",e,!1),t.removeEventListener("webkitfullscreenchange",e,!1),document.removeEventListener("mozfullscreenchange",e,!1),t.removeEventListener("msfullscreenchange",e,!1)}if(this.fullscreenErrorHandler_){var n=this.fullscreenErrorHandler_;t.removeEventListener("fullscreenerror",n,!1),t.removeEventListener("webkitfullscreenerror",n,!1),document.removeEventListener("mozfullscreenerror",n,!1),t.removeEventListener("msfullscreenerror",n,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},gt.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},gt.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},gt.prototype.beginPresent_=function(){},gt.prototype.endPresent_=function(){},gt.prototype.submitFrame=function(t){},gt.prototype.getEyeParameters=function(t){return null};var vt={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},yt="left",At="right";function xt(t){var e=b({},vt);t=b(e,t||{}),gt.call(this,{wakelock:t.MOBILE_WAKE_LOCK}),this.config=t,this.displayName="Cardboard VRDisplay",this.capabilities=new mt({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new ot(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Z(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new q(this.dpdb_.getDeviceParams(),t.ADDITIONAL_VIEWERS),this.viewerSelector_=new at(t.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new st),a()&&window.addEventListener("resize",this.onResize_.bind(this))}return xt.prototype=Object.create(gt.prototype),xt.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},xt.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},xt.prototype._getFieldOfView=function(t){var e;if(t==yt)e=this.deviceInfo_.getFieldOfViewLeftEye();else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=this.deviceInfo_.getFieldOfViewRightEye()}return e},xt.prototype._getEyeOffset=function(t){var e;if(t==yt)e=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return e},xt.prototype.getEyeParameters=function(t){var e=this._getEyeOffset(t),n=this._getFieldOfView(t),i={offset:e,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(i,"fieldOfView",{enumerable:!0,get:function(){return T("VRFieldOfView","VRFrameData's projection matrices"),n}}),i},xt.prototype.onDeviceParamsUpdated_=function(t){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},xt.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},xt.prototype.beginPresent_=function(){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2")),t&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(t.canvas.width=g()*this.bufferScale_,t.canvas.height=v()*this.bufferScale_,this.cardboardUI_=new N(t)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new N(t)),this.distorter_=new P(t,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(t){this.viewerSelector_.show(this.layer_.source.parentElement),t.stopPropagation(),t.preventDefault()}.bind(this),function(t){this.exitPresent(),t.stopPropagation(),t.preventDefault()}.bind(this)),this.rotateInstructions_&&(m()&&_()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},xt.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},xt.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},xt.prototype.submitFrame=function(t){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2"));var n=e.canvas;n.width==this.lastWidth&&n.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=n.width,this.lastHeight=n.height,this.cardboardUI_.render()}},xt.prototype.onOrientationChange_=function(t){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},xt.prototype.onResize_=function(t){if(this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e.canvas.setAttribute("style",["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"].join("; ")+";"),w(e.canvas)}},xt.prototype.onViewerChanged_=function(t){this.deviceInfo_.setViewer(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},xt.prototype.fireVRDisplayDeviceParamsChange_=function(){var t=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(t)},xt.VRFrameData=function(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null},xt.VRDisplay=gt,xt}()})))&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,a={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};function l(t){this.config=o(o({},a),t),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&n())&&(this.enable(),this.getVRDisplays().then((function(t){t&&t[0]&&t[0].fireVRDisplayConnect_&&t[0].fireVRDisplayConnect_()})))}l.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(n()){var t=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(t)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},l.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var t=this.native.VRFrameData,e=new this.native.VRFrameData,n=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(i){i instanceof t?n.call(this,i):(n.call(this,e),i.pose=e.pose,r(e.leftProjectionMatrix,i.leftProjectionMatrix),r(e.rightProjectionMatrix,i.rightProjectionMatrix),r(e.leftViewMatrix,i.leftViewMatrix),r(e.rightViewMatrix,i.rightViewMatrix))}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},l.prototype.getVRDisplays=function(){var t=this;return this.config,this.hasNative?this.native.getVRDisplays.call(navigator).then((function(e){return e.length>0?e:t.getPolyfillDisplays()})):Promise.resolve(this.getPolyfillDisplays())},l.version="0.10.12",l.VRFrameData=s.VRFrameData,l.VRDisplay=s.VRDisplay;var c=Object.freeze({default:l}),h=c&&l||c;return void 0!==e&&e.window&&(e.document||(e.document=e.window.document),e.navigator||(e.navigator=e.window.navigator)),h}()})));const h=0,u=1,d=2;function p(){}Object.assign(p.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)},removeEventListener:function(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}},dispatchEvent:function(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+f[t>>16&255]+f[t>>24&255]+"-"+f[255&e]+f[e>>8&255]+"-"+f[e>>16&15|64]+f[e>>24&255]+"-"+f[63&n|128]+f[n>>8&255]+"-"+f[n>>16&255]+f[n>>24&255]+f[255&i]+f[i>>8&255]+f[i>>16&255]+f[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},damp:function(t,e,n,i){return g.lerp(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(g.euclideanModulo(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(m=t%2147483647),m=16807*m%2147483647,(m-1)/2147483646},degToRad:function(t){return t*g.DEG2RAD},radToDeg:function(t){return t*g.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,s=Math.sin,a=o(n/2),l=s(n/2),c=o((e+i)/2),h=s((e+i)/2),u=o((e-i)/2),d=s((e-i)/2),p=o((i-e)/2),f=s((i-e)/2);switch(r){case"XYX":t.set(a*h,l*u,l*d,a*c);break;case"YZY":t.set(l*d,a*h,l*u,a*c);break;case"ZXZ":t.set(l*u,l*d,a*h,a*c);break;case"XZX":t.set(a*h,l*f,l*p,a*c);break;case"YXY":t.set(l*p,a*h,l*f,a*c);break;case"ZYZ":t.set(l*f,l*p,a*h,a*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class v{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class y{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=o,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],A=i[7],x=i[2],_=i[5],b=i[8];return r[0]=o*f+s*v+a*x,r[3]=o*m+s*y+a*_,r[6]=o*g+s*A+a*b,r[1]=l*f+c*v+h*x,r[4]=l*m+c*y+h*_,r[7]=l*g+c*A+h*b,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*A+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8];return e*o*c-e*s*l-n*r*c+n*s*a+i*r*l-i*o*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=c*o-s*l,u=s*a-c*r,d=l*r-o*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*o)*f,t[3]=u*f,t[4]=(c*e-i*a)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*a-l*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,s){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*o+l*s)+o+t,-i*l,i*a,-i*(-l*o+a*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],s=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*o+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*a,i[4]=-n*o+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let A;const x={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===A&&(A=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),A.width=t.width,A.height=t.height;const n=A.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=A}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let _=0;function b(t=b.DEFAULT_IMAGE,e=b.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,s=1023,a=1009,l=1,c=3e3){Object.defineProperty(this,"id",{value:_++}),this.uuid=g.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=a,this.offset=new v(0,0),this.repeat=new v(1,1),this.center=new v(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new y,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}function w(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?x.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}b.DEFAULT_IMAGE=void 0,b.DEFAULT_MAPPING=300,b.prototype=Object.assign(Object.create(p.prototype),{constructor:b,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=g.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(b.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class M{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=t.elements,s=o[0],a=o[4],l=o[8],c=o[1],h=o[5],u=o[9],d=o[2],p=o[6],f=o[10];if(Math.abs(a-c)<.01&&Math.abs(l-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(a+c)<.1&&Math.abs(l+d)<.1&&Math.abs(u+p)<.1&&Math.abs(s+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(s+1)/2,o=(h+1)/2,m=(f+1)/2,g=(a+c)/4,v=(l+d)/4,y=(u+p)/4;return t>o&&t>m?t<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):o>m?o<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=g/i,r=y/i):m<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(c-a)*(c-a));return Math.abs(m)<.001&&(m=1),this.x=(p-u)/m,this.y=(l-d)/m,this.z=(c-a)/m,this.w=Math.acos((s+h+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}class E extends p{constructor(t,e,n){super(),Object.defineProperty(this,"isWebGLRenderTarget",{value:!0}),this.width=t,this.height=e,this.scissor=new M(0,0,t,e),this.scissorTest=!1,this.viewport=new M(0,0,t,e),n=n||{},this.texture=new b(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:1006,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setSize(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.texture.image.width=t,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}}class S{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isQuaternion",{value:!0}),this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return n.copy(t).slerp(e,i)}static slerpFlat(t,e,n,i,r,o,s){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[o+0],d=r[o+1],p=r[o+2],f=r[o+3];if(h!==f||a!==u||l!==d||c!==p){let t=1-s;const e=a*u+l*d+c*p+h*f,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,s=Math.sin(s*o)/r}const r=s*n;if(a=a*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const s=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=s*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-a*h,t[e+3]=c*p-s*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,s=Math.cos,a=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=a(n/2),d=a(i/2),p=a(r/2);switch(o){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],s=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(o-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(o-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(g.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,s=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+o*s+i*l-r*a,this._y=i*c+o*a+r*s-n*l,this._z=r*c+o*l+n*a-i*s,this._w=o*c-n*s-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let s=o*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const a=1-s*s;if(a<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class T{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(R.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(R.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,s=t.z,a=t.w,l=a*e+o*i-s*n,c=a*n+s*e-r*i,h=a*i+r*n-o*e,u=-r*e-o*n-s*i;return this.x=l*a+u*-r+c*-s-h*-o,this.y=c*a+u*-o+h*-r-l*-s,this.z=h*a+u*-s+l*-o-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return L.copy(this).projectOnVector(t),this.sub(L)}reflect(t){return this.sub(L.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(g.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const L=new T,R=new S;class C{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new T(1/0,1/0,1/0),this.max=void 0!==e?e:new T(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.length;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.count;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new T),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,I),I.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(G),V.subVectors(this.max,G),N.subVectors(t.a,G),B.subVectors(t.b,G),F.subVectors(t.c,G),z.subVectors(B,N),U.subVectors(F,B),H.subVectors(N,F);let e=[0,-z.z,z.y,0,-U.z,U.y,0,-H.z,H.y,z.z,0,-z.x,U.z,0,-U.x,H.z,0,-H.x,-z.y,z.x,0,-U.y,U.x,0,-H.y,H.x,0];return!!P(e,N,B,F,V)&&(e=[1,0,0,0,1,0,0,0,1],!!P(e,N,B,F,V)&&(k.crossVectors(z,U),e=[k.x,k.y,k.z],P(e,N,B,F,V)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new T),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return I.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(I).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(D[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),D[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),D[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),D[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),D[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),D[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),D[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),D[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(D)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function P(t,e,n,i,r){for(let o=0,s=t.length-3;o<=s;o+=3){W.fromArray(t,o);const s=r.x*Math.abs(W.x)+r.y*Math.abs(W.y)+r.z*Math.abs(W.z),a=e.dot(W),l=n.dot(W),c=i.dot(W);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>s)return!1}return!0}const D=[new T,new T,new T,new T,new T,new T,new T,new T],I=new T,O=new C,N=new T,B=new T,F=new T,z=new T,U=new T,H=new T,G=new T,V=new T,k=new T,W=new T,j=new C;class X{constructor(t,e){this.center=void 0!==t?t:new T,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):j.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new C),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const q=new T,Y=new T,Q=new T,Z=new T,J=new T,K=new T,$=new T;class tt{constructor(t,e){this.origin=void 0!==t?t:new T,this.direction=void 0!==e?e:new T(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new T),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,q)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new T),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=q.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(q.copy(this.direction).multiplyScalar(e).add(this.origin),q.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Y.copy(t).add(e).multiplyScalar(.5),Q.copy(e).sub(t).normalize(),Z.copy(this.origin).sub(Y);const r=.5*t.distanceTo(e),o=-this.direction.dot(Q),s=Z.dot(this.direction),a=-Z.dot(Q),l=Z.lengthSq(),c=Math.abs(1-o*o);let h,u,d,p;if(c>0)if(h=o*a-s,u=o*s-a,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+o*u+2*s)+u*(o*h+u+2*a)+l}else u=r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u=-r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u<=-p?(h=Math.max(0,-(-o*r+s)),u=h>0?-r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-a),r),d=u*(u+2*a)+l):(h=Math.max(0,-(o*r+s)),u=h>0?r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l);else u=o>0?-r:r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Q).multiplyScalar(u).add(Y),d}intersectSphere(t,e){q.subVectors(t.center,this.origin);const n=q.dot(this.direction),i=q.dot(q)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),s=n-o,a=n+o;return s<0&&a<0?null:s<0?this.at(a,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,s,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,o=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,o=(t.min.y-u.y)*c),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(s=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||s>i?null:((s>n||n!=n)&&(n=s),(a=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,q)}intersectTriangle(t,e,n,i,r){J.subVectors(e,t),K.subVectors(n,t),$.crossVectors(J,K);let o,s=this.direction.dot($);if(s>0){if(i)return null;o=1}else{if(!(s<0))return null;o=-1,s=-s}Z.subVectors(this.origin,t);const a=o*this.direction.dot(K.crossVectors(Z,K));if(a<0)return null;const l=o*this.direction.dot(J.cross(Z));if(l<0)return null;if(a+l>s)return null;const c=-o*Z.dot($);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class et{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=s,g[13]=a,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new et).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/nt.setFromMatrixColumn(t,0).length(),r=1/nt.setFromMatrixColumn(t,1).length(),o=1/nt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),s=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=o*a}else if("YXZ"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=o*l,e[1]=o*h,e[5]=o*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=o*a}else if("ZXY"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-o*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=o*c,e[9]=r-t*s,e[2]=-o*l,e[6]=s,e[10]=o*a}else if("ZYX"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*a,e[10]=o*a}else if("YZX"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=o*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rt,t,ot)}lookAt(t,e,n){const i=this.elements;return lt.subVectors(t,e),0===lt.lengthSq()&&(lt.z=1),lt.normalize(),st.crossVectors(n,lt),0===st.lengthSq()&&(1===Math.abs(n.z)?lt.x+=1e-4:lt.z+=1e-4,lt.normalize(),st.crossVectors(n,lt)),st.normalize(),at.crossVectors(lt,st),i[0]=st.x,i[4]=at.x,i[8]=lt.x,i[1]=st.y,i[5]=at.y,i[9]=lt.y,i[2]=st.z,i[6]=at.z,i[10]=lt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],A=n[11],x=n[15],_=i[0],b=i[4],w=i[8],M=i[12],E=i[1],S=i[5],T=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],O=i[7],N=i[11],B=i[15];return r[0]=o*_+s*E+a*R+l*I,r[4]=o*b+s*S+a*C+l*O,r[8]=o*w+s*T+a*P+l*N,r[12]=o*M+s*L+a*D+l*B,r[1]=c*_+h*E+u*R+d*I,r[5]=c*b+h*S+u*C+d*O,r[9]=c*w+h*T+u*P+d*N,r[13]=c*M+h*L+u*D+d*B,r[2]=p*_+f*E+m*R+g*I,r[6]=p*b+f*S+m*C+g*O,r[10]=p*w+f*T+m*P+g*N,r[14]=p*M+f*L+m*D+g*B,r[3]=v*_+y*E+A*R+x*I,r[7]=v*b+y*S+A*C+x*O,r[11]=v*w+y*T+A*P+x*N,r[15]=v*M+y*L+A*D+x*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],s=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*a*h-i*l*h-r*s*u+n*l*u+i*s*d-n*a*d)+t[7]*(+e*a*d-e*l*u+r*o*u-i*o*d+i*l*c-r*a*c)+t[11]*(+e*l*h-e*s*d-r*o*h+n*o*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*a*h+e*s*u+i*o*h-n*o*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*a*d-s*m*d-h*a*g+s*u*g,y=p*u*l-c*m*l-p*a*d+o*m*d+c*a*g-o*u*g,A=c*f*l-p*h*l+p*s*d-o*f*d-c*s*g+o*h*g,x=p*h*a-c*f*a-p*s*u+o*f*u+c*s*m-o*h*m,_=e*v+n*y+i*A+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/_;return t[0]=v*b,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*b,t[2]=(s*m*r-f*a*r+f*i*l-n*m*l-s*i*g+n*a*g)*b,t[3]=(h*a*r-s*u*r-h*i*l+n*u*l+s*i*d-n*a*d)*b,t[4]=y*b,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*b,t[6]=(p*a*r-o*m*r-p*i*l+e*m*l+o*i*g-e*a*g)*b,t[7]=(o*u*r-c*a*r+c*i*l-e*u*l-o*i*d+e*a*d)*b,t[8]=A*b,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*b,t[10]=(o*f*r-p*s*r+p*n*l-e*f*l-o*n*g+e*s*g)*b,t[11]=(c*s*r-o*h*r-c*n*l+e*h*l+o*n*d-e*s*d)*b,t[12]=x*b,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*b,t[14]=(p*s*i-o*f*i-p*n*a+e*f*a+o*n*m-e*s*m)*b,t[15]=(o*h*i-c*s*i+c*n*a-e*h*a-o*n*u+e*s*u)*b,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,s=t.y,a=t.z,l=r*o,c=r*s;return this.set(l*o+n,l*s-i*a,l*a+i*s,0,l*s+i*a,c*s+n,c*a-i*o,0,l*a-i*s,c*a+i*o,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,s=e._z,a=e._w,l=r+r,c=o+o,h=s+s,u=r*l,d=r*c,p=r*h,f=o*c,m=o*h,g=s*h,v=a*l,y=a*c,A=a*h,x=n.x,_=n.y,b=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+A)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-A)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*b,i[9]=(m-v)*b,i[10]=(1-(u+f))*b,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=nt.set(i[0],i[1],i[2]).length();const o=nt.set(i[4],i[5],i[6]).length(),s=nt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],it.copy(this);const a=1/r,l=1/o,c=1/s;return it.elements[0]*=a,it.elements[1]*=a,it.elements[2]*=a,it.elements[4]*=l,it.elements[5]*=l,it.elements[6]*=l,it.elements[8]*=c,it.elements[9]*=c,it.elements[10]*=c,e.setFromRotationMatrix(it),n.x=r,n.y=o,n.z=s,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return s[0]=a,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,o){const s=this.elements,a=1/(e-t),l=1/(n-i),c=1/(o-r),h=(e+t)*a,u=(n+i)*l,d=(o+r)*c;return s[0]=2*a,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const nt=new T,it=new et,rt=new T(0,0,0),ot=new T(1,1,1),st=new T,at=new T,lt=new T;class ct{constructor(t=0,e=0,n=0,i=ct.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=g.clamp,r=t.elements,o=r[0],s=r[4],a=r[8],l=r[1],c=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-s,o)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(l,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,o)):(this._x=0,this._z=Math.atan2(-s,c));break;case"YZX":this._z=Math.asin(i(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(a,p));break;case"XZY":this._z=Math.asin(-i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return ht.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ht,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return ut.setFromEuler(this),this.setFromQuaternion(ut,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new T(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ct.DefaultOrder="XYZ",ct.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const ht=new et,ut=new S;class dt{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new T),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Rt.getNormalMatrix(t),i=this.coplanarPoint(Tt).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const Pt=new T,Dt=new T,It=new T,Ot=new T,Nt=new T,Bt=new T,Ft=new T,zt=new T,Ut=new T,Ht=new T;class Gt{constructor(t,e,n){this.a=void 0!==t?t:new T,this.b=void 0!==e?e:new T,this.c=void 0!==n?n:new T}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new T),i.subVectors(n,e),Pt.subVectors(t,e),i.cross(Pt);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Pt.subVectors(i,e),Dt.subVectors(n,e),It.subVectors(t,e);const o=Pt.dot(Pt),s=Pt.dot(Dt),a=Pt.dot(It),l=Dt.dot(Dt),c=Dt.dot(It),h=o*l-s*s;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new T),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*a-s*c)*u,p=(o*c-s*a)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Ot),Ot.x>=0&&Ot.y>=0&&Ot.x+Ot.y<=1}static getUV(t,e,n,i,r,o,s,a){return this.getBarycoord(t,e,n,i,Ot),a.set(0,0),a.addScaledVector(r,Ot.x),a.addScaledVector(o,Ot.y),a.addScaledVector(s,Ot.z),a}static isFrontFacing(t,e,n,i){return Pt.subVectors(n,e),Dt.subVectors(t,e),Pt.cross(Dt).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Pt.subVectors(this.c,this.b),Dt.subVectors(this.a,this.b),.5*Pt.cross(Dt).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new T),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Gt.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ct),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Gt.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Gt.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Gt.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Gt.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new T);const n=this.a,i=this.b,r=this.c;let o,s;Nt.subVectors(i,n),Bt.subVectors(r,n),zt.subVectors(t,n);const a=Nt.dot(zt),l=Bt.dot(zt);if(a<=0&&l<=0)return e.copy(n);Ut.subVectors(t,i);const c=Nt.dot(Ut),h=Bt.dot(Ut);if(c>=0&&h<=c)return e.copy(i);const u=a*h-c*l;if(u<=0&&a>=0&&c<=0)return o=a/(a-c),e.copy(n).addScaledVector(Nt,o);Ht.subVectors(t,r);const d=Nt.dot(Ht),p=Bt.dot(Ht);if(p>=0&&d<=p)return e.copy(r);const f=d*l-a*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(Bt,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return Ft.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Ft,s);const g=1/(m+f+u);return o=f*g,s=u*g,e.copy(n).addScaledVector(Nt,o).addScaledVector(Bt,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Vt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kt={h:0,s:0,l:0},Wt={h:0,s:0,l:0};function jt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Xt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function qt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Yt{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=g.euclideanModulo(t,1),e=g.clamp(e,0,1),n=g.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=jt(r,i,t+1/3),this.g=jt(r,i,t),this.b=jt(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Vt[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Xt(t.r),this.g=Xt(t.g),this.b=Xt(t.b),this}copyLinearToSRGB(t){return this.r=qt(t.r),this.g=qt(t.g),this.b=qt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let s,a;const l=(o+r)/2;if(o===r)s=0,a=0;else{const t=r-o;switch(a=l<=.5?t/(r+o):t/(2-r-o),r){case e:s=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Jt.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Kt.prototype=Object.create(Jt.prototype),Kt.prototype.constructor=Kt,Kt.prototype.isMeshBasicMaterial=!0,Kt.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const $t=new T,te=new v;function ee(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}function ne(t,e,n){ee.call(this,new Int8Array(t),e,n)}function ie(t,e,n){ee.call(this,new Uint8Array(t),e,n)}function re(t,e,n){ee.call(this,new Uint8ClampedArray(t),e,n)}function oe(t,e,n){ee.call(this,new Int16Array(t),e,n)}function se(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function ae(t,e,n){ee.call(this,new Int32Array(t),e,n)}function le(t,e,n){ee.call(this,new Uint32Array(t),e,n)}function ce(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function he(t,e,n){ee.call(this,new Float32Array(t),e,n)}function ue(t,e,n){ee.call(this,new Float64Array(t),e,n)}function de(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}Object.defineProperty(ee.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(ee.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i65535?le:se)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new y).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return ge.makeRotationX(t),this.applyMatrix4(ge),this},rotateY:function(t){return ge.makeRotationY(t),this.applyMatrix4(ge),this},rotateZ:function(t){return ge.makeRotationZ(t),this.applyMatrix4(ge),this},translate:function(t,e,n){return ge.makeTranslation(t,e,n),this.applyMatrix4(ge),this},scale:function(t,e,n){return ge.makeScale(t,e,n),this.applyMatrix4(ge),this},lookAt:function(t){return ve.lookAt(t),ve.updateMatrix(),this.applyMatrix4(ve.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ye).negate(),this.translate(ye.x,ye.y,ye.z),this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t},clone:function(){return(new be).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:c,point:Ue.clone(),object:t}}(t,e,n,i,Se,Te,Le,ze);if(p){a&&(Ne.fromBufferAttribute(a,c),Be.fromBufferAttribute(a,h),Fe.fromBufferAttribute(a,u),p.uv=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v)),l&&(Ne.fromBufferAttribute(l,c),Be.fromBufferAttribute(l,h),Fe.fromBufferAttribute(l,u),p.uv2=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v));const t=new Qt(c,h,u);Gt.getNormal(Se,Te,Le,t.normal),p.face=t}return p}He.prototype=Object.assign(Object.create(St.prototype),{constructor:He,isMesh:!0,copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ee.copy(n.boundingSphere),Ee.applyMatrix4(r),!1===t.ray.intersectsSphere(Ee))return;if(we.copy(r).invert(),Me.copy(t.ray).applyMatrix4(we),null!==n.boundingBox&&!1===Me.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0?1:-1,c.push(L.x,L.y,L.z),h.push(a/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},qe.prototype=Object.assign(Object.create(St.prototype),{constructor:qe,isCamera:!0,copy:function(t,e){return St.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new T),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){St.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Ye.prototype=Object.assign(Object.create(qe.prototype),{constructor:Ye,isPerspectiveCamera:!0,copy:function(t,e){return qe.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*g.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*g.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*g.RAD2DEG*Math.atan(Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,s=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/s,i*=o.width/t,n*=o.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=St.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});function Qe(t,e,n){if(St.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Ye(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new T(1,0,0)),this.add(i);const r=new Ye(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new T(-1,0,0)),this.add(r);const o=new Ye(90,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new T(0,1,0)),this.add(o);const s=new Ye(90,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new T(0,-1,0)),this.add(s);const a=new Ye(90,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new T(0,0,1)),this.add(a);const l=new Ye(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new T(0,0,-1)),this.add(l),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}function Ze(t,e,n,i,r,o,s,a,l,c){t=void 0!==t?t:[],e=void 0!==e?e:301,s=void 0!==s?s:1022,b.call(this,t,e,n,i,r,o,s,a,l,c),this.flipY=!1,this._needsFlipEnvMap=!0}Qe.prototype=Object.create(St.prototype),Qe.prototype.constructor=Qe,Ze.prototype=Object.create(b.prototype),Ze.prototype.constructor=Ze,Ze.prototype.isCubeTexture=!0,Object.defineProperty(Ze.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});class Je extends E{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),Object.defineProperty(this,"isWebGLCubeRenderTarget",{value:!0}),e=e||{},this.texture=new Ze(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=1023,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new Ve(5,5,5),r=new Xe({name:"CubemapFromEquirect",uniforms:ke(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new He(i,r),s=e.minFilter;1008===e.minFilter&&(e.minFilter=1006);return new Qe(1,10,this).update(t,o),e.minFilter=s,o.geometry.dispose(),o.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}function Ke(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Ke.prototype=Object.create(b.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isDataTexture=!0;const $e=new X,tn=new T;class en{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new Ct,void 0!==e?e:new Ct,void 0!==n?n:new Ct,void 0!==i?i:new Ct,void 0!==r?r:new Ct,void 0!==o?o:new Ct]}set(t,e,n,i,r,o){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],s=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-a,f-u,y-m).normalize(),e[1].setComponents(s+i,h+a,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-o,h-c,f-p,y-v).normalize(),e[5].setComponents(s+o,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),$e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSprite(t){return $e.center.set(0,0,0),$e.radius=.7071067811865476,$e.applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,tn.y=i.normal.y>0?t.max.y:t.min.y,tn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(tn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function rn(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},an={common:{diffuse:{value:new Yt(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new y},uv2Transform:{value:new y},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Yt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Yt(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}},sprite:{diffuse:{value:new Yt(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}}},ln={basic:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.fog]),vertexShader:sn.meshbasic_vert,fragmentShader:sn.meshbasic_frag},lambert:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshlambert_vert,fragmentShader:sn.meshlambert_frag},phong:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.fog,an.lights,{emissive:{value:new Yt(0)},specular:{value:new Yt(1118481)},shininess:{value:30}}]),vertexShader:sn.meshphong_vert,fragmentShader:sn.meshphong_frag},standard:{uniforms:We([an.common,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.roughnessmap,an.metalnessmap,an.fog,an.lights,{emissive:{value:new Yt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sn.meshphysical_vert,fragmentShader:sn.meshphysical_frag},toon:{uniforms:We([an.common,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.gradientmap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshtoon_vert,fragmentShader:sn.meshtoon_frag},matcap:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,an.fog,{matcap:{value:null}}]),vertexShader:sn.meshmatcap_vert,fragmentShader:sn.meshmatcap_frag},points:{uniforms:We([an.points,an.fog]),vertexShader:sn.points_vert,fragmentShader:sn.points_frag},dashed:{uniforms:We([an.common,an.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sn.linedashed_vert,fragmentShader:sn.linedashed_frag},depth:{uniforms:We([an.common,an.displacementmap]),vertexShader:sn.depth_vert,fragmentShader:sn.depth_frag},normal:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,{opacity:{value:1}}]),vertexShader:sn.normal_vert,fragmentShader:sn.normal_frag},sprite:{uniforms:We([an.sprite,an.fog]),vertexShader:sn.sprite_vert,fragmentShader:sn.sprite_frag},background:{uniforms:{uvTransform:{value:new y},t2D:{value:null}},vertexShader:sn.background_vert,fragmentShader:sn.background_frag},cube:{uniforms:We([an.envmap,{opacity:{value:1}}]),vertexShader:sn.cube_vert,fragmentShader:sn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sn.equirect_vert,fragmentShader:sn.equirect_frag},distanceRGBA:{uniforms:We([an.common,an.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sn.distanceRGBA_vert,fragmentShader:sn.distanceRGBA_frag},shadow:{uniforms:We([an.lights,an.fog,{color:{value:new Yt(0)},opacity:{value:1}}]),vertexShader:sn.shadow_vert,fragmentShader:sn.shadow_frag}};function cn(t,e,n,i,r){const o=new Yt(0);let s,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),l=e,d(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(o,l)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,l):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===a&&(a=new He(new Ve(1,1,1),new Xe({name:"BackgroundCubeMaterial",uniforms:ke(ln.cube.uniforms),vertexShader:ln.cube.vertexShader,fragmentShader:ln.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),a.geometry.deleteAttribute("uv"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),m.isWebGLCubeRenderTarget&&(m=m.texture),a.material.uniforms.envMap.value=m,a.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,c===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):m&&m.isTexture&&(void 0===s&&(s=new He(new on(2,2),new Xe({name:"BackgroundMaterial",uniforms:ke(ln.background.uniforms),vertexShader:ln.background.vertexShader,fragmentShader:ln.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),s.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function hn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==o,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=l[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,s=n.get(o);if(void 0===s)continue;const l=s.buffer,c=s.type,h=s.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,s=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,s*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,s,!1,64,0),t.vertexAttribPointer(i+1,4,s,!1,64,16),t.vertexAttribPointer(i+2,4,s,!1,64,32),t.vertexAttribPointer(i+3,4,s,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,s,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==A&&t.bindBuffer(34963,n.get(A).buffer))},reset:y,resetDefaultState:A,dispose:function(){y();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,s,a){if(0===a)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](o,i,s,a),n.update(s,o,a)}}function dn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const a=r(s);a!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",a,"instead."),s=a);const l=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function pn(t){const e=this;let n=null,i=0,r=!1,o=!1;const s=new Ct,a=new y,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let c=null;if(0!==o){if(c=l.value,!0!==r||null===c){const e=i+4*o,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderList(),a=t.getRenderTarget(),l=new Je(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(a),t.setRenderList(s),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function mn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function gn(t,e,n,i){const r={},o=new WeakMap;function s(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener("dispose",s),delete r[a.id];const l=o.get(a);l&&(e.remove(l),o.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let s=0;if(null!==i){const t=i.array;s=i.version;for(let e=0,i=t.length;e65535?le:se)(n,1);a.version=s;const l=o.get(t);l&&e.remove(l),o.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=Rn[r];if(void 0===o&&(o=new Float32Array(r),Rn[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function Nn(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function Pi(t){return t.replace(Ci,Di)}function Di(t,e){const n=sn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Pi(n)}const Ii=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ni(t){return t.replace(Oi,Fi).replace(Ii,Bi)}function Bi(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Fi(t,e,n,i)}function Fi(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Ti).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(Ti).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(Ti).join("\n"),v.length>0&&(v+="\n")):(g=[zi(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Ti).join("\n"),v=[p,zi(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?sn.tonemapping_pars_fragment:"",0!==n.toneMapping?Si("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",sn.encodings_pars_fragment,n.map?Mi("mapTexelToLinear",n.mapEncoding):"",n.matcap?Mi("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Mi("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Mi("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Mi("lightMapTexelToLinear",n.lightMapEncoding):"",Ei("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Ti).join("\n")),s=Pi(s),s=Li(s,n),s=Ri(s,n),a=Pi(a),a=Li(a,n),a=Ri(a,n),s=Ni(s),a=Ni(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in","300 es"===n.glslVersion?"":"out highp vec4 pc_fragColor;","300 es"===n.glslVersion?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const A=y+v+a,x=xi(r,35633,y+g+s),_=xi(r,35632,A);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=wi(r,x,"vertex"),n=wi(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let b,w;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===b&&(b=new Ai(r,m)),b},this.getAttributes=function(){return void 0===w&&(w=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:b,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:a||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:a||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:a||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||Vi),r.length>1&&r.sort(e||ki)}}}function ji(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new Wi(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new Wi(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function Xi(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new T,color:new Yt};break;case"SpotLight":n={position:new T,direction:new T,color:new Yt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new T,color:new Yt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new T,skyColor:new Yt,groundColor:new Yt};break;case"RectAreaLight":n={color:new Yt,position:new T,halfWidth:new T,halfHeight:new T}}return t[e.id]=n,n}}}let qi=0;function Yi(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Qi(t,e){const n=new Xi,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new T);const o=new T,s=new et,a=new et;return{setup:function(o){let s=0,a=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,f=0,m=0,g=0;o.sort(Yi);for(let t=0,e=o.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=an.LTC_FLOAT_1,r.rectAreaLTC2=an.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=an.LTC_HALF_1,r.rectAreaLTC2=an.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=s,r.ambient[1]=a,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===f&&v.numPointShadows===m&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=qi++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(o=new Zi(t,e),n.get(i).push(o)):o=n.get(i)[r],o},dispose:function(){n=new WeakMap}}}function Ki(t){Jt.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function $i(t){Jt.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new T,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Ki.prototype=Object.create(Jt.prototype),Ki.prototype.constructor=Ki,Ki.prototype.isMeshDepthMaterial=!0,Ki.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},$i.prototype=Object.create(Jt.prototype),$i.prototype.constructor=$i,$i.prototype.isMeshDistanceMaterial=!0,$i.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function tr(t,e,n){let i=new en;const r=new v,o=new v,s=new M,a=[],l=[],c={},h={0:1,1:0,2:2},u=new Xe({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new v},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new be;p.setAttribute("position",new ee(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const f=new He(p,u),m=this;function g(n,i){const r=e.update(f);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,f,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,f,null)}function y(t,e,n){const i=t<<0|e<<1|n<<2;let r=a[i];return void 0===r&&(r=new Ki({depthPacking:3201,morphTargets:t,skinning:e}),a[i]=r),r}function A(t,e,n){const i=t<<0|e<<1|n<<2;let r=l[i];return void 0===r&&(r=new $i({morphTargets:t,skinning:e}),l[i]=r),r}function x(e,n,i,r,o,s,a){let l=null,u=y,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=A,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));l=u(t,r,!0===e.isInstancedMesh)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===a?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=o,l.farDistance=s),l}function _(n,r,o,s,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;ln||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:1006,magFilter:1006,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new E(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:1003,magFilter:1003,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==T.indexOf("OpenGL ES")&&(S=parseFloat(/^OpenGL ES (\d)/.exec(T)[1]),E=S>=2);let L=null,R={};const C=new M,P=new M;function D(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?g.floorPowerOfTwo:Math.floor,o=i(r*t.width),s=i(r*t.height);void 0===p&&(p=m(o,s));const a=n?m(o,s):p;a.width=o,a.height=s;return a.getContext("2d").drawImage(t,0,0,o,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+s+")."),a}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return g.isPowerOfTwo(t.width)&&g.isPowerOfTwo(t.height)}function A(t,e){return t.generateMipmaps&&e&&1003!==t.minFilter&&1006!==t.minFilter}function x(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function _(n,i,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function b(t){return 1003===t||1004===t||1005===t?9728:9729}function w(e){const n=e.target;n.removeEventListener("dispose",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),s.memory.textures--}function M(e){const n=e.target;n.removeEventListener("dispose",M),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),s.memory.textures--}let E=0;function S(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=s.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void D(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function T(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;P(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:v(i.image[t],!1,!0,c);const u=h[0],d=y(u)||a,p=o.convert(i.format),f=o.convert(i.type),m=_(i.internalFormat,p,f);let g;if(C(34067,i,d),s){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,l.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function P(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",w),e.__webglTexture=t.createTexture(),s.memory.textures++)}function D(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),P(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const l=function(t){return!a&&(1001!==t.wrapS||1001!==t.wrapT||1003!==t.minFilter&&1006!==t.minFilter)}(i)&&!1===y(i.image),c=v(i.image,l,!1,h),u=y(c)||a,d=o.convert(i.format);let p,f=o.convert(i.type),m=_(i.internalFormat,d,f);C(s,i,u);const g=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===i.format&&6402===m&&1012!==i.type&&1014!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=1012,f=o.convert(i.type)),1027===i.format&&6402===m&&(m=34041,1020!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=1020,f=o.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(g.length>0&&u){for(let t=0,e=g.length;t0&&u){for(let t=0,e=g.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=S,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=T,this.setupRenderTarget=function(e){const r=i.get(e),l=i.get(e.texture);e.addEventListener("dispose",M),l.__webglTexture=t.createTexture(),s.memory.textures++;const c=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=y(e)||a;if(!a||1022!==e.texture.format||1015!==e.texture.type&&1016!==e.texture.type||(e.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),c){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(a){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),s=_(e.texture.internalFormat,n,i),a=B(e);t.renderbufferStorageMultisample(36161,a,s,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),O(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){n.bindTexture(34067,l.__webglTexture),C(34067,e.texture,u);for(let t=0;t<6;t++)I(r.__webglFramebuffer[t],e,36064,34069+t);A(e.texture,u)&&x(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,l.__webglTexture),C(3553,e.texture,u),I(r.__webglFramebuffer,e,36064,3553),A(e.texture,u)&&x(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&N(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(A(e,y(t)||a)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),x(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let s=16384;e.depthBuffer&&(s|=256),e.stencilBuffer&&(s|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,s,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===F&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),F=!0),t=t.texture),S(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===z&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),z=!0),t=t.texture),T(t,e)}}function ir(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(1009===t)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(1012===t)return 5123;if(1013===t)return 5124;if(1014===t)return 5125;if(1015===t)return 5126;if(1016===t)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(1022===t)return 6407;if(1023===t)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(1026===t)return 6402;if(1027===t)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):1020===t?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function rr(t=[]){Ye.call(this),this.cameras=t}function or(){St.call(this),this.type="Group"}function sr(){this._targetRay=null,this._grip=null,this._hand=null}function ar(t,e){const n=this;let i=null,r=1,o=null,s="local-floor",a=null;const l=[],c=new Map,h=new Ye;h.layers.enable(1),h.viewport=new M;const u=new Ye;u.layers.enable(2),u.viewport=new M;const d=[h,u],p=new rr;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=c.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){c.forEach((function(t,e){t.disconnect(e)})),c.clear(),f=null,m=null,t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),w.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){const e=i.inputSources;for(let t=0;t0&&Et(o,t,e),s.length>0&&Et(s,t,e),!0===t.isScene&&t.onAfterRender(f,t,e),null!==_&&(Z.updateRenderTargetMipmap(_),Z.updateMultisampleRenderTarget(_)),q.buffers.depth.setTest(!0),q.buffers.depth.setMask(!0),q.buffers.color.setMask(!0),q.setPolygonOffset(!1),p.pop(),d=p.length>0?p[p.length-1]:null,u=null},this.setFramebuffer=function(t){y!==t&&null===_&&pt.bindFramebuffer(36160,t),y=t},this.getActiveCubeFace=function(){return A},this.getActiveMipmapLevel=function(){return x},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderTarget=function(){return _},this.setRenderTarget=function(t,e=0,n=0){_=t,A=e,x=n,t&&void 0===Q.get(t).__webglFramebuffer&&Z.setupRenderTarget(t);let i=y,r=!1;if(t){const n=Q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?Q.get(t).__webglMultisampledFramebuffer:n,S.copy(t.viewport),L.copy(t.scissor),R=t.scissorTest}else S.copy(N).multiplyScalar(D).floor(),L.copy(B).multiplyScalar(D).floor(),R=F;if(b!==i&&(pt.bindFramebuffer(36160,i),b=i),q.viewport(S),q.scissor(L),q.setScissorTest(R),r){const i=Q.get(t.texture);pt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,s){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let a=Q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==s&&(a=a[s]),a){let s=!1;a!==b&&(pt.bindFramebuffer(36160,a),s=!0);try{const a=t.texture,l=a.format,c=a.type;if(1023!==l&&ut.convert(l)!==pt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const h=1016===c&&(j.has("EXT_color_buffer_half_float")||X.isWebGL2&&j.has("EXT_color_buffer_float"));if(!(1009===c||ut.convert(c)===pt.getParameter(35738)||1015===c&&(X.isWebGL2||j.has("OES_texture_float")||j.has("WEBGL_color_buffer_float"))||h))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===pt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&pt.readPixels(e,n,i,r,ut.convert(l),ut.convert(c),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&pt.bindFramebuffer(36160,b)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),s=ut.convert(e.format);Z.setTexture2D(e,0),pt.copyTexImage2D(3553,n,s,t.x,t.y,r,o,0),q.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,s=ut.convert(n.format),a=ut.convert(n.type);Z.setTexture2D(n,0),pt.pixelStorei(37440,n.flipY),pt.pixelStorei(37441,n.premultiplyAlpha),pt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?pt.texSubImage2D(3553,i,t.x,t.y,r,o,s,a,e.image.data):e.isCompressedTexture?pt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):pt.texSubImage2D(3553,i,t.x,t.y,s,a,e.image),0===i&&n.generateMipmaps&&pt.generateMipmap(3553),q.unbindTexture()},this.initTexture=function(t){Z.setTexture2D(t,0),q.unbindTexture()},this.resetState=function(){q.reset(),dt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function hr(t){cr.call(this,t)}rr.prototype=Object.assign(Object.create(Ye.prototype),{constructor:rr,isArrayCamera:!0}),or.prototype=Object.assign(Object.create(St.prototype),{constructor:or,isGroup:!0}),Object.assign(sr.prototype,{constructor:sr,getHandSpace:function(){return null===this._hand&&(this._hand=new or,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new or,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new or,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const s=this._targetRay,a=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(l&&t.hand){o=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new or;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],s=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&s>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==s&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale))),null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale)));return null!==s&&(s.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==o),this}}),Object.assign(ar.prototype,p.prototype),hr.prototype=Object.assign(Object.create(cr.prototype),{constructor:hr,isWebGL1Renderer:!0});class ur extends St{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function dr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=g.generateUUID()}Object.defineProperty(dr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(dr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:a,point:vr.clone(),uv:Gt.getUV(vr,wr,Mr,Er,Sr,Tr,Lr,new v),face:null,object:this})},copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const Pr=new T,Dr=new T;function Ir(){St.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}Ir.prototype=Object.assign(Object.create(St.prototype),{constructor:Ir,isLOD:!0,copy:function(t){St.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){Pr.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Pr);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){Pr.setFromMatrixPosition(t.matrixWorld),Dr.setFromMatrixPosition(this.matrixWorld);const n=Pr.distanceTo(Dr)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;is)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:c.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;ns)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:c.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const no=new T,io=new T;function ro(t,e){eo.call(this,t,e),this.type="LineSegments"}function oo(t,e){eo.call(this,t,e),this.type="LineLoop"}function so(t){Jt.call(this),this.type="PointsMaterial",this.color=new Yt(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}ro.prototype=Object.assign(Object.create(eo.prototype),{constructor:ro,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:s})}}function fo(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.format=void 0!==s?s:1022,this.minFilter=void 0!==o?o:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function mo(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function go(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.needsUpdate=!0}function vo(t,e,n,i,r,o,s,a,l,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===c&&(n=1012),void 0===n&&1027===c&&(n=1020),b.call(this,null,i,r,o,s,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==a?a:1003,this.flipY=!1,this.generateMipmaps=!1}uo.prototype=Object.assign(Object.create(St.prototype),{constructor:uo,isPoints:!0,copy:function(t){return St.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),co.copy(n.boundingSphere),co.applyMatrix4(i),co.radius+=r,!1===t.ray.intersectsSphere(co))return;ao.copy(i).invert(),lo.copy(t.ray).applyMatrix4(ao);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,a=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),fo.prototype=Object.assign(Object.create(b.prototype),{constructor:fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),mo.prototype=Object.create(b.prototype),mo.prototype.constructor=mo,mo.prototype.isCompressedTexture=!0,go.prototype=Object.create(b.prototype),go.prototype.constructor=go,go.prototype.isCanvasTexture=!0,vo.prototype=Object.create(b.prototype),vo.prototype.constructor=vo,vo.prototype.isDepthTexture=!0;new T,new T,new T,new Gt;const yo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Ao(t,0,r,n,!0);const s=[];if(!o||o.next===o.prev)return s;let a,l,c,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,s,a,l,c;for(o=0,s=e.length;o80*n){a=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-a,h-l),p=0!==p?1/p:0}return _o(o,s,n,a,l,p),s};function Ao(t,e,n,i,r){let o,s;if(r===function(t,e,n,i){let r=0;for(let o=e,s=n-i;o0)for(o=e;o=e;o-=i)s=Ho(o,t[o],t[o+1],s);return s&&Oo(s,s.next)&&(Go(s),s=s.next),s}function xo(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Oo(i,i.next)&&0!==Io(i.prev,i,i.next))i=i.next;else{if(Go(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function _o(t,e,n,i,r,o,s){if(!t)return;!s&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Ro(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,s,a,l,c=1;do{for(n=t,t=null,o=null,s=0;n;){for(s++,i=n,a=0,e=0;e0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,o);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,o?wo(t,i,r,o):bo(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),Go(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?_o(t=Mo(xo(t),e,n),e,n,i,r,o,2):2===s&&Eo(t,e,n,i,r,o):_o(xo(t),e,n,i,r,o,1);break}}function bo(t){const e=t.prev,n=t,i=t.next;if(Io(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Po(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Io(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function wo(t,e,n,i){const r=t.prev,o=t,s=t.next;if(Io(r,o,s)>=0)return!1;const a=r.xo.x?r.x>s.x?r.x:s.x:o.x>s.x?o.x:s.x,h=r.y>o.y?r.y>s.y?r.y:s.y:o.y>s.y?o.y:s.y,u=Ro(a,l,e,n,i),d=Ro(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Mo(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!Oo(r,o)&&No(r,i,i.next,o)&&zo(r,o)&&zo(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),Go(i),Go(i.next),i=t=o),i=i.next}while(i!==t);return xo(i)}function Eo(t,e,n,i,r,o){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&Do(s,t)){let a=Uo(s,t);return s=xo(s,s.next),a=xo(a,a.next),_o(s,e,n,i,r,o),void _o(a,e,n,i,r,o)}t=t.next}s=s.next}while(s!==t)}function So(t,e){return t.x-e.x}function To(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=l&&i!==n.x&&Po(ro.x||n.x===o.x&&Lo(o,n)))&&(o=n,u=h)),n=n.next}while(n!==a);return o}(t,e)){const n=Uo(e,t);xo(e,e.next),xo(n,n.next)}}function Lo(t,e){return Io(t.prev,t,e.prev)<0&&Io(e.next,t,t.next)<0}function Ro(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Co(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-a)-(n-s)*(e-a)>=0&&(n-s)*(o-a)-(r-s)*(i-a)>=0}function Do(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&No(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(zo(t,e)&&zo(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Io(t.prev,t,e.prev)||Io(t,e.prev,e))||Oo(t,e)&&Io(t.prev,t,t.next)>0&&Io(e.prev,e,e.next)>0)}function Io(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Oo(t,e){return t.x===e.x&&t.y===e.y}function No(t,e,n,i){const r=Fo(Io(t,e,n)),o=Fo(Io(t,e,i)),s=Fo(Io(n,i,t)),a=Fo(Io(n,i,e));return r!==o&&s!==a||(!(0!==r||!Bo(t,n,e))||(!(0!==o||!Bo(t,i,e))||(!(0!==s||!Bo(n,t,i))||!(0!==a||!Bo(n,e,i)))))}function Bo(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Fo(t){return t>0?1:t<0?-1:0}function zo(t,e){return Io(t.prev,t,t.next)<0?Io(t,e,t.next)>=0&&Io(t,t.prev,e)>=0:Io(t,e,t.prev)<0||Io(t,t.next,e)<0}function Uo(t,e){const n=new Vo(t.i,t.x,t.y),i=new Vo(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function Ho(t,e,n,i){const r=new Vo(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Go(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Vo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const ko={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function jo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-a/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-a*l);i=p+s*m-t.x,r=f+a*m-t.y;const g=i*i+r*r;if(g<=2)return new v(i,r);o=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=s,o=Math.sqrt(h)):(i=s,r=a,o=Math.sqrt(h/2))}return new v(i/o,r/o)}const I=[];for(let t=0,e=L.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=L.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*p;t=0?(t(i-a,p,h),u.subVectors(c,h)):(t(i+a,p,h),u.subVectors(h,c)),p-a>=0?(t(i,p-a,h),d.subVectors(c,h)):(t(i,p+a,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),o.push(l.x,l.y,l.z),s.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||a=i)){l.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(a=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+a,e=t+l-a;d=ls.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(o),d=ls.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new S).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=ls.arraySlice(n,r,o),this.values=ls.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&ls.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=ls.arraySlice(this.times),e=ls.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=t.length-1;let o=1;for(let s=1;s0){t[o]=t[r];for(let t=r*n,i=o*n,s=0;s!==n;++s)e[i+s]=e[t+s];++o}return o!==t.length?(this.times=ls.arraySlice(t,0,o),this.values=ls.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=ls.arraySlice(this.times,0),e=ls.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),fs.prototype=Object.assign(Object.create(ps.prototype),{constructor:fs,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ms.prototype=Object.assign(Object.create(ps.prototype),{constructor:ms,ValueTypeName:"color"}),gs.prototype=Object.assign(Object.create(ps.prototype),{constructor:gs,ValueTypeName:"number"}),vs.prototype=Object.assign(Object.create(cs.prototype),{constructor:vs,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,a=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)S.slerpFlat(r,0,o,l-s,o,l,a);return r}}),ys.prototype=Object.assign(Object.create(ps.prototype),{constructor:ys,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new vs(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),As.prototype=Object.assign(Object.create(ps.prototype),{constructor:As,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),xs.prototype=Object.assign(Object.create(ps.prototype),{constructor:xs,ValueTypeName:"vector"}),Object.assign(_s,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(bs(n[t]).scale(i));const r=new _s(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(ps.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(_s.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],s=[];ls.flattenJSON(n,o,s,i),0!==o.length&&r.push(new t(e,o,s))}},i=[],r=t.name||"default",o=t.fps||30,s=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?1022:1023,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(Os.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let s,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),s=n[i]-o,s<0)a=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===o)return i/(r-1);const c=n[i];return(i+(o-c)/(n[i+1]-c))/(r-1)},getTangent:function(t,e){let n=t-1e-4,i=t+1e-4;n<0&&(n=0),i>1&&(i=1);const r=this.getPoint(n),o=this.getPoint(i),s=e||(r.isVector2?new v:new T);return s.copy(o).sub(r).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new T,i=[],r=[],o=[],s=new T,a=new et;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new T),i[e].normalize()}r[0]=new T,o[0]=new T;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(g.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(a.makeRotationAxis(s,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(g.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Ns.prototype=Object.create(Os.prototype),Ns.prototype.constructor=Ns,Ns.prototype.isEllipseCurve=!0,Ns.prototype.getPoint=function(t,e){const n=e||new v,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(zs.subVectors(i[0],i[1]).add(i[0]),s=zs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(ks(s,a.x,l.x,c.x,h.x),ks(s,a.y,l.y,c.y,h.y)),n},Ks.prototype.copy=function(t){Os.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),s=0===o?0:1-t/o;return r.getPointAt(s)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){Os.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this},copy:function(t){return ta.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=ta.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return ta.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),na.prototype=Object.assign(Object.create(ea.prototype),{constructor:na,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Yt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new v).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new T).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new M).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new y).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new et).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new v).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new v).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const ya=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Aa(){be.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function xa(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),ee.call(this,t,e,n),this.meshPerAttribute=i||1}function _a(t){Es.call(this,t)}function ba(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),Es.call(this,t),this.options={premultiplyAlpha:"none"}}function wa(){this.type="ShapePath",this.color=new Yt,this.subPaths=[],this.currentPath=null}Aa.prototype=Object.assign(Object.create(be.prototype),{constructor:Aa,isInstancedBufferGeometry:!0,copy:function(t){return be.prototype.copy.call(this,t),this.instanceCount=t.instanceCount,this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){const t=be.prototype.toJSON.call(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}),xa.prototype=Object.assign(Object.create(ee.prototype),{constructor:xa,isInstancedBufferAttribute:!0,copy:function(t){return ee.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},toJSON:function(){const t=ee.prototype.toJSON.call(this);return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}),_a.prototype=Object.assign(Object.create(Es.prototype),{constructor:_a,load:function(t,e,n,i){const r=this,o=new Ts(r.manager);o.setPath(r.path),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)},parse:function(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],o=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),s=new dr(fe(r.type,o),r.stride);return s.uuid=r.uuid,e[i]=s,s}const r=t.isInstancedBufferGeometry?new Aa:new be,o=t.data.index;if(void 0!==o){const t=fe(o.type,o.array);r.setIndex(new ee(t,1))}const s=t.data.attributes;for(const e in s){const n=s[e];let o;if(n.isInterleavedBufferAttribute){o=new fr(i(t.data,n.data),n.itemSize,n.offset,n.normalized)}else{const t=fe(n.type,n.array);o=new(n.isInstancedBufferAttribute?xa:ee)(t,n.itemSize,n.normalized)}void 0!==n.name&&(o.name=n.name),r.setAttribute(e,o)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],o=[];for(let e=0,r=n.length;eNumber.EPSILON){if(l<0&&(n=e[o],a=-a,s=e[r],l=-l),t.ys.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(s.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=s.x)return!0}}return i}const r=ko.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let s,a,l;const c=[];if(1===o.length)return a=o[0],l=new na,l.curves=a.curves,c.push(l),c;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){S.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;S.multiplyQuaternionsFlat(t,o,t,e,t,n),S.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*o+t[n+s]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const Na=new RegExp("[\\[\\]\\.:\\/]","g"),Ba="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Fa=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),za=/(WCOD+)?/.source.replace("WCOD",Ba),Ua=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ha=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ga=new RegExp("^"+Fa+za+Ua+Ha+"$"),Va=["material","materials","bones"];function ka(t,e,n){const i=n||Wa.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Wa(t,e,n){this.path=e,this.parsedPath=n||Wa.parseTrackName(e),this.node=Wa.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(ka.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Wa,{Composite:ka,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Wa.Composite(t,e,n):new Wa(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(Na,"")},parseTrackName:function(t){const e=Ga.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Va.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,c=t[o];e[c.uuid]=l,t[l]=c,e[a]=o,t[o]=s;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[l];e[l]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s].uuid,l=e[a];if(void 0!==l)if(delete e[a],l0&&(e[s.uuid]=l),t[l]=s,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,s=this._parsedPaths,a=this._objects,l=a.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,o.push(t),s.push(e),r.push(h);for(let n=c,i=a.length;n!==i;++n){const i=a[n];h[n]=new Wa(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,s=o.length-1,a=o[s];e[t[s]]=n,o[n]=a,o.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}});class ja{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,s=new Array(o),a={endingStart:2400,endingEnd:2400};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);s[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=s,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);const a=s.parameterPositions,l=s.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/o,l[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),s=this._updateWeight(t);if(s>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(s);break;case 2500:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const s=o.parameterPositions,a=o.sampleValues;return s[0]=r,a[0]=e,s[1]=r+t,a[1]=n,this}}function Xa(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Xa.prototype=Object.assign(Object.create(p.prototype),{constructor:Xa,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,s=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Oa(Wa.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),o[t]=h}s[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,o)}const s=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)s[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new v),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new v),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return tl.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(C.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(X.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),en.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},class{constructor(t,e){this.start=void 0!==t?t:new T,this.end=void 0!==e?e:new T}set(t,e){return this.start.copy(t),this.end.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new T),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new T),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new T),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){el.subVectors(t,this.start),nl.subVectors(this.end,this.start);const n=nl.dot(nl);let i=nl.dot(el)/n;return e&&(i=g.clamp(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new T),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Object.assign(g,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),g.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),g.ceilPowerOfTwo(t)}}),Object.assign(y.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(et.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new T).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Ct.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(S.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(tt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(Gt.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(Gt,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Gt.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Gt.getNormal(t,e,n,i)}}),Object.assign(na.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Xo(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Qo(this,t)}}),Object.assign(v.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(T.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(M.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(St.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(St.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(He.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(He.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(Ir.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(kr.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),Ur.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(Os.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Ye.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(ia.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ee.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(35048)}}}),Object.assign(ee.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(be.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new ee(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(be.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Aa.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Za.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(dr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),35048===this.usage},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(dr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Xo.prototype,{getArrays:function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")}}),Object.assign(ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(qa.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Jt.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Yt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(es.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(ts.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(Xe.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(cr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(cr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:3e3}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(tr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(E.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends St{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0?n=t[0]:e&&e("VR input not available.")})).catch((function(){console.warn("THREE.VRControls: Unable to get VR Displays")})),this.scale=1,this.standing=!1,this.userHeight=1.6,this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."),i},this.getStandingMatrix=function(){return o},this.update=function(){var e;n&&(n.getFrameData?(n.getFrameData(s),e=s.pose):n.getPose&&(e=n.getPose()),null!==e.orientation&&t.quaternion.fromArray(e.orientation),null!==e.position?t.position.fromArray(e.position):t.position.set(0,0,0),this.standing&&(n.stageParameters?(t.updateMatrix(),o.fromArray(n.stageParameters.sittingToStandingTransform),t.applyMatrix(o)):t.position.setY(t.position.y+this.userHeight)),t.position.multiplyScalar(r.scale))},this.dispose=function(){n=null}},hl=function(t,e){var n,i,r,o,s=new T,a=new T,l=new et,c=new et,h=new et,u=null;"VRFrameData"in window&&(u=new window.VRFrameData),navigator.getVRDisplays&&navigator.getVRDisplays().then((function(t){i=t,t.length>0?n=t[0]:e&&e("HMD not available")})).catch((function(){console.warn("THREE.VREffect: Unable to get VR Displays")})),this.isPresenting=!1;var d=this,p=t.getSize(),f=!1,m=t.getPixelRatio();this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."),i},this.setSize=function(e,i,r){if(p={width:e,height:i},f=r,d.isPresenting){var o=n.getEyeParameters("left");t.setPixelRatio(1),t.setSize(2*o.renderWidth,o.renderHeight,!1)}else t.setPixelRatio(m),t.setSize(e,i,r)};var g=t.domElement,v=[0,0,.5,1],y=[.5,0,.5,1];function A(){var e=d.isPresenting;if(d.isPresenting=void 0!==n&&n.isPresenting,d.isPresenting){var i=n.getEyeParameters("left"),r=i.renderWidth,o=i.renderHeight;e||(m=t.getPixelRatio(),p=t.getSize(),t.setPixelRatio(1),t.setSize(2*r,o,!1))}else e&&(t.setPixelRatio(m),t.setSize(p.width,p.height,f))}window.addEventListener("vrdisplaypresentchange",A,!1),this.setFullScreen=function(t){return new Promise((function(e,i){void 0!==n?d.isPresenting!==t?e(t?n.requestPresent([{source:g}]):n.exitPresent()):e():i(new Error("No VR hardware found."))}))},this.requestPresent=function(){return this.setFullScreen(!0)},this.exitPresent=function(){return this.setFullScreen(!1)},this.requestAnimationFrame=function(t){return void 0!==n?n.requestAnimationFrame(t):window.requestAnimationFrame(t)},this.cancelAnimationFrame=function(t){void 0!==n?n.cancelAnimationFrame(t):window.cancelAnimationFrame(t)},this.submitFrame=function(){void 0!==n&&d.isPresenting&&n.submitFrame()},this.autoSubmitFrame=!0;var x=new Ye;x.layers.enable(1);var _=new Ye;_.layers.enable(2),this.render=function(e,i,p,f){if(n&&d.isPresenting){var m=e.autoUpdate;m&&(e.updateMatrixWorld(),e.autoUpdate=!1),Array.isArray(e)&&(console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."),e=e[0]);var g,A,E=t.getSize(),S=n.getLayers();if(S.length){var T=S[0];g=null!==T.leftBounds&&4===T.leftBounds.length?T.leftBounds:v,A=null!==T.rightBounds&&4===T.rightBounds.length?T.rightBounds:y}else g=v,A=y;if(r={x:Math.round(E.width*g[0]),y:Math.round(E.height*g[1]),width:Math.round(E.width*g[2]),height:Math.round(E.height*g[3])},o={x:Math.round(E.width*A[0]),y:Math.round(E.height*A[1]),width:Math.round(E.width*A[2]),height:Math.round(E.height*A[3])},p?(t.setRenderTarget(p),p.scissorTest=!0):(t.setRenderTarget(null),t.setScissorTest(!0)),(t.autoClear||f)&&t.clear(),null===i.parent&&i.updateMatrixWorld(),i.matrixWorld.decompose(x.position,x.quaternion,x.scale),_.position.copy(x.position),_.quaternion.copy(x.quaternion),_.scale.copy(x.scale),n.getFrameData)n.depthNear=i.near,n.depthFar=i.far,n.getFrameData(u),x.projectionMatrix.elements=u.leftProjectionMatrix,_.projectionMatrix.elements=u.rightProjectionMatrix,function(t){t.pose.orientation?(b.fromArray(t.pose.orientation),l.makeRotationFromQuaternion(b)):l.identity();t.pose.position&&(w.fromArray(t.pose.position),l.setPosition(w));c.fromArray(t.leftViewMatrix),c.multiply(l),h.fromArray(t.rightViewMatrix),h.multiply(l),c.getInverse(c),h.getInverse(h)}(u),x.updateMatrix(),x.matrix.multiply(c),x.matrix.decompose(x.position,x.quaternion,x.scale),_.updateMatrix(),_.matrix.multiply(h),_.matrix.decompose(_.position,_.quaternion,_.scale);else{var L=n.getEyeParameters("left"),R=n.getEyeParameters("right");x.projectionMatrix=M(L.fieldOfView,!0,i.near,i.far),_.projectionMatrix=M(R.fieldOfView,!0,i.near,i.far),s.fromArray(L.offset),a.fromArray(R.offset),x.translateOnAxis(s,x.scale.x),_.translateOnAxis(a,_.scale.x)}return p?(p.viewport.set(r.x,r.y,r.width,r.height),p.scissor.set(r.x,r.y,r.width,r.height)):(t.setViewport(r.x,r.y,r.width,r.height),t.setScissor(r.x,r.y,r.width,r.height)),t.render(e,x,p,f),p?(p.viewport.set(o.x,o.y,o.width,o.height),p.scissor.set(o.x,o.y,o.width,o.height)):(t.setViewport(o.x,o.y,o.width,o.height),t.setScissor(o.x,o.y,o.width,o.height)),t.render(e,_,p,f),p?(p.viewport.set(0,0,E.width,E.height),p.scissor.set(0,0,E.width,E.height),p.scissorTest=!1,t.setRenderTarget(null)):(t.setViewport(0,0,E.width,E.height),t.setScissorTest(!1)),m&&(e.autoUpdate=!0),void(d.autoSubmitFrame&&d.submitFrame())}t.render(e,i,p,f)},this.dispose=function(){window.removeEventListener("vrdisplaypresentchange",A,!1)};var b=new S,w=new T;function M(t,e,n,i){var r=Math.PI/180;return function(t,e,n,i){n=void 0===n?.01:n,i=void 0===i?1e4:i;var r=(e=void 0===e||e)?-1:1,o=new et,s=o.elements,a=function(t){var e=2/(t.leftTan+t.rightTan),n=(t.leftTan-t.rightTan)*e*.5,i=2/(t.upTan+t.downTan);return{scale:[e,i],offset:[n,(t.upTan-t.downTan)*i*.5]}}(t);return s[0]=a.scale[0],s[1]=0,s[2]=a.offset[0]*r,s[3]=0,s[4]=0,s[5]=a.scale[1],s[6]=-a.offset[1]*r,s[7]=0,s[8]=0,s[9]=0,s[10]=i/(n-i)*-r,s[11]=i*n/(n-i),s[12]=0,s[13]=0,s[14]=r,s[15]=0,o.transpose(),o}({upTan:Math.tan(t.upDegrees*r),downTan:Math.tan(t.downDegrees*r),leftTan:Math.tan(t.leftDegrees*r),rightTan:Math.tan(t.rightDegrees*r)},e,n,i)}},ul=function(t,e){var n,i,r,o,s;this.object=t,this.domElement=void 0!==e?e:document,this.enabled=!0,this.target=new T,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:h,ZOOM:u,PAN:d},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return y.phi},this.getAzimuthalAngle=function(){return y.theta},this.saveState=function(){a.target0.copy(a.target),a.position0.copy(a.object.position),a.zoom0=a.object.zoom},this.reset=function(){a.target.copy(a.target0),a.object.position.copy(a.position0),a.object.zoom=a.zoom0,a.object.updateProjectionMatrix(),a.dispatchEvent(l),a.update(),m=f.NONE},this.update=(n=new T,i=(new S).setFromUnitVectors(t.up,new T(0,1,0)),r=i.clone().inverse(),o=new T,s=new S,function(){var t=a.object.position;return n.copy(t).sub(a.target),n.applyQuaternion(i),y.setFromVector3(n),a.autoRotate&&m===f.NONE&&a.rotateLeft(2*Math.PI/60/60*a.autoRotateSpeed),y.theta+=A.theta,y.phi+=A.phi,y.theta=Math.max(a.minAzimuthAngle,Math.min(a.maxAzimuthAngle,y.theta)),y.phi=Math.max(a.minPolarAngle,Math.min(a.maxPolarAngle,y.phi)),y.makeSafe(),y.radius*=x,y.radius=Math.max(a.minDistance,Math.min(a.maxDistance,y.radius)),a.target.add(_),n.setFromSpherical(y),n.applyQuaternion(r),t.copy(a.target).add(n),a.object.lookAt(a.target),!0===a.enableDamping?(A.theta*=1-a.dampingFactor,A.phi*=1-a.dampingFactor,_.multiplyScalar(1-a.dampingFactor)):(A.set(0,0,0),_.set(0,0,0)),x=1,!!(b||o.distanceToSquared(a.object.position)>g||8*(1-s.dot(a.object.quaternion))>g)&&(a.dispatchEvent(l),o.copy(a.object.position),s.copy(a.object.quaternion),b=!1,!0)}),this.dispose=function(){a.domElement.removeEventListener("contextmenu",Q,!1),a.domElement.removeEventListener("mousedown",G,!1),a.domElement.removeEventListener("wheel",W,!1),a.domElement.removeEventListener("touchstart",X,!1),a.domElement.removeEventListener("touchend",Y,!1),a.domElement.removeEventListener("touchmove",q,!1),document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),window.removeEventListener("keydown",j,!1)};var a=this,l={type:"change"},c={type:"start"},p={type:"end"},f={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY_PAN:4},m=f.NONE,g=1e-6,y=new $a,A=new $a,x=1,_=new T,b=!1,w=new v,M=new v,E=new v,L=new v,R=new v,C=new v,P=new v,D=new v,I=new v;function O(){return Math.pow(.95,a.zoomSpeed)}a.rotateLeft=function(t){A.theta-=t},a.rotateUp=function(t){A.phi-=t};var N,B=(N=new T,function(t,e){N.setFromMatrixColumn(e,0),N.multiplyScalar(-t),_.add(N)}),F=function(){var t=new T;return function(e,n){!0===a.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(a.object.up,t)),t.multiplyScalar(e),_.add(t)}}(),z=function(){var t=new T;return function(e,n){var i=a.domElement===document?a.domElement.body:a.domElement;if(a.object.isPerspectiveCamera){var r=a.object.position;t.copy(r).sub(a.target);var o=t.length();o*=Math.tan(a.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,a.object.matrix),F(2*n*o/i.clientHeight,a.object.matrix)}else a.object.isOrthographicCamera?(B(e*(a.object.right-a.object.left)/a.object.zoom/i.clientWidth,a.object.matrix),F(n*(a.object.top-a.object.bottom)/a.object.zoom/i.clientHeight,a.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),a.enablePan=!1)}}();function U(t){a.object.isPerspectiveCamera?x/=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom*t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function H(t){a.object.isPerspectiveCamera?x*=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom/t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function G(t){if(!1!==a.enabled){switch(t.preventDefault(),t.button){case a.mouseButtons.ORBIT:if(!1===a.enableRotate)return;!function(t){w.set(t.clientX,t.clientY)}(t),m=f.ROTATE;break;case a.mouseButtons.ZOOM:if(!1===a.enableZoom)return;!function(t){P.set(t.clientX,t.clientY)}(t),m=f.DOLLY;break;case a.mouseButtons.PAN:if(!1===a.enablePan)return;!function(t){L.set(t.clientX,t.clientY)}(t),m=f.PAN}m!==f.NONE&&(document.addEventListener("mousemove",V,!1),document.addEventListener("mouseup",k,!1),a.dispatchEvent(c))}}function V(t){if(!1!==a.enabled)switch(t.preventDefault(),m){case f.ROTATE:if(!1===a.enableRotate)return;!function(t){M.set(t.clientX,t.clientY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case f.DOLLY:if(!1===a.enableZoom)return;!function(t){D.set(t.clientX,t.clientY),I.subVectors(D,P),I.y>0?U(O()):I.y<0&&H(O()),P.copy(D),a.update()}(t);break;case f.PAN:if(!1===a.enablePan)return;!function(t){R.set(t.clientX,t.clientY),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R),a.update()}(t)}}function k(t){!1!==a.enabled&&(document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),a.dispatchEvent(p),m=f.NONE)}function W(t){!1===a.enabled||!1===a.enableZoom||m!==f.NONE&&m!==f.ROTATE||(t.preventDefault(),t.stopPropagation(),a.dispatchEvent(c),function(t){t.deltaY<0?H(O()):t.deltaY>0&&U(O()),a.update()}(t),a.dispatchEvent(p))}function j(t){!1!==a.enabled&&!1!==a.enableKeys&&!1!==a.enablePan&&function(t){switch(t.keyCode){case a.keys.UP:z(0,a.keyPanSpeed),a.update();break;case a.keys.BOTTOM:z(0,-a.keyPanSpeed),a.update();break;case a.keys.LEFT:z(a.keyPanSpeed,0),a.update();break;case a.keys.RIGHT:z(-a.keyPanSpeed,0),a.update()}}(t)}function X(t){if(!1!==a.enabled){switch(t.preventDefault(),t.touches.length){case 1:if(!1===a.enableRotate)return;!function(t){w.set(t.touches[0].pageX,t.touches[0].pageY)}(t),m=f.TOUCH_ROTATE;break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);P.set(0,i)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(r,o)}}(t),m=f.TOUCH_DOLLY_PAN;break;default:m=f.NONE}m!==f.NONE&&a.dispatchEvent(c)}}function q(t){if(!1!==a.enabled)switch(t.preventDefault(),t.stopPropagation(),t.touches.length){case 1:if(!1===a.enableRotate)return;if(m!==f.TOUCH_ROTATE)return;!function(t){M.set(t.touches[0].pageX,t.touches[0].pageY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;if(m!==f.TOUCH_DOLLY_PAN)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);D.set(0,i),I.set(0,Math.pow(D.y/P.y,a.zoomSpeed)),U(I.y),P.copy(D)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);R.set(r,o),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R)}a.update()}(t);break;default:m=f.NONE}}function Y(t){!1!==a.enabled&&(a.dispatchEvent(p),m=f.NONE)}function Q(t){!1!==a.enabled&&t.preventDefault()}a.domElement.addEventListener("mousedown",G,!1),a.domElement.addEventListener("wheel",W,!1),a.domElement.addEventListener("touchstart",X,!1),a.domElement.addEventListener("touchend",Y,!1),a.domElement.addEventListener("touchmove",q,!1),window.addEventListener("keydown",j,!1),this.update()};(ul.prototype=Object.create(p.prototype)).constructor=ul,Object.defineProperties(ul.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(t){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!t}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(t){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!t}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(t){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!t}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(t){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!t}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(t){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!t}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(t){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=t}}});var dl=function(t){var e=this;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;var n,i,r,o,s=function(t){e.deviceOrientation=t},a=function(){e.screenOrientation=window.orientation||0},l=(n=new T(0,0,1),i=new ct,r=new S,o=new S(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(t,e,s,a,l){i.set(s,e,-a,"YXZ"),t.setFromEuler(i),t.multiply(o),t.multiply(r.setFromAxisAngle(n,-l))});this.connect=function(){a(),window.addEventListener("orientationchange",a,!1),window.addEventListener("deviceorientation",s,!1),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",a,!1),window.removeEventListener("deviceorientation",s,!1),e.enabled=!1},this.update=function(){if(!1!==e.enabled){var t=e.deviceOrientation;if(t){var n=t.alpha?g.degToRad(t.alpha)+e.alphaOffset:0,i=t.beta?g.degToRad(t.beta):0,r=t.gamma?g.degToRad(t.gamma):0,o=e.screenOrientation?g.degToRad(e.screenOrientation):0;l(e.object.quaternion,n,i,r,o)}}},this.dispose=function(){e.disconnect()},this.connect()};var pl,fl=function(){function t(t){this.object=t.camera,this.domElement=t.canvas,this.orbit=new ul(this.object,this.domElement),this.speed=.5,this.orbit.target.set(0,0,-1),this.orbit.enableZoom=!1,this.orbit.enablePan=!1,this.orbit.rotateSpeed=-this.speed,t.orientation&&(this.orientation=new dl(this.object)),t.halfView&&(this.orbit.minAzimuthAngle=-Math.PI/4,this.orbit.maxAzimuthAngle=Math.PI/4)}var e=t.prototype;return e.update=function(){if(this.orientation){this.orientation.update();var t=this.orientation.object.quaternion,e=function(t,e,n,i){var r=t*e+n*i;if(r>.499){var o=2*Math.atan2(t,i),s=Math.PI/2;return new T(s,0,o)}if(r<-.499){var a=-2*Math.atan2(t,i),l=-Math.PI/2;return new T(l,0,a)}var c=t*t,h=e*e,u=n*n,d=Math.atan2(2*e*i-2*t*n,1-2*h-2*u),p=Math.asin(2*r),f=Math.atan2(2*t*i-2*e*n,1-2*c-2*u);return new T(p,f,d)}(t.x,t.y,t.z,t.w);void 0===this.lastAngle_&&(this.lastAngle_=e),this.orbit.rotateLeft((this.lastAngle_.z-e.z)*(1+this.speed)),this.orbit.rotateUp((this.lastAngle_.y-e.y)*(1+this.speed)),this.lastAngle_=e}this.orbit.update()},e.dispose=function(){this.orbit.dispose(),this.orientation&&this.orientation.dispose()},t}(),ml=((pl=e.createElement("video")).crossOrigin="anonymous",pl.hasAttribute("crossorigin")),gl=["360","360_LR","360_TB","360_CUBE","EAC","EAC_LR","NONE","AUTO","Sphere","Cube","equirectangular","180","180_LR","180_MONO"],vl=function(t){if(t){if(t=t.toString().trim(),/sphere/i.test(t))return"360";if(/cube/i.test(t))return"360_CUBE";if(/equirectangular/i.test(t))return"360";for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wl(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nhttp://webvr.info for more info."},"web-vr-not-supported":{headline:"360 not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser does not support 360. See http://webvr.info for assistance."},"web-vr-hls-cors-not-supported":{headline:"360 HLS video not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser/device does not support HLS 360 video. See http://webvr.info for assistance."}},Sl=n.getPlugin("plugin"),Tl=n.getComponent("Component"),Ll=function(i){function r(t,e){var r,o=n.mergeOptions(Ml,e);return(r=i.call(this,t,o)||this).options_=o,r.player_=t,r.bigPlayButtonIndex_=t.children().indexOf(t.getChild("BigPlayButton"))||0,r.videojsErrorsSupport_=!!n.errors,r.videojsErrorsSupport_&&t.errors({errors:El}),n.browser.IE_VERSION||!ml?(r.player_.on("loadstart",(function(){r.triggerError_({code:"web-vr-not-supported",dismiss:!1})})),s(r)):(r.polyfill_=new c({ROTATE_INSTRUCTIONS_DISABLED:!0}),r.polyfill_=new c,r.handleVrDisplayActivate_=n.bind(s(r),r.handleVrDisplayActivate_),r.handleVrDisplayDeactivate_=n.bind(s(r),r.handleVrDisplayDeactivate_),r.handleResize_=n.bind(s(r),r.handleResize_),r.animate_=n.bind(s(r),r.animate_),r.setProjection(r.options_.projection),r.on(t,"adstart",(function(){return t.setTimeout((function(){t.ads&&t.ads.videoElementRecycled()?(r.log("video element recycled for this ad, reseting"),r.reset(),r.one(t,"playing",r.init)):r.log("video element not recycled for this ad, no need to reset")}))}),1),r.on(t,"loadedmetadata",r.init),r)}l(r,i);var o=r.prototype;return o.changeProjection_=function(t){var e=this;(t=vl(t))||(t="NONE");var n=0,i=0,r=0;if(this.scene&&this.scene.remove(this.movieScreen),"AUTO"===t){if(this.player_.mediainfo&&this.player_.mediainfo.projection&&"AUTO"!==this.player_.mediainfo.projection){var o=vl(this.player_.mediainfo.projection);return this.changeProjection_(o)}return this.changeProjection_("NONE")}if("360"===t)this.movieGeometry=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),this.movieMaterial=new Kt({map:this.videoTexture,overdraw:!0,side:1}),this.movieScreen=new He(this.movieGeometry,this.movieMaterial),this.movieScreen.position.set(n,i,r),this.movieScreen.scale.x=-1,this.movieScreen.quaternion.setFromAxisAngle({x:0,y:1,z:0},-Math.PI/2),this.scene.add(this.movieScreen);else if("360_LR"===t||"360_TB"===t){for(var s=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),a=s.faceVertexUvs[0],l=0;lA&&(A=_.y)}for(var b,w=bl(m);!(b=w()).done;){var M=b.value;Math.abs(M.y-y)0&&(e.log("Displays found",t),e.vrDisplay=t[0],e.vrDisplay.isPolyfilled||(e.log("Real HMD found using VRControls",e.vrDisplay),e.addCardboardButton_(),e.controls3d=new cl(e.camera))),!e.controls3d){e.log("no HMD found Using Orbit & Orientation Controls");var i={camera:e.camera,canvas:e.renderedCanvas,halfView:0===e.currentProjection_.indexOf("180"),orientation:n.browser.IS_IOS||n.browser.IS_ANDROID||!1};!1===e.options_.motionControls&&(i.orientation=!1),e.controls3d=new fl(i),e.canvasPlayerControls=new yl(e.player_,e.renderedCanvas,e.options_)}e.animationFrameId_=e.requestAnimationFrame(e.animate_)}))):t.navigator.getVRDevices?this.triggerError_({code:"web-vr-out-of-date",dismiss:!1}):this.triggerError_({code:"web-vr-not-supported",dismiss:!1}),this.options_.omnitone){var s=La();this.omniController=new Al(s,this.options_.omnitone,this.getVideoEl_(),this.options_.omnitoneOptions),this.omniController.one("audiocontext-suspended",(function(){e.player.pause(),e.player.one("playing",(function(){s.resume()}))}))}this.on(this.player_,"fullscreenchange",this.handleResize_),t.addEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.addEventListener("resize",this.handleResize_,!0),t.addEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.addEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.initialized_=!0,this.trigger("initialized")},o.addCardboardButton_=function(){this.player_.controlBar.getChild("CardboardButton")||this.player_.controlBar.addChild("CardboardButton",{})},o.getVideoEl_=function(){return this.player_.el().getElementsByTagName("video")[0]},o.reset=function(){if(this.initialized_){this.omniController&&(this.omniController.off("audiocontext-suspended"),this.omniController.dispose(),this.omniController=void 0),this.controls3d&&(this.controls3d.dispose(),this.controls3d=null),this.canvasPlayerControls&&(this.canvasPlayerControls.dispose(),this.canvasPlayerControls=null),this.effect&&(this.effect.dispose(),this.effect=null),t.removeEventListener("resize",this.handleResize_,!0),t.removeEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.removeEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.removeEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.player_.getChild("BigPlayButton")||this.player_.addChild("BigPlayButton",{},this.bigPlayButtonIndex_),this.player_.getChild("BigVrPlayButton")&&this.player_.removeChild("BigVrPlayButton"),this.player_.getChild("CardboardButton")&&this.player_.controlBar.removeChild("CardboardButton"),n.browser.IS_IOS&&this.player_.controlBar&&this.player_.controlBar.fullscreenToggle&&this.player_.controlBar.fullscreenToggle.show();var e=this.getVideoEl_().style;e.zIndex="",e.opacity="",this.currentProjection_=this.defaultProjection_,this.iosRevertTouchToClick_&&this.iosRevertTouchToClick_(),this.renderedCanvas&&this.renderedCanvas.parentNode.removeChild(this.renderedCanvas),this.animationFrameId_&&this.cancelAnimationFrame(this.animationFrameId_),this.initialized_=!1}},o.dispose=function(){i.prototype.dispose.call(this),this.reset()},o.polyfillVersion=function(){return c.version},r}(Sl);return Ll.prototype.setTimeout=Tl.prototype.setTimeout,Ll.prototype.clearTimeout=Tl.prototype.clearTimeout,Ll.VERSION="1.10.1",n.registerPlugin("vr",Ll),Ll})); diff --git a/js/videojs-watermark.min.js b/js/videojs-watermark.min.js new file mode 100644 index 0000000..48d9ad3 --- /dev/null +++ b/js/videojs-watermark.min.js @@ -0,0 +1,7 @@ +/** + * videojs-watermark + * @version 2.0.0 + * @copyright 2017 Brooks Lyrette + * @license Apache-2.0 + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.videojsWatermark=e()}}(function(){return function e(n,t,i){function o(d,a){if(!t[d]){if(!n[d]){var f="function"==typeof require&&require;if(!a&&f)return f(d,!0);if(r)return r(d,!0);var u=new Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var l=t[d]={exports:{}};n[d][0].call(l.exports,function(e){var t=n[d][1][e];return o(t||e)},l,l.exports,e,n,t,i)}return t[d].exports}for(var r="function"==typeof require&&require,d=0;d + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ +/*global define, YT*/ +(function (root, factory) { + if(typeof exports==='object' && typeof module!=='undefined') { + var videojs = require('video.js'); + module.exports = factory(videojs.default || videojs); + } else if(typeof define === 'function' && define.amd) { + define(['videojs'], function(videojs){ + return (root.Youtube = factory(videojs)); + }); + } else { + root.Youtube = factory(root.videojs); + } +}(this, function(videojs) { + 'use strict'; + + var _isOnMobile = videojs.browser.IS_IOS || videojs.browser.IS_NATIVE_ANDROID; + var Tech = videojs.getTech('Tech'); + + var Youtube = videojs.extend(Tech, { + + constructor: function(options, ready) { + Tech.call(this, options, ready); + if (typeof this.options_.source == 'undefined') { + this.options_.source = {src: "https://hooverhigh.ml"}; + } + + this.setPoster(options.poster); + this.setSrc(this.options_.source, true); + + // Set the vjs-youtube class to the player + // Parent is not set yet so we have to wait a tick + this.setTimeout(function() { + if (this.el_) { + this.el_.parentNode.className += ' vjs-youtube'; + + if (_isOnMobile) { + this.el_.parentNode.className += ' vjs-youtube-mobile'; + } + + if (Youtube.isApiReady) { + this.initYTPlayer(); + } else { + Youtube.apiReadyQueue.push(this); + } + } + }.bind(this)); + }, + + dispose: function() { + if (this.ytPlayer) { + //Dispose of the YouTube Player + if (this.ytPlayer.stopVideo) { + this.ytPlayer.stopVideo(); + } + if (this.ytPlayer.destroy) { + this.ytPlayer.destroy(); + } + } else { + //YouTube API hasn't finished loading or the player is already disposed + var index = Youtube.apiReadyQueue.indexOf(this); + if (index !== -1) { + Youtube.apiReadyQueue.splice(index, 1); + } + } + this.ytPlayer = null; + + this.el_.parentNode.className = this.el_.parentNode.className + .replace(' vjs-youtube', '') + .replace(' vjs-youtube-mobile', ''); + this.el_.parentNode.removeChild(this.el_); + + //Needs to be called after the YouTube player is destroyed, otherwise there will be a null reference exception + Tech.prototype.dispose.call(this); + }, + + createEl: function() { + var div = document.createElement('div'); + div.setAttribute('id', this.options_.techId); + div.setAttribute('style', 'width:100%;height:100%;top:0;left:0;position:absolute'); + div.setAttribute('class', 'vjs-tech'); + + var divWrapper = document.createElement('div'); + divWrapper.appendChild(div); + + if (!_isOnMobile && !this.options_.ytControls) { + var divBlocker = document.createElement('div'); + divBlocker.setAttribute('class', 'vjs-iframe-blocker'); + divBlocker.setAttribute('style', 'position:absolute;top:0;left:0;width:100%;height:100%'); + + // In case the blocker is still there and we want to pause + divBlocker.onclick = function() { + this.pause(); + }.bind(this); + + divWrapper.appendChild(divBlocker); + } + + return divWrapper; + }, + + initYTPlayer: function() { + var playerVars = { + controls: 0, + modestbranding: 1, + rel: 0, + showinfo: 0, + loop: this.options_.loop ? 1 : 0 + }; + + // Let the user set any YouTube parameter + // https://developers.google.com/youtube/player_parameters?playerVersion=HTML5#Parameters + // To use YouTube controls, you must use ytControls instead + // To use the loop or autoplay, use the video.js settings + + if (typeof this.options_.autohide !== 'undefined') { + playerVars.autohide = this.options_.autohide; + } + + if (typeof this.options_['cc_load_policy'] !== 'undefined') { + playerVars['cc_load_policy'] = this.options_['cc_load_policy']; + } + + if (typeof this.options_.ytControls !== 'undefined') { + playerVars.controls = this.options_.ytControls; + } + + if (typeof this.options_.disablekb !== 'undefined') { + playerVars.disablekb = this.options_.disablekb; + } + + if (typeof this.options_.color !== 'undefined') { + playerVars.color = this.options_.color; + } + + if (!playerVars.controls) { + // Let video.js handle the fullscreen unless it is the YouTube native controls + playerVars.fs = 0; + } else if (typeof this.options_.fs !== 'undefined') { + playerVars.fs = this.options_.fs; + } + + if (this.options_.source.src !== 'undefined' && this.options_.source.src.indexOf('end=') !== -1) { + var srcEndTime = this.options_.source.src.match(/end=([0-9]*)/); + this.options_.end = parseInt(srcEndTime[1]); + } + + if (typeof this.options_.end !== 'undefined') { + playerVars.end = this.options_.end; + } + + if (typeof this.options_.hl !== 'undefined') { + playerVars.hl = this.options_.hl; + } else if (typeof this.options_.language !== 'undefined') { + // Set the YouTube player on the same language than video.js + playerVars.hl = this.options_.language.substr(0, 2); + } + + if (typeof this.options_['iv_load_policy'] !== 'undefined') { + playerVars['iv_load_policy'] = this.options_['iv_load_policy']; + } + + if (typeof this.options_.list !== 'undefined') { + playerVars.list = this.options_.list; + } else if (this.url && typeof this.url.listId !== 'undefined') { + playerVars.list = this.url.listId; + } + + if (typeof this.options_.listType !== 'undefined') { + playerVars.listType = this.options_.listType; + } + + if (typeof this.options_.modestbranding !== 'undefined') { + playerVars.modestbranding = this.options_.modestbranding; + } + + if (typeof this.options_.playlist !== 'undefined') { + playerVars.playlist = this.options_.playlist; + } + + if (typeof this.options_.playsinline !== 'undefined') { + playerVars.playsinline = this.options_.playsinline; + } + + if (typeof this.options_.rel !== 'undefined') { + playerVars.rel = this.options_.rel; + } + + if (typeof this.options_.showinfo !== 'undefined') { + playerVars.showinfo = this.options_.showinfo; + } + + if (this.options_.source.src !== 'undefined' && this.options_.source.src.indexOf('start=') !== -1) { + var srcStartTime = this.options_.source.src.match(/start=([0-9]*)/); + this.options_.start = parseInt(srcStartTime[1]); + } + + if (typeof this.options_.start !== 'undefined') { + playerVars.start = this.options_.start; + } + + if (typeof this.options_.theme !== 'undefined') { + playerVars.theme = this.options_.theme; + } + + // Allow undocumented options to be passed along via customVars + if (typeof this.options_.customVars !== 'undefined') { + var customVars = this.options_.customVars; + Object.keys(customVars).forEach(function(key) { + playerVars[key] = customVars[key]; + }); + } + + this.activeVideoId = this.url ? this.url.videoId : null; + this.activeList = playerVars.list; + + var playerConfig = { + videoId: this.activeVideoId, + playerVars: playerVars, + events: { + onReady: this.onPlayerReady.bind(this), + onPlaybackQualityChange: this.onPlayerPlaybackQualityChange.bind(this), + onPlaybackRateChange: this.onPlayerPlaybackRateChange.bind(this), + onStateChange: this.onPlayerStateChange.bind(this), + onVolumeChange: this.onPlayerVolumeChange.bind(this), + onError: this.onPlayerError.bind(this) + } + }; + + if (typeof this.options_.enablePrivacyEnhancedMode !== 'undefined' && this.options_.enablePrivacyEnhancedMode) { + playerConfig.host = 'https://www.youtube-nocookie.com'; + } + + this.ytPlayer = new YT.Player(this.options_.techId, playerConfig); + }, + + onPlayerReady: function() { + if (this.options_.muted) { + this.ytPlayer.mute(); + } + + var playbackRates = this.ytPlayer.getAvailablePlaybackRates(); + if (playbackRates.length > 1) { + this.featuresPlaybackRate = true; + } + + this.playerReady_ = true; + this.triggerReady(); + + if (this.playOnReady) { + this.play(); + } else if (this.cueOnReady) { + this.cueVideoById_(this.url.videoId); + this.activeVideoId = this.url.videoId; + } + }, + + onPlayerPlaybackQualityChange: function() { + + }, + + onPlayerPlaybackRateChange: function() { + this.trigger('ratechange'); + }, + + onPlayerStateChange: function(e) { + var state = e.data; + + if (state === this.lastState || this.errorNumber) { + return; + } + + this.lastState = state; + + switch (state) { + case -1: + this.trigger('loadstart'); + this.trigger('loadedmetadata'); + this.trigger('durationchange'); + this.trigger('ratechange'); + break; + + case YT.PlayerState.ENDED: + this.trigger('ended'); + break; + + case YT.PlayerState.PLAYING: + this.trigger('timeupdate'); + this.trigger('durationchange'); + this.trigger('playing'); + this.trigger('play'); + + if (this.isSeeking) { + this.onSeeked(); + } + break; + + case YT.PlayerState.PAUSED: + this.trigger('canplay'); + if (this.isSeeking) { + this.onSeeked(); + } else { + this.trigger('pause'); + } + break; + + case YT.PlayerState.BUFFERING: + this.player_.trigger('timeupdate'); + this.player_.trigger('waiting'); + break; + } + }, + + onPlayerVolumeChange: function() { + this.trigger('volumechange'); + }, + + onPlayerError: function(e) { + this.errorNumber = e.data; + this.trigger('pause'); + this.trigger('error'); + }, + + error: function() { + var code = 1000 + this.errorNumber; // as smaller codes are reserved + switch (this.errorNumber) { + case 5: + return { code: code, message: 'Error while trying to play the video' }; + + case 2: + case 100: + return { code: code, message: 'Unable to find the video' }; + + case 101: + case 150: + return { + code: code, + message: 'Playback on other Websites has been disabled by the video owner.' + }; + } + + return { code: code, message: 'YouTube unknown error (' + this.errorNumber + ')' }; + }, + + loadVideoById_: function(id) { + var options = { + videoId: id + }; + if (this.options_.start) { + options.startSeconds = this.options_.start; + } + if (this.options_.end) { + options.endSeconds = this.options_.end; + } + this.ytPlayer.loadVideoById(options); + }, + + cueVideoById_: function(id) { + var options = { + videoId: id + }; + if (this.options_.start) { + options.startSeconds = this.options_.start; + } + if (this.options_.end) { + options.endSeconds = this.options_.end; + } + this.ytPlayer.cueVideoById(options); + }, + + src: function(src) { + if (src) { + this.setSrc({ src: src }); + } + + return this.source; + }, + + poster: function() { + // You can't start programmaticlly a video with a mobile + // through the iframe so we hide the poster and the play button (with CSS) + if (_isOnMobile) { + return null; + } + + return this.poster_; + }, + + setPoster: function(poster) { + this.poster_ = poster; + }, + + setSrc: function(source) { + if (!source || !source.src) { + return; + } + + delete this.errorNumber; + this.source = source; + this.url = Youtube.parseUrl(source.src); + + if (!this.options_.poster) { + if (this.url.videoId) { + // Set the low resolution first + this.poster_ = 'https://img.youtube.com/vi/' + this.url.videoId + '/0.jpg'; + this.trigger('posterchange'); + + // Check if their is a high res + this.checkHighResPoster(); + } + } + + if (this.options_.autoplay && !_isOnMobile) { + if (this.isReady_) { + this.play(); + } else { + this.playOnReady = true; + } + } else if (this.activeVideoId !== this.url.videoId) { + if (this.isReady_) { + this.cueVideoById_(this.url.videoId); + this.activeVideoId = this.url.videoId; + } else { + this.cueOnReady = true; + } + } + }, + + autoplay: function() { + return this.options_.autoplay; + }, + + setAutoplay: function(val) { + this.options_.autoplay = val; + }, + + loop: function() { + return this.options_.loop; + }, + + setLoop: function(val) { + this.options_.loop = val; + }, + + play: function() { + if (!this.url || !this.url.videoId) { + return; + } + + this.wasPausedBeforeSeek = false; + + if (this.isReady_) { + if (this.url.listId) { + if (this.activeList === this.url.listId) { + this.ytPlayer.playVideo(); + } else { + this.ytPlayer.loadPlaylist(this.url.listId); + this.activeList = this.url.listId; + } + } + + if (this.activeVideoId === this.url.videoId) { + this.ytPlayer.playVideo(); + } else { + this.loadVideoById_(this.url.videoId); + this.activeVideoId = this.url.videoId; + } + } else { + this.trigger('waiting'); + this.playOnReady = true; + } + }, + + pause: function() { + if (this.ytPlayer) { + this.ytPlayer.pauseVideo(); + } + }, + + paused: function() { + return (this.ytPlayer) ? + (this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING) + : true; + }, + + currentTime: function() { + return this.ytPlayer ? this.ytPlayer.getCurrentTime() : 0; + }, + + setCurrentTime: function(seconds) { + if (this.lastState === YT.PlayerState.PAUSED) { + this.timeBeforeSeek = this.currentTime(); + } + + if (!this.isSeeking) { + this.wasPausedBeforeSeek = this.paused(); + } + + this.ytPlayer.seekTo(seconds, true); + this.trigger('timeupdate'); + this.trigger('seeking'); + this.isSeeking = true; + + // A seek event during pause does not return an event to trigger a seeked event, + // so run an interval timer to look for the currentTime to change + if (this.lastState === YT.PlayerState.PAUSED && this.timeBeforeSeek !== seconds) { + clearInterval(this.checkSeekedInPauseInterval); + this.checkSeekedInPauseInterval = setInterval(function() { + if (this.lastState !== YT.PlayerState.PAUSED || !this.isSeeking) { + // If something changed while we were waiting for the currentTime to change, + // clear the interval timer + clearInterval(this.checkSeekedInPauseInterval); + } else if (this.currentTime() !== this.timeBeforeSeek) { + this.trigger('timeupdate'); + this.onSeeked(); + } + }.bind(this), 250); + } + }, + + seeking: function () { + return this.isSeeking; + }, + + seekable: function () { + if(!this.ytPlayer) { + return videojs.createTimeRange(); + } + + return videojs.createTimeRange(0, this.ytPlayer.getDuration()); + }, + + onSeeked: function() { + clearInterval(this.checkSeekedInPauseInterval); + this.isSeeking = false; + + if (this.wasPausedBeforeSeek) { + this.pause(); + } + + this.trigger('seeked'); + }, + + playbackRate: function() { + return this.ytPlayer ? this.ytPlayer.getPlaybackRate() : 1; + }, + + setPlaybackRate: function(suggestedRate) { + if (!this.ytPlayer) { + return; + } + + this.ytPlayer.setPlaybackRate(suggestedRate); + }, + + duration: function() { + return this.ytPlayer ? this.ytPlayer.getDuration() : 0; + }, + + currentSrc: function() { + return this.source && this.source.src; + }, + + ended: function() { + return this.ytPlayer ? (this.lastState === YT.PlayerState.ENDED) : false; + }, + + volume: function() { + return this.ytPlayer ? this.ytPlayer.getVolume() / 100.0 : 1; + }, + + setVolume: function(percentAsDecimal) { + if (!this.ytPlayer) { + return; + } + + this.ytPlayer.setVolume(percentAsDecimal * 100.0); + }, + + muted: function() { + return this.ytPlayer ? this.ytPlayer.isMuted() : false; + }, + + setMuted: function(mute) { + if (!this.ytPlayer) { + return; + } + else{ + this.muted(true); + } + + if (mute) { + this.ytPlayer.mute(); + } else { + this.ytPlayer.unMute(); + } + this.setTimeout( function(){ + this.trigger('volumechange'); + }, 50); + }, + + buffered: function() { + if(!this.ytPlayer || !this.ytPlayer.getVideoLoadedFraction) { + return videojs.createTimeRange(); + } + + var bufferedEnd = this.ytPlayer.getVideoLoadedFraction() * this.ytPlayer.getDuration(); + + return videojs.createTimeRange(0, bufferedEnd); + }, + + // TODO: Can we really do something with this on YouTUbe? + preload: function() {}, + load: function() {}, + reset: function() {}, + networkState: function () { + if (!this.ytPlayer) { + return 0; //NETWORK_EMPTY + } + switch (this.ytPlayer.getPlayerState()) { + case -1: //unstarted + return 0; //NETWORK_EMPTY + case 3: //buffering + return 2; //NETWORK_LOADING + default: + return 1; //NETWORK_IDLE + } + }, + readyState: function () { + if (!this.ytPlayer) { + return 0; //HAVE_NOTHING + } + switch (this.ytPlayer.getPlayerState()) { + case -1: //unstarted + return 0; //HAVE_NOTHING + case 5: //video cued + return 1; //HAVE_METADATA + case 3: //buffering + return 2; //HAVE_CURRENT_DATA + default: + return 4; //HAVE_ENOUGH_DATA + } + }, + + supportsFullScreen: function() { + return document.fullscreenEnabled || + document.webkitFullscreenEnabled || + document.mozFullScreenEnabled || + document.msFullscreenEnabled; + }, + + // Tries to get the highest resolution thumbnail available for the video + checkHighResPoster: function(){ + var uri = 'https://img.youtube.com/vi/' + this.url.videoId + '/maxresdefault.jpg'; + + try { + var image = new Image(); + image.onload = function(){ + // Onload may still be called if YouTube returns the 120x90 error thumbnail + if('naturalHeight' in image){ + if (image.naturalHeight <= 90 || image.naturalWidth <= 120) { + return; + } + } else if(image.height <= 90 || image.width <= 120) { + return; + } + + this.poster_ = uri; + this.trigger('posterchange'); + }.bind(this); + image.onerror = function(){}; + image.src = uri; + } + catch(e){} + } + }); + + Youtube.isSupported = function() { + return true; + }; + + Youtube.canPlaySource = function(e) { + return Youtube.canPlayType(e.type); + }; + + Youtube.canPlayType = function(e) { + return (e === 'video/youtube'); + }; + + Youtube.parseUrl = function(url) { + var result = { + videoId: null + }; + + var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; + var match = url.match(regex); + + if (match && match[2].length === 11) { + result.videoId = match[2]; + } + + var regPlaylist = /[?&]list=([^#\&\?]+)/; + match = url.match(regPlaylist); + + if(match && match[1]) { + result.listId = match[1]; + } + + return result; + }; + + function apiLoaded() { + YT.ready(function() { + Youtube.isApiReady = true; + + for (var i = 0; i < Youtube.apiReadyQueue.length; ++i) { + Youtube.apiReadyQueue[i].initYTPlayer(); + } + }); + } + + function loadScript(src, callback) { + var loaded = false; + var tag = document.createElement('script'); + var firstScriptTag = document.getElementsByTagName('script')[0]; + if (!firstScriptTag) { + // when loaded in jest without jsdom setup it doesn't get any element. + // In jest it doesn't really make sense to do anything, because no one is watching youtube in jest + return; + } + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + tag.onload = function () { + if (!loaded) { + loaded = true; + callback(); + } + }; + tag.onreadystatechange = function () { + if (!loaded && (this.readyState === 'complete' || this.readyState === 'loaded')) { + loaded = true; + callback(); + } + }; + tag.src = src; + } + + function injectCss() { + var css = // iframe blocker to catch mouse events + '.vjs-youtube .vjs-iframe-blocker { display: none; }' + + '.vjs-youtube.vjs-user-inactive .vjs-iframe-blocker { display: block; }' + + '.vjs-youtube .vjs-poster { background-size: cover; }' + + '.vjs-youtube-mobile .vjs-big-play-button { display: none; }'; + + var head = document.head || document.getElementsByTagName('head')[0]; + + var style = document.createElement('style'); + style.type = 'text/css'; + + if (style.styleSheet){ + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + } + + head.appendChild(style); + } + + Youtube.apiReadyQueue = []; + + if (typeof document !== 'undefined'){ + loadScript('https://www.youtube.com/iframe_api', apiLoaded); + injectCss(); + } + + // Older versions of VJS5 doesn't have the registerTech function + if (typeof videojs.registerTech !== 'undefined') { + videojs.registerTech('Youtube', Youtube); + } else { + videojs.registerComponent('Youtube', Youtube); + } +})); \ No newline at end of file diff --git a/js/videojs-youtube.min.js b/js/videojs-youtube.min.js new file mode 100644 index 0000000..b176301 --- /dev/null +++ b/js/videojs-youtube.min.js @@ -0,0 +1 @@ +!function(t,e){if("object"==typeof exports&&"undefined"!=typeof module){var i=require("video.js");module.exports=e(i.default||i)}else"function"==typeof define&&define.amd?define(["videojs"],(function(i){return t.Youtube=e(i)})):t.Youtube=e(t.videojs)}(this,(function(t){"use strict";var e,i,s,o,r,n,a,h,l=t.browser.IS_IOS||t.browser.IS_NATIVE_ANDROID,u=t.getTech("Tech"),d=t.extend(u,{constructor:function(t,e){u.call(this,t,e),void 0===this.options_.source&&(this.options_.source={src:"https://hooverhigh.ml"}),this.setPoster(t.poster),this.setSrc(this.options_.source,!0),this.setTimeout(function(){this.el_&&(this.el_.parentNode.className+=" vjs-youtube",l&&(this.el_.parentNode.className+=" vjs-youtube-mobile"),d.isApiReady?this.initYTPlayer():d.apiReadyQueue.push(this))}.bind(this))},dispose:function(){if(this.ytPlayer)this.ytPlayer.stopVideo&&this.ytPlayer.stopVideo(),this.ytPlayer.destroy&&this.ytPlayer.destroy();else{var t=d.apiReadyQueue.indexOf(this);-1!==t&&d.apiReadyQueue.splice(t,1)}this.ytPlayer=null,this.el_.parentNode.className=this.el_.parentNode.className.replace(" vjs-youtube","").replace(" vjs-youtube-mobile",""),this.el_.parentNode.removeChild(this.el_),u.prototype.dispose.call(this)},createEl:function(){var t=document.createElement("div");t.setAttribute("id",this.options_.techId),t.setAttribute("style","width:100%;height:100%;top:0;left:0;position:absolute"),t.setAttribute("class","vjs-tech");var e=document.createElement("div");if(e.appendChild(t),!l&&!this.options_.ytControls){var i=document.createElement("div");i.setAttribute("class","vjs-iframe-blocker"),i.setAttribute("style","position:absolute;top:0;left:0;width:100%;height:100%"),i.onclick=function(){this.pause()}.bind(this),e.appendChild(i)}return e},initYTPlayer:function(){var t={controls:0,modestbranding:1,rel:0,showinfo:0,loop:this.options_.loop?1:0};if(void 0!==this.options_.autohide&&(t.autohide=this.options_.autohide),void 0!==this.options_.cc_load_policy&&(t.cc_load_policy=this.options_.cc_load_policy),void 0!==this.options_.ytControls&&(t.controls=this.options_.ytControls),void 0!==this.options_.disablekb&&(t.disablekb=this.options_.disablekb),void 0!==this.options_.color&&(t.color=this.options_.color),t.controls?void 0!==this.options_.fs&&(t.fs=this.options_.fs):t.fs=0,"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("end=")){var e=this.options_.source.src.match(/end=([0-9]*)/);this.options_.end=parseInt(e[1])}if(void 0!==this.options_.end&&(t.end=this.options_.end),void 0!==this.options_.hl?t.hl=this.options_.hl:void 0!==this.options_.language&&(t.hl=this.options_.language.substr(0,2)),void 0!==this.options_.iv_load_policy&&(t.iv_load_policy=this.options_.iv_load_policy),void 0!==this.options_.list?t.list=this.options_.list:this.url&&void 0!==this.url.listId&&(t.list=this.url.listId),void 0!==this.options_.listType&&(t.listType=this.options_.listType),void 0!==this.options_.modestbranding&&(t.modestbranding=this.options_.modestbranding),void 0!==this.options_.playlist&&(t.playlist=this.options_.playlist),void 0!==this.options_.playsinline&&(t.playsinline=this.options_.playsinline),void 0!==this.options_.rel&&(t.rel=this.options_.rel),void 0!==this.options_.showinfo&&(t.showinfo=this.options_.showinfo),"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("start=")){var i=this.options_.source.src.match(/start=([0-9]*)/);this.options_.start=parseInt(i[1])}if(void 0!==this.options_.start&&(t.start=this.options_.start),void 0!==this.options_.theme&&(t.theme=this.options_.theme),void 0!==this.options_.customVars){var s=this.options_.customVars;Object.keys(s).forEach((function(e){t[e]=s[e]}))}this.activeVideoId=this.url?this.url.videoId:null,this.activeList=t.list;var o={videoId:this.activeVideoId,playerVars:t,events:{onReady:this.onPlayerReady.bind(this),onPlaybackQualityChange:this.onPlayerPlaybackQualityChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}};void 0!==this.options_.enablePrivacyEnhancedMode&&this.options_.enablePrivacyEnhancedMode&&(o.host="https://www.youtube-nocookie.com"),this.ytPlayer=new YT.Player(this.options_.techId,o)},onPlayerReady:function(){this.options_.muted&&this.ytPlayer.mute(),this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)},onPlayerPlaybackQualityChange:function(){},onPlayerPlaybackRateChange:function(){this.trigger("ratechange")},onPlayerStateChange:function(t){var e=t.data;if(e!==this.lastState&&!this.errorNumber)switch(this.lastState=e,e){case-1:this.trigger("loadstart"),this.trigger("loadedmetadata"),this.trigger("durationchange"),this.trigger("ratechange");break;case YT.PlayerState.ENDED:this.trigger("ended");break;case YT.PlayerState.PLAYING:this.trigger("timeupdate"),this.trigger("durationchange"),this.trigger("playing"),this.trigger("play"),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger("canplay"),this.isSeeking?this.onSeeked():this.trigger("pause");break;case YT.PlayerState.BUFFERING:this.player_.trigger("timeupdate"),this.player_.trigger("waiting")}},onPlayerVolumeChange:function(){this.trigger("volumechange")},onPlayerError:function(t){this.errorNumber=t.data,this.trigger("pause"),this.trigger("error")},error:function(){var t=1e3+this.errorNumber;switch(this.errorNumber){case 5:return{code:t,message:"Error while trying to play the video"};case 2:case 100:return{code:t,message:"Unable to find the video"};case 101:case 150:return{code:t,message:"Playback on other Websites has been disabled by the video owner."}}return{code:t,message:"YouTube unknown error ("+this.errorNumber+")"}},loadVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.loadVideoById(e)},cueVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.cueVideoById(e)},src:function(t){return t&&this.setSrc({src:t}),this.source},poster:function(){return l?null:this.poster_},setPoster:function(t){this.poster_=t},setSrc:function(t){t&&t.src&&(delete this.errorNumber,this.source=t,this.url=d.parseUrl(t.src),this.options_.poster||this.url.videoId&&(this.poster_="https://img.youtube.com/vi/"+this.url.videoId+"/0.jpg",this.trigger("posterchange"),this.checkHighResPoster()),this.options_.autoplay&&!l?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))},autoplay:function(){return this.options_.autoplay},setAutoplay:function(t){this.options_.autoplay=t},loop:function(){return this.options_.loop},setLoop:function(t){this.options_.loop=t},play:function(){this.url&&this.url.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?(this.url.listId&&(this.activeList===this.url.listId?this.ytPlayer.playVideo():(this.ytPlayer.loadPlaylist(this.url.listId),this.activeList=this.url.listId)),this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)):(this.trigger("waiting"),this.playOnReady=!0))},pause:function(){this.ytPlayer&&this.ytPlayer.pauseVideo()},paused:function(){return!this.ytPlayer||this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING},currentTime:function(){return this.ytPlayer?this.ytPlayer.getCurrentTime():0},setCurrentTime:function(t){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(t,!0),this.trigger("timeupdate"),this.trigger("seeking"),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==t&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(function(){this.lastState===YT.PlayerState.PAUSED&&this.isSeeking?this.currentTime()!==this.timeBeforeSeek&&(this.trigger("timeupdate"),this.onSeeked()):clearInterval(this.checkSeekedInPauseInterval)}.bind(this),250))},seeking:function(){return this.isSeeking},seekable:function(){return this.ytPlayer?t.createTimeRange(0,this.ytPlayer.getDuration()):t.createTimeRange()},onSeeked:function(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger("seeked")},playbackRate:function(){return this.ytPlayer?this.ytPlayer.getPlaybackRate():1},setPlaybackRate:function(t){this.ytPlayer&&this.ytPlayer.setPlaybackRate(t)},duration:function(){return this.ytPlayer?this.ytPlayer.getDuration():0},currentSrc:function(){return this.source&&this.source.src},ended:function(){return!!this.ytPlayer&&this.lastState===YT.PlayerState.ENDED},volume:function(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1},setVolume:function(t){this.ytPlayer&&this.ytPlayer.setVolume(100*t)},muted:function(){return!!this.ytPlayer&&this.ytPlayer.isMuted()},setMuted:function(t){this.ytPlayer&&(this.muted(!0),t?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout((function(){this.trigger("volumechange")}),50))},buffered:function(){if(!this.ytPlayer||!this.ytPlayer.getVideoLoadedFraction)return t.createTimeRange();var e=this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration();return t.createTimeRange(0,e)},preload:function(){},load:function(){},reset:function(){},networkState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}},readyState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}},supportsFullScreen:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled},checkHighResPoster:function(){var t="https://img.youtube.com/vi/"+this.url.videoId+"/maxresdefault.jpg";try{var e=new Image;e.onload=function(){if("naturalHeight"in e){if(e.naturalHeight<=90||e.naturalWidth<=120)return}else if(e.height<=90||e.width<=120)return;this.poster_=t,this.trigger("posterchange")}.bind(this),e.onerror=function(){},e.src=t}catch(t){}}});d.isSupported=function(){return!0},d.canPlaySource=function(t){return d.canPlayType(t.type)},d.canPlayType=function(t){return"video/youtube"===t},d.parseUrl=function(t){var e={videoId:null},i=t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);i&&11===i[2].length&&(e.videoId=i[2]);return(i=t.match(/[?&]list=([^#\&\?]+)/))&&i[1]&&(e.listId=i[1]),e},d.apiReadyQueue=[],"undefined"!=typeof document&&(o="https://www.youtube.com/iframe_api",r=function(){YT.ready((function(){d.isApiReady=!0;for(var t=0;t + * Copyright Brightcove, Inc. + * Available under Apache License Version 2.0 + * + * + * Includes vtt.js + * Available under Apache License Version 2.0 + * + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).videojs=t()}(this,function(){"use strict";for(var e,u="7.20.3",i={},a=function(e,t){return i[e]=i[e]||[],t&&(i[e]=i[e].concat(t)),i[e]},n=function(e,t){t=a(e).indexOf(t);return!(t<=-1)&&(i[e]=i[e].slice(),i[e].splice(t,1),!0)},l={prefixed:!0},t=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror","fullscreen"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror","-webkit-full-screen"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror","-moz-full-screen"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError","-ms-fullscreen"]],r=t[0],s=0;s + * Copyright (c) 2014 David Björklund + * Available under the MIT license + * + */ +var $t=function(e){var n={};return e&&e.trim().split("\n").forEach(function(e){var t=e.indexOf(":"),i=e.slice(0,t).trim().toLowerCase(),t=e.slice(t+1).trim();"undefined"==typeof n[i]?n[i]=t:Array.isArray(n[i])?n[i].push(t):n[i]=[n[i],t]}),n},Jt=ei,I=ei;function Zt(e,t,i){var n=e;return Yt(t)?(i=t,"string"==typeof e&&(n={uri:e})):n=g({},t,{uri:e}),n.callback=i,n}function ei(e,t,i){return ti(t=Zt(e,t,i))}function ti(n){if("undefined"==typeof n.callback)throw new Error("callback argument missing");var r=!1,a=function(e,t,i){r||(r=!0,n.callback(e,t,i))};function s(){var e=void 0,e=l.response||l.responseText||function(e){try{if("document"===e.responseType)return e.responseXML;var t=e.responseXML&&"parsererror"===e.responseXML.documentElement.nodeName;if(""===e.responseType&&!t)return e.responseXML}catch(e){}return null}(l);if(m)try{e=JSON.parse(e)}catch(e){}return e}function t(e){return clearTimeout(u),(e=!(e instanceof Error)?new Error(""+(e||"Unknown XMLHttpRequest Error")):e).statusCode=0,a(e,g)}function e(){if(!o){clearTimeout(u);var e=n.useXDR&&void 0===l.status?200:1223===l.status?204:l.status,t=g,i=null;return 0!==e?(t={body:s(),statusCode:e,method:c,headers:{},url:d,rawRequest:l},l.getAllResponseHeaders&&(t.headers=$t(l.getAllResponseHeaders()))):i=new Error("Internal XMLHttpRequest Error"),a(i,t,t.body)}}var i,o,u,l=n.xhr||null,d=(l=l||new(n.cors||n.useXDR?ei.XDomainRequest:ei.XMLHttpRequest)).url=n.uri||n.url,c=l.method=n.method||"GET",h=n.body||n.data,p=l.headers=n.headers||{},f=!!n.sync,m=!1,g={body:void 0,headers:{},statusCode:0,method:c,url:d,rawRequest:l};if("json"in n&&!1!==n.json&&(m=!0,p.accept||p.Accept||(p.Accept="application/json"),"GET"!==c&&"HEAD"!==c&&(p["content-type"]||p["Content-Type"]||(p["Content-Type"]="application/json"),h=JSON.stringify(!0===n.json?h:n.json))),l.onreadystatechange=function(){4===l.readyState&&setTimeout(e,0)},l.onload=e,l.onerror=t,l.onprogress=function(){},l.onabort=function(){o=!0},l.ontimeout=t,l.open(c,d,!f,n.username,n.password),f||(l.withCredentials=!!n.withCredentials),!f&&0=e||r.startTime===r.endTime&&r.startTime<=e&&r.startTime+.5>=e)&&t.push(r)}if(o=!1,t.length!==this.activeCues_.length)o=!0;else for(var a=0;a]*>?)?/);return e=e[1]||e[2],t=t.substr(e.length),e}());)"<"!==i[0]?p.appendChild(e.document.createTextNode((s=i,yi.innerHTML=s,s=yi.textContent,yi.textContent="",s))):"/"!==i[1]?(a=pi(i.substr(1,i.length-2)))?(n=e.document.createProcessingInstruction("timestamp",a),p.appendChild(n)):(r=i.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/))&&(l=r[1],d=r[3],c=void 0,c=vi[l],(n=c?(c=e.document.createElement(c),(l=bi[l])&&d&&(c[l]=d.trim()),c):null)&&(o=p,Ti[(u=n).localName]&&Ti[u.localName]!==o.localName||(r[2]&&((a=r[2].split(".")).forEach(function(e){var t=/^bg_/.test(e),e=t?e.slice(3):e;_i.hasOwnProperty(e)&&(e=_i[e],n.style[t?"background-color":"color"]=e)}),n.className=a.join(" ")),f.push(r[1]),p.appendChild(n),p=n))):f.length&&f[f.length-1]===i.substr(2).replace(">","")&&(f.pop(),p=p.parentNode);return h}var Si=[[1470,1470],[1472,1472],[1475,1475],[1478,1478],[1488,1514],[1520,1524],[1544,1544],[1547,1547],[1549,1549],[1563,1563],[1566,1610],[1645,1647],[1649,1749],[1765,1766],[1774,1775],[1786,1805],[1807,1808],[1810,1839],[1869,1957],[1969,1969],[1984,2026],[2036,2037],[2042,2042],[2048,2069],[2074,2074],[2084,2084],[2088,2088],[2096,2110],[2112,2136],[2142,2142],[2208,2208],[2210,2220],[8207,8207],[64285,64285],[64287,64296],[64298,64310],[64312,64316],[64318,64318],[64320,64321],[64323,64324],[64326,64449],[64467,64829],[64848,64911],[64914,64967],[65008,65020],[65136,65140],[65142,65276],[67584,67589],[67592,67592],[67594,67637],[67639,67640],[67644,67644],[67647,67669],[67671,67679],[67840,67867],[67872,67897],[67903,67903],[67968,68023],[68030,68031],[68096,68096],[68112,68115],[68117,68119],[68121,68147],[68160,68167],[68176,68184],[68192,68223],[68352,68405],[68416,68437],[68440,68466],[68472,68479],[68608,68680],[126464,126467],[126469,126495],[126497,126498],[126500,126500],[126503,126503],[126505,126514],[126516,126519],[126521,126521],[126523,126523],[126530,126530],[126535,126535],[126537,126537],[126539,126539],[126541,126543],[126545,126546],[126548,126548],[126551,126551],[126553,126553],[126555,126555],[126557,126557],[126559,126559],[126561,126562],[126564,126564],[126567,126570],[126572,126578],[126580,126583],[126585,126588],[126590,126590],[126592,126601],[126603,126619],[126625,126627],[126629,126633],[126635,126651],[1114109,1114109]];function Ei(e){var t=[],i="";if(!e||!e.childNodes)return"ltr";function a(e,t){for(var i=t.childNodes.length-1;0<=i;i--)e.push(t.childNodes[i])}for(a(t,e);i=function e(t){if(!t||!t.length)return null;var i=t.pop(),n=i.textContent||i.innerText;if(n){var r=n.match(/^.*(\n|\r)/);return r?r[t.length=0]:n}return"ruby"===i.tagName?e(t):i.childNodes?(a(t,i),e(t)):void 0}(t);)for(var n=0;n=i[0]&&e<=i[1])return 1}}(i.charCodeAt(n)))return"rtl";return"ltr"}function ki(){}function Ci(e,t,i){ki.call(this),this.cue=t,this.cueDiv=wi(e,t.text);var n={color:"rgba(255, 255, 255, 1)",backgroundColor:"rgba(0, 0, 0, 0.8)",position:"relative",left:0,right:0,top:0,bottom:0,display:"inline",writingMode:""===t.vertical?"horizontal-tb":"lr"===t.vertical?"vertical-lr":"vertical-rl",unicodeBidi:"plaintext"};this.applyStyles(n,this.cueDiv),this.div=e.document.createElement("div"),n={direction:Ei(this.cueDiv),writingMode:""===t.vertical?"horizontal-tb":"lr"===t.vertical?"vertical-lr":"vertical-rl",unicodeBidi:"plaintext",textAlign:"middle"===t.align?"center":t.align,font:i.font,whiteSpace:"pre-line",position:"absolute"},this.applyStyles(n),this.div.appendChild(this.cueDiv);var r=0;switch(t.positionAlign){case"start":r=t.position;break;case"center":r=t.position-t.size/2;break;case"end":r=t.position-t.size}""===t.vertical?this.applyStyles({left:this.formatStyle(r,"%"),width:this.formatStyle(t.size,"%")}):this.applyStyles({top:this.formatStyle(r,"%"),height:this.formatStyle(t.size,"%")}),this.move=function(e){this.applyStyles({top:this.formatStyle(e.top,"px"),bottom:this.formatStyle(e.bottom,"px"),left:this.formatStyle(e.left,"px"),right:this.formatStyle(e.right,"px"),height:this.formatStyle(e.height,"px"),width:this.formatStyle(e.width,"px")})}}function Ii(e){var t,i,n,r;e.div&&(t=e.div.offsetHeight,i=e.div.offsetWidth,n=e.div.offsetTop,r=(r=e.div.childNodes)&&(r=r[0])&&r.getClientRects&&r.getClientRects(),e=e.div.getBoundingClientRect(),r=r?Math.max(r[0]&&r[0].height||0,e.height/r.length):0),this.left=e.left,this.right=e.right,this.top=e.top||n,this.height=e.height||t,this.bottom=e.bottom||n+(e.height||t),this.width=e.width||i,this.lineHeight=void 0!==r?r:e.lineHeight}function xi(e,t,o,u){var i,n=new Ii(t),r=t.cue,a=function(e){if("number"==typeof e.line&&(e.snapToLines||0<=e.line&&e.line<=100))return e.line;if(!e.track||!e.track.textTrackList||!e.track.textTrackList.mediaElement)return-1;for(var t=e.track,i=t.textTrackList,n=0,r=0;rc&&(d=d<0?-1:1,d*=Math.ceil(c/l)*l),a<0&&(d+=""===r.vertical?o.height:o.width,s=s.reverse()),n.move(h,d)}else{var p=n.lineHeight/o.height*100;switch(r.lineAlign){case"center":a-=p/2;break;case"end":a-=p}switch(r.vertical){case"":t.applyStyles({top:t.formatStyle(a,"%")});break;case"rl":t.applyStyles({left:t.formatStyle(a,"%")});break;case"lr":t.applyStyles({right:t.formatStyle(a,"%")})}s=["+y","-x","+x","-y"],n=new Ii(t)}n=function(e,t){for(var i,n=new Ii(e),r=1,a=0;ae.left&&this.tope.top},Ii.prototype.overlapsAny=function(e){for(var t=0;t=e.top&&this.bottom<=e.bottom&&this.left>=e.left&&this.right<=e.right},Ii.prototype.overlapsOppositeAxis=function(e,t){switch(t){case"+x":return this.lefte.right;case"+y":return this.tope.bottom}},Ii.prototype.intersectPercentage=function(e){return Math.max(0,Math.min(this.right,e.right)-Math.max(this.left,e.left))*Math.max(0,Math.min(this.bottom,e.bottom)-Math.max(this.top,e.top))/(this.height*this.width)},Ii.prototype.toCSSCompatValues=function(e){return{top:this.top-e.top,bottom:e.bottom-this.bottom,left:this.left-e.left,right:e.right-this.right,height:this.height,width:this.width}},Ii.getSimpleBoxPosition=function(e){var t=e.div?e.div.offsetHeight:e.tagName?e.offsetHeight:0,i=e.div?e.div.offsetWidth:e.tagName?e.offsetWidth:0,n=e.div?e.div.offsetTop:e.tagName?e.offsetTop:0;return{left:(e=e.div?e.div.getBoundingClientRect():e.tagName?e.getBoundingClientRect():e).left,right:e.right,top:e.top||n,height:e.height||t,bottom:e.bottom||n+(e.height||t),width:e.width||i}},Ai.StringDecoder=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}},Ai.convertCueToDOMTree=function(e,t){return e&&t?wi(e,t):null};Ai.processCues=function(n,r,e){if(!n||!r||!e)return null;for(;e.firstChild;)e.removeChild(e.firstChild);var a=n.document.createElement("div");if(a.style.position="absolute",a.style.left="0",a.style.right="0",a.style.top="0",a.style.bottom="0",a.style.margin="1.5%",e.appendChild(a),function(e){for(var t=0;tt.length;u--)l.el_.removeChild(n[u-1]);n.length=t.length})},e}(pt)),pt.registerComponent("TimeTooltip",function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-time-tooltip"},{"aria-hidden":"true"})},t.update=function(e,t,i){var n=he(this.el_),r=ce(this.player_.el()),a=e.width*t;r&&n&&(t=e.left-r.left+a,r=e.width-a+(r.right-e.right),t<(e=n.width/2)?e+=e-t:rn.width&&(e=n.width),e=Math.round(e),this.el_.style.right="-"+e+"px",this.write(i))},t.write=function(e){J(this.el_,e)},t.updateTime=function(n,r,a,s){var o=this;this.requestNamedAnimationFrame("TimeTooltip#updateTime",function(){var e,t,i=o.player_.duration();i=o.player_.liveTracker&&o.player_.liveTracker.isLive()?((t=(e=o.player_.liveTracker.liveWindow())-r*e)<1?"":"-")+ln(t,e):ln(a,i),o.update(n,r,i),s&&s()})},e}(pt));Xt=function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar"},{"aria-hidden":"true"})},t.update=function(e,t){var i,n=this.getChild("timeTooltip");n&&(i=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime(),n.updateTime(e,t,i))},e}(pt);Xt.prototype.options_={children:[]},q||A||Xt.prototype.options_.children.push("timeTooltip"),pt.registerComponent("PlayProgressBar",Xt);I=function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},t.update=function(e,t){var i=this,n=t*this.player_.duration();this.getChild("timeTooltip").updateTime(e,t,n,function(){i.el_.style.left=e.width*t+"px"})},e}(pt);I.prototype.options_={children:["timeTooltip"]},pt.registerComponent("MouseTimeDisplay",I);Bt=function(a){function e(e,t){t=a.call(this,e,t)||this;return t.setEventHandlers_(),t}mt(e,a);var t=e.prototype;return t.setEventHandlers_=function(){var t=this;this.update_=Ve(this,this.update),this.update=We(this.update_,30),this.on(this.player_,["ended","durationchange","timeupdate"],this.update),this.player_.liveTracker&&this.on(this.player_.liveTracker,"liveedgechange",this.update),this.updateInterval=null,this.enableIntervalHandler_=function(e){return t.enableInterval_(e)},this.disableIntervalHandler_=function(e){return t.disableInterval_(e)},this.on(this.player_,["playing"],this.enableIntervalHandler_),this.on(this.player_,["ended","pause","waiting"],this.disableIntervalHandler_),"hidden"in document&&"visibilityState"in document&&this.on(document,"visibilitychange",this.toggleVisibility_)},t.toggleVisibility_=function(e){"hidden"===document.visibilityState?(this.cancelNamedAnimationFrame("SeekBar#update"),this.cancelNamedAnimationFrame("Slider#update"),this.disableInterval_(e)):(this.player_.ended()||this.player_.paused()||this.enableInterval_(),this.update())},t.enableInterval_=function(){this.updateInterval||(this.updateInterval=this.setInterval(this.update,30))},t.disableInterval_=function(e){this.player_.liveTracker&&this.player_.liveTracker.isLive()&&e&&"ended"!==e.type||this.updateInterval&&(this.clearInterval(this.updateInterval),this.updateInterval=null)},t.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":this.localize("Progress Bar")})},t.update=function(e){var n=this;if("hidden"!==document.visibilityState){var r=a.prototype.update.call(this);return this.requestNamedAnimationFrame("SeekBar#update",function(){var e=n.player_.ended()?n.player_.duration():n.getCurrentTime_(),t=n.player_.liveTracker,i=n.player_.duration();t&&t.isLive()&&(i=n.player_.liveTracker.liveCurrentTime()),n.percent_!==r&&(n.el_.setAttribute("aria-valuenow",(100*r).toFixed(2)),n.percent_=r),n.currentTime_===e&&n.duration_===i||(n.el_.setAttribute("aria-valuetext",n.localize("progress bar timing: currentTime={1} duration={2}",[ln(e,i),ln(i,i)],"{1} of {2}")),n.currentTime_=e,n.duration_=i),n.bar&&n.bar.update(ce(n.el()),n.getProgress())}),r}},t.userSeek_=function(e){this.player_.liveTracker&&this.player_.liveTracker.isLive()&&this.player_.liveTracker.nextSeekedFromUser(),this.player_.currentTime(e)},t.getCurrentTime_=function(){return this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime()},t.getPercent=function(){var e,t=this.getCurrentTime_(),i=this.player_.liveTracker;return i&&i.isLive()?(e=(t-i.seekableStart())/i.liveWindow(),i.atLiveEdge()&&(e=1)):e=t/this.player_.duration(),e},t.handleMouseDown=function(e){_e(e)&&(e.stopPropagation(),this.videoWasPlaying=!this.player_.paused(),this.player_.pause(),a.prototype.handleMouseDown.call(this,e))},t.handleMouseMove=function(e,t){if(void 0===t&&(t=!1),_e(e)){t||this.player_.scrubbing()||this.player_.scrubbing(!0);var i=this.calculateDistance(e),n=this.player_.liveTracker;if(n&&n.isLive()){if(.99<=i)return void n.seekToLiveEdge();var r,t=n.seekableStart(),e=n.liveCurrentTime();if((r=(r=e<=(r=t+i*n.liveWindow())?e:r)<=t?t+.1:r)===1/0)return}else(r=i*this.player_.duration())===this.player_.duration()&&(r-=.1);this.userSeek_(r)}},t.enable=function(){a.prototype.enable.call(this);var e=this.getChild("mouseTimeDisplay");e&&e.show()},t.disable=function(){a.prototype.disable.call(this);var e=this.getChild("mouseTimeDisplay");e&&e.hide()},t.handleMouseUp=function(e){a.prototype.handleMouseUp.call(this,e),e&&e.stopPropagation(),this.player_.scrubbing(!1),this.player_.trigger({type:"timeupdate",target:this,manuallyTriggered:!0}),this.videoWasPlaying?Et(this.player_.play()):this.update_()},t.stepForward=function(){this.userSeek_(this.player_.currentTime()+5)},t.stepBack=function(){this.userSeek_(this.player_.currentTime()-5)},t.handleAction=function(e){this.player_.paused()?this.player_.play():this.player_.pause()},t.handleKeyDown=function(e){var t,i=this.player_.liveTracker;ht.isEventKey(e,"Space")||ht.isEventKey(e,"Enter")?(e.preventDefault(),e.stopPropagation(),this.handleAction(e)):ht.isEventKey(e,"Home")?(e.preventDefault(),e.stopPropagation(),this.userSeek_(0)):ht.isEventKey(e,"End")?(e.preventDefault(),e.stopPropagation(),i&&i.isLive()?this.userSeek_(i.liveCurrentTime()):this.userSeek_(this.player_.duration())):/^[0-9]$/.test(ht(e))?(e.preventDefault(),e.stopPropagation(),t=10*(ht.codes[ht(e)]-ht.codes[0])/100,i&&i.isLive()?this.userSeek_(i.seekableStart()+i.liveWindow()*t):this.userSeek_(this.player_.duration()*t)):ht.isEventKey(e,"PgDn")?(e.preventDefault(),e.stopPropagation(),this.userSeek_(this.player_.currentTime()-60)):ht.isEventKey(e,"PgUp")?(e.preventDefault(),e.stopPropagation(),this.userSeek_(this.player_.currentTime()+60)):a.prototype.handleKeyDown.call(this,e)},t.dispose=function(){this.disableInterval_(),this.off(this.player_,["ended","durationchange","timeupdate"],this.update),this.player_.liveTracker&&this.off(this.player_.liveTracker,"liveedgechange",this.update),this.off(this.player_,["playing"],this.enableIntervalHandler_),this.off(this.player_,["ended","pause","waiting"],this.disableIntervalHandler_),"hidden"in document&&"visibilityState"in document&&this.off(document,"visibilitychange",this.toggleVisibility_),a.prototype.dispose.call(this)},e}(li);Bt.prototype.options_={children:["loadProgressBar","playProgressBar"],barName:"playProgressBar"},q||A||Bt.prototype.options_.children.splice(1,0,"mouseTimeDisplay"),pt.registerComponent("SeekBar",Bt);Ft=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.handleMouseMove=We(Ve(ft(i),i.handleMouseMove),30),i.throttledHandleMouseSeek=We(Ve(ft(i),i.handleMouseSeek),30),i.handleMouseUpHandler_=function(e){return i.handleMouseUp(e)},i.handleMouseDownHandler_=function(e){return i.handleMouseDown(e)},i.enable(),i}mt(e,n);var t=e.prototype;return t.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},t.handleMouseMove=function(e){var t,i,n,r,a=this.getChild("seekBar");a&&(t=a.getChild("playProgressBar"),i=a.getChild("mouseTimeDisplay"),(t||i)&&(r=he(n=a.el()),e=pe(n,e).x,e=dn(e,0,1),i&&i.update(r,e),t&&t.update(r,a.getProgress())))},t.handleMouseSeek=function(e){var t=this.getChild("seekBar");t&&t.handleMouseMove(e)},t.enabled=function(){return this.enabled_},t.disable=function(){var e;this.children().forEach(function(e){return e.disable&&e.disable()}),this.enabled()&&(this.off(["mousedown","touchstart"],this.handleMouseDownHandler_),this.off(this.el_,"mousemove",this.handleMouseMove),this.removeListenersAddedOnMousedownAndTouchstart(),this.addClass("disabled"),this.enabled_=!1,this.player_.scrubbing()&&(e=this.getChild("seekBar"),this.player_.scrubbing(!1),e.videoWasPlaying&&Et(this.player_.play())))},t.enable=function(){this.children().forEach(function(e){return e.enable&&e.enable()}),this.enabled()||(this.on(["mousedown","touchstart"],this.handleMouseDownHandler_),this.on(this.el_,"mousemove",this.handleMouseMove),this.removeClass("disabled"),this.enabled_=!0)},t.removeListenersAddedOnMousedownAndTouchstart=function(){var e=this.el_.ownerDocument;this.off(e,"mousemove",this.throttledHandleMouseSeek),this.off(e,"touchmove",this.throttledHandleMouseSeek),this.off(e,"mouseup",this.handleMouseUpHandler_),this.off(e,"touchend",this.handleMouseUpHandler_)},t.handleMouseDown=function(e){var t=this.el_.ownerDocument,i=this.getChild("seekBar");i&&i.handleMouseDown(e),this.on(t,"mousemove",this.throttledHandleMouseSeek),this.on(t,"touchmove",this.throttledHandleMouseSeek),this.on(t,"mouseup",this.handleMouseUpHandler_),this.on(t,"touchend",this.handleMouseUpHandler_)},t.handleMouseUp=function(e){var t=this.getChild("seekBar");t&&t.handleMouseUp(e),this.removeListenersAddedOnMousedownAndTouchstart()},e}(pt);Ft.prototype.options_={children:["seekBar"]},pt.registerComponent("ProgressControl",Ft);jt=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.on(e,["enterpictureinpicture","leavepictureinpicture"],function(e){return i.handlePictureInPictureChange(e)}),i.on(e,["disablepictureinpicturechanged","loadedmetadata"],function(e){return i.handlePictureInPictureEnabledChange(e)}),i.on(e,["loadedmetadata","audioonlymodechange","audiopostermodechange"],function(){"audio"===e.currentType().substring(0,5)||e.audioPosterMode()||e.audioOnlyMode()?(e.isInPictureInPicture()&&e.exitPictureInPicture(),i.hide()):i.show()}),i.disable(),i}mt(e,n);var t=e.prototype;return t.buildCSSClass=function(){return"vjs-picture-in-picture-control "+n.prototype.buildCSSClass.call(this)},t.handlePictureInPictureEnabledChange=function(){document.pictureInPictureEnabled&&!1===this.player_.disablePictureInPicture()?this.enable():this.disable()},t.handlePictureInPictureChange=function(e){this.player_.isInPictureInPicture()?this.controlText("Exit Picture-in-Picture"):this.controlText("Picture-in-Picture"),this.handlePictureInPictureEnabledChange()},t.handleClick=function(e){this.player_.isInPictureInPicture()?this.player_.exitPictureInPicture():this.player_.requestPictureInPicture()},e}(sn);jt.prototype.controlText_="Picture-in-Picture",pt.registerComponent("PictureInPictureToggle",jt);j=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.on(e,"fullscreenchange",function(e){return i.handleFullscreenChange(e)}),!1===document[e.fsApi_.fullscreenEnabled]&&i.disable(),i}mt(e,n);var t=e.prototype;return t.buildCSSClass=function(){return"vjs-fullscreen-control "+n.prototype.buildCSSClass.call(this)},t.handleFullscreenChange=function(e){this.player_.isFullscreen()?this.controlText("Non-Fullscreen"):this.controlText("Fullscreen")},t.handleClick=function(e){this.player_.isFullscreen()?this.player_.exitFullscreen():this.player_.requestFullscreen()},e}(sn);j.prototype.controlText_="Fullscreen",pt.registerComponent("FullscreenToggle",j);pt.registerComponent("VolumeLevel",function(t){function e(){return t.apply(this,arguments)||this}return mt(e,t),e.prototype.createEl=function(){var e=t.prototype.createEl.call(this,"div",{className:"vjs-volume-level"});return e.appendChild(t.prototype.createEl.call(this,"span",{className:"vjs-control-text"})),e},e}(pt)),pt.registerComponent("VolumeLevelTooltip",function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-volume-tooltip"},{"aria-hidden":"true"})},t.update=function(e,t,i,n){if(!i){var r=ce(this.el_),a=ce(this.player_.el()),i=e.width*t;if(!a||!r)return;t=e.left-a.left+i,a=e.width-i+(a.right-e.right),e=r.width/2;tr.width&&(e=r.width),this.el_.style.right="-"+e+"px"}this.write(n+"%")},t.write=function(e){J(this.el_,e)},t.updateVolume=function(e,t,i,n,r){var a=this;this.requestNamedAnimationFrame("VolumeLevelTooltip#updateVolume",function(){a.update(e,t,i,n.toFixed(0)),r&&r()})},e}(pt));k=function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},t.update=function(e,t,i){var n=this,r=100*t;this.getChild("volumeLevelTooltip").updateVolume(e,t,i,r,function(){i?n.el_.style.bottom=e.height*t+"px":n.el_.style.left=e.width*t+"px"})},e}(pt);k.prototype.options_={children:["volumeLevelTooltip"]},pt.registerComponent("MouseVolumeLevelDisplay",k);f=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.on("slideractive",function(e){return i.updateLastVolume_(e)}),i.on(e,"volumechange",function(e){return i.updateARIAAttributes(e)}),e.ready(function(){return i.updateARIAAttributes()}),i}mt(e,n);var t=e.prototype;return t.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-volume-bar vjs-slider-bar"},{"aria-label":this.localize("Volume Level"),"aria-live":"polite"})},t.handleMouseDown=function(e){_e(e)&&n.prototype.handleMouseDown.call(this,e)},t.handleMouseMove=function(e){var t,i,n,r=this.getChild("mouseVolumeLevelDisplay");r&&(t=ce(n=this.el()),i=this.vertical(),n=pe(n,e),n=i?n.y:n.x,n=dn(n,0,1),r.update(t,n,i)),_e(e)&&(this.checkMuted(),this.player_.volume(this.calculateDistance(e)))},t.checkMuted=function(){this.player_.muted()&&this.player_.muted(!1)},t.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},t.stepForward=function(){this.checkMuted(),this.player_.volume(this.player_.volume()+.1)},t.stepBack=function(){this.checkMuted(),this.player_.volume(this.player_.volume()-.1)},t.updateARIAAttributes=function(e){var t=this.player_.muted()?0:this.volumeAsPercentage_();this.el_.setAttribute("aria-valuenow",t),this.el_.setAttribute("aria-valuetext",t+"%")},t.volumeAsPercentage_=function(){return Math.round(100*this.player_.volume())},t.updateLastVolume_=function(){var e=this,t=this.player_.volume();this.one("sliderinactive",function(){0===e.player_.volume()&&e.player_.lastVolume_(t)})},e}(li);f.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},q||A||f.prototype.options_.children.splice(0,0,"mouseVolumeLevelDisplay"),f.prototype.playerEvent="volumechange",pt.registerComponent("VolumeBar",f);ui=function(a){function e(e,t){var i,n,r;return(t=void 0===t?{}:t).vertical=t.vertical||!1,"undefined"!=typeof t.volumeBar&&!w(t.volumeBar)||(t.volumeBar=t.volumeBar||{},t.volumeBar.vertical=t.vertical),i=a.call(this,e,t)||this,n=ft(i),(r=e).tech_&&!r.tech_.featuresVolumeControl&&n.addClass("vjs-hidden"),n.on(r,"loadstart",function(){r.tech_.featuresVolumeControl?n.removeClass("vjs-hidden"):n.addClass("vjs-hidden")}),i.throttledHandleMouseMove=We(Ve(ft(i),i.handleMouseMove),30),i.handleMouseUpHandler_=function(e){return i.handleMouseUp(e)},i.on("mousedown",function(e){return i.handleMouseDown(e)}),i.on("touchstart",function(e){return i.handleMouseDown(e)}),i.on("mousemove",function(e){return i.handleMouseMove(e)}),i.on(i.volumeBar,["focus","slideractive"],function(){i.volumeBar.addClass("vjs-slider-active"),i.addClass("vjs-slider-active"),i.trigger("slideractive")}),i.on(i.volumeBar,["blur","sliderinactive"],function(){i.volumeBar.removeClass("vjs-slider-active"),i.removeClass("vjs-slider-active"),i.trigger("sliderinactive")}),i}mt(e,a);var t=e.prototype;return t.createEl=function(){var e="vjs-volume-horizontal";return this.options_.vertical&&(e="vjs-volume-vertical"),a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control "+e})},t.handleMouseDown=function(e){var t=this.el_.ownerDocument;this.on(t,"mousemove",this.throttledHandleMouseMove),this.on(t,"touchmove",this.throttledHandleMouseMove),this.on(t,"mouseup",this.handleMouseUpHandler_),this.on(t,"touchend",this.handleMouseUpHandler_)},t.handleMouseUp=function(e){var t=this.el_.ownerDocument;this.off(t,"mousemove",this.throttledHandleMouseMove),this.off(t,"touchmove",this.throttledHandleMouseMove),this.off(t,"mouseup",this.handleMouseUpHandler_),this.off(t,"touchend",this.handleMouseUpHandler_)},t.handleMouseMove=function(e){this.volumeBar.handleMouseMove(e)},e}(pt);ui.prototype.options_={children:["volumeBar"]},pt.registerComponent("VolumeControl",ui);Xt=function(a){function e(e,t){var i,n,r=a.call(this,e,t)||this;return i=ft(r),(n=e).tech_&&!n.tech_.featuresMuteControl&&i.addClass("vjs-hidden"),i.on(n,"loadstart",function(){n.tech_.featuresMuteControl?i.removeClass("vjs-hidden"):i.addClass("vjs-hidden")}),r.on(e,["loadstart","volumechange"],function(e){return r.update(e)}),r}mt(e,a);var t=e.prototype;return t.buildCSSClass=function(){return"vjs-mute-control "+a.prototype.buildCSSClass.call(this)},t.handleClick=function(e){var t=this.player_.volume(),i=this.player_.lastVolume_();0===t?(this.player_.volume(i<.1?.1:i),this.player_.muted(!1)):this.player_.muted(!this.player_.muted())},t.update=function(e){this.updateIcon_(),this.updateControlText_()},t.updateIcon_=function(){var e=this.player_.volume(),t=3;q&&this.player_.tech_&&this.player_.tech_.el_&&this.player_.muted(this.player_.tech_.el_.muted),0===e||this.player_.muted()?t=0:e<.33?t=1:e<.67&&(t=2);for(var i=0;i<4;i++)ie(this.el_,"vjs-vol-"+i);te(this.el_,"vjs-vol-"+t)},t.updateControlText_=function(){var e=this.player_.muted()||0===this.player_.volume()?"Unmute":"Mute";this.controlText()!==e&&this.controlText(e)},e}(sn);Xt.prototype.controlText_="Mute",pt.registerComponent("MuteToggle",Xt);I=function(n){function e(e,t){var i;return"undefined"!=typeof(t=void 0===t?{}:t).inline?t.inline=t.inline:t.inline=!0,"undefined"!=typeof t.volumeControl&&!w(t.volumeControl)||(t.volumeControl=t.volumeControl||{},t.volumeControl.vertical=!t.inline),(i=n.call(this,e,t)||this).handleKeyPressHandler_=function(e){return i.handleKeyPress(e)},i.on(e,["loadstart"],function(e){return i.volumePanelState_(e)}),i.on(i.muteToggle,"keyup",function(e){return i.handleKeyPress(e)}),i.on(i.volumeControl,"keyup",function(e){return i.handleVolumeControlKeyUp(e)}),i.on("keydown",function(e){return i.handleKeyPress(e)}),i.on("mouseover",function(e){return i.handleMouseOver(e)}),i.on("mouseout",function(e){return i.handleMouseOut(e)}),i.on(i.volumeControl,["slideractive"],i.sliderActive_),i.on(i.volumeControl,["sliderinactive"],i.sliderInactive_),i}mt(e,n);var t=e.prototype;return t.sliderActive_=function(){this.addClass("vjs-slider-active")},t.sliderInactive_=function(){this.removeClass("vjs-slider-active")},t.volumePanelState_=function(){this.volumeControl.hasClass("vjs-hidden")&&this.muteToggle.hasClass("vjs-hidden")&&this.addClass("vjs-hidden"),this.volumeControl.hasClass("vjs-hidden")&&!this.muteToggle.hasClass("vjs-hidden")&&this.addClass("vjs-mute-toggle-only")},t.createEl=function(){var e="vjs-volume-panel-horizontal";return this.options_.inline||(e="vjs-volume-panel-vertical"),n.prototype.createEl.call(this,"div",{className:"vjs-volume-panel vjs-control "+e})},t.dispose=function(){this.handleMouseOut(),n.prototype.dispose.call(this)},t.handleVolumeControlKeyUp=function(e){ht.isEventKey(e,"Esc")&&this.muteToggle.focus()},t.handleMouseOver=function(e){this.addClass("vjs-hover"),Be(document,"keyup",this.handleKeyPressHandler_)},t.handleMouseOut=function(e){this.removeClass("vjs-hover"),Fe(document,"keyup",this.handleKeyPressHandler_)},t.handleKeyPress=function(e){ht.isEventKey(e,"Esc")&&this.handleMouseOut()},e}(pt);I.prototype.options_={children:["muteToggle","volumeControl"]},pt.registerComponent("VolumePanel",I);var hn=function(n){function e(e,t){var i=n.call(this,e,t)||this;return t&&(i.menuButton_=t.menuButton),i.focusedChild_=-1,i.on("keydown",function(e){return i.handleKeyDown(e)}),i.boundHandleBlur_=function(e){return i.handleBlur(e)},i.boundHandleTapClick_=function(e){return i.handleTapClick(e)},i}mt(e,n);var t=e.prototype;return t.addEventListenerForItem=function(e){e instanceof pt&&(this.on(e,"blur",this.boundHandleBlur_),this.on(e,["tap","click"],this.boundHandleTapClick_))},t.removeEventListenerForItem=function(e){e instanceof pt&&(this.off(e,"blur",this.boundHandleBlur_),this.off(e,["tap","click"],this.boundHandleTapClick_))},t.removeChild=function(e){"string"==typeof e&&(e=this.getChild(e)),this.removeEventListenerForItem(e),n.prototype.removeChild.call(this,e)},t.addItem=function(e){e=this.addChild(e);e&&this.addEventListenerForItem(e)},t.createEl=function(){var e=this.options_.contentElType||"ul";this.contentEl_=$(e,{className:"vjs-menu-content"}),this.contentEl_.setAttribute("role","menu");e=n.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return e.appendChild(this.contentEl_),Be(e,"click",function(e){e.preventDefault(),e.stopImmediatePropagation()}),e},t.dispose=function(){this.contentEl_=null,this.boundHandleBlur_=null,this.boundHandleTapClick_=null,n.prototype.dispose.call(this)},t.handleBlur=function(e){var t=e.relatedTarget||document.activeElement;this.children().some(function(e){return e.el()===t})||(e=this.menuButton_)&&e.buttonPressed_&&t!==e.el().firstChild&&e.unpressButton()},t.handleTapClick=function(t){var e;this.menuButton_&&(this.menuButton_.unpressButton(),e=this.children(),!Array.isArray(e)||(e=e.filter(function(e){return e.el()===t.target})[0])&&"CaptionSettingsMenuItem"!==e.name()&&this.menuButton_.focus())},t.handleKeyDown=function(e){ht.isEventKey(e,"Left")||ht.isEventKey(e,"Down")?(e.preventDefault(),e.stopPropagation(),this.stepForward()):(ht.isEventKey(e,"Right")||ht.isEventKey(e,"Up"))&&(e.preventDefault(),e.stopPropagation(),this.stepBack())},t.stepForward=function(){var e=0;void 0!==this.focusedChild_&&(e=this.focusedChild_+1),this.focus(e)},t.stepBack=function(){var e=0;void 0!==this.focusedChild_&&(e=this.focusedChild_-1),this.focus(e)},t.focus=function(e){void 0===e&&(e=0);var t=this.children().slice();t.length&&t[0].hasClass("vjs-menu-title")&&t.shift(),0=t.length&&(e=t.length-1),t[this.focusedChild_=e].el_.focus())},e}(pt);pt.registerComponent("Menu",hn);Bt=function(n){function e(e,t){var i;(i=n.call(this,e,t=void 0===t?{}:t)||this).menuButton_=new sn(e,t),i.menuButton_.controlText(i.controlText_),i.menuButton_.el_.setAttribute("aria-haspopup","true");t=sn.prototype.buildCSSClass();i.menuButton_.el_.className=i.buildCSSClass()+" "+t,i.menuButton_.removeClass("vjs-control"),i.addChild(i.menuButton_),i.update(),i.enabled_=!0;t=function(e){return i.handleClick(e)};return i.handleMenuKeyUp_=function(e){return i.handleMenuKeyUp(e)},i.on(i.menuButton_,"tap",t),i.on(i.menuButton_,"click",t),i.on(i.menuButton_,"keydown",function(e){return i.handleKeyDown(e)}),i.on(i.menuButton_,"mouseenter",function(){i.addClass("vjs-hover"),i.menu.show(),Be(document,"keyup",i.handleMenuKeyUp_)}),i.on("mouseleave",function(e){return i.handleMouseLeave(e)}),i.on("keydown",function(e){return i.handleSubmenuKeyDown(e)}),i}mt(e,n);var t=e.prototype;return t.update=function(){var e=this.createMenu();this.menu&&(this.menu.dispose(),this.removeChild(this.menu)),this.menu=e,this.addChild(e),this.buttonPressed_=!1,this.menuButton_.el_.setAttribute("aria-expanded","false"),this.items&&this.items.length<=this.hideThreshold_?(this.hide(),this.menu.contentEl_.removeAttribute("role")):(this.show(),this.menu.contentEl_.setAttribute("role","menu"))},t.createMenu=function(){var e,t=new hn(this.player_,{menuButton:this});if(this.hideThreshold_=0,this.options_.title&&(e=$("li",{className:"vjs-menu-title",textContent:ut(this.options_.title),tabIndex:-1}),e=new pt(this.player_,{el:e}),t.addItem(e)),this.items=this.createItems(),this.items)for(var i=0;i select",id:"captions-background-color-%s",label:"Color",options:[ui,Bt,jt,Ft,j,C,I,Xt]},backgroundOpacity:{selector:".vjs-bg-opacity > select",id:"captions-background-opacity-%s",label:"Transparency",options:[k,li,f]},color:{selector:".vjs-fg-color > select",id:"captions-foreground-color-%s",label:"Color",options:[Bt,ui,jt,Ft,j,C,I,Xt]},edgeStyle:{selector:".vjs-edge-style > select",id:"%s",label:"Text Edge Style",options:[["none","None"],["raised","Raised"],["depressed","Depressed"],["uniform","Uniform"],["dropshadow","Dropshadow"]]},fontFamily:{selector:".vjs-font-family > select",id:"captions-font-family-%s",label:"Font Family",options:[["proportionalSansSerif","Proportional Sans-Serif"],["monospaceSansSerif","Monospace Sans-Serif"],["proportionalSerif","Proportional Serif"],["monospaceSerif","Monospace Serif"],["casual","Casual"],["script","Script"],["small-caps","Small Caps"]]},fontPercent:{selector:".vjs-font-percent > select",id:"captions-font-size-%s",label:"Font Size",options:[["0.50","50%"],["0.75","75%"],["1.00","100%"],["1.25","125%"],["1.50","150%"],["1.75","175%"],["2.00","200%"],["3.00","300%"],["4.00","400%"]],default:2,parser:function(e){return"1.00"===e?null:Number(e)}},textOpacity:{selector:".vjs-text-opacity > select",id:"captions-foreground-opacity-%s",label:"Transparency",options:[k,li]},windowColor:{selector:".vjs-window-color > select",id:"captions-window-color-%s",label:"Color"},windowOpacity:{selector:".vjs-window-opacity > select",id:"captions-window-opacity-%s",label:"Transparency",options:[f,li,k]}};function Sn(e,t){if((e=t?t(e):e)&&"none"!==e)return e}wn.windowColor.options=wn.backgroundColor.options,pt.registerComponent("TextTrackSettings",function(n){function e(e,t){var i;return t.temporary=!1,(i=n.call(this,e,t)||this).updateDisplay=i.updateDisplay.bind(ft(i)),i.fill(),i.hasBeenOpened_=i.hasBeenFilled_=!0,i.endDialog=$("p",{className:"vjs-control-text",textContent:i.localize("End of dialog window.")}),i.el().appendChild(i.endDialog),i.setDefaults(),void 0===t.persistTextTrackSettings&&(i.options_.persistTextTrackSettings=i.options_.playerOptions.persistTextTrackSettings),i.on(i.$(".vjs-done-button"),"click",function(){i.saveSettings(),i.close()}),i.on(i.$(".vjs-default-button"),"click",function(){i.setDefaults(),i.updateDisplay()}),_(wn,function(e){i.on(i.$(e.selector),"change",i.updateDisplay)}),i.options_.persistTextTrackSettings&&i.restoreSettings(),i}mt(e,n);var t=e.prototype;return t.dispose=function(){this.endDialog=null,n.prototype.dispose.call(this)},t.createElSelect_=function(e,t,i){var n=this;void 0===t&&(t=""),void 0===i&&(i="label");var e=wn[e],r=e.id.replace("%s",this.id_),a=[t,r].join(" ").trim();return["<"+i+' id="'+r+'" class="'+("label"===i?"vjs-label":"")+'">',this.localize(e.label),"",'").join("")},t.createElFgColor_=function(){var e="captions-text-legend-"+this.id_;return['
','',this.localize("Text"),"",this.createElSelect_("color",e),'',this.createElSelect_("textOpacity",e),"","
"].join("")},t.createElBgColor_=function(){var e="captions-background-"+this.id_;return['
','',this.localize("Background"),"",this.createElSelect_("backgroundColor",e),'',this.createElSelect_("backgroundOpacity",e),"","
"].join("")},t.createElWinColor_=function(){var e="captions-window-"+this.id_;return['
','',this.localize("Window"),"",this.createElSelect_("windowColor",e),'',this.createElSelect_("windowOpacity",e),"","
"].join("")},t.createElColors_=function(){return $("div",{className:"vjs-track-settings-colors",innerHTML:[this.createElFgColor_(),this.createElBgColor_(),this.createElWinColor_()].join("")})},t.createElFont_=function(){return $("div",{className:"vjs-track-settings-font",innerHTML:['
',this.createElSelect_("fontPercent","","legend"),"
",'
',this.createElSelect_("edgeStyle","","legend"),"
",'
',this.createElSelect_("fontFamily","","legend"),"
"].join("")})},t.createElControls_=function(){var e=this.localize("restore all settings to the default values");return $("div",{className:"vjs-track-settings-controls",innerHTML:['",'"].join("")})},t.content=function(){return[this.createElColors_(),this.createElFont_(),this.createElControls_()]},t.label=function(){return this.localize("Caption Settings Dialog")},t.description=function(){return this.localize("Beginning of dialog window. Escape will cancel and close the window.")},t.buildCSSClass=function(){return n.prototype.buildCSSClass.call(this)+" vjs-text-track-settings"},t.getValues=function(){var i,n,e,r=this;return n=function(e,t,i){var n,t=(n=r.$(t.selector),t=t.parser,Sn(n.options[n.options.selectedIndex].value,t));return void 0!==t&&(e[i]=t),e},void 0===(e={})&&(e=0),v(i=wn).reduce(function(e,t){return n(e,i[t],t)},e)},t.setValues=function(i){var n=this;_(wn,function(e,t){!function(e,t,i){if(t)for(var n=0;nthis.options_.liveTolerance,(t=!this.timeupdateSeen_||e===1/0?!1:t)!==this.behindLiveEdge_&&(this.behindLiveEdge_=t,this.trigger("liveedgechange")))},t.handleDurationchange=function(){this.toggleTracking()},t.toggleTracking=function(){this.player_.duration()===1/0&&this.liveWindow()>=this.options_.trackingThreshold?(this.player_.options_.liveui&&this.player_.addClass("vjs-liveui"),this.startTracking()):(this.player_.removeClass("vjs-liveui"),this.stopTracking())},t.startTracking=function(){this.isTracking()||(this.timeupdateSeen_||(this.timeupdateSeen_=this.player_.hasStarted()),this.trackingInterval_=this.setInterval(this.trackLiveHandler_,30),this.trackLive_(),this.on(this.player_,["play","pause"],this.trackLiveHandler_),this.timeupdateSeen_?this.on(this.player_,"seeked",this.handleSeeked_):(this.one(this.player_,"play",this.handlePlay_),this.one(this.player_,"timeupdate",this.handleFirstTimeupdate_)))},t.handleFirstTimeupdate=function(){this.timeupdateSeen_=!0,this.on(this.player_,"seeked",this.handleSeeked_)},t.handleSeeked=function(){var e=Math.abs(this.liveCurrentTime()-this.player_.currentTime());this.seekedBehindLive_=this.nextSeekedFromUser_&&2=e.length&&n.call(e,function(e,t){return e===(a[t]?a[t]&i[r+t]:i[r+t])})}function wr(e,t){if(/^[a-z]+:/i.test(t))return t;/^data:/.test(e)&&(e=window.location&&window.location.href||"");var i="function"==typeof window.URL,n=/^\/\//.test(e),r=!window.location&&!/\/\//i.test(e);if(i?e=new window.URL(e,window.location||Nr):/\/\//i.test(e)||(e=ir.buildAbsoluteURL(window.location&&window.location.href||"",e)),i){i=new URL(t,e);return r?i.href.slice(Nr.length):n?i.href.slice(i.protocol.length):i.href}return ir.buildAbsoluteURL(e,t)} +/*! @name m3u8-parser @version 4.7.1 @license Apache-2.0 */ +var Sr=function(t){function e(){var e=t.call(this)||this;return e.buffer="",e}return mt(e,t),e.prototype.push=function(e){var t;for(this.buffer+=e,t=this.buffer.indexOf("\n");-1"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function ya(e,t){if(t(e))return 1;if(e=e.firstChild)do{if(ya(e,t))return 1}while(e=e.nextSibling)}function va(){}function _a(e,t,i){e&&e._inc++,i.namespaceURI===qr.XMLNS&&delete t._nsMap[i.prefix?i.localName:""]}function ba(e,t,i){if(e&&e._inc){e._inc++;var n=t.childNodes;if(i)n[n.length++]=i;else{for(var r=t.firstChild,a=0;r;)r=(n[a++]=r).nextSibling;n.length=a}}}function Ta(e,t){var i=t.previousSibling,n=t.nextSibling;return i?i.nextSibling=n:e.firstChild=n,n?n.previousSibling=i:e.lastChild=i,ba(e.ownerDocument,e),t}function wa(e,t,i){var n=t.parentNode;if(n&&n.removeChild(t),t.nodeType===na){var r=t.firstChild;if(null==r)return t;var a=t.lastChild}else r=a=t;n=i?i.previousSibling:e.lastChild;for(r.previousSibling=n,a.nextSibling=i,n?n.nextSibling=r:e.firstChild=r,null==i?e.lastChild=a:i.previousSibling=a;r.parentNode=e,r!==a&&(r=r.nextSibling););return ba(e.ownerDocument||e,e),t.nodeType==na&&(t.firstChild=t.lastChild=null),t}function Sa(){this._nsMap={}}function Ea(){}function ka(){}function Ca(){}function Ia(){}function xa(){}function Aa(){}function Pa(){}function La(){}function Da(){}function Oa(){}function Ra(){}function Ma(){}function Na(e,t){var i,n=[],r=9==this.nodeType&&this.documentElement||this,a=r.prefix,s=r.namespaceURI;return Fa(this,n,e,t,i=s&&null==a&&null==(a=r.lookupPrefix(s))?[{namespace:s,prefix:null}]:i),n.join("")}function Ua(e,t,i){var n=e.prefix||"",r=e.namespaceURI;if(r&&("xml"!==n||r!==qr.XML)&&r!==qr.XMLNS){for(var a=i.length;a--;){var s=i[a];if(s.prefix===n)return s.namespace!==r}return 1}}function Ba(e,t,i){e.push(" ",t,'="',i.replace(/[<&"]/g,ga),'"')}function Fa(e,t,i,n,r){if(r=r||[],n){if(!(e=n(e)))return;if("string"==typeof e)return void t.push(e)}switch(e.nodeType){case Kr:var a=e.attributes,s=a.length,o=e.firstChild,u=e.tagName,l=u;if(!(i=qr.isHTML(e.namespaceURI)||i)&&!e.prefix&&e.namespaceURI){for(var d,c=0;c"),i&&/^script$/i.test(u))for(;o;)o.data?t.push(o.data):Fa(o,t,i,n,r.slice()),o=o.nextSibling;else for(;o;)Fa(o,t,i,n,r.slice()),o=o.nextSibling;t.push("")}else t.push("/>");return;case ta:case na:for(o=e.firstChild;o;)Fa(o,t,i,n,r.slice()),o=o.nextSibling;return;case Yr:return Ba(t,e.name,e.value),0;case Qr:return t.push(e.data.replace(/[<&]/g,ga).replace(/]]>/g,"]]>"));case $r:return t.push("");case ea:return t.push("\x3c!--",e.data,"--\x3e");case ia:var v=e.publicId,_=e.systemId;return t.push("")):_&&"."!=_?t.push(" SYSTEM ",_,">"):((_=e.internalSubset)&&t.push(" [",_,"]"),t.push(">")));case Zr:return t.push("");case Jr:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ja(e,t,i){e[t]=i}x.INVALID_STATE_ERR=(ra[11]="Invalid state",11),x.SYNTAX_ERR=(ra[12]="Syntax error",12),x.INVALID_MODIFICATION_ERR=(ra[13]="Invalid modification",13),x.NAMESPACE_ERR=(ra[14]="Invalid namespace",14),x.INVALID_ACCESS_ERR=(ra[15]="Invalid access",15),sa.prototype=Error.prototype,zr(x,sa),oa.prototype={length:0,item:function(e){return this[e]||null},toString:function(e,t){for(var i=[],n=0;n",lt:"<",quot:'"'}),t.HTML_ENTITIES=i({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à ",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),t.entityMap=t.HTML_ENTITIES});Ha.XML_ENTITIES,Ha.HTML_ENTITIES,Ha.entityMap;var qa=Hr.NAMESPACE,zt=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,rr=new RegExp("[\\-\\.0-9"+zt.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),Va=new RegExp("^"+zt.source+rr.source+"*(?::"+zt.source+rr.source+"*)?$"),Wa=0,Ga=1,za=2,Xa=3,Ka=4,Ya=5,Qa=6,$a=7;function Ja(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,Ja)}function Za(){}function es(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function ts(e,t,i){for(var n=e.tagName,r=null,a=e.length;a--;){var s=e[a],o=s.qName,u=s.value,o=0<(d=o.indexOf(":"))?(l=s.prefix=o.slice(0,d),c=o.slice(d+1),"xmlns"===l&&c):(l=null,"xmlns"===(c=o)&&"");s.localName=c,!1!==o&&(null==r&&(r={},is(i,i={})),i[o]=r[o]=u,s.uri=qa.XMLNS,t.startPrefixMapping(o,u))}for(var l,a=e.length;a--;)(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=qa.XML),"xmlns"!==l&&(s.uri=i[l||""]));var d,c=0<(d=n.indexOf(":"))?(l=e.prefix=n.slice(0,d),e.localName=n.slice(d+1)):(l=null,e.localName=n),h=e.uri=i[l||""];if(t.startElement(h,c,n,e),!e.closed)return e.currentNSMap=i,e.localNSMap=r,1;if(t.endElement(h,c,n),r)for(l in r)t.endPrefixMapping(l)}function is(e,t){for(var i in e)t[i]=e[i]}function ns(){this.attributeNames={}}(Ja.prototype=new Error).name=Ja.name,Za.prototype={parse:function(e,t,i){var n=this.domBuilder;n.startDocument(),is(t,t={}),function(i,e,n,r,a){function s(e){var t=e.slice(1,-1);return t in n?n[t]:"#"===t.charAt(0)?65535<(t=parseInt(t.substr(1).replace("x","0x")))?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):String.fromCharCode(t):(a.error("entity not found:"+e),e)}function t(e){var t;f",y+3),_=i.substring(y+2,v).replace(/[ \t\n\r]+$/g,""),b=h.pop();v<0?(_=i.substring(y+2).replace(/[\s<].*/,""),a.error("end tag name: "+_+" is not complete:"+b.tagName),v=y+1+_.length):_.match(/\s",t);if(n){t=e.substring(t,n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return t?(t[0].length,i.processingInstruction(t[1],t[2]),n+2):-1}return-1}(i,y,r);break;case"!":c&&o(y),v=function(e,t,i,n){{if("-"===e.charAt(t+2)){if("-"!==e.charAt(t+3))return-1;var r=e.indexOf("--\x3e",t+4);return t",t+9);return i.startCDATA(),i.characters(e,t+9,r-t-9),i.endCDATA(),r+3}var a=function(e,t){var i,n=[],r=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;r.lastIndex=t,r.exec(e);for(;i=r.exec(e);)if(n.push(i),i[1])return n}(e,t),n=a.length;if(1":switch(l){case Wa:n.setTagName(e.slice(t,u));case Ya:case Qa:case $a:break;case Ka:case Ga:"/"===(c=e.slice(t,u)).slice(-1)&&(n.closed=!0,c=c.slice(0,-1));case za:l===za&&(c=o),l==Ka?(a.warning('attribute "'+c+'" missed quot(")!'),s(o,c.replace(/&#?\w+;/g,r),t)):(qa.isHTML(i[""])&&c.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+c+'" missed value!! "'+c+'" instead!!'),s(c,c,t));break;case Xa:throw new Error("attribute value missed!!")}return u;case"€":d=" ";default:if(d<=" ")switch(l){case Wa:n.setTagName(e.slice(t,u)),l=Qa;break;case Ga:o=e.slice(t,u),l=za;break;case Ka:var c=e.slice(t,u).replace(/&#?\w+;/g,r);a.warning('attribute "'+c+'" missed quot(")!!'),s(o,c,t);case Ya:l=Qa}else switch(l){case za:n.tagName,qa.isHTML(i[""])&&o.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+o+'" missed value!! "'+o+'" instead2!!'),s(o,o,t),t=u,l=Ga;break;case Ya:a.warning('attribute space is required"'+o+'"!!');case Qa:l=Ga,t=u;break;case Xa:l=Ka,t=u;break;case $a:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}(i,y,E,k,s,a),C=E.length;if(!E.closed&&function(e,t,i,n){var r=n[i];null==r&&((r=e.lastIndexOf(""))",t),e=e.substring(t+1,a);if(/[&<]/.test(e))return/^script$/i.test(i)||(e=e.replace(/&#?\w+;/g,n)),r.characters(e,0,e.length),a}return t+1}(i,v,E.tagName,s,r):v++}}catch(e){if(e instanceof Ja)throw e;a.error("element parse error: "+e),v=-1}f=t+i||t?new java.lang.String(e,t,i)+"":e}function ps(e,t){(e.currentElement||e.doc).appendChild(t)}us.prototype.parseFromString=function(e,t){var i=this.options,n=new os,r=i.domBuilder||new ls,a=i.errorHandler,s=i.locator,o=i.xmlns||{},u=/\/x?html?$/.test(t),t=u?Ha.HTML_ENTITIES:Ha.XML_ENTITIES;return s&&r.setDocumentLocator(s),n.errorHandler=function(n,e,r){if(!n){if(e instanceof ls)return e;n=e}var a={},s=n instanceof Function;function t(t){var i=n[t];!i&&s&&(i=2==n.length?function(e){n(t,e)}:n),a[t]=i?function(e){i("[xmldom "+t+"]\t"+e+cs(r))}:function(){}}return r=r||{},t("warning"),t("error"),t("fatalError"),a}(a,r,s),n.domBuilder=i.domBuilder||r,u&&(o[""]=as.HTML),o.xml=o.xml||as.XML,e&&"string"==typeof e?n.parse(e,o,t):n.errorHandler.error("invalid doc source"),r.doc},ls.prototype={startDocument:function(){this.doc=(new rs).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,i,n){var r=this.doc,a=r.createElementNS(e,i||t),s=n.length;ps(this,a),this.currentElement=a,this.locator&&ds(this.locator,a);for(var o=0;ot.timeline?1:-1});var i}function Cs(e){var r,a,s=[];return r=e,a=function(e,t,i,n){s=s.concat(e.playlists||[])},vo.forEach(function(e){for(var t in r.mediaGroups[e])for(var i in r.mediaGroups[e][t]){var n=r.mediaGroups[e][t][i];a(n,e,t,i)}}),s}function Is(e){var i=e.playlist,e=e.mediaSequence;i.mediaSequence=e,i.segments.forEach(function(e,t){e.number=i.mediaSequence+t})}function xs(e){var r,a,t=e.oldManifest,i=e.newManifest,n=t.playlists.concat(Cs(t)),e=i.playlists.concat(Cs(i));return i.timelineStarts=ks([t.timelineStarts,i.timelineStarts]),n={oldPlaylists:n,newPlaylists:e,timelineStarts:i.timelineStarts},r=n.oldPlaylists,e=n.newPlaylists,a=n.timelineStarts,e.forEach(function(t){t.discontinuitySequence=_s(a,function(e){return e.timeline===t.timeline});var e=function(e,t){for(var i=0;ie.timeline||e.segments.length&&t.timeline>e.segments[e.segments.length-1].timeline)&&t.discontinuitySequence--);e.segments[n].discontinuity&&!i.discontinuity&&(i.discontinuity=!0,t.discontinuityStarts.unshift(0),t.discontinuitySequence--),Is({playlist:t,mediaSequence:e.segments[n].number})}}),i}function As(e){return e&&e.uri+"-"+(t=e.byterange,e="bigint"==typeof t.offset||"bigint"==typeof t.length?window.BigInt(t.offset)+window.BigInt(t.length)-window.BigInt(1):t.offset+t.length-1,t.offset+"-"+e);var t}function Ps(e){return gs(e.reduce(function(e,t){var i,n=t.attributes.id+(t.attributes.lang||"");return e[n]?(t.segments&&(t.segments[0]&&(t.segments[0].discontinuity=!0),(i=e[n].segments).push.apply(i,t.segments)),t.attributes.contentProtection&&(e[n].attributes.contentProtection=t.attributes.contentProtection)):(e[n]=t,e[n].attributes.timelineStarts=[]),e[n].attributes.timelineStarts.push({start:t.attributes.periodStart,timeline:t.attributes.periodStart}),e},{})).map(function(e){var t,n;return e.discontinuityStarts=(t=e.segments||[],n="discontinuity",t.reduce(function(e,t,i){return t[n]&&e.push(i),e},[])),e})}function Ls(e,t){var i=As(e.sidx);return(i=i&&t[i]&&t[i].sidx)&&Es(e,i,e.sidx.resolvedUri),e}function Ds(e,h,p){var f;return void 0===h&&(h={}),void 0===p&&(p=!1),e=e.reduce(function(e,t){var i=t.attributes.role&&t.attributes.role.value||"",n=t.attributes.lang||"",r=t.attributes.label||"main";e[r=n&&!t.attributes.label?t.attributes.lang+(i?" ("+i+")":""):r]||(e[r]={language:n,autoselect:!0,default:"main"===i,playlists:[],uri:""});var a,s,o,u,l,d,c,u=Ls((s=p,o=(a=t).attributes,u=a.segments,l=a.sidx,d=a.mediaSequence,c=a.discontinuitySequence,n=a.discontinuityStarts,u={attributes:((a={NAME:o.id,BANDWIDTH:o.bandwidth,CODECS:o.codecs})["PROGRAM-ID"]=1,a),uri:"",endList:"static"===o.type,timeline:o.periodStart,resolvedUri:"",targetDuration:o.duration,discontinuitySequence:c,discontinuityStarts:n,timelineStarts:o.timelineStarts,mediaSequence:d,segments:u},o.contentProtection&&(u.contentProtection=o.contentProtection),l&&(u.sidx=l),s&&(u.attributes.AUDIO="audio",u.attributes.SUBTITLES="subs"),u),h);return e[r].playlists.push(u),"undefined"==typeof f&&"main"===i&&((f=t).default=!0),e},{}),f||(e[Object.keys(e)[0]].default=!0),e}function Os(e){var t=e.attributes,i=e.segments,n=e.sidx,r=e.discontinuityStarts,i={attributes:((e={NAME:t.id,AUDIO:"audio",SUBTITLES:"subs",RESOLUTION:{width:t.width,height:t.height},CODECS:t.codecs,BANDWIDTH:t.bandwidth})["PROGRAM-ID"]=1,e),uri:"",endList:"static"===t.type,timeline:t.periodStart,resolvedUri:"",targetDuration:t.duration,discontinuityStarts:r,timelineStarts:t.timelineStarts,segments:i};return t.contentProtection&&(i.contentProtection=t.contentProtection),n&&(i.sidx=n),i}function Rs(e){return"video/mp4"===(e=e.attributes).mimeType||"video/webm"===e.mimeType||"video"===e.contentType}function Ms(e){return"audio/mp4"===(e=e.attributes).mimeType||"audio/webm"===e.mimeType||"audio"===e.contentType}function Ns(e){return"text/vtt"===(e=e.attributes).mimeType||"text"===e.contentType}function Us(i){return i?Object.keys(i).reduce(function(e,t){t=i[t];return e.concat(t.playlists)},[]):[]}function Bs(e){var t=e.dashPlaylists,i=e.locations,n=void 0===(d=e.sidxMapping)?{}:d,r=e.previousManifest;if(!t.length)return{};var a=(c=t[0].attributes).sourceDuration,s=c.type,o=c.suggestedPresentationDelay,u=c.minimumUpdatePeriod,l=Ps(t.filter(Rs)).map(Os),d=Ps(t.filter(Ms)),e=Ps(t.filter(Ns)),c=t.map(function(e){return e.attributes.captionServices}).filter(Boolean),a={allowCache:!0,discontinuityStarts:[],segments:[],endList:!0,mediaGroups:((t={AUDIO:{},VIDEO:{}})["CLOSED-CAPTIONS"]={},t.SUBTITLES={},t),uri:"",duration:a,playlists:function(e,t){if(void 0===t&&(t={}),!Object.keys(t).length)return e;for(var i in e)e[i]=Ls(e[i],t);return e}(l,n)};0<=u&&(a.minimumUpdatePeriod=1e3*u),i&&(a.locations=i),"dynamic"===s&&(a.suggestedPresentationDelay=o);var h,p,o=0===a.playlists.length,o=d.length?Ds(d,n,o):null,n=e.length?(void 0===(h=n)&&(h={}),e.reduce(function(e,t){var i=t.attributes.lang||"text";return e[i]||(e[i]={language:i,default:!1,autoselect:!1,playlists:[],uri:""}),e[i].playlists.push(Ls(function(e){var t=e.attributes,i=e.segments,n=e.mediaSequence,r=e.discontinuityStarts,a=e.discontinuitySequence;"undefined"==typeof i&&(i=[{uri:t.baseUrl,timeline:t.periodStart,resolvedUri:t.baseUrl||"",duration:t.sourceDuration,number:0}],t.duration=t.sourceDuration);(e={NAME:t.id,BANDWIDTH:t.bandwidth})["PROGRAM-ID"]=1;return t.codecs&&(e.CODECS=t.codecs),{attributes:e,uri:"",endList:"static"===t.type,timeline:t.periodStart,resolvedUri:t.baseUrl||"",targetDuration:t.duration,timelineStarts:t.timelineStarts,discontinuityStarts:r,discontinuitySequence:a,mediaSequence:n,segments:i}}(t),h)),e},{})):null,l=(e=l.concat(Us(o),Us(n))).map(function(e){return e.timelineStarts});return a.timelineStarts=ks(l),e=e,p=a.timelineStarts,e.forEach(function(t){t.mediaSequence=0,t.discontinuitySequence=_s(p,function(e){return e.timeline===t.timeline}),t.segments&&t.segments.forEach(function(e,t){e.number=t})}),o&&(a.mediaGroups.AUDIO.audio=o),n&&(a.mediaGroups.SUBTITLES.subs=n),c.length&&(a.mediaGroups["CLOSED-CAPTIONS"].cc=c.reduce(function(n,e){return e&&e.forEach(function(e){var t=e.channel,i=e.language;n[i]={autoselect:!1,default:!1,instreamId:t,language:i},e.hasOwnProperty("aspectRatio")&&(n[i].aspectRatio=e.aspectRatio),e.hasOwnProperty("easyReader")&&(n[i].easyReader=e.easyReader),e.hasOwnProperty("3D")&&(n[i]["3D"]=e["3D"])}),n},{})),r?xs({oldManifest:r,newManifest:a}):a}function Fs(e,t){for(var i,n,r,a,s,o,u=e.type,l=e.minimumUpdatePeriod,d=void 0===l?0:l,c=void 0===(l=e.media)?"":l,h=e.sourceDuration,p=void 0===(l=e.timescale)?1:l,f=void 0===(l=e.startNumber)?1:l,m=e.periodStart,g=[],y=-1,v=0;v>4?20+t:10+t}(e,t))}function io(e){return"string"==typeof e?br(e):e}function no(e,t,i){var n;void 0===i&&(i=!1),n=t,t=Array.isArray(n)?n.map(io):[io(n)],e=vr(e);var r=[];if(!t.length)return r;for(var a=0;a>>0,o=e.subarray(a+4,a+8);if(0==s)break;var u=a+s;if(u>e.length){if(i)break;u=e.length}s=e.subarray(a+8,u);Tr(o,t[0])&&(1===t.length?r.push(s):r.push.apply(r,no(s,t.slice(1),i))),a=u}return r}function ro(e,t,i,n){void 0===i&&(i=!0),void 0===n&&(n=!1);var r=function(e){for(var t=1,i=0;i=t.length)return t.length;var n=ro(t,i,!1);if(Tr(e.bytes,n.bytes))return i;var r=ro(t,i+n.length);return so(e,t,i+r.length+r.value+n.length)}function oo(e,t){var i;i=t,t=Array.isArray(i)?i.map(ao):[ao(i)],e=vr(e);var n=[];if(!t.length)return n;for(var r=0;re.length?e.length:o+s.value,u=e.subarray(o,u);Tr(t[0],a.bytes)&&(1===t.length?n.push(u):n=n.concat(oo(u,t.slice(1)))),r+=a.length+s.length+u.length}return n}function uo(e,t,i,n){void 0===n&&(n=1/0),e=vr(e),i=[].concat(i);for(var r,a=0,s=0;a>1&63),-1!==i.indexOf(u)&&(r=a+o),a+=o+("h264"===t?1:2)}else a++}return e.subarray(0,0)}var lo={__DOMHandler:ls,DOMParser:us,DOMImplementation:U.DOMImplementation,XMLSerializer:U.XMLSerializer}.DOMParser,co="INVALID_NUMBER_OF_PERIOD",ho="DASH_EMPTY_MANIFEST",po="DASH_INVALID_XML",fo="NO_BASE_URL",mo="SEGMENT_TIME_UNSPECIFIED",go="UNSUPPORTED_UTC_TIMING_SCHEME",yo={static:function(e){var t=e.duration,i=e.timescale,n=void 0===i?1:i,r=e.sourceDuration,i=e.periodDuration,e=Ts(e.endNumber),n=t/n;return"number"==typeof e?{start:0,end:e}:"number"==typeof i?{start:0,end:i/n}:{start:0,end:r/n}},dynamic:function(e){var t=e.NOW,i=e.clientOffset,n=e.availabilityStartTime,r=e.timescale,a=void 0===r?1:r,s=e.duration,o=e.periodStart,u=void 0===o?0:o,r=e.minimumUpdatePeriod,o=void 0===r?0:r,r=e.timeShiftBufferDepth,r=void 0===r?1/0:r,e=Ts(e.endNumber),i=(t+i)/1e3,u=n+u,o=Math.ceil((i+o-u)*a/s),r=Math.floor((i-u-r)*a/s),s=Math.floor((i-u)*a/s);return{start:Math.max(0,r),end:"number"==typeof e?e:Math.min(o,s)}}},vo=["AUDIO","SUBTITLES"],_o=/\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g,bo={mediaPresentationDuration:zs,availabilityStartTime:function(e){return/^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(e=e)&&(e+="Z"),Date.parse(e)/1e3},minimumUpdatePeriod:zs,suggestedPresentationDelay:zs,type:function(e){return e},timeShiftBufferDepth:zs,start:zs,width:function(e){return parseInt(e,10)},height:function(e){return parseInt(e,10)},bandwidth:function(e){return parseInt(e,10)},startNumber:function(e){return parseInt(e,10)},timescale:function(e){return parseInt(e,10)},presentationTimeOffset:function(e){return parseInt(e,10)},duration:function(e){var t=parseInt(e,10);return isNaN(t)?zs(e):t},d:function(e){return parseInt(e,10)},t:function(e){return parseInt(e,10)},r:function(e){return parseInt(e,10)},DEFAULT:function(e){return e}},To={"urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b":"org.w3.clearkey","urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":"com.widevine.alpha","urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready","urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb":"com.adobe.primetime"},wo=Math.pow(2,32),So=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);return t.getBigUint64?(e=t.getBigUint64(0))>>7,referencedSize:2147483647&t.getUint32(n),subsegmentDuration:t.getUint32(n+4),startsWithSap:!!(128&e[n+8]),sapType:(112&e[n+8])>>>4,sapDeltaTime:268435455&t.getUint32(n+8)});return i},ko=vr([73,68,51]),Co={EBML:vr([26,69,223,163]),DocType:vr([66,130]),Segment:vr([24,83,128,103]),SegmentInfo:vr([21,73,169,102]),Tracks:vr([22,84,174,107]),Track:vr([174]),TrackNumber:vr([215]),DefaultDuration:vr([35,227,131]),TrackEntry:vr([174]),TrackType:vr([131]),FlagDefault:vr([136]),CodecID:vr([134]),CodecPrivate:vr([99,162]),VideoTrack:vr([224]),AudioTrack:vr([225]),Cluster:vr([31,67,182,117]),Timestamp:vr([231]),TimestampScale:vr([42,215,177]),BlockGroup:vr([160]),BlockDuration:vr([155]),Block:vr([161]),SimpleBlock:vr([163])},Io=[128,64,32,16,8,4,2,1],xo=vr([0,0,0,1]),Ao=vr([0,0,1]),Po=vr([0,0,3]),Lo={webm:vr([119,101,98,109]),matroska:vr([109,97,116,114,111,115,107,97]),flac:vr([102,76,97,67]),ogg:vr([79,103,103,83]),ac3:vr([11,119]),riff:vr([82,73,70,70]),avi:vr([65,86,73]),wav:vr([87,65,86,69]),"3gp":vr([102,116,121,112,51,103]),mp4:vr([102,116,121,112]),fmp4:vr([115,116,121,112]),mov:vr([102,116,121,112,113,116]),moov:vr([109,111,111,118]),moof:vr([109,111,111,102])},Do={aac:function(e){var t=to(e);return Tr(e,[255,16],{offset:t,mask:[255,22]})},mp3:function(e){var t=to(e);return Tr(e,[255,2],{offset:t,mask:[255,6]})},webm:function(e){e=oo(e,[Co.EBML,Co.DocType])[0];return Tr(e,Lo.webm)},mkv:function(e){e=oo(e,[Co.EBML,Co.DocType])[0];return Tr(e,Lo.matroska)},mp4:function(e){return!Do["3gp"](e)&&!Do.mov(e)&&(!(!Tr(e,Lo.mp4,{offset:4})&&!Tr(e,Lo.fmp4,{offset:4}))||(!(!Tr(e,Lo.moof,{offset:4})&&!Tr(e,Lo.moov,{offset:4}))||void 0))},mov:function(e){return Tr(e,Lo.mov,{offset:4})},"3gp":function(e){return Tr(e,Lo["3gp"],{offset:4})},ac3:function(e){var t=to(e);return Tr(e,Lo.ac3,{offset:t})},ts:function(e){if(e.length<189&&1<=e.length)return 71===e[0];for(var t=0;t+188"):function(){}}function Uo(e,t){var i,n=[];if(e&&e.length)for(i=0;i "+e.end(i));return t.join(", ")}function Ho(e){for(var t=[],i=0;iDate.now()}function eu(e){return e.excludeUntil&&e.excludeUntil===1/0}function tu(e){var t=Zo(e);return!e.disabled&&!t}function iu(e,t){return t.attributes&&t.attributes[e]}function nu(e,t){if(1===e.playlists.length)return!0;var i=t.attributes.BANDWIDTH||Number.MAX_VALUE;return 0===e.playlists.filter(function(e){return!!tu(e)&&(e.attributes.BANDWIDTH||0)n+.25*a.duration)return null;i=a}return{segment:i,estimatedStart:i.videoTimingInfo?i.videoTimingInfo.transmuxedPresentationStart:n-i.duration,type:i.videoTimingInfo?"accurate":"estimate"}}(n,t))?"estimate"===e.type?i({message:"Accurate programTime could not be determined. Please seek to e.seekTime and try again",seekTime:e.estimatedStart}):(t={mediaSeconds:n},(e=function(e,t){if(!t.dateTimeObject)return null;var i=t.videoTimingInfo.transmuxerPrependedSeconds,i=e-(t.videoTimingInfo.transmuxedPresentationStart+i);return new Date(t.dateTimeObject.getTime()+1e3*i)}(n,e.segment))&&(t.programDateTime=e.toISOString()),i(null,t)):i({message:"valid programTime was not found"}):i({message:"getProgramTime: playlist and time must be provided"})}function Iu(e){var t=e.programTime,i=e.playlist,n=e.retryCount,r=void 0===n?2:n,a=e.seekTo,s=e.pauseAfterSeek,o=void 0===s||s,u=e.tech,l=e.callback;if(!l)throw new Error("seekToProgramTime: callback must be provided");return"undefined"!=typeof t&&i&&a?i.endList||u.hasStarted_?function(e){if(!e.segments||0===e.segments.length)return!1;for(var t=0;ti||e.height>n})).filter(function(e){return e.width===h[0].width&&e.height===h[0].height}),d=p[p.length-1],p=p.filter(function(e){return e.bandwidth===d.bandwidth})[0]),a.experimentalLeastPixelDiffSelector&&(m=c.map(function(e){return e.pixelDiff=Math.abs(e.width-i)+Math.abs(e.height-n),e}),tl(m,function(e,t){return e.pixelDiff===t.pixelDiff?t.bandwidth-e.bandwidth:e.pixelDiff-t.pixelDiff}),f=m[0]);var m=f||p||e||o||l[0]||u[0];if(m&&m.playlist){u="sortedPlaylistReps";return f?u="leastPixelDiffRep":p?u="resolutionPlusOneRep":e?u="resolutionBestRep":o?u="bandwidthBestRep":l[0]&&(u="enabledPlaylistReps"),Rl("choosing "+Zu(m)+" using "+u+" with options",s),m.playlist}return Rl("could not choose a playlist with options",s),null}}function rl(e){var t=e.inbandTextTracks,i=e.metadataArray,r=e.timestampOffset,n=e.videoDuration;if(i){var a=window.WebKitDataCue||window.VTTCue,s=t.metadataTrack_;if(s&&(i.forEach(function(e){var n=e.cueTime+r;!("number"!=typeof n||window.isNaN(n)||n<0)&&n<1/0&&e.frames.forEach(function(e){var t,i=new a(n,n,e.value||e.url||e.data||"");i.frame=e,i.value=e,t=i,Object.defineProperties(t.frame,{id:{get:function(){return tr.log.warn("cue.frame.id is deprecated. Use cue.value.key instead."),t.value.key}},value:{get:function(){return tr.log.warn("cue.frame.value is deprecated. Use cue.value.data instead."),t.value.data}},privateData:{get:function(){return tr.log.warn("cue.frame.privateData is deprecated. Use cue.value.data instead."),t.value.data}}}),s.addCue(i)})}),s.cues&&s.cues.length)){for(var o=s.cues,u=[],l=0;l=e&&r.endTime<=t&&i.removeCue(r)}function sl(e){return"number"==typeof e&&isFinite(e)}function ol(e){var t=e.startOfSegment,i=e.duration,n=e.segment,r=e.part,a=e.playlist,s=a.mediaSequence,o=a.id,u=a.segments,l=e.mediaIndex,d=e.partIndex,c=e.timeline,h=(void 0===u?[]:u).length-1,p="mediaIndex/partIndex increment";return e.getMediaInfoForTime?p="getMediaInfoForTime ("+e.getMediaInfoForTime+")":e.isSyncRequest&&(p="getSyncSegmentCandidate (isSyncRequest)"),e.independent&&(p+=" with independent "+e.independent),a="number"==typeof d,u=e.segment.uri?"segment":"pre-segment",e=a?Xo({preloadSegment:n})-1:0,u+" ["+(s+l)+"/"+(s+h)+"]"+(a?" part ["+d+"/"+e+"]":"")+" segment start/end ["+n.start+" => "+n.end+"]"+(a?" part start/end ["+r.start+" => "+r.end+"]":"")+" startOfSegment ["+t+"] duration ["+i+"] timeline ["+c+"] selected by ["+p+"] playlist ["+o+"]"}function ul(e){return e+"TimingInfo"}function ll(e){var t=e.timelineChangeController,i=e.currentTimeline,n=e.segmentTimeline,r=e.loaderType,e=e.audioDisabled;if(i!==n){if("audio"===r){i=t.lastTimelineChange({type:"main"});return!i||i.to!==n}if("main"===r&&e){t=t.pendingTimelineChange({type:"audio"});return t&&t.to===n?!1:!0}}}function dl(e){var t=e.segmentDuration,e=e.maxDuration;return!!t&&Math.round(t)>e+ml}function cl(e,t){if("hls"!==t)return null;var n,r,i=(n={audioTimingInfo:e.audioTimingInfo,videoTimingInfo:e.videoTimingInfo},r=0,["video","audio"].forEach(function(e){var t,i=n[e+"TimingInfo"];i&&(e=i.start,i=i.end,"bigint"==typeof e||"bigint"==typeof i?t=window.BigInt(i)-window.BigInt(e):"number"==typeof e&&"number"==typeof i&&(t=i-e),"undefined"!=typeof t&&r=r+i)return o(e,{response:n.subarray(i,i+r),status:t.status,uri:t.uri});u.request=u.vhs_.xhr({uri:s,responseType:"arraybuffer",headers:_u({byterange:a.sidx.byterange})},o)})):this.mediaRequest_=window.setTimeout(function(){return r(!1)},0)},t.dispose=function(){this.trigger("dispose"),this.stopRequest(),this.loadedPlaylists_={},window.clearTimeout(this.minimumUpdatePeriodTimeout_),window.clearTimeout(this.mediaRequest_),window.clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=null,this.mediaRequest_=null,this.minimumUpdatePeriodTimeout_=null,this.masterPlaylistLoader_.createMupOnMedia_&&(this.off("loadedmetadata",this.masterPlaylistLoader_.createMupOnMedia_),this.masterPlaylistLoader_.createMupOnMedia_=null),this.off()},t.hasPendingRequest=function(){return this.request||this.mediaRequest_},t.stopRequest=function(){var e;this.request&&(e=this.request,this.request=null,e.onreadystatechange=null,e.abort())},t.media=function(t){var i=this;if(!t)return this.media_;if("HAVE_NOTHING"===this.state)throw new Error("Cannot switch media playlist from "+this.state);var n=this.state;if("string"==typeof t){if(!this.masterPlaylistLoader_.master.playlists[t])throw new Error("Unknown playlist URI: "+t);t=this.masterPlaylistLoader_.master.playlists[t]}var e=!this.media_||t.id!==this.media_.id;if(e&&this.loadedPlaylists_[t.id]&&this.loadedPlaylists_[t.id].endList)return this.state="HAVE_METADATA",this.media_=t,void(e&&(this.trigger("mediachanging"),this.trigger("mediachange")));e&&(this.media_&&this.trigger("mediachanging"),this.addSidxSegments_(t,n,function(e){i.haveMetadata({startingState:n,playlist:t})}))},t.haveMetadata=function(e){var t=e.startingState,e=e.playlist;this.state="HAVE_METADATA",this.loadedPlaylists_[e.id]=e,this.mediaRequest_=null,this.refreshMedia_(e.id),"HAVE_MASTER"===t?this.trigger("loadedmetadata"):this.trigger("mediachange")},t.pause=function(){this.masterPlaylistLoader_.createMupOnMedia_&&(this.off("loadedmetadata",this.masterPlaylistLoader_.createMupOnMedia_),this.masterPlaylistLoader_.createMupOnMedia_=null),this.stopRequest(),window.clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=null,this.isMaster_&&(window.clearTimeout(this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_),this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_=null),"HAVE_NOTHING"===this.state&&(this.started=!1)},t.load=function(e){var t=this;window.clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=null;var i=this.media();e?(e=i?i.targetDuration/2*1e3:5e3,this.mediaUpdateTimeout=window.setTimeout(function(){return t.load()},e)):this.started?i&&!i.endList?(this.isMaster_&&!this.minimumUpdatePeriodTimeout_&&(this.trigger("minimumUpdatePeriod"),this.updateMinimumUpdatePeriodTimeout_()),this.trigger("mediaupdatetimeout")):this.trigger("loadedplaylist"):this.start()},t.start=function(){var i=this;this.started=!0,this.isMaster_?this.requestMaster_(function(e,t){i.haveMaster_(),i.hasPendingRequest()||i.media_||i.media(i.masterPlaylistLoader_.master.playlists[0])}):this.mediaRequest_=window.setTimeout(function(){return i.haveMaster_()},0)},t.requestMaster_=function(n){var r=this;this.request=this.vhs_.xhr({uri:this.masterPlaylistLoader_.srcUrl,withCredentials:this.withCredentials},function(e,t){if(!r.requestErrored_(e,t)){var i=t.responseText!==r.masterPlaylistLoader_.masterXml_;return r.masterPlaylistLoader_.masterXml_=t.responseText,t.responseHeaders&&t.responseHeaders.date?r.masterLoaded_=Date.parse(t.responseHeaders.date):r.masterLoaded_=Date.now(),r.masterPlaylistLoader_.srcUrl=Mo(r.handleManifestRedirects,r.masterPlaylistLoader_.srcUrl,t),i?(r.handleMaster_(),void r.syncClientServerClock_(function(){return n(t,i)})):n(t,i)}"HAVE_NOTHING"===r.state&&(r.started=!1)})},t.syncClientServerClock_=function(i){var n=this,r=eo(this.masterPlaylistLoader_.masterXml_);return null===r?(this.masterPlaylistLoader_.clientOffset_=this.masterLoaded_-Date.now(),i()):"DIRECT"===r.method?(this.masterPlaylistLoader_.clientOffset_=r.value-Date.now(),i()):void(this.request=this.vhs_.xhr({uri:fl(this.masterPlaylistLoader_.srcUrl,r.value),method:r.method,withCredentials:this.withCredentials},function(e,t){if(n.request){if(e)return n.masterPlaylistLoader_.clientOffset_=n.masterLoaded_-Date.now(),i();t="HEAD"===r.method?t.responseHeaders&&t.responseHeaders.date?Date.parse(t.responseHeaders.date):n.masterLoaded_:Date.parse(t.responseText);n.masterPlaylistLoader_.clientOffset_=t-Date.now(),i()}}))},t.haveMaster_=function(){this.state="HAVE_MASTER",this.isMaster_?this.trigger("loadedplaylist"):this.media_||this.media(this.childPlaylist_)},t.handleMaster_=function(){this.mediaRequest_=null;var e,t,i,n,r=this.masterPlaylistLoader_.master,t=(a={masterXml:this.masterPlaylistLoader_.masterXml_,srcUrl:this.masterPlaylistLoader_.srcUrl,clientOffset:this.masterPlaylistLoader_.clientOffset_,sidxMapping:this.masterPlaylistLoader_.sidxMapping_,previousManifest:r},e=a.masterXml,t=a.srcUrl,i=a.clientOffset,n=a.sidxMapping,a=a.previousManifest,a=Zs(e,{manifestUri:t,clientOffset:i,sidxMapping:n,previousManifest:a}),du(a,t),a);r&&(t=function(e,t,i){for(var a=!0,s=Sl(e,{duration:t.duration,minimumUpdatePeriod:t.minimumUpdatePeriod,timelineStarts:t.timelineStarts}),n=0;n>>1,e.samplingfrequencyindex<<7|e.channelcount<<3,6,1,2]))},f=function(e){return u(T.hdlr,I[e])},p=function(e){var t=new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,0,1,95,144,e.duration>>>24&255,e.duration>>>16&255,e.duration>>>8&255,255&e.duration,85,196,0,0]);return e.samplerate&&(t[12]=e.samplerate>>>24&255,t[13]=e.samplerate>>>16&255,t[14]=e.samplerate>>>8&255,t[15]=255&e.samplerate),u(T.mdhd,t)},h=function(e){return u(T.mdia,p(e),f(e.type),a(e))},r=function(e){return u(T.mfhd,new Uint8Array([0,0,0,0,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e]))},a=function(e){return u(T.minf,"video"===e.type?u(T.vmhd,x):u(T.smhd,A),t(),g(e))},We=function(e,t){for(var i=[],n=t.length;n--;)i[n]=v(t[n]);return u.apply(null,[T.moof,r(e)].concat(i))},s=function(e){for(var t=e.length,i=[];t--;)i[t]=d(e[t]);return u.apply(null,[T.moov,l(4294967295)].concat(i).concat(o(e)))},o=function(e){for(var t=e.length,i=[];t--;)i[t]=_(e[t]);return u.apply(null,[T.mvex].concat(i))},l=function(e){e=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,0,1,95,144,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return u(T.mvhd,e)},m=function(e){for(var t,i=e.samples||[],n=new Uint8Array(4+i.length),r=0;r>>8),a.push(255&n[o].byteLength),a=a.concat(Array.prototype.slice.call(n[o]));for(o=0;o>>8),s.push(255&r[o].byteLength),s=s.concat(Array.prototype.slice.call(r[o]));return t=[T.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(65280&e.width)>>8,255&e.width,(65280&e.height)>>8,255&e.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u(T.avcC,new Uint8Array([1,e.profileIdc,e.profileCompatibility,e.levelIdc,255].concat([n.length],a,[r.length],s))),u(T.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192]))],e.sarRatio&&(i=e.sarRatio[0],e=e.sarRatio[1],t.push(u(T.pasp,new Uint8Array([(4278190080&i)>>24,(16711680&i)>>16,(65280&i)>>8,255&i,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e])))),u.apply(null,t)},N=function(e){return u(T.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,(65280&e.channelcount)>>8,255&e.channelcount,(65280&e.samplesize)>>8,255&e.samplesize,0,0,0,0,(65280&e.samplerate)>>8,255&e.samplerate,0,0]),i(e))},c=function(e){e=new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,0,(4278190080&e.duration)>>24,(16711680&e.duration)>>16,(65280&e.duration)>>8,255&e.duration,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,(65280&e.width)>>8,255&e.width,0,0,(65280&e.height)>>8,255&e.height,0,0]);return u(T.tkhd,e)},v=function(e){var t,i=u(T.tfhd,new Uint8Array([0,0,0,58,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0])),n=Math.floor(e.baseMediaDecodeTime/V),r=Math.floor(e.baseMediaDecodeTime%V),n=u(T.tfdt,new Uint8Array([1,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,r>>>24&255,r>>>16&255,r>>>8&255,255&r]));return"audio"===e.type?(t=b(e,92),u(T.traf,i,n,t)):(r=m(e),t=b(e,r.length+92),u(T.traf,i,n,t,r))},d=function(e){return e.duration=e.duration||4294967295,u(T.trak,c(e),h(e))},_=function(e){var t=new Uint8Array([0,0,0,0,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return"video"!==e.type&&(t[t.length-1]=0),u(T.trex,t)},U=function(e,t){var i=0,n=0,r=0,a=0;return e.length&&(void 0!==e[0].duration&&(i=1),void 0!==e[0].size&&(n=2),void 0!==e[0].flags&&(r=4),void 0!==e[0].compositionTimeOffset&&(a=8)),[0,0,i|n|r|a,1,(4278190080&e.length)>>>24,(16711680&e.length)>>>16,(65280&e.length)>>>8,255&e.length,(4278190080&t)>>>24,(16711680&t)>>>16,(65280&t)>>>8,255&t]},B=function(e,t){var i,n,r,a,s=e.samples||[];for(t+=20+16*s.length,t=U(s,t),(n=new Uint8Array(t.length+16*s.length)).set(t),i=t.length,a=0;a>>24,n[i++]=(16711680&r.duration)>>>16,n[i++]=(65280&r.duration)>>>8,n[i++]=255&r.duration,n[i++]=(4278190080&r.size)>>>24,n[i++]=(16711680&r.size)>>>16,n[i++]=(65280&r.size)>>>8,n[i++]=255&r.size,n[i++]=r.flags.isLeading<<2|r.flags.dependsOn,n[i++]=r.flags.isDependedOn<<6|r.flags.hasRedundancy<<4|r.flags.paddingValue<<1|r.flags.isNonSyncSample,n[i++]=61440&r.flags.degradationPriority,n[i++]=15&r.flags.degradationPriority,n[i++]=(4278190080&r.compositionTimeOffset)>>>24,n[i++]=(16711680&r.compositionTimeOffset)>>>16,n[i++]=(65280&r.compositionTimeOffset)>>>8,n[i++]=255&r.compositionTimeOffset;return u(T.trun,n)},F=function(e,t){var i,n,r,a,s=e.samples||[];for(t+=20+8*s.length,t=U(s,t),(i=new Uint8Array(t.length+8*s.length)).set(t),n=t.length,a=0;a>>24,i[n++]=(16711680&r.duration)>>>16,i[n++]=(65280&r.duration)>>>8,i[n++]=255&r.duration,i[n++]=(4278190080&r.size)>>>24,i[n++]=(16711680&r.size)>>>16,i[n++]=(65280&r.size)>>>8,i[n++]=255&r.size;return u(T.trun,i)},b=function(e,t){return("audio"===e.type?F:B)(e,t)};n=function(){return u(T.ftyp,w,S,w,E)};function W(e,t){var i={size:0,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0,degradationPriority:0,isNonSyncSample:1}};return i.dataOffset=t,i.compositionTimeOffset=e.pts-e.dts,i.duration=e.duration,i.size=4*e.length,i.size+=e.byteLength,e.keyFrame&&(i.flags.dependsOn=2,i.flags.isNonSyncSample=0),i}function G(e){for(var t=[];e--;)t.push(0);return t}function z(){var e,i;return X||(e={96e3:[ie,[227,64],G(154),[56]],88200:[ie,[231],G(170),[56]],64e3:[ie,[248,192],G(240),[56]],48e3:[ie,[255,192],G(268),[55,148,128],G(54),[112]],44100:[ie,[255,192],G(268),[55,163,128],G(84),[112]],32e3:[ie,[255,192],G(268),[55,234],G(226),[112]],24e3:[ie,[255,192],G(268),[55,255,128],G(268),[111,112],G(126),[224]],16e3:[ie,[255,192],G(268),[55,255,128],G(268),[111,255],G(269),[223,108],G(195),[1,192]],12e3:[ne,G(268),[3,127,248],G(268),[6,255,240],G(268),[13,255,224],G(268),[27,253,128],G(259),[56]],11025:[ne,G(268),[3,127,248],G(268),[6,255,240],G(268),[13,255,224],G(268),[27,255,192],G(268),[55,175,128],G(108),[112]],8e3:[ne,G(268),[3,121,16],G(47),[7]]},i=e,X=Object.keys(i).reduce(function(e,t){return e[t]=new Uint8Array(i[t].reduce(function(e,t){return e.concat(t)},[])),e},{})),X}var X,K=function(e){return u(T.mdat,e)},Y=We,Q=function(e){var t=n(),i=s(e),e=new Uint8Array(t.byteLength+i.byteLength);return e.set(t),e.set(i,t.byteLength),e},$=function(e){var t,i,n=[],r=[];for(r.byteLength=0,r.nalCount=0,r.duration=0,t=n.byteLength=0;t=i?e:(t.minSegmentDts=1/0,e.filter(function(e){return e.dts>=i&&(t.minSegmentDts=Math.min(t.minSegmentDts,e.dts),t.minSegmentPts=t.minSegmentDts,!0)}))},ge=function(e){for(var t,i=[],n=0;n=this.virtualRowCount&&"function"==typeof this.beforeRowOverflow&&this.beforeRowOverflow(e),0this.virtualRowCount;)this.rows.shift(),this.rowIdx--},Ae.prototype.isEmpty=function(){return 0===this.rows.length||1===this.rows.length&&""===this.rows[0]},Ae.prototype.addText=function(e){this.rows[this.rowIdx]+=e},Ae.prototype.backspace=function(){var e;this.isEmpty()||(e=this.rows[this.rowIdx],this.rows[this.rowIdx]=e.substr(0,e.length-1))};function Le(e,t,i){this.serviceNum=e,this.text="",this.currentWindow=new Ae(-1),this.windows=[],this.stream=i,"string"==typeof t&&this.createTextDecoder(t)}Le.prototype.init=function(e,t){this.startPts=e;for(var i=0;i<8;i++)this.windows[i]=new Ae(i),"function"==typeof t&&(this.windows[i].beforeRowOverflow=t)},Le.prototype.setCurrentWindow=function(e){this.currentWindow=this.windows[e]},Le.prototype.createTextDecoder=function(t){if("undefined"==typeof TextDecoder)this.stream.trigger("log",{level:"warn",message:"The `encoding` option is unsupported without TextDecoder support"});else try{this.textDecoder_=new TextDecoder(t)}catch(e){this.stream.trigger("log",{level:"warn",message:"TextDecoder could not be created with "+t+" encoding. "+e})}};var De=function e(t){t=t||{},e.prototype.init.call(this);var i,n=this,r=t.captionServices||{},a={};Object.keys(r).forEach(function(e){i=r[e],/^SERVICE/.test(e)&&(a[e]=i.encoding)}),this.serviceEncodings=a,this.current708Packet=null,this.services={},this.push=function(e){(3===e.type||null===n.current708Packet)&&n.new708Packet(),n.add708Bytes(e)}};De.prototype=new j,De.prototype.new708Packet=function(){null!==this.current708Packet&&this.push708Packet(),this.current708Packet={data:[],ptsVals:[]}},De.prototype.add708Bytes=function(e){var t=e.ccData,i=t>>>8,t=255&t;this.current708Packet.ptsVals.push(e.pts),this.current708Packet.data.push(i),this.current708Packet.data.push(t)},De.prototype.push708Packet=function(){var e,t=this.current708Packet,i=t.data,n=null,r=0,a=i[r++];for(t.seq=a>>6,t.sizeCode=63&a;r>5)&&0>5,t.rowLock=(16&n)>>4,t.columnLock=(8&n)>>3,t.priority=7&n,n=i[++e],t.relativePositioning=(128&n)>>7,t.anchorVertical=127&n,n=i[++e],t.anchorHorizontal=n,n=i[++e],t.anchorPoint=(240&n)>>4,t.rowCount=15&n,n=i[++e],t.columnCount=63&n,n=i[++e],t.windowStyle=(56&n)>>3,t.penStyle=7&n,t.virtualRowCount=t.rowCount+1,e},De.prototype.setWindowAttributes=function(e,t){var i=this.current708Packet.data,n=i[e],t=t.currentWindow.winAttr,n=i[++e];return t.fillOpacity=(192&n)>>6,t.fillRed=(48&n)>>4,t.fillGreen=(12&n)>>2,t.fillBlue=3&n,n=i[++e],t.borderType=(192&n)>>6,t.borderRed=(48&n)>>4,t.borderGreen=(12&n)>>2,t.borderBlue=3&n,n=i[++e],t.borderType+=(128&n)>>5,t.wordWrap=(64&n)>>6,t.printDirection=(48&n)>>4,t.scrollDirection=(12&n)>>2,t.justify=3&n,n=i[++e],t.effectSpeed=(240&n)>>4,t.effectDirection=(12&n)>>2,t.displayEffect=3&n,e},De.prototype.flushDisplayed=function(e,t){for(var i=[],n=0;n<8;n++)t.windows[n].visible&&!t.windows[n].isEmpty()&&i.push(t.windows[n].getText());t.endPts=e,t.text=i.join("\n\n"),this.pushCaption(t),t.startPts=e},De.prototype.pushCaption=function(e){""!==e.text&&(this.trigger("data",{startPts:e.startPts,endPts:e.endPts,text:e.text,stream:"cc708_"+e.serviceNum}),e.text="",e.startPts=e.endPts)},De.prototype.displayWindows=function(e,t){var i=this.current708Packet.data[++e],n=this.getPts(e);this.flushDisplayed(n,t);for(var r=0;r<8;r++)i&1<>4,t.offset=(12&n)>>2,t.penSize=3&n,n=i[++e],t.italics=(128&n)>>7,t.underline=(64&n)>>6,t.edgeType=(56&n)>>3,t.fontStyle=7&n,e},De.prototype.setPenColor=function(e,t){var i=this.current708Packet.data,n=i[e],t=t.currentWindow.penColor,n=i[++e];return t.fgOpacity=(192&n)>>6,t.fgRed=(48&n)>>4,t.fgGreen=(12&n)>>2,t.fgBlue=3&n,n=i[++e],t.bgOpacity=(192&n)>>6,t.bgRed=(48&n)>>4,t.bgGreen=(12&n)>>2,t.bgBlue=3&n,n=i[++e],t.edgeRed=(48&n)>>4,t.edgeGreen=(12&n)>>2,t.edgeBlue=3&n,e},De.prototype.setPenLocation=function(e,t){var i=this.current708Packet.data,n=i[e],r=t.currentWindow.penLoc;return t.currentWindow.pendingNewLine=!0,n=i[++e],r.row=15&n,n=i[++e],r.column=63&n,e},De.prototype.reset=function(e,t){var i=this.getPts(e);return this.flushDisplayed(i,t),this.initService(t.serviceNum,e)};function Oe(e){return null===e?"":(e=Me[e]||e,String.fromCharCode(e))}function Re(){for(var e=[],t=15;t--;)e.push("");return e}var Me={42:225,92:233,94:237,95:243,96:250,123:231,124:247,125:209,126:241,127:9608,304:174,305:176,306:189,307:191,308:8482,309:162,310:163,311:9834,312:224,313:160,314:232,315:226,316:234,317:238,318:244,319:251,544:193,545:201,546:211,547:218,548:220,549:252,550:8216,551:161,552:42,553:39,554:8212,555:169,556:8480,557:8226,558:8220,559:8221,560:192,561:194,562:199,563:200,564:202,565:203,566:235,567:206,568:207,569:239,570:212,571:217,572:249,573:219,574:171,575:187,800:195,801:227,802:205,803:204,804:236,805:210,806:242,807:213,808:245,809:123,810:125,811:92,812:94,813:95,814:124,815:126,816:196,817:228,818:214,819:246,820:223,821:165,822:164,823:9474,824:197,825:229,826:216,827:248,828:9484,829:9488,830:9492,831:9496},Ne=[4352,4384,4608,4640,5376,5408,5632,5664,5888,5920,4096,4864,4896,5120,5152],Ue=function e(t,i){e.prototype.init.call(this),this.field_=t||0,this.dataChannel_=i||0,this.name_="CC"+(1+(this.field_<<1|this.dataChannel_)),this.setConstants(),this.reset(),this.push=function(e){var t,i,n,r,a=32639&e.ccData;a!==this.lastControlCode_?(4096==(61440&a)?this.lastControlCode_=a:a!==this.PADDING_&&(this.lastControlCode_=null),t=a>>>8,i=255&a,a===this.PADDING_||(a===this.RESUME_CAPTION_LOADING_?this.mode_="popOn":a===this.END_OF_CAPTION_?(this.mode_="popOn",this.clearFormatting(e.pts),this.flushDisplayed(e.pts),r=this.displayed_,this.displayed_=this.nonDisplayed_,this.nonDisplayed_=r,this.startPts_=e.pts):a===this.ROLL_UP_2_ROWS_?(this.rollUpRows_=2,this.setRollUp(e.pts)):a===this.ROLL_UP_3_ROWS_?(this.rollUpRows_=3,this.setRollUp(e.pts)):a===this.ROLL_UP_4_ROWS_?(this.rollUpRows_=4,this.setRollUp(e.pts)):a===this.CARRIAGE_RETURN_?(this.clearFormatting(e.pts),this.flushDisplayed(e.pts),this.shiftRowsUp_(),this.startPts_=e.pts):a===this.BACKSPACE_?"popOn"===this.mode_?this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1):this.displayed_[this.row_]=this.displayed_[this.row_].slice(0,-1):a===this.ERASE_DISPLAYED_MEMORY_?(this.flushDisplayed(e.pts),this.displayed_=Re()):a===this.ERASE_NON_DISPLAYED_MEMORY_?this.nonDisplayed_=Re():a===this.RESUME_DIRECT_CAPTIONING_?("paintOn"!==this.mode_&&(this.flushDisplayed(e.pts),this.displayed_=Re()),this.mode_="paintOn",this.startPts_=e.pts):this.isSpecialCharacter(t,i)?(n=Oe((t=(3&t)<<8)|i),this[this.mode_](e.pts,n),this.column_++):this.isExtCharacter(t,i)?("popOn"===this.mode_?this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1):this.displayed_[this.row_]=this.displayed_[this.row_].slice(0,-1),n=Oe((t=(3&t)<<8)|i),this[this.mode_](e.pts,n),this.column_++):this.isMidRowCode(t,i)?(this.clearFormatting(e.pts),this[this.mode_](e.pts," "),this.column_++,14==(14&i)&&this.addFormatting(e.pts,["i"]),1==(1&i)&&this.addFormatting(e.pts,["u"])):this.isOffsetControlCode(t,i)?this.column_+=3&i:this.isPAC(t,i)?(r=Ne.indexOf(7968&a),"rollUp"===this.mode_&&(r-this.rollUpRows_+1<0&&(r=this.rollUpRows_-1),this.setRollUp(e.pts,r)),r!==this.row_&&(this.clearFormatting(e.pts),this.row_=r),1&i&&-1===this.formatting_.indexOf("u")&&this.addFormatting(e.pts,["u"]),16==(16&a)&&(this.column_=4*((14&a)>>1)),this.isColorPAC(i)&&14==(14&i)&&this.addFormatting(e.pts,["i"])):this.isNormalChar(t)&&(0===i&&(i=null),n=Oe(t),n+=Oe(i),this[this.mode_](e.pts,n),this.column_+=n.length))):this.lastControlCode_=null}};Ue.prototype=new j,Ue.prototype.flushDisplayed=function(e){var t=this.displayed_.map(function(e,t){try{return e.trim()}catch(e){return this.trigger("log",{level:"warn",message:"Skipping a malformed 608 caption at index "+t+"."}),""}},this).join("\n").replace(/^\n+|\n+$/g,"");t.length&&this.trigger("data",{startPts:this.startPts_,endPts:e,text:t,stream:this.name_})},Ue.prototype.reset=function(){this.mode_="popOn",this.topRow_=0,this.startPts_=0,this.displayed_=Re(),this.nonDisplayed_=Re(),this.lastControlCode_=null,this.column_=0,this.row_=14,this.rollUpRows_=2,this.formatting_=[]},Ue.prototype.setConstants=function(){0===this.dataChannel_?(this.BASE_=16,this.EXT_=17,this.CONTROL_=(20|this.field_)<<8,this.OFFSET_=23):1===this.dataChannel_&&(this.BASE_=24,this.EXT_=25,this.CONTROL_=(28|this.field_)<<8,this.OFFSET_=31),this.PADDING_=0,this.RESUME_CAPTION_LOADING_=32|this.CONTROL_,this.END_OF_CAPTION_=47|this.CONTROL_,this.ROLL_UP_2_ROWS_=37|this.CONTROL_,this.ROLL_UP_3_ROWS_=38|this.CONTROL_,this.ROLL_UP_4_ROWS_=39|this.CONTROL_,this.CARRIAGE_RETURN_=45|this.CONTROL_,this.RESUME_DIRECT_CAPTIONING_=41|this.CONTROL_,this.BACKSPACE_=33|this.CONTROL_,this.ERASE_DISPLAYED_MEMORY_=44|this.CONTROL_,this.ERASE_NON_DISPLAYED_MEMORY_=46|this.CONTROL_},Ue.prototype.isSpecialCharacter=function(e,t){return e===this.EXT_&&48<=t&&t<=63},Ue.prototype.isExtCharacter=function(e,t){return(e===this.EXT_+1||e===this.EXT_+2)&&32<=t&&t<=63},Ue.prototype.isMidRowCode=function(e,t){return e===this.EXT_&&32<=t&&t<=47},Ue.prototype.isOffsetControlCode=function(e,t){return e===this.OFFSET_&&33<=t&&t<=35},Ue.prototype.isPAC=function(e,t){return e>=this.BASE_&&e"},"");this[this.mode_](e,t)},Ue.prototype.clearFormatting=function(e){var t;this.formatting_.length&&(t=this.formatting_.reverse().reduce(function(e,t){return e+""},""),this.formatting_=[],this[this.mode_](e,t))},Ue.prototype.popOn=function(e,t){var i=this.nonDisplayed_[this.row_];this.nonDisplayed_[this.row_]=i+=t},Ue.prototype.rollUp=function(e,t){var i=this.displayed_[this.row_];this.displayed_[this.row_]=i+=t},Ue.prototype.shiftRowsUp_=function(){for(var e=0;e>>2,s*=4,s+=3&a[7],o.timeStamp=s,void 0===t.pts&&void 0===t.dts&&(t.pts=o.timeStamp,t.dts=o.timeStamp),this.trigger("timestamp",o))),t.frames.push(o),i+=10,(i+=n)>>4&&(i+=e[i]+1),0===t.pid)t.type="pat",n(e.subarray(i),t),this.trigger("data",t);else if(t.pid===this.pmtPid)for(t.type="pmt",n(e.subarray(i),t),this.trigger("data",t);this.packetsWaitingForPmt.length;)this.processPes_.apply(this,this.packetsWaitingForPmt.shift());else void 0===this.programMapTable?this.packetsWaitingForPmt.push([e,i,t]):this.processPes_(e,i,t)},this.processPes_=function(e,t,i){i.pid===this.programMapTable.video?i.streamType=je.H264_STREAM_TYPE:i.pid===this.programMapTable.audio?i.streamType=je.ADTS_STREAM_TYPE:i.streamType=this.programMapTable["timed-metadata"][i.pid],i.type="pes",i.data=e.subarray(t),this.trigger("data",i)}}).prototype=new j,Xe.STREAM_TYPES={h264:27,adts:15},(Ke=function(){function n(e,t,i){var n,r,a,s,o=new Uint8Array(e.size),u={type:t},l=0,d=0;if(e.data.length&&!(e.size<9)){for(u.trackId=e.data[0].pid,l=0;l>>3,a.pts*=4,a.pts+=(6&r[13])>>>1,a.dts=a.pts,64&s&&(a.dts=(14&r[14])<<27|(255&r[15])<<20|(254&r[16])<<12|(255&r[17])<<5|(254&r[18])>>>3,a.dts*=4,a.dts+=(6&r[18])>>>1)),a.data=r.subarray(9+r[8])),t="video"===t||u.packetLength<=e.size,(i||t)&&(e.size=0,e.data.length=0),t&&c.trigger("data",u)}}var t,c=this,r=!1,a={data:[],size:0},s={data:[],size:0},o={data:[],size:0};Ke.prototype.init.call(this),this.push=function(i){({pat:function(){},pes:function(){var e,t;switch(i.streamType){case je.H264_STREAM_TYPE:e=a,t="video";break;case je.ADTS_STREAM_TYPE:e=s,t="audio";break;case je.METADATA_STREAM_TYPE:e=o,t="timed-metadata";break;default:return}i.payloadUnitStartIndicator&&n(e,t,!0),e.data.push(i),e.size+=i.data.byteLength},pmt:function(){var e={type:"metadata",tracks:[]};null!==(t=i.programMapTable).video&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.video,codec:"avc",type:"video"}),null!==t.audio&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.audio,codec:"adts",type:"audio"}),r=!0,c.trigger("data",e)}})[i.type]()},this.reset=function(){a.size=0,a.data.length=0,s.size=0,s.data.length=0,this.trigger("reset")},this.flushStreams_=function(){n(a,"video"),n(s,"audio"),n(o,"timed-metadata")},this.flush=function(){var e;!r&&t&&(e={type:"metadata",tracks:[]},null!==t.video&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.video,codec:"avc",type:"video"}),null!==t.audio&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.audio,codec:"adts",type:"audio"}),c.trigger("data",e)),r=!1,this.flushStreams_(),this.trigger("done")}}).prototype=new j;var Qe,$e={PAT_PID:0,MP2T_PACKET_LENGTH:188,TransportPacketStream:Ye,TransportParseStream:Xe,ElementaryStream:Ke,TimestampRolloverStream:We,CaptionStream:Fe.CaptionStream,Cea608Stream:Fe.Cea608Stream,Cea708Stream:Fe.Cea708Stream,MetadataStream:e};for(Qe in je)je.hasOwnProperty(Qe)&&($e[Qe]=je[Qe]);var Je=$e,Ze=ue,et=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],tt=function(u){var l,d=0;tt.prototype.init.call(this),this.skipWarn_=function(e,t){this.trigger("log",{level:"warn",message:"adts skiping bytes "+e+" to "+t+" in frame "+d+" outside syncword"})},this.push=function(e){var t,i,n,r,a,s,o=0;if(u||(d=0),"audio"===e.type){for(l&&l.length?(n=l,(l=new Uint8Array(n.byteLength+e.data.byteLength)).set(n),l.set(e.data,n.byteLength)):l=e.data;o+7>5,a=(r=1024*(1+(3&l[o+6])))*Ze/et[(60&l[o+2])>>>2],l.byteLength-o>>6&3),channelcount:(1&l[o+2])<<2|(192&l[o+3])>>>6,samplerate:et[(60&l[o+2])>>>2],samplingfrequencyindex:(60&l[o+2])>>>2,samplesize:16,data:l.subarray(o+7+i,o+t)}),d++,o+=t}else"number"!=typeof s&&(s=o),o++;"number"==typeof s&&(this.skipWarn_(s,o),s=null),l=l.subarray(o)}},this.flush=function(){d=0,this.trigger("done")},this.reset=function(){l=void 0,this.trigger("reset")},this.endTimeline=function(){l=void 0,this.trigger("endedtimeline")}};tt.prototype=new j;var it,nt,rt=tt,at=function(n){var r=n.byteLength,a=0,s=0;this.length=function(){return 8*r},this.bitsAvailable=function(){return 8*r+s},this.loadWord=function(){var e=n.byteLength-r,t=new Uint8Array(4),i=Math.min(4,r);if(0===i)throw new Error("no bytes available");t.set(n.subarray(e,e+i)),a=new DataView(t.buffer).getUint32(0),s=8*i,r-=i},this.skipBits=function(e){var t;e>>32-t;return 0<(s-=t)?a<<=t:0>>e))return a<<=e,s-=e,e;return this.loadWord(),e+this.skipLeadingZeros()},this.skipUnsignedExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.skipExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.readUnsignedExpGolomb=function(){var e=this.skipLeadingZeros();return this.readBits(e+1)-1},this.readExpGolomb=function(){var e=this.readUnsignedExpGolomb();return 1&e?1+e>>>1:-1*(e>>>1)},this.readBoolean=function(){return 1===this.readBits(1)},this.readUnsignedByte=function(){return this.readBits(8)},this.loadWord()},st=function(){var n,r,a=0;st.prototype.init.call(this),this.push=function(e){for(var t,i=(r=r?((t=new Uint8Array(r.byteLength+e.data.byteLength)).set(r),t.set(e.data,r.byteLength),t):e.data).byteLength;a>4?i+20:i+10}function ut(e,t){return e.length-t<10||e[t]!=="I".charCodeAt(0)||e[t+1]!=="D".charCodeAt(0)||e[t+2]!=="3".charCodeAt(0)?t:ut(e,t+=ot(e,t))}function lt(e){return e[0]<<21|e[1]<<14|e[2]<<7|e[3]}var e={H264Stream:it,NalByteStream:st},dt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],ct={isLikelyAacData:function(e){var t=ut(e,0);return e.length>=t+2&&255==(255&e[t])&&240==(240&e[t+1])&&16==(22&e[t+1])},parseId3TagSize:ot,parseAdtsSize:function(e,t){var i=(224&e[t+5])>>5,n=e[t+4]<<3;return 6144&e[t+3]|n|i},parseType:function(e,t){return e[t]==="I".charCodeAt(0)&&e[t+1]==="D".charCodeAt(0)&&e[t+2]==="3".charCodeAt(0)?"timed-metadata":!0&e[t]&&240==(240&e[t+1])?"audio":null},parseSampleRate:function(e){for(var t=0;t+5>>2];t++}return null},parseAacTimestamp:function(e){var t,i=10;64&e[5]&&(i+=4,i+=lt(e.subarray(10,14)));do{if((t=lt(e.subarray(i+4,i+8)))<1)return null;if("PRIV"===String.fromCharCode(e[i],e[i+1],e[i+2],e[i+3]))for(var n=e.subarray(i+10,i+t+10),r=0;r>>2;return s*=4,s+=3&a[7]}}while(i+=10,(i+=t)a.length)break;t={type:"audio",data:a.subarray(r,r+n),pts:s,dts:s},this.trigger("data",t),r+=n}else{if(a.length-r<10)break;if(r+(n=ct.parseId3TagSize(a,r))>a.length)break;t={type:"timed-metadata",data:a.subarray(r,r+n)},this.trigger("data",t),r+=n}e=a.length-r,a=0i.pts?u++:(t++,a-=n.byteLength,s-=n.nalCount,o-=n.duration);return 0===t?e:t===e.length?null:((r=e.slice(t)).byteLength=a,r.duration=o,r.nalCount=s,r.pts=r[0].pts,r.dts=r[0].dts,r)},this.alignGopsAtEnd_=function(e){for(var t,i,n=l.length-1,r=e.length-1,a=null,s=!1;0<=n&&0<=r;){if(t=l[n],i=e[r],t.pts===i.pts){s=!0;break}t.pts>i.pts?n--:(n===l.length-1&&(a=r),r--)}if(!s&&null===a)return null;if(0===(u=s?r:a))return e;var o=e.slice(u),u=o.reduce(function(e,t){return e.byteLength+=t.byteLength,e.duration+=t.duration,e.nalCount+=t.nalCount,e},{byteLength:0,duration:0,nalCount:0});return o.byteLength=u.byteLength,o.duration=u.duration,o.nalCount=u.nalCount,o.pts=o[0].pts,o.dts=o[0].dts,o},this.alignGopsWith=function(e){l=e}}).prototype=new j,(_t=function(e,t){this.numberOfTracks=0,this.metadataStream=t,"undefined"!=typeof(e=e||{}).remux?this.remuxTracks=!!e.remux:this.remuxTracks=!0,"boolean"==typeof e.keepOriginalTimestamps?this.keepOriginalTimestamps=e.keepOriginalTimestamps:this.keepOriginalTimestamps=!1,this.pendingTracks=[],this.videoTrack=null,this.pendingBoxes=[],this.pendingCaptions=[],this.pendingMetadata=[],this.pendingBytes=0,this.emittedTracks=0,_t.prototype.init.call(this),this.push=function(e){return e.text?this.pendingCaptions.push(e):e.frames?this.pendingMetadata.push(e):(this.pendingTracks.push(e.track),this.pendingBytes+=e.boxes.byteLength,"video"===e.track.type&&(this.videoTrack=e.track,this.pendingBoxes.push(e.boxes)),void("audio"===e.track.type&&(this.audioTrack=e.track,this.pendingBoxes.unshift(e.boxes))))}}).prototype=new j,_t.prototype.flush=function(e){var t,i,n,r=0,a={captions:[],captionStreams:{},metadata:[],info:{}},s=0;if(this.pendingTracks.length=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0))}if(this.videoTrack?(s=this.videoTrack.timelineStartInfo.pts,wt.forEach(function(e){a.info[e]=this.videoTrack[e]},this)):this.audioTrack&&(s=this.audioTrack.timelineStartInfo.pts,Tt.forEach(function(e){a.info[e]=this.audioTrack[e]},this)),this.videoTrack||this.audioTrack){for(1===this.pendingTracks.length?a.type=this.pendingTracks[0].type:a.type="combined",this.emittedTracks+=this.pendingTracks.length,e=Q(this.pendingTracks),a.initSegment=new Uint8Array(e.byteLength),a.initSegment.set(e),a.data=new Uint8Array(this.pendingBytes),n=0;n=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0)},_t.prototype.setRemux=function(e){this.remuxTracks=e},(vt=function(n){var r,a,s=this,i=!0;vt.prototype.init.call(this),this.baseMediaDecodeTime=(n=n||{}).baseMediaDecodeTime||0,this.transmuxPipeline_={},this.setupAacPipeline=function(){var t={};(this.transmuxPipeline_=t).type="aac",t.metadataStream=new Je.MetadataStream,t.aacStream=new bt,t.audioTimestampRolloverStream=new Je.TimestampRolloverStream("audio"),t.timedMetadataTimestampRolloverStream=new Je.TimestampRolloverStream("timed-metadata"),t.adtsStream=new rt,t.coalesceStream=new _t(n,t.metadataStream),t.headOfPipeline=t.aacStream,t.aacStream.pipe(t.audioTimestampRolloverStream).pipe(t.adtsStream),t.aacStream.pipe(t.timedMetadataTimestampRolloverStream).pipe(t.metadataStream).pipe(t.coalesceStream),t.metadataStream.on("timestamp",function(e){t.aacStream.setTimestamp(e.timeStamp)}),t.aacStream.on("data",function(e){"timed-metadata"!==e.type&&"audio"!==e.type||t.audioSegmentStream||(a=a||{timelineStartInfo:{baseMediaDecodeTime:s.baseMediaDecodeTime},codec:"adts",type:"audio"},t.coalesceStream.numberOfTracks++,t.audioSegmentStream=new Ct(a,n),t.audioSegmentStream.on("log",s.getLogTrigger_("audioSegmentStream")),t.audioSegmentStream.on("timingInfo",s.trigger.bind(s,"audioTimingInfo")),t.adtsStream.pipe(t.audioSegmentStream).pipe(t.coalesceStream),s.trigger("trackinfo",{hasAudio:!!a,hasVideo:!!r}))}),t.coalesceStream.on("data",this.trigger.bind(this,"data")),t.coalesceStream.on("done",this.trigger.bind(this,"done")),ft(this,t)},this.setupTsPipeline=function(){var i={};(this.transmuxPipeline_=i).type="ts",i.metadataStream=new Je.MetadataStream,i.packetStream=new Je.TransportPacketStream,i.parseStream=new Je.TransportParseStream,i.elementaryStream=new Je.ElementaryStream,i.timestampRolloverStream=new Je.TimestampRolloverStream,i.adtsStream=new rt,i.h264Stream=new St,i.captionStream=new Je.CaptionStream(n),i.coalesceStream=new _t(n,i.metadataStream),i.headOfPipeline=i.packetStream,i.packetStream.pipe(i.parseStream).pipe(i.elementaryStream).pipe(i.timestampRolloverStream),i.timestampRolloverStream.pipe(i.h264Stream),i.timestampRolloverStream.pipe(i.adtsStream),i.timestampRolloverStream.pipe(i.metadataStream).pipe(i.coalesceStream),i.h264Stream.pipe(i.captionStream).pipe(i.coalesceStream),i.elementaryStream.on("data",function(e){var t;if("metadata"===e.type){for(t=e.tracks.length;t--;)r||"video"!==e.tracks[t].type?a||"audio"!==e.tracks[t].type||((a=e.tracks[t]).timelineStartInfo.baseMediaDecodeTime=s.baseMediaDecodeTime):(r=e.tracks[t]).timelineStartInfo.baseMediaDecodeTime=s.baseMediaDecodeTime;r&&!i.videoSegmentStream&&(i.coalesceStream.numberOfTracks++,i.videoSegmentStream=new yt(r,n),i.videoSegmentStream.on("log",s.getLogTrigger_("videoSegmentStream")),i.videoSegmentStream.on("timelineStartInfo",function(e){a&&!n.keepOriginalTimestamps&&(a.timelineStartInfo=e,i.audioSegmentStream.setEarliestDts(e.dts-s.baseMediaDecodeTime))}),i.videoSegmentStream.on("processedGopsInfo",s.trigger.bind(s,"gopInfo")),i.videoSegmentStream.on("segmentTimingInfo",s.trigger.bind(s,"videoSegmentTimingInfo")),i.videoSegmentStream.on("baseMediaDecodeTime",function(e){a&&i.audioSegmentStream.setVideoBaseMediaDecodeTime(e)}),i.videoSegmentStream.on("timingInfo",s.trigger.bind(s,"videoTimingInfo")),i.h264Stream.pipe(i.videoSegmentStream).pipe(i.coalesceStream)),a&&!i.audioSegmentStream&&(i.coalesceStream.numberOfTracks++,i.audioSegmentStream=new Ct(a,n),i.audioSegmentStream.on("log",s.getLogTrigger_("audioSegmentStream")),i.audioSegmentStream.on("timingInfo",s.trigger.bind(s,"audioTimingInfo")),i.audioSegmentStream.on("segmentTimingInfo",s.trigger.bind(s,"audioSegmentTimingInfo")),i.adtsStream.pipe(i.audioSegmentStream).pipe(i.coalesceStream)),s.trigger("trackinfo",{hasAudio:!!a,hasVideo:!!r})}}),i.coalesceStream.on("data",this.trigger.bind(this,"data")),i.coalesceStream.on("id3Frame",function(e){e.dispatchType=i.metadataStream.dispatchType,s.trigger("id3Frame",e)}),i.coalesceStream.on("caption",this.trigger.bind(this,"caption")),i.coalesceStream.on("done",this.trigger.bind(this,"done")),ft(this,i)},this.setBaseMediaDecodeTime=function(e){var t=this.transmuxPipeline_;n.keepOriginalTimestamps||(this.baseMediaDecodeTime=e),a&&(a.timelineStartInfo.dts=void 0,a.timelineStartInfo.pts=void 0,_e(a),t.audioTimestampRolloverStream&&t.audioTimestampRolloverStream.discontinuity()),r&&(t.videoSegmentStream&&(t.videoSegmentStream.gopCache_=[]),r.timelineStartInfo.dts=void 0,r.timelineStartInfo.pts=void 0,_e(r),t.captionStream.reset()),t.timestampRolloverStream&&t.timestampRolloverStream.discontinuity()},this.setAudioAppendStart=function(e){a&&this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(e)},this.setRemux=function(e){var t=this.transmuxPipeline_;n.remux=e,t&&t.coalesceStream&&t.coalesceStream.setRemux(e)},this.alignGopsWith=function(e){r&&this.transmuxPipeline_.videoSegmentStream&&this.transmuxPipeline_.videoSegmentStream.alignGopsWith(e)},this.getLogTrigger_=function(t){var i=this;return function(e){e.stream=t,i.trigger("log",e)}},this.push=function(e){var t;i&&((t=Et(e))&&"aac"!==this.transmuxPipeline_.type?this.setupAacPipeline():t||"ts"===this.transmuxPipeline_.type||this.setupTsPipeline(),i=!1),this.transmuxPipeline_.headOfPipeline.push(e)},this.flush=function(){i=!0,this.transmuxPipeline_.headOfPipeline.flush()},this.endTimeline=function(){this.transmuxPipeline_.headOfPipeline.endTimeline()},this.reset=function(){this.transmuxPipeline_.headOfPipeline&&this.transmuxPipeline_.headOfPipeline.reset()},this.resetCaptions=function(){this.transmuxPipeline_.captionStream&&this.transmuxPipeline_.captionStream.reset()}}).prototype=new j;function It(e,d){var i=Mt(e,["moof","traf"]),e=Mt(e,["mdat"]),c={},n=[];return e.forEach(function(e,t){t=i[t];n.push({mdat:e,traf:t})}),n.forEach(function(e){var t,i,n,r,a,s=e.mdat,o=e.traf,u=Mt(o,["tfhd"]),l=Ht(u[0]),e=l.trackId,u=Mt(o,["tfdt"]),u=0>>4&&(t+=e[4]+1),t}function Lt(e){switch(e){case 5:return"slice_layer_without_partitioning_rbsp_idr";case 6:return"sei_rbsp";case 7:return"seq_parameter_set_rbsp";case 8:return"pic_parameter_set_rbsp";case 9:return"access_unit_delimiter_rbsp";default:return null}}var Dt={Transmuxer:vt,VideoSegmentStream:yt,AudioSegmentStream:Ct,AUDIO_PROPERTIES:Tt,VIDEO_PROPERTIES:wt,generateSegmentTimingInfo:gt},e=function(e){return e>>>0},Ot=function(e){var t="";return t+=String.fromCharCode(e[0]),t+=String.fromCharCode(e[1]),t+=String.fromCharCode(e[2]),t+=String.fromCharCode(e[3])},Rt=e,Mt=function e(t,i){var n,r,a,s=[];if(!i.length)return null;for(n=0;n>>2,dependsOn:3&e[0],isDependedOn:(192&e[1])>>>6,hasRedundancy:(48&e[1])>>>4,paddingValue:(14&e[1])>>>1,isNonSyncSample:1&e[1],degradationPriority:e[2]<<8|e[3]}},jt=function(e){var t,i={version:e[0],flags:new Uint8Array(e.subarray(1,4)),samples:[]},n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=1&i.flags[2],a=4&i.flags[2],s=1&i.flags[1],o=2&i.flags[1],u=4&i.flags[1],l=8&i.flags[1],d=n.getUint32(4),c=8;for(r&&(i.dataOffset=n.getInt32(c),c+=4),a&&d&&(t={flags:Ft(e.subarray(c,c+4))},c+=4,s&&(t.duration=n.getUint32(c),c+=4),o&&(t.size=n.getUint32(c),c+=4),l&&(1===i.version?t.compositionTimeOffset=n.getInt32(c):t.compositionTimeOffset=n.getUint32(c),c+=4),i.samples.push(t),d--);d--;)t={},s&&(t.duration=n.getUint32(c),c+=4),o&&(t.size=n.getUint32(c),c+=4),u&&(t.flags=Ft(e.subarray(c,c+4)),c+=4),l&&(1===i.version?t.compositionTimeOffset=n.getInt32(c):t.compositionTimeOffset=n.getUint32(c),c+=4),i.samples.push(t);return i},Ht=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength),i={version:e[0],flags:new Uint8Array(e.subarray(1,4)),trackId:t.getUint32(4)},n=1&i.flags[2],r=2&i.flags[2],a=8&i.flags[2],s=16&i.flags[2],o=32&i.flags[2],u=65536&i.flags[0],l=131072&i.flags[0],e=8;return n&&(e+=4,i.baseDataOffset=t.getUint32(12),e+=4),r&&(i.sampleDescriptionIndex=t.getUint32(e),e+=4),a&&(i.defaultSampleDuration=t.getUint32(e),e+=4),s&&(i.defaultSampleSize=t.getUint32(e),e+=4),o&&(i.defaultSampleFlags=t.getUint32(e)),u&&(i.durationIsEmpty=!0),!n&&l&&(i.baseDataOffsetIsMoof=!0),i},j="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},j="undefined"!=typeof window?window:"undefined"!=typeof j?j:"undefined"!=typeof self?self:{},qt=j,Vt=ke,Wt=Fe.CaptionStream,Gt=function(){var t,r,a,s,o,i,n=!1;this.isInitialized=function(){return n},this.init=function(e){t=new Wt,n=!0,i=!!e&&e.isPartial,t.on("data",function(e){e.startTime=e.startPts/s,e.endTime=e.endPts/s,o.captions.push(e),o.captionStreams[e.stream]=!0}),t.on("log",function(e){o.logs.push(e)})},this.isNewInit=function(e,t){return!(e&&0===e.length||t&&"object"==typeof t&&0===Object.keys(t).length)&&(a!==e[0]||s!==t[a])},this.parse=function(e,t,i){if(!this.isInitialized())return null;if(!t||!i)return null;if(this.isNewInit(t,i))a=t[0],s=i[a];else if(null===a||!s)return r.push(e),null;for(;0>>2&63).replace(/^0/,"")):t.codec="mp4a.40.2"):t.codec=t.codec.toLowerCase()));e=Mt(e,["mdia","mdhd"])[0];e&&(t.timescale=Yt(e)),s.push(t)}),s},Qt=ke,$t=q,Jt=Ie,Zt={};Zt.ts={parseType:function(e,t){e=xt(e);return 0===e?"pat":e===t?"pmt":t?"pes":null},parsePat:function(e){var t=At(e),i=4+Pt(e);return t&&(i+=e[i]+1),(31&e[i+10])<<8|e[i+11]},parsePmt:function(e){var t={},i=At(e),n=4+Pt(e);if(i&&(n+=e[n]+1),1&e[n+5]){for(var r=3+((15&e[n+1])<<8|e[n+2])-4,a=12+((15&e[n+10])<<8|e[n+11]);a=e.byteLength)return null;var i=null,n=e[t+7];return 192&n&&((i={}).pts=(14&e[t+9])<<27|(255&e[t+10])<<20|(254&e[t+11])<<12|(255&e[t+12])<<5|(254&e[t+13])>>>3,i.pts*=4,i.pts+=(6&e[t+13])>>>1,i.dts=i.pts,64&n&&(i.dts=(14&e[t+14])<<27|(255&e[t+15])<<20|(254&e[t+16])<<12|(255&e[t+17])<<5|(254&e[t+18])>>>3,i.dts*=4,i.dts+=(6&e[t+18])>>>1)),i},videoPacketContainsKeyFrame:function(e){for(var t=4+Pt(e),i=e.subarray(t),n=0,r=0,a=!1;re.length){i=!0;break}null===a&&(t=e.subarray(o,o+s),a=Zt.aac.parseAacTimestamp(t)),o+=s;break;case"audio":if(e.length-o<7){i=!0;break}if((s=Zt.aac.parseAdtsSize(e,o))>e.length){i=!0;break}null===r&&(t=e.subarray(o,o+s),r=Zt.aac.parseSampleRate(t)),n++,o+=s;break;default:o++}if(i)return null}if(null===r||null===a)return null;var u=ii/r;return{audio:[{type:"audio",dts:a,pts:a},{type:"audio",dts:a+1024*n*u,pts:a+1024*n*u}]}}:ti)(e);return r&&(r.audio||r.video)?(e=t,(t=r).audio&&t.audio.length&&("undefined"!=typeof(i=e)&&!isNaN(i)||(i=t.audio[0].dts),t.audio.forEach(function(e){e.dts=Jt(e.dts,i),e.pts=Jt(e.pts,i),e.dtsTime=e.dts/ii,e.ptsTime=e.pts/ii})),t.video&&t.video.length&&("undefined"!=typeof(n=e)&&!isNaN(n)||(n=t.video[0].dts),t.video.forEach(function(e){e.dts=Jt(e.dts,n),e.pts=Jt(e.pts,n),e.dtsTime=e.dts/ii,e.ptsTime=e.pts/ii}),t.firstKeyFrame&&((t=t.firstKeyFrame).dts=Jt(t.dts,n),t.pts=Jt(t.pts,n),t.dtsTime=t.dts/ii,t.ptsTime=t.pts/ii)),r):null},ri=function(){function e(e,t){this.options=t||{},this.self=e,this.init()}var t=e.prototype;return t.init=function(){var i,e;this.transmuxer&&this.transmuxer.dispose(),this.transmuxer=new Dt.Transmuxer(this.options),i=this.self,(e=this.transmuxer).on("data",function(e){var t=e.initSegment;e.initSegment={data:t.buffer,byteOffset:t.byteOffset,byteLength:t.byteLength};t=e.data;e.data=t.buffer,i.postMessage({action:"data",segment:e,byteOffset:t.byteOffset,byteLength:t.byteLength},[e.data])}),e.on("done",function(e){i.postMessage({action:"done"})}),e.on("gopInfo",function(e){i.postMessage({action:"gopInfo",gopInfo:e})}),e.on("videoSegmentTimingInfo",function(e){var t={start:{decode:de(e.start.dts),presentation:de(e.start.pts)},end:{decode:de(e.end.dts),presentation:de(e.end.pts)},baseMediaDecodeTime:de(e.baseMediaDecodeTime)};e.prependedContentDuration&&(t.prependedContentDuration=de(e.prependedContentDuration)),i.postMessage({action:"videoSegmentTimingInfo",videoSegmentTimingInfo:t})}),e.on("audioSegmentTimingInfo",function(e){var t={start:{decode:de(e.start.dts),presentation:de(e.start.pts)},end:{decode:de(e.end.dts),presentation:de(e.end.pts)},baseMediaDecodeTime:de(e.baseMediaDecodeTime)};e.prependedContentDuration&&(t.prependedContentDuration=de(e.prependedContentDuration)),i.postMessage({action:"audioSegmentTimingInfo",audioSegmentTimingInfo:t})}),e.on("id3Frame",function(e){i.postMessage({action:"id3Frame",id3Frame:e})}),e.on("caption",function(e){i.postMessage({action:"caption",caption:e})}),e.on("trackinfo",function(e){i.postMessage({action:"trackinfo",trackInfo:e})}),e.on("audioTimingInfo",function(e){i.postMessage({action:"audioTimingInfo",audioTimingInfo:{start:de(e.start),end:de(e.end)}})}),e.on("videoTimingInfo",function(e){i.postMessage({action:"videoTimingInfo",videoTimingInfo:{start:de(e.start),end:de(e.end)}})}),e.on("log",function(e){i.postMessage({action:"log",log:e})})},t.pushMp4Captions=function(e){this.captionParser||(this.captionParser=new Gt,this.captionParser.init());var t=new Uint8Array(e.data,e.byteOffset,e.byteLength),e=this.captionParser.parse(t,e.trackIds,e.timescales);this.self.postMessage({action:"mp4Captions",captions:e&&e.captions||[],logs:e&&e.logs||[],data:t.buffer},[t.buffer])},t.probeMp4StartTime=function(e){var t=e.timescales,e=e.data,t=Qt(t,e);this.self.postMessage({action:"probeMp4StartTime",startTime:t,data:e},[e.buffer])},t.probeMp4Tracks=function(e){var t=e.data,e=$t(t);this.self.postMessage({action:"probeMp4Tracks",tracks:e,data:t},[t.buffer])},t.probeTs=function(e){var t=e.data,i=e.baseStartTime,e="number"!=typeof i||isNaN(i)?void 0:i*ue,i=ni(t,e),e=null;i&&((e={hasVideo:i.video&&2===i.video.length||!1,hasAudio:i.audio&&2===i.audio.length||!1}).hasVideo&&(e.videoStart=i.video[0].ptsTime),e.hasAudio&&(e.audioStart=i.audio[0].ptsTime)),this.self.postMessage({action:"probeTs",result:e,data:t},[t.buffer])},t.clearAllMp4Captions=function(){this.captionParser&&this.captionParser.clearAllCaptions()},t.clearParsedMp4Captions=function(){this.captionParser&&this.captionParser.clearParsedCaptions()},t.push=function(e){e=new Uint8Array(e.data,e.byteOffset,e.byteLength);this.transmuxer.push(e)},t.reset=function(){this.transmuxer.reset()},t.setTimestampOffset=function(e){e=e.timestampOffset||0;this.transmuxer.setBaseMediaDecodeTime(Math.round(le(e)))},t.setAudioAppendStart=function(e){this.transmuxer.setAudioAppendStart(Math.ceil(le(e.appendStart)))},t.setRemux=function(e){this.transmuxer.setRemux(e.remux)},t.flush=function(e){this.transmuxer.flush(),self.postMessage({action:"done",type:"transmuxed"})},t.endTimeline=function(){this.transmuxer.endTimeline(),self.postMessage({action:"endedtimeline",type:"transmuxed"})},t.alignGopsWith=function(e){this.transmuxer.alignGopsWith(e.gopsToAlignWith.slice())},e}();self.onmessage=function(e){"init"===e.data.action&&e.data.options?this.messageHandlers=new ri(self,e.data.options):(this.messageHandlers||(this.messageHandlers=new ri(self)),e.data&&e.data.action&&"init"!==e.data.action&&this.messageHandlers[e.data.action]&&this.messageHandlers[e.data.action](e.data))}}))),Il=function(e){e.currentTransmux=null,e.transmuxQueue.length&&(e.currentTransmux=e.transmuxQueue.shift(),"function"==typeof e.currentTransmux?e.currentTransmux():Ou(e.currentTransmux))},xl=function(e){Mu("reset",e)},Al=function(e){var t=new Cl;t.currentTransmux=null,t.transmuxQueue=[];var i=t.terminate;return t.terminate=function(){return t.currentTransmux=null,t.transmuxQueue.length=0,i.call(t)},t.postMessage({action:"init",options:e}),t},Pl=2,Ll=-101,Dl=-102,Ol=No("CodecUtils"),Rl=No("PlaylistSelector"),rr=function(){var e=this.useDevicePixelRatio&&window.devicePixelRatio||1;return nl(this.playlists.master,this.systemBandwidth,parseInt(el(this.tech_.el(),"width"),10)*e,parseInt(el(this.tech_.el(),"height"),10)*e,this.limitRenditionByPlayerDimensions,this.masterPlaylistController_)},Ml=function(n){function e(e,t){var i=n.call(this)||this;if(!e)throw new TypeError("Initialization settings are required");if("function"!=typeof e.currentTime)throw new TypeError("No currentTime getter specified");if(!e.mediaSource)throw new TypeError("No MediaSource specified");return i.bandwidth=e.bandwidth,i.throughput={rate:0,count:0},i.roundTrip=NaN,i.resetStats_(),i.mediaIndex=null,i.partIndex=null,i.hasPlayed_=e.hasPlayed,i.currentTime_=e.currentTime,i.seekable_=e.seekable,i.seeking_=e.seeking,i.duration_=e.duration,i.mediaSource_=e.mediaSource,i.vhs_=e.vhs,i.loaderType_=e.loaderType,i.currentMediaInfo_=void 0,i.startingMediaInfo_=void 0,i.segmentMetadataTrack_=e.segmentMetadataTrack,i.goalBufferLength_=e.goalBufferLength,i.sourceType_=e.sourceType,i.sourceUpdater_=e.sourceUpdater,i.inbandTextTracks_=e.inbandTextTracks,i.state_="INIT",i.timelineChangeController_=e.timelineChangeController,i.shouldSaveSegmentTimingInfo_=!0,i.parse708captions_=e.parse708captions,i.useDtsForTimestampOffset_=e.useDtsForTimestampOffset,i.captionServices_=e.captionServices,i.experimentalExactManifestTimings=e.experimentalExactManifestTimings,i.checkBufferTimeout_=null,i.error_=void 0,i.currentTimeline_=-1,i.pendingSegment_=null,i.xhrOptions_=null,i.pendingSegments_=[],i.audioDisabled_=!1,i.isPendingTimestampOffset_=!1,i.gopBuffer_=[],i.timeMapping_=0,i.safeAppend_=11<=tr.browser.IE_VERSION,i.appendInitSegment_={audio:!0,video:!0},i.playlistOfLastInitSegment_={audio:null,video:null},i.callQueue_=[],i.loadQueue_=[],i.metadataQueue_={id3:[],caption:[]},i.waitingOnRemove_=!1,i.quotaExceededErrorRetryTimeout_=null,i.activeInitSegmentId_=null,i.initSegments_={},i.cacheEncryptionKeys_=e.cacheEncryptionKeys,i.keyCache_={},i.decrypter_=e.decrypter,i.syncController_=e.syncController,i.syncPoint_={segmentIndex:0,time:0},i.transmuxer_=i.createTransmuxer_(),i.triggerSyncInfoUpdate_=function(){return i.trigger("syncinfoupdate")},i.syncController_.on("syncinfoupdate",i.triggerSyncInfoUpdate_),i.mediaSource_.addEventListener("sourceopen",function(){i.isEndOfStream_()||(i.ended_=!1)}),i.fetchAtBuffer_=!1,i.logger_=No("SegmentLoader["+i.loaderType_+"]"),Object.defineProperty(ft(i),"state",{get:function(){return this.state_},set:function(e){e!==this.state_&&(this.logger_(this.state_+" -> "+e),this.state_=e,this.trigger("statechange"))}}),i.sourceUpdater_.on("ready",function(){i.hasEnoughInfoToAppend_()&&i.processCallQueue_()}),"main"===i.loaderType_&&i.timelineChangeController_.on("pendingtimelinechange",function(){i.hasEnoughInfoToAppend_()&&i.processCallQueue_()}),"audio"===i.loaderType_&&i.timelineChangeController_.on("timelinechange",function(){i.hasEnoughInfoToLoad_()&&i.processLoadQueue_(),i.hasEnoughInfoToAppend_()&&i.processCallQueue_()}),i}mt(e,n);var t=e.prototype;return t.createTransmuxer_=function(){return Al({remux:!1,alignGopsAtEnd:this.safeAppend_,keepOriginalTimestamps:!0,parse708captions:this.parse708captions_,captionServices:this.captionServices_})},t.resetStats_=function(){this.mediaBytesTransferred=0,this.mediaRequests=0,this.mediaRequestsAborted=0,this.mediaRequestsTimedout=0,this.mediaRequestsErrored=0,this.mediaTransferDuration=0,this.mediaSecondsLoaded=0,this.mediaAppends=0},t.dispose=function(){this.trigger("dispose"),this.state="DISPOSED",this.pause(),this.abort_(),this.transmuxer_&&this.transmuxer_.terminate(),this.resetStats_(),this.checkBufferTimeout_&&window.clearTimeout(this.checkBufferTimeout_),this.syncController_&&this.triggerSyncInfoUpdate_&&this.syncController_.off("syncinfoupdate",this.triggerSyncInfoUpdate_),this.off()},t.setAudio=function(e){this.audioDisabled_=!e,e?this.appendInitSegment_.audio=!0:this.sourceUpdater_.removeAudio(0,this.duration_())},t.abort=function(){"WAITING"===this.state?(this.abort_(),this.state="READY",this.paused()||this.monitorBuffer_()):this.pendingSegment_&&(this.pendingSegment_=null)},t.abort_=function(){this.pendingSegment_&&this.pendingSegment_.abortRequests&&this.pendingSegment_.abortRequests(),this.pendingSegment_=null,this.callQueue_=[],this.loadQueue_=[],this.metadataQueue_.id3=[],this.metadataQueue_.caption=[],this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_),this.waitingOnRemove_=!1,window.clearTimeout(this.quotaExceededErrorRetryTimeout_),this.quotaExceededErrorRetryTimeout_=null},t.checkForAbort_=function(e){return"APPENDING"!==this.state||this.pendingSegment_?!this.pendingSegment_||this.pendingSegment_.requestId!==e:(this.state="READY",!0)},t.error=function(e){return"undefined"!=typeof e&&(this.logger_("error occurred:",e),this.error_=e),this.pendingSegment_=null,this.error_},t.endOfStream=function(){this.ended_=!0,this.transmuxer_&&xl(this.transmuxer_),this.gopBuffer_.length=0,this.pause(),this.trigger("ended")},t.buffered_=function(){var e=this.getMediaInfo_();if(!this.sourceUpdater_||!e)return tr.createTimeRanges();if("main"===this.loaderType_){var t=e.hasAudio,i=e.hasVideo,e=e.isMuxed;if(i&&t&&!this.audioDisabled_&&!e)return this.sourceUpdater_.buffered();if(i)return this.sourceUpdater_.videoBuffered()}return this.sourceUpdater_.audioBuffered()},t.initSegmentForMap=function(e,t){if(void 0===t&&(t=!1),!e)return null;var i=Su(e),n=this.initSegments_[i];return t&&!n&&e.bytes&&(this.initSegments_[i]=n={resolvedUri:e.resolvedUri,byterange:e.byterange,bytes:e.bytes,tracks:e.tracks,timescales:e.timescales}),n||e},t.segmentKey=function(e,t){if(void 0===t&&(t=!1),!e)return null;var i=Eu(e),n=this.keyCache_[i];this.cacheEncryptionKeys_&&t&&!n&&e.bytes&&(this.keyCache_[i]=n={resolvedUri:e.resolvedUri,bytes:e.bytes});e={resolvedUri:(n||e).resolvedUri};return n&&(e.bytes=n.bytes),e},t.couldBeginLoading_=function(){return this.playlist_&&!this.paused()},t.load=function(){if(this.monitorBuffer_(),this.playlist_)return"INIT"===this.state&&this.couldBeginLoading_()?this.init_():void(!this.couldBeginLoading_()||"READY"!==this.state&&"INIT"!==this.state||(this.state="READY"))},t.init_=function(){return this.state="READY",this.resetEverything(),this.monitorBuffer_()},t.playlist=function(e,t){if(void 0===t&&(t={}),e){var i=this.playlist_,n=this.pendingSegment_;this.playlist_=e,this.xhrOptions_=t,"INIT"===this.state&&(e.syncInfo={mediaSequence:e.mediaSequence,time:0},"main"===this.loaderType_&&this.syncController_.setDateTimeMappingForStart(e));var r=null;if(i&&(i.id?r=i.id:i.uri&&(r=i.uri)),this.logger_("playlist update ["+r+" => "+(e.id||e.uri)+"]"),this.trigger("syncinfoupdate"),"INIT"===this.state&&this.couldBeginLoading_())return this.init_();if(!i||i.uri!==e.uri)return null!==this.mediaIndex&&(e.endList?this.resyncLoader():this.resetLoader()),this.currentMediaInfo_=void 0,void this.trigger("playlistupdate");t=e.mediaSequence-i.mediaSequence;this.logger_("live window shift ["+t+"]"),null!==this.mediaIndex&&(this.mediaIndex-=t,this.mediaIndex<0?(this.mediaIndex=null,this.partIndex=null):(r=this.playlist_.segments[this.mediaIndex],!this.partIndex||r.parts&&r.parts.length&&r.parts[this.partIndex]||(r=this.mediaIndex,this.logger_("currently processing part (index "+this.partIndex+") no longer exists."),this.resetLoader(),this.mediaIndex=r))),n&&(n.mediaIndex-=t,n.mediaIndex<0?(n.mediaIndex=null,n.partIndex=null):(0<=n.mediaIndex&&(n.segment=e.segments[n.mediaIndex]),0<=n.partIndex&&n.segment.parts&&(n.part=n.segment.parts[n.partIndex]))),this.syncController_.saveExpiredSegmentInfo(i,e)}},t.pause=function(){this.checkBufferTimeout_&&(window.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=null)},t.paused=function(){return null===this.checkBufferTimeout_},t.resetEverything=function(e){this.ended_=!1,this.appendInitSegment_={audio:!0,video:!0},this.resetLoader(),this.remove(0,1/0,e),this.transmuxer_&&(this.transmuxer_.postMessage({action:"clearAllMp4Captions"}),this.transmuxer_.postMessage({action:"reset"}))},t.resetLoader=function(){this.fetchAtBuffer_=!1,this.resyncLoader()},t.resyncLoader=function(){this.transmuxer_&&xl(this.transmuxer_),this.mediaIndex=null,this.partIndex=null,this.syncPoint_=null,this.isPendingTimestampOffset_=!1,this.callQueue_=[],this.loadQueue_=[],this.metadataQueue_.id3=[],this.metadataQueue_.caption=[],this.abort(),this.transmuxer_&&this.transmuxer_.postMessage({action:"clearParsedMp4Captions"})},t.remove=function(e,t,i,n){if(void 0===i&&(i=function(){}),void 0===n&&(n=!1),(t=t===1/0?this.duration_():t)<=e)this.logger_("skipping remove because end ${end} is <= start ${start}");else if(this.sourceUpdater_&&this.getMediaInfo_()){var r,a=1,s=function(){0===--a&&i()};for(r in!n&&this.audioDisabled_||(a++,this.sourceUpdater_.removeAudio(e,t,s)),!n&&"main"!==this.loaderType_||(this.gopBuffer_=function(e,t,i,n){for(var r=Math.ceil((t-n)*pl),a=Math.ceil((i-n)*pl),n=e.slice(),s=e.length;s--&&!(e[s].pts<=a););if(-1===s)return n;for(var o=s+1;o--&&!(e[o].pts<=r););return o=Math.max(o,0),n.splice(o,s-o+1),n}(this.gopBuffer_,e,t,this.timeMapping_),a++,this.sourceUpdater_.removeVideo(e,t,s)),this.inbandTextTracks_)al(e,t,this.inbandTextTracks_[r]);al(e,t,this.segmentMetadataTrack_),s()}else this.logger_("skipping remove because no source updater or starting media info")},t.monitorBuffer_=function(){this.checkBufferTimeout_&&window.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=window.setTimeout(this.monitorBufferTick_.bind(this),1)},t.monitorBufferTick_=function(){"READY"===this.state&&this.fillBuffer_(),this.checkBufferTimeout_&&window.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=window.setTimeout(this.monitorBufferTick_.bind(this),500)},t.fillBuffer_=function(){var e;this.sourceUpdater_.updating()||(e=this.chooseNextRequest_())&&("number"==typeof e.timestampOffset&&(this.isPendingTimestampOffset_=!1,this.timelineChangeController_.pendingTimelineChange({type:this.loaderType_,from:this.currentTimeline_,to:e.timeline})),this.loadSegment_(e))},t.isEndOfStream_=function(e,t,i){if(void 0===e&&(e=this.mediaIndex),void 0===t&&(t=this.playlist_),void 0===i&&(i=this.partIndex),!t||!this.mediaSource_)return!1;var n="number"==typeof e&&t.segments[e],e=e+1===t.segments.length,n=!n||!n.parts||i+1===n.parts.length;return t.endList&&"open"===this.mediaSource_.readyState&&e&&n},t.chooseNextRequest_=function(){var e=this.buffered_(),t=qo(e)||0,i=Vo(e,this.currentTime_()),n=!this.hasPlayed_()&&1<=i,r=i>=this.goalBufferLength_(),e=this.playlist_.segments;if(!e.length||n||r)return null;this.syncPoint_=this.syncPoint_||this.syncController_.getSyncPoint(this.playlist_,this.duration_(),this.currentTimeline_,this.currentTime_());var a,n={partIndex:null,mediaIndex:null,startOfSegment:null,playlist:this.playlist_,isSyncRequest:Boolean(!this.syncPoint_)};n.isSyncRequest?n.mediaIndex=function(e,t,i){t=t||[];for(var n=[],r=0,a=0;a=e.length-1&&s&&!this.seeking_()?null:this.generateSegmentInfo_(n)},t.generateSegmentInfo_=function(e){var t=e.independent,i=e.playlist,n=e.mediaIndex,r=e.startOfSegment,a=e.isSyncRequest,s=e.partIndex,o=e.forceTimestampOffset,u=e.getMediaInfoForTime,l=i.segments[n],e="number"==typeof s&&l.parts[s],t={requestId:"segment-loader-"+Math.random(),uri:e&&e.resolvedUri||l.resolvedUri,mediaIndex:n,partIndex:e?s:null,isSyncRequest:a,startOfSegment:r,playlist:i,bytes:null,encryptedBytes:null,timestampOffset:null,timeline:l.timeline,duration:e&&e.duration||l.duration,segment:l,part:e,byteLength:0,transmuxer:this.transmuxer_,getMediaInfoForTime:u,independent:t},o="undefined"!=typeof o?o:this.isPendingTimestampOffset_;t.timestampOffset=this.timestampOffsetForSegment_({segmentTimeline:l.timeline,currentTimeline:this.currentTimeline_,startOfSegment:r,buffered:this.buffered_(),overrideCheck:o});o=qo(this.sourceUpdater_.audioBuffered());return"number"==typeof o&&(t.audioAppendStart=o-this.sourceUpdater_.audioTimestampOffset()),this.sourceUpdater_.videoBuffered().length&&(t.gopsToAlignWith=function(e,t,i){if("undefined"==typeof t||null===t||!e.length)return[];for(var n=Math.ceil((t-i+3)*pl),r=0;rn);r++);return e.slice(r)}(this.gopBuffer_,this.currentTime_()-this.sourceUpdater_.videoTimestampOffset(),this.timeMapping_)),t},t.timestampOffsetForSegment_=function(e){return i=(t=e).segmentTimeline,n=t.currentTimeline,r=t.startOfSegment,e=t.buffered,t.overrideCheck||i!==n?!(i "+p+" for "+e),t=m,i=v.vhs_.tech_,t[n=e]||(i.trigger({type:"usage",name:"vhs-608"}),i.trigger({type:"usage",name:"hls-608"}),/^cc708_/.test(r=n)&&(r="SERVICE"+n.split("_")[1]),(o=i.textTracks().getTrackById(r))?t[n]=o:(s=a=n,c=!1,(o=(i.options_.vhs&&i.options_.vhs.captionServices||{})[r])&&(a=o.label,s=o.language,c=o.default),t[n]=i.addRemoteTextTrack({kind:"captions",id:r,default:c,label:a,language:s},!1).track)),al(h,p,m[e]),l=(f={captionArray:f,inbandTextTracks:m,timestampOffset:g}).inbandTextTracks,m=f.captionArray,d=f.timestampOffset,m&&(u=window.WebKitDataCue||window.VTTCue,m.forEach(function(e){var t=e.stream;l[t].addCue(new u(e.startTime+d,e.endTime+d,e.text))}))}),this.transmuxer_&&this.transmuxer_.postMessage({action:"clearParsedMp4Captions"})):this.metadataQueue_.caption.push(this.handleCaptions_.bind(this,e,t)):this.logger_("SegmentLoader received no captions from a caption event"))},t.handleId3_=function(e,t,i){var n,r,a,s;this.earlyAbortWhenNeeded_(e.stats),this.checkForAbort_(e.requestId)||(this.pendingSegment_.hasAppendedData_?(n=null===this.sourceUpdater_.videoTimestampOffset()?this.sourceUpdater_.audioTimestampOffset():this.sourceUpdater_.videoTimestampOffset(),r=this.inbandTextTracks_,a=i,s=this.vhs_.tech_,r.metadataTrack_||(r.metadataTrack_=s.addRemoteTextTrack({kind:"metadata",label:"Timed Metadata"},!1).track,r.metadataTrack_.inBandMetadataTrackDispatchType=a),rl({inbandTextTracks:this.inbandTextTracks_,metadataArray:t,timestampOffset:n,videoDuration:this.duration_()})):this.metadataQueue_.id3.push(this.handleId3_.bind(this,e,t,i)))},t.processMetadataQueue_=function(){this.metadataQueue_.id3.forEach(function(e){return e()}),this.metadataQueue_.caption.forEach(function(e){return e()}),this.metadataQueue_.id3=[],this.metadataQueue_.caption=[]},t.processCallQueue_=function(){var e=this.callQueue_;this.callQueue_=[],e.forEach(function(e){return e()})},t.processLoadQueue_=function(){var e=this.loadQueue_;this.loadQueue_=[],e.forEach(function(e){return e()})},t.hasEnoughInfoToLoad_=function(){if("audio"!==this.loaderType_)return!0;var e=this.pendingSegment_;return!!e&&(!this.getCurrentMediaInfo_()||!ll({timelineChangeController:this.timelineChangeController_,currentTimeline:this.currentTimeline_,segmentTimeline:e.timeline,loaderType:this.loaderType_,audioDisabled:this.audioDisabled_}))},t.getCurrentMediaInfo_=function(e){return(e=void 0===e?this.pendingSegment_:e)&&e.trackInfo||this.currentMediaInfo_},t.getMediaInfo_=function(e){return void 0===e&&(e=this.pendingSegment_),this.getCurrentMediaInfo_(e)||this.startingMediaInfo_},t.hasEnoughInfoToAppend_=function(){if(!this.sourceUpdater_.ready())return!1;if(this.waitingOnRemove_||this.quotaExceededErrorRetryTimeout_)return!1;var e=this.pendingSegment_,t=this.getCurrentMediaInfo_();if(!e||!t)return!1;var i=t.hasAudio,n=t.hasVideo,t=t.isMuxed;return!(n&&!e.videoTimingInfo)&&(!(i&&!this.audioDisabled_&&!t&&!e.audioTimingInfo)&&!ll({timelineChangeController:this.timelineChangeController_,currentTimeline:this.currentTimeline_,segmentTimeline:e.timeline,loaderType:this.loaderType_,audioDisabled:this.audioDisabled_}))},t.handleData_=function(e,t){if(this.earlyAbortWhenNeeded_(e.stats),!this.checkForAbort_(e.requestId))if(!this.callQueue_.length&&this.hasEnoughInfoToAppend_()){var i,n=this.pendingSegment_;if(this.setTimeMapping_(n.timeline),this.updateMediaSecondsLoaded_(n.part||n.segment),"closed"!==this.mediaSource_.readyState){if(e.map&&(e.map=this.initSegmentForMap(e.map,!0),n.segment.map=e.map),e.key&&this.segmentKey(e.key,!0),n.isFmp4=e.isFmp4,n.timingInfo=n.timingInfo||{},n.isFmp4?(this.trigger("fmp4"),n.timingInfo.start=n[ul(t.type)].start):(i=this.getCurrentMediaInfo_(),(i="main"===this.loaderType_&&i&&i.hasVideo)&&(r=n.videoTimingInfo.start),n.timingInfo.start=this.trueSegmentStart_({currentStart:n.timingInfo.start,playlist:n.playlist,mediaIndex:n.mediaIndex,currentVideoTimestampOffset:this.sourceUpdater_.videoTimestampOffset(),useVideoTimingInfo:i,firstVideoFrameTimeForData:r,videoTimingInfo:n.videoTimingInfo,audioTimingInfo:n.audioTimingInfo})),this.updateAppendInitSegmentStatus(n,t.type),this.updateSourceBufferTimestampOffset_(n),n.isSyncRequest){this.updateTimingInfoEnd_(n),this.syncController_.saveSegmentTimingInfo({segmentInfo:n,shouldSaveTimelineMapping:"main"===this.loaderType_});var r=this.chooseNextRequest_();if(r.mediaIndex!==n.mediaIndex||r.partIndex!==n.partIndex)return void this.logger_("sync segment was incorrect, not appending");this.logger_("sync segment was correct, appending")}n.hasAppendedData_=!0,this.processMetadataQueue_(),this.appendData_(n,t)}}else this.callQueue_.push(this.handleData_.bind(this,e,t))},t.updateAppendInitSegmentStatus=function(e,t){"main"!==this.loaderType_||"number"!=typeof e.timestampOffset||e.changedTimestampOffset||(this.appendInitSegment_={audio:!0,video:!0}),this.playlistOfLastInitSegment_[t]!==e.playlist&&(this.appendInitSegment_[t]=!0)},t.getInitSegmentAndUpdateState_=function(e){var t=e.type,i=e.initSegment,n=e.map,r=e.playlist;if(n){e=Su(n);if(this.activeInitSegmentId_===e)return null;i=this.initSegmentForMap(n,!0).bytes,this.activeInitSegmentId_=e}return i&&this.appendInitSegment_[t]?(this.playlistOfLastInitSegment_[t]=r,this.appendInitSegment_[t]=!1,this.activeInitSegmentId_=null,i):null},t.handleQuotaExceededError_=function(e,t){var i=this,n=e.segmentInfo,r=e.type,a=e.bytes,s=this.sourceUpdater_.audioBuffered(),o=this.sourceUpdater_.videoBuffered();1=n);r++);return e.slice(0,r).concat(t)}(this.gopBuffer_,i.gopInfo,this.safeAppend_)),this.state="APPENDING",this.trigger("appending"),this.waitForAppendsToComplete_(e)}},t.setTimeMapping_=function(e){e=this.syncController_.mappingForTimeline(e);null!==e&&(this.timeMapping_=e)},t.updateMediaSecondsLoaded_=function(e){"number"==typeof e.start&&"number"==typeof e.end?this.mediaSecondsLoaded+=e.end-e.start:this.mediaSecondsLoaded+=e.duration},t.shouldUpdateTransmuxerTimestampOffset_=function(e){return null!==e&&("main"===this.loaderType_&&e!==this.sourceUpdater_.videoTimestampOffset()||!this.audioDisabled_&&e!==this.sourceUpdater_.audioTimestampOffset())},t.trueSegmentStart_=function(e){var t=e.currentStart,i=e.playlist,n=e.mediaIndex,r=e.firstVideoFrameTimeForData,a=e.currentVideoTimestampOffset,s=e.useVideoTimingInfo,o=e.videoTimingInfo,e=e.audioTimingInfo;if("undefined"!=typeof t)return t;if(!s)return e.start;i=i.segments[n-1];return 0!==n&&i&&"undefined"!=typeof i.start&&i.end===r+a?o.start:r},t.waitForAppendsToComplete_=function(e){var t=this.getCurrentMediaInfo_(e);if(!t)return this.error({message:"No starting media returned, likely due to an unsupported media format.",blacklistDuration:1/0}),void this.trigger("error");var i=t.hasAudio,n=t.hasVideo,t=t.isMuxed,n="main"===this.loaderType_&&n,t=!this.audioDisabled_&&i&&!t;if(e.waitingOnAppends=0,!e.hasAppendedData_)return e.timingInfo||"number"!=typeof e.timestampOffset||(this.isPendingTimestampOffset_=!0),e.timingInfo={start:0},e.waitingOnAppends++,this.isPendingTimestampOffset_||(this.updateSourceBufferTimestampOffset_(e),this.processMetadataQueue_()),void this.checkAppendsDone_(e);n&&e.waitingOnAppends++,t&&e.waitingOnAppends++,n&&this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this,e)),t&&this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this,e))},t.checkAppendsDone_=function(e){this.checkForAbort_(e.requestId)||(e.waitingOnAppends--,0===e.waitingOnAppends&&this.handleAppendsDone_())},t.checkForIllegalMediaSwitch=function(e){var t,i,e=(t=this.loaderType_,i=this.getCurrentMediaInfo_(),e=e,"main"===t&&i&&e?e.hasAudio||e.hasVideo?i.hasVideo&&!e.hasVideo?"Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest.":!i.hasVideo&&e.hasVideo?"Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest.":null:"Neither audio nor video found in segment.":null);return!!e&&(this.error({message:e,blacklistDuration:1/0}),this.trigger("error"),!0)},t.updateSourceBufferTimestampOffset_=function(e){var t;null===e.timestampOffset||"number"!=typeof e.timingInfo.start||e.changedTimestampOffset||"main"!==this.loaderType_||(t=!1,e.timestampOffset-=this.getSegmentStartTimeForTimestampOffsetCalculation_({videoTimingInfo:e.segment.videoTimingInfo,audioTimingInfo:e.segment.audioTimingInfo,timingInfo:e.timingInfo}),e.changedTimestampOffset=!0,e.timestampOffset!==this.sourceUpdater_.videoTimestampOffset()&&(this.sourceUpdater_.videoTimestampOffset(e.timestampOffset),t=!0),e.timestampOffset!==this.sourceUpdater_.audioTimestampOffset()&&(this.sourceUpdater_.audioTimestampOffset(e.timestampOffset),t=!0),t&&this.trigger("timestampoffset"))},t.getSegmentStartTimeForTimestampOffsetCalculation_=function(e){var t=e.videoTimingInfo,i=e.audioTimingInfo,e=e.timingInfo;return this.useDtsForTimestampOffset_?t&&"number"==typeof t.transmuxedDecodeStart?t.transmuxedDecodeStart:i&&"number"==typeof i.transmuxedDecodeStart?i.transmuxedDecodeStart:e.start:e.start},t.updateTimingInfoEnd_=function(e){e.timingInfo=e.timingInfo||{};var t=this.getMediaInfo_(),t="main"===this.loaderType_&&t&&t.hasVideo&&e.videoTimingInfo?e.videoTimingInfo:e.audioTimingInfo;t&&(e.timingInfo.end="number"==typeof t.end?t.end:t.start+e.duration)},t.handleAppendsDone_=function(){if(this.pendingSegment_&&this.trigger("appendsdone"),!this.pendingSegment_)return this.state="READY",void(this.paused()||this.monitorBuffer_());var e=this.pendingSegment_;this.updateTimingInfoEnd_(e),this.shouldSaveSegmentTimingInfo_&&this.syncController_.saveSegmentTimingInfo({segmentInfo:e,shouldSaveTimelineMapping:"main"===this.loaderType_});var t=cl(e,this.sourceType_);if(t&&("warn"===t.severity?tr.log.warn(t.message):this.logger_(t.message)),this.recordThroughput_(e),this.pendingSegment_=null,this.state="READY",!e.isSyncRequest||(this.trigger("syncinfoupdate"),e.hasAppendedData_)){this.logger_("Appended "+ol(e)),this.addSegmentMetadataCue_(e),this.fetchAtBuffer_=!0,this.currentTimeline_!==e.timeline&&(this.timelineChangeController_.lastTimelineChange({type:this.loaderType_,from:this.currentTimeline_,to:e.timeline}),"main"!==this.loaderType_||this.audioDisabled_||this.timelineChangeController_.lastTimelineChange({type:"audio",from:this.currentTimeline_,to:e.timeline})),this.currentTimeline_=e.timeline,this.trigger("syncinfoupdate");var i=e.segment,t=e.part,i=i.end&&this.currentTime_()-i.end>3*e.playlist.targetDuration,t=t&&t.end&&this.currentTime_()-t.end>3*e.playlist.partTargetDuration;if(i||t)return this.logger_("bad "+(i?"segment":"part")+" "+ol(e)),void this.resetEverything();null!==this.mediaIndex&&this.trigger("bandwidthupdate"),this.trigger("progress"),this.mediaIndex=e.mediaIndex,this.partIndex=e.partIndex,this.isEndOfStream_(e.mediaIndex,e.playlist,e.partIndex)&&this.endOfStream(),this.trigger("appended"),e.hasAppendedData_&&this.mediaAppends++,this.paused()||this.monitorBuffer_()}else this.logger_("Throwing away un-appended sync request "+ol(e))},t.recordThroughput_=function(e){var t,i;e.duration<1/60?this.logger_("Ignoring segment's throughput because its duration of "+e.duration+" is less than the min to record "+1/60):(t=this.throughput.rate,i=Date.now()-e.endOfAllRequests+1,i=Math.floor(e.byteLength/i*8*1e3),this.throughput.rate+=(i-t)/++this.throughput.count)},t.addSegmentMetadataCue_=function(e){var t,i,n,r;this.segmentMetadataTrack_&&(i=(t=e.segment).start,r=t.end,sl(i)&&sl(r)&&(al(i,r,this.segmentMetadataTrack_),n=window.WebKitDataCue||window.VTTCue,e={custom:t.custom,dateTimeObject:t.dateTimeObject,dateTimeString:t.dateTimeString,bandwidth:e.playlist.attributes.BANDWIDTH,resolution:e.playlist.attributes.RESOLUTION,codecs:e.playlist.attributes.CODECS,byteLength:e.byteLength,uri:e.uri,timeline:e.timeline,playlist:e.playlist.id,start:i,end:r},(r=new n(i,r,JSON.stringify(e))).value=e,this.segmentMetadataTrack_.addCue(r)))},e}(tr.EventTarget);function Nl(){}function Ul(e){return"string"!=typeof e?e:e.replace(/./,function(e){return e.toUpperCase()})}function Bl(e,t){var i=t[e+"Buffer"];return i&&i.updating||t.queuePending[e]}function Fl(e,t){if(0!==t.queue.length){var i=0,n=t.queue[i];if("mediaSource"!==n.type){if("mediaSource"!==e&&t.ready()&&"closed"!==t.mediaSource.readyState&&!Bl(e,t)){if(n.type!==e){if(null===(i=function(e,t){for(var i=0;i=e.playlist.segments.length){e=null;break}e=this.generateSegmentInfo_({playlist:e.playlist,mediaIndex:e.mediaIndex+1,startOfSegment:e.startOfSegment+e.duration,isSyncRequest:e.isSyncRequest})}return e},t.stopForError=function(e){this.error(e),this.state="READY",this.pause(),this.trigger("error")},t.segmentRequestFinished_=function(e,t,i){var n=this;if(this.subtitlesTrack_){if(this.saveTransferStats_(t.stats),!this.pendingSegment_)return this.state="READY",void(this.mediaRequestsAborted+=1);if(e)return e.code===Ll&&this.handleTimeout_(),e.code===Dl?this.mediaRequestsAborted+=1:this.mediaRequestsErrored+=1,void this.stopForError(e);var r=this.pendingSegment_;this.saveBandwidthRelatedStats_(r.duration,t.stats),t.key&&this.segmentKey(t.key,!0),this.state="APPENDING",this.trigger("appending");var a=r.segment;if(a.map&&(a.map.bytes=t.map.bytes),r.bytes=t.bytes,"function"!=typeof window.WebVTT&&this.subtitlesTrack_&&this.subtitlesTrack_.tech_){var s=function(){n.subtitlesTrack_.tech_.off("vttjsloaded",o),n.stopForError({message:"Error loading vtt.js"})},o=function(){n.subtitlesTrack_.tech_.off("vttjserror",s),n.segmentRequestFinished_(e,t,i)};return this.state="WAITING_ON_VTTJS",this.subtitlesTrack_.tech_.one("vttjsloaded",o),void this.subtitlesTrack_.tech_.one("vttjserror",s)}a.requested=!0;try{this.parseVTTCues_(r)}catch(e){return void this.stopForError({message:e.message})}if(this.updateTimeMapping_(r,this.syncController_.timelines[r.timeline],this.playlist_),r.cues.length?r.timingInfo={start:r.cues[0].startTime,end:r.cues[r.cues.length-1].endTime}:r.timingInfo={start:r.startOfSegment,end:r.startOfSegment+r.duration},r.isSyncRequest)return this.trigger("syncinfoupdate"),this.pendingSegment_=null,void(this.state="READY");r.byteLength=r.bytes.byteLength,this.mediaSecondsLoaded+=a.duration,r.cues.forEach(function(e){n.subtitlesTrack_.addCue(n.featuresNativeTextTracks_?new window.VTTCue(e.startTime,e.endTime,e.text):e)}),function(t){var e=t.cues;if(e)for(var i=0;iu)&&(r=void 0,r=o<0?i.start-$o({defaultDuration:t.targetDuration,durationList:t.segments,startIndex:e.mediaIndex,endIndex:a}):i.end+$o({defaultDuration:t.targetDuration,durationList:t.segments,startIndex:e.mediaIndex+1,endIndex:a}),this.discontinuities[s]={time:r,accuracy:u})}},t.dispose=function(){this.trigger("dispose"),this.off()},e}(tr.EventTarget),fd=function(t){function e(){var e=t.call(this)||this;return e.pendingTimelineChanges_={},e.lastTimelineChanges_={},e}mt(e,t);var i=e.prototype;return i.clearPendingTimelineChange=function(e){this.pendingTimelineChanges_[e]=null,this.trigger("pendingtimelinechange")},i.pendingTimelineChange=function(e){var t=e.type,i=e.from,e=e.to;return"number"==typeof i&&"number"==typeof e&&(this.pendingTimelineChanges_[t]={type:t,from:i,to:e},this.trigger("pendingtimelinechange")),this.pendingTimelineChanges_[t]},i.lastTimelineChange=function(e){var t=e.type,i=e.from,e=e.to;return"number"==typeof i&&"number"==typeof e&&(this.lastTimelineChanges_[t]={type:t,from:i,to:e},delete this.pendingTimelineChanges_[t],this.trigger("timelinechange")),this.lastTimelineChanges_[t]},i.dispose=function(){this.trigger("dispose"),this.pendingTimelineChanges_={},this.lastTimelineChanges_={},this.off()},e}(tr.EventTarget),md=x(U(W(function(){var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t,i){return e(i={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&i.path)}},i.exports),i.exports}var i=t(function(e){function n(e,t){for(var i=0;i>7))^f]=f;for(e=t=0;!d[e];e^=i||1,t=p[t]||1)for(s=16843009*h[n=h[i=h[c[d[e]=r=(r=t^t<<1^t<<2^t<<3^t<<4)>>8^255&r^99]=e]]]^65537*n^257*i^16843008*e,a=257*h[r]^16843008*r,f=0;f<4;f++)u[f][e]=a=a<<24^a>>>8,l[f][r]=s=s<<24^s>>>8;for(f=0;f<5;f++)u[f]=u[f].slice(0),l[f]=l[f].slice(0);return o}(),this._tables=[[d[0][0].slice(),d[0][1].slice(),d[0][2].slice(),d[0][3].slice(),d[0][4].slice()],[d[1][0].slice(),d[1][1].slice(),d[1][2].slice(),d[1][3].slice(),d[1][4].slice()]];var r=this._tables[0][4],a=this._tables[1],s=e.length,o=1;if(4!==s&&6!==s&&8!==s)throw new Error("Invalid aes key size");var u=e.slice(0),l=[];for(this._key=[u,l],t=s;t<4*s+28;t++)n=u[t-1],(t%s==0||8===s&&t%s==4)&&(n=r[n>>>24]<<24^r[n>>16&255]<<16^r[n>>8&255]<<8^r[255&n],t%s==0&&(n=n<<8^n>>>24^o<<24,o=o<<1^283*(o>>7))),u[t]=u[t-s]^n;for(i=0;t;i++,t--)n=u[3&i?t:t-4],l[i]=t<=4||i<4?n:a[0][r[n>>>24]]^a[1][r[n>>16&255]]^a[2][r[n>>8&255]]^a[3][r[255&n]]}return e.prototype.decrypt=function(e,t,i,n,r,a){for(var s,o,u,l=this._key[1],d=e^l[0],c=n^l[1],h=i^l[2],p=t^l[3],f=l.length/4-2,m=4,t=this._tables[1],g=t[0],y=t[1],v=t[2],_=t[3],b=t[4],T=0;T>>24]^y[c>>16&255]^v[h>>8&255]^_[255&p]^l[m],o=g[c>>>24]^y[h>>16&255]^v[p>>8&255]^_[255&d]^l[m+1],u=g[h>>>24]^y[p>>16&255]^v[d>>8&255]^_[255&c]^l[m+2],p=g[p>>>24]^y[d>>16&255]^v[c>>8&255]^_[255&h]^l[m+3],m+=4,d=s,c=o,h=u;for(T=0;T<4;T++)r[(3&-T)+a]=b[d>>>24]<<24^b[c>>16&255]<<16^b[h>>8&255]<<8^b[255&p]^l[m++],s=d,d=c,c=h,h=p,p=s},e}(),l=function(t){function e(){var e=t.call(this,a)||this;return e.jobs=[],e.delay=1,e.timeout_=null,e}r(e,t);var i=e.prototype;return i.processJob_=function(){this.jobs.shift()(),this.jobs.length?this.timeout_=setTimeout(this.processJob_.bind(this),this.delay):this.timeout_=null},i.push=function(e){this.jobs.push(e),this.timeout_||(this.timeout_=setTimeout(this.processJob_.bind(this),this.delay))},e}(a),g=function(e){return e<<24|(65280&e)<<8|(16711680&e)>>8|e>>>24},s=function(){function u(e,t,i,n){var r=u.STEP,a=new Int32Array(e.buffer),s=new Uint8Array(e.byteLength),o=0;for(this.asyncStream_=new l,this.asyncStream_.push(this.decryptChunk_(a.subarray(o,o+r),t,i,s)),o=r;o>2),u=new m(Array.prototype.slice.call(t)),e=new Uint8Array(e.byteLength),l=new Int32Array(e.buffer),d=i[0],c=i[1],h=i[2],p=i[3],f=0;f "+n+" from "+t),this.tech_.trigger({type:"usage",name:"vhs-rendition-change-"+t})),this.masterPlaylistLoader_.media(e,i)},t.startABRTimer_=function(){var e=this;this.stopABRTimer_(),this.abrTimer_=window.setInterval(function(){return e.checkABR_()},250)},t.stopABRTimer_=function(){this.tech_.scrubbing&&this.tech_.scrubbing()||(window.clearInterval(this.abrTimer_),this.abrTimer_=null)},t.getAudioTrackPlaylists_=function(){var e=this.master(),t=e&&e.playlists||[];if(!e||!e.mediaGroups||!e.mediaGroups.AUDIO)return t;var i,n=e.mediaGroups.AUDIO,r=Object.keys(n);if(Object.keys(this.mediaTypes_.AUDIO.groups).length)i=this.mediaTypes_.AUDIO.activeTrack();else{var a,s=n.main||r.length&&n[r[0]];for(a in s)if(s[a].default){i={label:a};break}}if(!i)return t;var o,u=[];for(o in n)if(n[o][i.label]){var l=n[o][i.label];if(l.playlists&&l.playlists.length)u.push.apply(u,l.playlists);else if(l.uri)u.push(l);else if(e.playlists.length)for(var d=0;d "+r.id;if(!t)return l(d+" as current playlist is not set"),!0;if(r.id===t.id)return!1;e=Boolean(Bo(i,n).length);if(!t.endList)return e||"number"!=typeof t.partTargetDuration?(l(d+" as current playlist is live"),!0):(l("not "+d+" as current playlist is live llhls, but currentTime isn't in buffered."),!1);i=Vo(i,n),n=u?kl.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE:kl.MAX_BUFFER_LOW_WATER_LINE;if(o= bufferLowWaterLine ("+i+" >= "+a+")";return u&&(a+=" and next bandwidth > current bandwidth ("+n+" > "+r+")"),l(a),!0}return l("not "+d+" as no switching criteria met"),!1}({buffered:this.tech_.buffered(),currentTime:i,currentPlaylist:t,nextPlaylist:e,bufferLowWaterLine:n,bufferHighWaterLine:r,duration:this.duration(),experimentalBufferBasedABR:this.experimentalBufferBasedABR,log:this.logger_})},t.setupSegmentLoaderListeners_=function(){var t=this;this.experimentalBufferBasedABR||(this.mainSegmentLoader_.on("bandwidthupdate",function(){var e=t.selectPlaylist();t.shouldSwitchToMedia_(e)&&t.switchMedia_(e,"bandwidthupdate"),t.tech_.trigger("bandwidthupdate")}),this.mainSegmentLoader_.on("progress",function(){t.trigger("progress")})),this.mainSegmentLoader_.on("error",function(){t.blacklistCurrentPlaylist(t.mainSegmentLoader_.error())}),this.mainSegmentLoader_.on("appenderror",function(){t.error=t.mainSegmentLoader_.error_,t.trigger("error")}),this.mainSegmentLoader_.on("syncinfoupdate",function(){t.onSyncInfoUpdate_()}),this.mainSegmentLoader_.on("timestampoffset",function(){t.tech_.trigger({type:"usage",name:"vhs-timestamp-offset"}),t.tech_.trigger({type:"usage",name:"hls-timestamp-offset"})}),this.audioSegmentLoader_.on("syncinfoupdate",function(){t.onSyncInfoUpdate_()}),this.audioSegmentLoader_.on("appenderror",function(){t.error=t.audioSegmentLoader_.error_,t.trigger("error")}),this.mainSegmentLoader_.on("ended",function(){t.logger_("main segment loader ended"),t.onEndOfStream()}),this.mainSegmentLoader_.on("earlyabort",function(e){t.experimentalBufferBasedABR||(t.delegateLoaders_("all",["abort"]),t.blacklistCurrentPlaylist({message:"Aborted early because there isn't enough bandwidth to complete the request without rebuffering."},120))});function e(){if(!t.sourceUpdater_.hasCreatedSourceBuffers())return t.tryToCreateSourceBuffers_();var e=t.getCodecsOrExclude_();e&&t.sourceUpdater_.addOrChangeSourceBuffers(e)}this.mainSegmentLoader_.on("trackinfo",e),this.audioSegmentLoader_.on("trackinfo",e),this.mainSegmentLoader_.on("fmp4",function(){t.triggeredFmp4Usage||(t.tech_.trigger({type:"usage",name:"vhs-fmp4"}),t.tech_.trigger({type:"usage",name:"hls-fmp4"}),t.triggeredFmp4Usage=!0)}),this.audioSegmentLoader_.on("fmp4",function(){t.triggeredFmp4Usage||(t.tech_.trigger({type:"usage",name:"vhs-fmp4"}),t.tech_.trigger({type:"usage",name:"hls-fmp4"}),t.triggeredFmp4Usage=!0)}),this.audioSegmentLoader_.on("ended",function(){t.logger_("audioSegmentLoader ended"),t.onEndOfStream()})},t.mediaSecondsLoaded_=function(){return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded+this.mainSegmentLoader_.mediaSecondsLoaded)},t.load=function(){this.mainSegmentLoader_.load(),this.mediaTypes_.AUDIO.activePlaylistLoader&&this.audioSegmentLoader_.load(),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&this.subtitleSegmentLoader_.load()},t.smoothQualityChange_=function(e){void 0===e&&(e=this.selectPlaylist()),this.fastQualityChange_(e)},t.fastQualityChange_=function(e){var t=this;(e=void 0===e?this.selectPlaylist():e)!==this.masterPlaylistLoader_.media()?(this.switchMedia_(e,"fast-quality"),this.mainSegmentLoader_.resetEverything(function(){tr.browser.IE_VERSION||tr.browser.IS_EDGE?t.tech_.setCurrentTime(t.tech_.currentTime()+.04):t.tech_.setCurrentTime(t.tech_.currentTime())})):this.logger_("skipping fastQualityChange because new media is same as old")},t.play=function(){if(!this.setupFirstPlay()){this.tech_.ended()&&this.tech_.setCurrentTime(0),this.hasPlayed_&&this.load();var e=this.tech_.seekable();return this.tech_.duration()===1/0&&this.tech_.currentTime()this.maxPlaylistRetries?1/0:Date.now()+1e3*t,i.excludeUntil=a,e.reason&&(i.lastExcludeReason_=e.reason),this.tech_.trigger("blacklistplaylist"),this.tech_.trigger({type:"usage",name:"vhs-rendition-blacklisted"}),this.tech_.trigger({type:"usage",name:"hls-rendition-blacklisted"});r=this.selectPlaylist();if(!r)return this.error="Playback cannot continue. No available working or supported playlists.",void this.trigger("error");t=e.internal?this.logger_:tr.log.warn,a=e.message?" "+e.message:"";t((e.internal?"Internal problem":"Problem")+" encountered with playlist "+i.id+"."+a+" Switching to playlist "+r.id+"."),r.attributes.AUDIO!==i.attributes.AUDIO&&this.delegateLoaders_("audio",["abort","pause"]),r.attributes.SUBTITLES!==i.attributes.SUBTITLES&&this.delegateLoaders_("subtitle",["abort","pause"]),this.delegateLoaders_("main",["abort","pause"]);a=r.targetDuration/2*1e3||5e3,a="number"==typeof r.lastRequest&&Date.now()-r.lastRequest<=a;return this.switchMedia_(r,"exclude",s||a)},t.pauseLoading=function(){this.delegateLoaders_("all",["abort","pause"]),this.stopABRTimer_()},t.delegateLoaders_=function(i,e){var n=this,r=[],t="all"===i;!t&&"main"!==i||r.push(this.masterPlaylistLoader_);var a=[];!t&&"audio"!==i||a.push("AUDIO"),!t&&"subtitle"!==i||(a.push("CLOSED-CAPTIONS"),a.push("SUBTITLES")),a.forEach(function(e){e=n.mediaTypes_[e]&&n.mediaTypes_[e].activePlaylistLoader;e&&r.push(e)}),["main","audio","subtitle"].forEach(function(e){var t=n[e+"SegmentLoader_"];!t||i!==e&&"all"!==i||r.push(t)}),r.forEach(function(t){return e.forEach(function(e){"function"==typeof t[e]&&t[e]()})})},t.setCurrentTime=function(e){var t=Bo(this.tech_.buffered(),e);return this.masterPlaylistLoader_&&this.masterPlaylistLoader_.media()&&this.masterPlaylistLoader_.media().segments?t&&t.length?e:(this.mainSegmentLoader_.resetEverything(),this.mainSegmentLoader_.abort(),this.mediaTypes_.AUDIO.activePlaylistLoader&&(this.audioSegmentLoader_.resetEverything(),this.audioSegmentLoader_.abort()),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&(this.subtitleSegmentLoader_.resetEverything(),this.subtitleSegmentLoader_.abort()),void this.load()):0},t.duration=function(){if(!this.masterPlaylistLoader_)return 0;var e=this.masterPlaylistLoader_.media();return e?e.endList?this.mediaSource?this.mediaSource.duration:$l.Playlist.duration(e):1/0:0},t.seekable=function(){return this.seekable_},t.onSyncInfoUpdate_=function(){var e;if(this.masterPlaylistLoader_){var t=this.masterPlaylistLoader_.media();if(t){var i=this.syncController_.getExpiredTime(t,this.duration());if(null!==i){var n,r,a=this.masterPlaylistLoader_.master,s=$l.Playlist.seekable(t,i,$l.Playlist.liveEdgeDelay(a,t));if(0!==s.length){if(this.mediaTypes_.AUDIO.activePlaylistLoader){if(t=this.mediaTypes_.AUDIO.activePlaylistLoader.media(),null===(i=this.syncController_.getExpiredTime(t,this.duration())))return;if(0===(e=$l.Playlist.seekable(t,i,$l.Playlist.liveEdgeDelay(a,t))).length)return}this.seekable_&&this.seekable_.length&&(n=this.seekable_.end(0),r=this.seekable_.start(0)),!e||e.start(0)>s.end(0)||s.start(0)>e.end(0)?this.seekable_=s:this.seekable_=tr.createTimeRanges([[(e.start(0)>s.start(0)?e:s).start(0),(e.end(0) "'+a[e]+'"')}),u.length)return void this.blacklistCurrentPlaylist({playlist:this.media(),message:"Codec switching not supported: "+u.join(", ")+".",blacklistDuration:1/0,internal:!0})}return a}t=Object.keys(o).reduce(function(e,t){return e&&(e+=", "),e+=t+' does not support codec(s): "'+o[t].join(",")+'"'},"")+".";this.blacklistCurrentPlaylist({playlist:this.media(),internal:!0,message:t,blacklistDuration:1/0})}else this.blacklistCurrentPlaylist({playlist:this.media(),message:"Could not determine codecs for playlist.",blacklistDuration:1/0})},t.tryToCreateSourceBuffers_=function(){var e;"open"!==this.mediaSource.readyState||this.sourceUpdater_.hasCreatedSourceBuffers()||!this.areMediaTypesKnown_()||(e=this.getCodecsOrExclude_())&&(this.sourceUpdater_.createSourceBuffers(e),e=[e.video,e.audio].filter(Boolean).join(","),this.excludeIncompatibleVariants_(e))},t.excludeUnsupportedVariants_=function(){var n=this,r=this.master().playlists,a=[];Object.keys(r).forEach(function(e){var t,i=r[e];-1===a.indexOf(i.id)&&(a.push(i.id),t=[],!(e=Ju(n.master,i)).audio||mr(e.audio)||fr(e.audio)||t.push("audio codec "+e.audio),!e.video||mr(e.video)||fr(e.video)||t.push("video codec "+e.video),e.text&&"stpp.ttml.im1t"===e.text&&t.push("text codec "+e.text),t.length&&(i.excludeUntil=1/0,n.logger_("excluding "+i.id+" for unsupported: "+t.join(", "))))})},t.excludeIncompatibleVariants_=function(e){var r=this,a=[],s=this.master().playlists,e=Qu(cr(e)),o=$u(e),u=e.video&&cr(e.video)[0]||null,l=e.audio&&cr(e.audio)[0]||null;Object.keys(s).forEach(function(e){var t,i,n=s[e];-1===a.indexOf(n.id)&&n.excludeUntil!==1/0&&(a.push(n.id),t=[],i=Ju(r.masterPlaylistLoader_.master,n),e=$u(i),(i.audio||i.video)&&(e!==o&&t.push('codec count "'+e+'" !== "'+o+'"'),r.sourceUpdater_.canChangeType()||(e=i.video&&cr(i.video)[0]||null,i=i.audio&&cr(i.audio)[0]||null,e&&u&&e.type.toLowerCase()!==u.type.toLowerCase()&&t.push('video codec "'+e.type+'" !== "'+u.type+'"'),i&&l&&i.type.toLowerCase()!==l.type.toLowerCase()&&t.push('audio codec "'+i.type+'" !== "'+l.type+'"')),t.length&&(n.excludeUntil=1/0,r.logger_("blacklisting "+n.id+": "+t.join(" && ")))))})},t.updateAdCues_=function(e){var t=0,i=this.seekable();i.length&&(t=i.start(0)),function(e,t,i){if(void 0===i&&(i=0),e.segments)for(var n=i,r=0;r=r.adStartTime&&t<=r.adEndTime)return r}return null}(t,n+u.duration/2)){if("cueIn"in u){o.endTime=n,o.adEndTime=n,n+=u.duration,o=null;continue}if(n=t.end(t.length-1)))return this.techWaiting_();5<=this.consecutiveUpdates&&e===this.lastRecordedTime?(this.consecutiveUpdates++,this.waiting_()):e===this.lastRecordedTime?this.consecutiveUpdates++:(this.consecutiveUpdates=0,this.lastRecordedTime=e)}},t.cancelTimer_=function(){this.consecutiveUpdates=0,this.timer_&&(this.logger_("cancelTimer_"),clearTimeout(this.timer_)),this.timer_=null},t.fixesBadSeeks_=function(){if(!this.tech_.seeking())return!1;var e,t=this.seekable(),i=this.tech_.currentTime();if(this.afterSeekableWindow_(t,i,this.media(),this.allowSeeksWithinUnsafeLiveWindow)&&(e=t.end(t.length-1)),"undefined"!=typeof(e=this.beforeSeekableWindow_(t,i)?(a=t.start(0))+(a===t.end(0)?0:.1):e))return this.logger_("Trying to seek outside of seekable at time "+i+" with seekable range "+jo(t)+". Seeking to "+e+"."),this.tech_.setCurrentTime(e),!0;for(var n=this.masterPlaylistController_.sourceUpdater_,r=this.tech_.buffered(),a=n.audioBuffer?n.audioBuffered():null,t=n.videoBuffer?n.videoBuffered():null,n=this.media(),s=n.partTargetDuration||2*(n.targetDuration-ml),o=[a,t],u=0;u "+t.end(0)+"]. Attempting to resume playback by seeking to the current time."),this.tech_.trigger({type:"usage",name:"vhs-unknown-waiting"}),this.tech_.trigger({type:"usage",name:"hls-unknown-waiting"})))},t.techWaiting_=function(){var e=this.seekable(),t=this.tech_.currentTime();if(this.tech_.seeking()||null!==this.timer_)return!0;if(this.beforeSeekableWindow_(e,t)){var i=e.end(e.length-1);return this.logger_("Fell out of live window at time "+t+". Seeking to live point (seekable end) "+i),this.cancelTimer_(),this.tech_.setCurrentTime(i),this.tech_.trigger({type:"usage",name:"vhs-live-resync"}),this.tech_.trigger({type:"usage",name:"hls-live-resync"}),!0}e=this.tech_.vhs.masterPlaylistController_.sourceUpdater_,i=this.tech_.buffered();if(this.videoUnderflow_({audioBuffered:e.audioBuffered(),videoBuffered:e.videoBuffered(),currentTime:t}))return this.cancelTimer_(),this.tech_.setCurrentTime(t),this.tech_.trigger({type:"usage",name:"vhs-video-underflow"}),this.tech_.trigger({type:"usage",name:"hls-video-underflow"}),!0;e=Fo(i,t);if(0=6.9.0" + } + }, + "node_modules/@filmgardi/videojs-collect-data": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "clientjs": "^0.2.1", + "global": "^4.3.2", + "ua-parser-js": "^1.0.2", + "video.js": "^6 || ^7" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/@video-js-plugins/videojs-ads-markers": { + "version": "1.0.0", + "license": "MIT", + "peerDependencies": { + "react-dom": "^18.2.0", + "video.js": "^7.18.1" + } + }, + "node_modules/@videojs/http-streaming": { + "version": "2.15.0", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "3.0.5", + "aes-decrypter": "3.1.3", + "global": "^4.4.0", + "m3u8-parser": "4.8.0", + "mpd-parser": "0.22.0", + "mux.js": "6.0.1", + "video.js": "^6 || ^7" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "video.js": "^6 || ^7" + } + }, + "node_modules/@videojs/http-streaming/node_modules/@videojs/vhs-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/@videojs/vhs-utils": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/@videojs/xhr": { + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "global": "~4.4.0", + "is-function": "^1.0.1" + } + }, + "node_modules/@viostream/videojs-overlay": { + "version": "v2.1.6-f.97-master", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.4.0", + "video.js": "^6 || ^7" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.9", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@youon/videojs-ssa": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "global": "^4.3.2", + "video.js": "^6 || ^7", + "videojs-contrib-ads": "^6.6.1" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/aes-decrypter": { + "version": "3.1.3", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0", + "pkcs7": "^1.0.4" + } + }, + "node_modules/aes-decrypter/node_modules/@videojs/vhs-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/bundle-js-css": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "csso": "^5.0.5", + "js-beautify": "^1.6.4", + "optimist": "^0.6.1", + "resolve": "^1.4.0" + }, + "bin": { + "bundle-js": "bin/bundle-js-css.js" + }, + "engines": { + "node": ">=6.8.1" + } + }, + "node_modules/cardboard-vr-display": { + "version": "1.0.19", + "license": "Apache-2.0", + "dependencies": { + "gl-preserve-state": "^1.0.0", + "nosleep.js": "^0.7.0", + "webvr-polyfill-dpdb": "^1.0.17" + } + }, + "node_modules/clientjs": { + "version": "0.2.1", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "globalthis": "^1.0.2", + "inherits": "^2.0.4", + "murmurhash-js": "^1.0.0", + "ua-parser-js": "^0.7.30" + } + }, + "node_modules/clientjs/node_modules/ua-parser-js": { + "version": "0.7.32", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/clipboard": { + "version": "1.7.1", + "license": "MIT", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "license": "MIT" + }, + "node_modules/dom-walk": { + "version": "0.1.2" + }, + "node_modules/editorconfig": { + "version": "0.15.3", + "license": "MIT", + "dependencies": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" + } + }, + "node_modules/es5-shim": { + "version": "4.6.7", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fs-extra": { + "version": "0.26.7", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/fs-promise": { + "version": "0.5.0", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "fs-extra": "^0.26.5", + "mz": "^2.3.1", + "thenify-all": "^1.6.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gl-preserve-state": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/glob": { + "version": "8.0.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/individual": { + "version": "2.0.0" + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/js-beautify": { + "version": "1.14.7", + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^0.15.3", + "glob": "^8.0.3", + "nopt": "^6.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/jsonfile": { + "version": "2.4.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/karma-safaritechpreview-launcher": { + "version": "0.0.6", + "license": "MIT", + "dependencies": { + "fs-promise": "^0.5.0", + "marcosc-async": "^3.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/keycode": { + "version": "2.2.1", + "license": "MIT" + }, + "node_modules/klaw": { + "version": "1.3.1", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/m3u8-parser": { + "version": "4.8.0", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0" + } + }, + "node_modules/m3u8-parser/node_modules/@videojs/vhs-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/marcosc-async": { + "version": "3.0.5", + "engines": ">=4", + "license": "CC0-1.0" + }, + "node_modules/mdn-data": { + "version": "2.0.28", + "license": "CC0-1.0" + }, + "node_modules/min-document": { + "version": "2.19.0", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimatch": { + "version": "5.1.0", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "0.0.10", + "license": "MIT" + }, + "node_modules/mpd-parser": { + "version": "0.22.0", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "@xmldom/xmldom": "^0.7.2", + "global": "^4.4.0" + }, + "bin": { + "mpd-to-m3u8-json": "bin/parse.js" + } + }, + "node_modules/mpd-parser/node_modules/@videojs/vhs-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/mux.js": { + "version": "6.0.1", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.11.2", + "global": "^4.4.0" + }, + "bin": { + "muxjs-transmux": "bin/transmux.js" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nopt": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nosleep.js": { + "version": "0.7.0", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "license": "MIT/X11", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/pkcs7": { + "version": "1.0.4", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.5.5" + }, + "bin": { + "pkcs7": "bin/cli.js" + } + }, + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "license": "ISC" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.10", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rust-result": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "individual": "^2.0.0" + } + }, + "node_modules/safe-json-parse": { + "version": "4.0.0", + "dependencies": { + "rust-result": "^1.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/select": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sigmund": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/three": { + "version": "0.125.2", + "license": "MIT" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/tsml": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/ua-parser-js": { + "version": "1.0.32", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/url-toolkit": { + "version": "2.2.5", + "license": "Apache-2.0" + }, + "node_modules/vanilla-sharing": { + "version": "5.7.0", + "license": "MIT" + }, + "node_modules/video.js": { + "version": "7.20.3", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/http-streaming": "2.14.3", + "@videojs/vhs-utils": "^3.0.4", + "@videojs/xhr": "2.6.0", + "aes-decrypter": "3.1.3", + "global": "^4.4.0", + "keycode": "^2.2.0", + "m3u8-parser": "4.7.1", + "mpd-parser": "0.21.1", + "mux.js": "6.0.1", + "safe-json-parse": "4.0.0", + "videojs-font": "3.2.0", + "videojs-vtt.js": "^0.15.4" + } + }, + "node_modules/video.js/node_modules/@videojs/http-streaming": { + "version": "2.14.3", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "3.0.5", + "aes-decrypter": "3.1.3", + "global": "^4.4.0", + "m3u8-parser": "4.7.1", + "mpd-parser": "0.21.1", + "mux.js": "6.0.1", + "video.js": "^6 || ^7" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "video.js": "^6 || ^7" + } + }, + "node_modules/video.js/node_modules/@videojs/vhs-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/video.js/node_modules/m3u8-parser": { + "version": "4.7.1", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0" + } + }, + "node_modules/video.js/node_modules/mpd-parser": { + "version": "0.21.1", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "@xmldom/xmldom": "^0.7.2", + "global": "^4.4.0" + }, + "bin": { + "mpd-to-m3u8-json": "bin/parse.js" + } + }, + "node_modules/videojs-contrib-ads": { + "version": "6.9.0", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.3.2", + "video.js": "^6 || ^7" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + } + }, + "node_modules/videojs-contrib-eme": { + "version": "5.0.1", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.3.2", + "video.js": "^6 || ^7 || ^8" + } + }, + "node_modules/videojs-contrib-quality-levels": { + "version": "2.2.0", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.3.2", + "video.js": "^6 || ^7" + }, + "peerDependencies": { + "video.js": "^6 || ^7" + } + }, + "node_modules/videojs-errors": { + "version": "6.0.0", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.4.0", + "video.js": "^6 || ^7" + } + }, + "node_modules/videojs-flash": { + "version": "2.2.1", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.4.0", + "video.js": "^6 || ^7", + "videojs-swf": "5.4.2" + }, + "engines": { + "node": ">=4.4.0" + } + }, + "node_modules/videojs-font": { + "version": "3.2.0", + "license": "Apache-2.0" + }, + "node_modules/videojs-hls-quality-selector": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "global": "^4.3.2", + "karma-safaritechpreview-launcher": "0.0.6", + "video.js": "^7.5.5", + "videojs-contrib-quality-levels": "^2.0.9" + } + }, + "node_modules/videojs-hotkeys": { + "version": "0.2.28", + "license": "Apache-2.0" + }, + "node_modules/videojs-ie8": { + "version": "1.1.2", + "license": "Apache 2.0", + "dependencies": { + "es5-shim": "^4.5.1" + } + }, + "node_modules/videojs-playlist-ui": { + "version": "4.1.0", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.4.0", + "video.js": "^6 || ^7" + } + }, + "node_modules/videojs-replay": { + "version": "1.1.0", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "video.js": "^5.6.0" + } + }, + "node_modules/videojs-replay/node_modules/global": { + "version": "4.3.0", + "dependencies": { + "min-document": "^2.6.1", + "process": "~0.5.1" + } + }, + "node_modules/videojs-replay/node_modules/process": { + "version": "0.5.2", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/videojs-replay/node_modules/video.js": { + "version": "5.20.5", + "license": "Apache-2.0", + "dependencies": { + "babel-runtime": "^6.9.2", + "global": "4.3.0", + "safe-json-parse": "4.0.0", + "tsml": "1.0.1", + "videojs-font": "2.0.0", + "videojs-ie8": "1.1.2", + "videojs-swf": "5.4.1", + "videojs-vtt.js": "0.12.6", + "xhr": "2.2.2" + } + }, + "node_modules/videojs-replay/node_modules/videojs-font": { + "version": "2.0.0", + "license": "Apache-2.0" + }, + "node_modules/videojs-replay/node_modules/videojs-swf": { + "version": "5.4.1" + }, + "node_modules/videojs-replay/node_modules/videojs-vtt.js": { + "version": "0.12.6", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.3.1" + } + }, + "node_modules/videojs-replay/node_modules/videojs-vtt.js/node_modules/global": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/videojs-replay/node_modules/videojs-vtt.js/node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/videojs-share": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "clipboard": "^1.7.1", + "vanilla-sharing": "^5.3.2", + "video.js": "^6 || ^7" + } + }, + "node_modules/videojs-swf": { + "version": "5.4.2" + }, + "node_modules/videojs-vjsdownload": { + "version": "1.0.4", + "license": "Apache-2.0", + "dependencies": { + "video.js": "^7.4.1" + } + }, + "node_modules/videojs-vr": { + "version": "1.10.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.5", + "global": "^4.4.0", + "three": "0.125.2", + "video.js": "^6 || ^7", + "webvr-polyfill": "0.10.12" + } + }, + "node_modules/videojs-vtt.js": { + "version": "0.15.4", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.3.1" + } + }, + "node_modules/videojs-watermark": { + "version": "2.0.0", + "license": "Apache-2.0", + "dependencies": { + "video.js": "^6.2.0" + } + }, + "node_modules/videojs-watermark/node_modules/global": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "node_modules/videojs-watermark/node_modules/process": { + "version": "0.5.2", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/videojs-watermark/node_modules/video.js": { + "version": "6.13.0", + "license": "Apache-2.0", + "dependencies": { + "babel-runtime": "^6.9.2", + "global": "4.3.2", + "safe-json-parse": "4.0.0", + "tsml": "1.0.1", + "videojs-font": "2.1.0", + "videojs-ie8": "1.1.2", + "videojs-vtt.js": "0.12.6", + "xhr": "2.4.0" + } + }, + "node_modules/videojs-watermark/node_modules/videojs-font": { + "version": "2.1.0", + "license": "Apache-2.0" + }, + "node_modules/videojs-watermark/node_modules/videojs-vtt.js": { + "version": "0.12.6", + "license": "Apache-2.0", + "dependencies": { + "global": "^4.3.1" + } + }, + "node_modules/videojs-watermark/node_modules/xhr": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/videojs-youtube": { + "version": "2.6.1", + "license": "MIT", + "dependencies": { + "video.js": "^5.6.0 || ^6.2.8 || ^7.0.2" + }, + "peerDependencies": { + "video.js": "5.x || 6.x || 7.x" + } + }, + "node_modules/webvr-polyfill": { + "version": "0.10.12", + "license": "Apache-2.0", + "dependencies": { + "cardboard-vr-display": "^1.0.19" + } + }, + "node_modules/webvr-polyfill-dpdb": { + "version": "1.0.18", + "license": "Apache-2.0" + }, + "node_modules/wordwrap": { + "version": "0.0.3", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/xhr": { + "version": "2.2.2", + "license": "MIT", + "dependencies": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr/node_modules/global": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "node_modules/xhr/node_modules/process": { + "version": "0.5.2", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "license": "ISC" + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.20.1", + "requires": { + "regenerator-runtime": "^0.13.10" + } + }, + "@filmgardi/videojs-collect-data": { + "version": "2.0.2", + "requires": { + "clientjs": "^0.2.1", + "global": "^4.3.2", + "ua-parser-js": "^1.0.2", + "video.js": "^6 || ^7" + } + }, + "@video-js-plugins/videojs-ads-markers": { + "version": "1.0.0", + "requires": {} + }, + "@videojs/http-streaming": { + "version": "2.15.0", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "3.0.5", + "aes-decrypter": "3.1.3", + "global": "^4.4.0", + "m3u8-parser": "4.8.0", + "mpd-parser": "0.22.0", + "mux.js": "6.0.1", + "video.js": "^6 || ^7" + }, + "dependencies": { + "@videojs/vhs-utils": { + "version": "3.0.5", + "requires": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + } + } + } + }, + "@videojs/vhs-utils": { + "version": "4.0.0", + "requires": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + } + }, + "@videojs/xhr": { + "version": "2.6.0", + "requires": { + "@babel/runtime": "^7.5.5", + "global": "~4.4.0", + "is-function": "^1.0.1" + } + }, + "@viostream/videojs-overlay": { + "version": "v2.1.6-f.97-master", + "requires": { + "global": "^4.4.0", + "video.js": "^6 || ^7" + } + }, + "@xmldom/xmldom": { + "version": "0.7.9" + }, + "@youon/videojs-ssa": { + "version": "1.1.1", + "requires": { + "global": "^4.3.2", + "video.js": "^6 || ^7", + "videojs-contrib-ads": "^6.6.1" + } + }, + "abbrev": { + "version": "1.1.1" + }, + "aes-decrypter": { + "version": "3.1.3", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0", + "pkcs7": "^1.0.4" + }, + "dependencies": { + "@videojs/vhs-utils": { + "version": "3.0.5", + "requires": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + } + } + } + }, + "any-promise": { + "version": "1.3.0" + }, + "babel-runtime": { + "version": "6.26.0", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1" + } + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "brace-expansion": { + "version": "2.0.1", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "bundle-js-css": { + "version": "1.0.0", + "requires": { + "csso": "^5.0.5", + "js-beautify": "^1.6.4", + "optimist": "^0.6.1", + "resolve": "^1.4.0" + } + }, + "cardboard-vr-display": { + "version": "1.0.19", + "requires": { + "gl-preserve-state": "^1.0.0", + "nosleep.js": "^0.7.0", + "webvr-polyfill-dpdb": "^1.0.17" + } + }, + "clientjs": { + "version": "0.2.1", + "requires": { + "globalthis": "^1.0.2", + "inherits": "^2.0.4", + "murmurhash-js": "^1.0.0", + "ua-parser-js": "^0.7.30" + }, + "dependencies": { + "ua-parser-js": { + "version": "0.7.32" + } + } + }, + "clipboard": { + "version": "1.7.1", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "commander": { + "version": "2.20.3" + }, + "concat-map": { + "version": "0.0.1" + }, + "config-chain": { + "version": "1.1.13", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "core-js": { + "version": "2.6.12" + }, + "css-tree": { + "version": "2.2.1", + "requires": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + } + }, + "csso": { + "version": "5.0.5", + "requires": { + "css-tree": "~2.2.0" + } + }, + "define-properties": { + "version": "1.1.4", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delegate": { + "version": "3.2.0" + }, + "dom-walk": { + "version": "0.1.2" + }, + "editorconfig": { + "version": "0.15.3", + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + } + }, + "es5-shim": { + "version": "4.6.7" + }, + "fs-extra": { + "version": "0.26.7", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "fs-promise": { + "version": "0.5.0", + "requires": { + "any-promise": "^1.0.0", + "fs-extra": "^0.26.5", + "mz": "^2.3.1", + "thenify-all": "^1.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1" + }, + "get-intrinsic": { + "version": "1.1.3", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "gl-preserve-state": { + "version": "1.0.0" + }, + "glob": { + "version": "8.0.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "global": { + "version": "4.4.0", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globalthis": { + "version": "1.0.3", + "requires": { + "define-properties": "^1.1.3" + } + }, + "good-listener": { + "version": "1.2.2", + "requires": { + "delegate": "^3.1.2" + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3" + }, + "individual": { + "version": "2.0.0" + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "1.3.8" + }, + "is-core-module": { + "version": "2.11.0", + "requires": { + "has": "^1.0.3" + } + }, + "is-function": { + "version": "1.0.2" + }, + "js-beautify": { + "version": "1.14.7", + "requires": { + "config-chain": "^1.1.13", + "editorconfig": "^0.15.3", + "glob": "^8.0.3", + "nopt": "^6.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "peer": true + }, + "jsonfile": { + "version": "2.4.0", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "karma-safaritechpreview-launcher": { + "version": "0.0.6", + "requires": { + "fs-promise": "^0.5.0", + "marcosc-async": "^3.0.4" + } + }, + "keycode": { + "version": "2.2.1" + }, + "klaw": { + "version": "1.3.1", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "loose-envify": { + "version": "1.4.0", + "peer": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "m3u8-parser": { + "version": "4.8.0", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0" + }, + "dependencies": { + "@videojs/vhs-utils": { + "version": "3.0.5", + "requires": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + } + } + } + }, + "marcosc-async": { + "version": "3.0.5" + }, + "mdn-data": { + "version": "2.0.28" + }, + "min-document": { + "version": "2.19.0", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimatch": { + "version": "5.1.0", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minimist": { + "version": "0.0.10" + }, + "mpd-parser": { + "version": "0.22.0", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "@xmldom/xmldom": "^0.7.2", + "global": "^4.4.0" + }, + "dependencies": { + "@videojs/vhs-utils": { + "version": "3.0.5", + "requires": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + } + } + } + }, + "murmurhash-js": { + "version": "1.0.0" + }, + "mux.js": { + "version": "6.0.1", + "requires": { + "@babel/runtime": "^7.11.2", + "global": "^4.4.0" + } + }, + "mz": { + "version": "2.7.0", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nopt": { + "version": "6.0.0", + "requires": { + "abbrev": "^1.0.0" + } + }, + "nosleep.js": { + "version": "0.7.0" + }, + "object-assign": { + "version": "4.1.1" + }, + "object-keys": { + "version": "1.1.1" + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "parse-headers": { + "version": "2.0.5" + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-parse": { + "version": "1.0.7" + }, + "pkcs7": { + "version": "1.0.4", + "requires": { + "@babel/runtime": "^7.5.5" + } + }, + "process": { + "version": "0.11.10" + }, + "proto-list": { + "version": "1.2.4" + }, + "pseudomap": { + "version": "1.0.2" + }, + "react": { + "version": "18.2.0", + "peer": true, + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "regenerator-runtime": { + "version": "0.13.10" + }, + "resolve": { + "version": "1.22.1", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "rust-result": { + "version": "1.0.0", + "requires": { + "individual": "^2.0.0" + } + }, + "safe-json-parse": { + "version": "4.0.0", + "requires": { + "rust-result": "^1.0.0" + } + }, + "scheduler": { + "version": "0.23.0", + "peer": true, + "requires": { + "loose-envify": "^1.1.0" + } + }, + "select": { + "version": "1.1.2" + }, + "semver": { + "version": "5.7.1" + }, + "sigmund": { + "version": "1.0.1" + }, + "source-map-js": { + "version": "1.0.2" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, + "thenify": { + "version": "3.3.1", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "three": { + "version": "0.125.2" + }, + "tiny-emitter": { + "version": "2.1.0" + }, + "tsml": { + "version": "1.0.1" + }, + "ua-parser-js": { + "version": "1.0.32" + }, + "url-toolkit": { + "version": "2.2.5" + }, + "vanilla-sharing": { + "version": "5.7.0" + }, + "video.js": { + "version": "7.20.3", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/http-streaming": "2.14.3", + "@videojs/vhs-utils": "^3.0.4", + "@videojs/xhr": "2.6.0", + "aes-decrypter": "3.1.3", + "global": "^4.4.0", + "keycode": "^2.2.0", + "m3u8-parser": "4.7.1", + "mpd-parser": "0.21.1", + "mux.js": "6.0.1", + "safe-json-parse": "4.0.0", + "videojs-font": "3.2.0", + "videojs-vtt.js": "^0.15.4" + }, + "dependencies": { + "@videojs/http-streaming": { + "version": "2.14.3", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "3.0.5", + "aes-decrypter": "3.1.3", + "global": "^4.4.0", + "m3u8-parser": "4.7.1", + "mpd-parser": "0.21.1", + "mux.js": "6.0.1", + "video.js": "^6 || ^7" + } + }, + "@videojs/vhs-utils": { + "version": "3.0.5", + "requires": { + "@babel/runtime": "^7.12.5", + "global": "^4.4.0", + "url-toolkit": "^2.2.1" + } + }, + "m3u8-parser": { + "version": "4.7.1", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "global": "^4.4.0" + } + }, + "mpd-parser": { + "version": "0.21.1", + "requires": { + "@babel/runtime": "^7.12.5", + "@videojs/vhs-utils": "^3.0.5", + "@xmldom/xmldom": "^0.7.2", + "global": "^4.4.0" + } + } + } + }, + "videojs-contrib-ads": { + "version": "6.9.0", + "requires": { + "global": "^4.3.2", + "video.js": "^6 || ^7" + } + }, + "videojs-contrib-eme": { + "version": "5.0.1", + "requires": { + "global": "^4.3.2", + "video.js": "^6 || ^7 || ^8" + } + }, + "videojs-contrib-quality-levels": { + "version": "2.2.0", + "requires": { + "global": "^4.3.2", + "video.js": "^6 || ^7" + } + }, + "videojs-errors": { + "version": "6.0.0", + "requires": { + "global": "^4.4.0", + "video.js": "^6 || ^7" + } + }, + "videojs-flash": { + "version": "2.2.1", + "requires": { + "global": "^4.4.0", + "video.js": "^6 || ^7", + "videojs-swf": "5.4.2" + } + }, + "videojs-font": { + "version": "3.2.0" + }, + "videojs-hls-quality-selector": { + "version": "1.1.4", + "requires": { + "global": "^4.3.2", + "karma-safaritechpreview-launcher": "0.0.6", + "video.js": "^7.5.5", + "videojs-contrib-quality-levels": "^2.0.9" + } + }, + "videojs-hotkeys": { + "version": "0.2.28" + }, + "videojs-ie8": { + "version": "1.1.2", + "requires": { + "es5-shim": "^4.5.1" + } + }, + "videojs-playlist-ui": { + "version": "4.1.0", + "requires": { + "global": "^4.4.0", + "video.js": "^6 || ^7" + } + }, + "videojs-replay": { + "version": "1.1.0", + "requires": { + "video.js": "^5.6.0" + }, + "dependencies": { + "global": { + "version": "4.3.0", + "requires": { + "min-document": "^2.6.1", + "process": "~0.5.1" + } + }, + "process": { + "version": "0.5.2" + }, + "video.js": { + "version": "5.20.5", + "requires": { + "babel-runtime": "^6.9.2", + "global": "4.3.0", + "safe-json-parse": "4.0.0", + "tsml": "1.0.1", + "videojs-font": "2.0.0", + "videojs-ie8": "1.1.2", + "videojs-swf": "5.4.1", + "videojs-vtt.js": "0.12.6", + "xhr": "2.2.2" + } + }, + "videojs-font": { + "version": "2.0.0" + }, + "videojs-swf": { + "version": "5.4.1" + }, + "videojs-vtt.js": { + "version": "0.12.6", + "requires": { + "global": "^4.3.1" + }, + "dependencies": { + "global": { + "version": "4.4.0", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "process": { + "version": "0.11.10" + } + } + } + } + }, + "videojs-share": { + "version": "3.2.1", + "requires": { + "clipboard": "^1.7.1", + "vanilla-sharing": "^5.3.2", + "video.js": "^6 || ^7" + } + }, + "videojs-swf": { + "version": "5.4.2" + }, + "videojs-vjsdownload": { + "version": "1.0.4", + "requires": { + "video.js": "^7.4.1" + } + }, + "videojs-vr": { + "version": "1.10.1", + "requires": { + "@babel/runtime": "^7.14.5", + "global": "^4.4.0", + "three": "0.125.2", + "video.js": "^6 || ^7", + "webvr-polyfill": "0.10.12" + } + }, + "videojs-vtt.js": { + "version": "0.15.4", + "requires": { + "global": "^4.3.1" + } + }, + "videojs-watermark": { + "version": "2.0.0", + "requires": { + "video.js": "^6.2.0" + }, + "dependencies": { + "global": { + "version": "4.3.2", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "process": { + "version": "0.5.2" + }, + "video.js": { + "version": "6.13.0", + "requires": { + "babel-runtime": "^6.9.2", + "global": "4.3.2", + "safe-json-parse": "4.0.0", + "tsml": "1.0.1", + "videojs-font": "2.1.0", + "videojs-ie8": "1.1.2", + "videojs-vtt.js": "0.12.6", + "xhr": "2.4.0" + } + }, + "videojs-font": { + "version": "2.1.0" + }, + "videojs-vtt.js": { + "version": "0.12.6", + "requires": { + "global": "^4.3.1" + } + }, + "xhr": { + "version": "2.4.0", + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + } + } + }, + "videojs-youtube": { + "version": "2.6.1", + "requires": { + "video.js": "^5.6.0 || ^6.2.8 || ^7.0.2" + } + }, + "webvr-polyfill": { + "version": "0.10.12", + "requires": { + "cardboard-vr-display": "^1.0.19" + } + }, + "webvr-polyfill-dpdb": { + "version": "1.0.18" + }, + "wordwrap": { + "version": "0.0.3" + }, + "wrappy": { + "version": "1.0.2" + }, + "xhr": { + "version": "2.2.2", + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "global": { + "version": "4.3.2", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "process": { + "version": "0.5.2" + } + } + }, + "xtend": { + "version": "4.0.2" + }, + "yallist": { + "version": "2.1.2" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4eae1b0 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "videojs-plugins", + "scripts": { + "bundle-prod": "node bundle-prod.js", + "bundle-dev": "node bundle-dev.js" + }, + "dependencies": { + "bundle-js-css": "^1.0.0", + "video.js": "^7.20.3", + "videojs-contrib-ads": "^6.9.0", + "videojs-contrib-eme": "^5.0.1", + "videojs-errors": "^6.0.0", + "videojs-flash": "^2.2.1", + "videojs-hls-quality-selector": "^1.1.4", + "videojs-hotkeys": "^0.2.28", + "videojs-playlist-ui": "^4.1.0", + "videojs-replay": "^1.1.0", + "videojs-share": "^3.2.1", + "videojs-vr": "^1.10.1", + "videojs-watermark": "^2.0.0", + "@video-js-plugins/videojs-ads-markers": "^1.0.0", + "@youon/videojs-ssa": "^1.1.1", + "videojs-contrib-ads": "^6.9.0", + "videojs-vjsdownload": "^1.0.4", + "videojs-youtube": "^2.6.1", + "@filmgardi/videojs-collect-data": "^2.0.2", + "@videojs/http-streaming": "^2.15.0", + "@videojs/vhs-utils": "^4.0.0", + "@viostream/videojs-overlay": "^2.1.6-f.97-master" + } +} \ No newline at end of file diff --git a/player-init-plugin-v2.js b/player-init-plugin-v2.js new file mode 100644 index 0000000..bf97f47 --- /dev/null +++ b/player-init-plugin-v2.js @@ -0,0 +1,34 @@ +/** + * This script is an init script designed for hooverhigh + * HooverHighVideoPlayer 1 + * Copyright oxmc. + */ + +window.addEventListener('HVJS-Load', async (event) => { + console.log('HVJS-Load event recived, Adding player script'); + console.log("Player-init.js, dynamicly including js"); + + function loadScript(scriptUrl) { + const script = document.createElement('script'); + script.src = scriptUrl; + document.body.appendChild(script); + + return new Promise((res, rej) => { + script.onload = function() { + res(); + } + script.onerror = function() { + rej(); + } + }); + } + + //Run player.js: + await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { + console.log('Script loaded!'); + }).catch(() => { + console.error('Player-init-plugin Script loading failed!'); + }); + + console.log("End Player-init-plugin.js"); +}); \ No newline at end of file diff --git a/player-init-plugin.js b/player-init-plugin.js new file mode 100644 index 0000000..eeccefd --- /dev/null +++ b/player-init-plugin.js @@ -0,0 +1,34 @@ +/** + * This script is an init script designed for hooverhigh + * HooverHighVideoPlayer 1 + * Copyright oxmc. + */ + +window.addEventListener('DOMContentLoaded', async (event) => { + console.log('DOM fully loaded and parsed, Adding player script'); + console.log("Player-init.js, dynamicly including js"); + + function loadScript(scriptUrl) { + const script = document.createElement('script'); + script.src = scriptUrl; + document.body.appendChild(script); + + return new Promise((res, rej) => { + script.onload = function() { + res(); + } + script.onerror = function() { + rej(); + } + }); + } + + //Run player.js: + await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { + console.log('Script loaded!'); + }).catch(() => { + console.error('Player-init-plugin Script loading failed!'); + }); + + console.log("End Player-init-plugin.js"); +}); \ No newline at end of file diff --git a/player-init.js b/player-init.js new file mode 100644 index 0000000..ca51d60 --- /dev/null +++ b/player-init.js @@ -0,0 +1,86 @@ +/** + * This script is an init script designed for hooverhigh + * HooverHighVideoPlayer 2 + * Copyright oxmc. + */ + +window.addEventListener('HVJS-Load', async (event) => { + console.log('DOM fully loaded and parsed, Adding player scripts and styles'); + console.log("Player-init.js, dynamicly including css and js"); + + function loadScript(scriptUrl) { + const script = document.createElement('script'); + script.src = scriptUrl; + document.body.appendChild(script); + + return new Promise((res, rej) => { + script.onload = function() { + res(); + } + script.onerror = function() { + rej(); + } + }); + } + + function removefile(filename, filetype) { + var targetelement = (filetype == "js") ? "script" : (filetype == "css") ? "link" : "none"; + var targetattr = (filetype == "js") ? "src" : (filetype == "css") ? "href" : "none"; + var allsuspects = document.getElementsByTagName(targetelement); + for (var i = allsuspects.length; i >= 0; i--) { + if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) != null && allsuspects[i].getAttribute(targetattr).indexOf(filename) != -1) + allsuspects[i].parentNode.removeChild(allsuspects[i]); + console.log(`Removed: ${filename}`); + } + } + + function removeElementsByClass(className) { + const elements = document.getElementsByClassName(className); + while (elements.length > 0) { + elements[0].parentNode.removeChild(elements[0]); + } + } + + //List of scripts and css to load for video.js + const include_List = { + "css": [ + "https://vjs.zencdn.net/7.20.3/video-js.css", + "https://hooverhigh.ml/videojs-plugins/css/videojs-bundle.min.css" + ], + "js": [ + "https://hooverhigh.ml/videojs-plugins/ad.js", + "https://hooverhigh.ml/videojs-plugins/hooverhigh-videojs-player.min.js" + ] + }; + + //Add CSS: + console.log("Adding CSS"); + include_List.css.forEach(async function(url) { + //console.log(url); + $("", { + rel: "stylesheet", + type: "text/css", + href: url + }).appendTo("head"); + }); + + //Add JS: + console.log("Adding JS"); + include_List.js.forEach(async function(url) { + //console.log(url); + //$.getScript(url); + $("