diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 5cc1b69..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: Bug report -description: Something is not working correctly. -title: "[BUG]" -labels: "bug, to be solved" - -body: - - type: checkboxes - attributes: - label: Get started - options: - - label: >- - I have read [Contributing guidelines](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md). - required: true - - label: >- - I have confirmed that my problem could not be solved by the [troubleshooting](https://cainmagi.github.io/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/installation) section in the documentation. - required: true - - label: >- - I agree to follow the [Code of Conduct](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md). - required: true - - label: >- - I have confirmed that my issue is not duplicated with an existing issue. - required: true - - - type: textarea - attributes: - label: Description - description: >- - A clear and concise description of what the bug is. - validations: - required: true - - - type: textarea - attributes: - label: To Reproduce - description: >- - Steps to reproduce the behavior. Instead of describing the steps, you could also provide your codes related to the error here. - value: | - 1. Get package from '...' - 2. Then run '...' - 3. An error occurs. - - - type: textarea - attributes: - label: Traceback - description: >- - The python trackback of the bug. If there is no traceback, please describe (1) The expected behaviors. (2) The actual behaviors. - render: sh-session - - - type: textarea - attributes: - label: Behaviors - description: >- - If there is no traceback, please describe (1) The expected behaviors. (2) The actual behaviors. - value: | - 1. The expected behaviors: - 2. The actual behaviors: - - - type: textarea - attributes: - label: Screenshots - description: >- - If applicable, add screenshots to help explain your problem. - - - type: input - attributes: - label: OS - description: >- - e.g. Ubuntu 20.04, Debian 10, Windows 10 21H1 - validations: - required: true - - type: input - attributes: - label: Python version - description: >- - e.g. 3.8 - validations: - required: true - - type: input - attributes: - label: numpy version - description: >- - e.g. 1.21.1 - validations: - required: true - - type: input - attributes: - label: mpegCoder version - description: >- - e.g. 3.1.0 - validations: - required: true - - - type: textarea - attributes: - label: Additional context - description: >- - Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/docs_request.yml b/.github/ISSUE_TEMPLATE/docs_request.yml deleted file mode 100644 index 6df461f..0000000 --- a/.github/ISSUE_TEMPLATE/docs_request.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Docs request -description: Report a problem or a request for the docs. -title: "[Docs]" -labels: documentation, to be solved - -body: - - type: checkboxes - attributes: - label: Get started - options: - - label: >- - I have read [Contributing guidelines](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md). - required: true - - label: >- - I agree to follow the [Code of Conduct](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md). - required: true - - label: >- - I have confirmed that my issue is not duplicated with an existing issue. - required: true - - - type: textarea - attributes: - label: Problem - description: >- - If you meet any problems with the documentation, please describe your problems here. - - - type: textarea - attributes: - label: Required feature - description: >- - If you need more explanations in the documentation, please describe your needs here. - - - type: input - attributes: - label: mpegCoder version - description: >- - e.g. 3.1.0 - validations: - required: true - - - type: textarea - attributes: - label: Additional context - description: >- - Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index fdf4016..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Feature request -description: Suggest an idea for this project -title: "[Feature]" -labels: enhancement, to be solved - -body: - - type: checkboxes - attributes: - label: Get started - options: - - label: >- - I have read [Contributing guidelines](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md). - required: true - - label: >- - I agree to follow the [Code of Conduct](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md). - required: true - - label: >- - I have confirmed that my issue is not duplicated with an existing issue. - required: true - - - type: textarea - attributes: - label: Problem - description: >- - If your feature request is related to a problem, please describe the problem clearly and concisely. - - - type: textarea - attributes: - label: Required feature - description: >- - A clear and concise description of what you want to happen. - validations: - required: true - - - type: textarea - attributes: - label: Alternative solution - description: >- - A clear and concise description of any alternative solutions or features you've considered. - - - type: input - attributes: - label: mpegCoder version - description: >- - e.g. 3.1.0 - validations: - required: true - - - type: textarea - attributes: - label: Additional context - description: >- - Add any other context about the problem here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 2701a3e..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,33 +0,0 @@ -# Pull request - -## Get started - -- [ ] I have read [Contributing guidelines](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md). -- [ ] I agree to follow the [Code of Conduct](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md). -- [ ] I have confirmed that my pull request (PR) is not duplicated with an existing PR. -- [ ] I have confirmed that my pull request (PR) passes the testing workflow of the project. - -## Description - -Describe what you have done with this PR. List any dependencies that are required for this change. - -If your PR is designed for an issue, please refer to the issue by the following example: - -Fixes # (issue) - -## Updated report - -Please summarize your modifications as an itemized report. - -1. Update ... -2. Add ... - -## Information - -Please provide the following information about your PR: - -- `mpegCoder` version: - -## Additional context - -Add any other context about the problem here. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md deleted file mode 100644 index 2701a3e..0000000 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ /dev/null @@ -1,33 +0,0 @@ -# Pull request - -## Get started - -- [ ] I have read [Contributing guidelines](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md). -- [ ] I agree to follow the [Code of Conduct](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md). -- [ ] I have confirmed that my pull request (PR) is not duplicated with an existing PR. -- [ ] I have confirmed that my pull request (PR) passes the testing workflow of the project. - -## Description - -Describe what you have done with this PR. List any dependencies that are required for this change. - -If your PR is designed for an issue, please refer to the issue by the following example: - -Fixes # (issue) - -## Updated report - -Please summarize your modifications as an itemized report. - -1. Update ... -2. Add ... - -## Information - -Please provide the following information about your PR: - -- `mpegCoder` version: - -## Additional context - -Add any other context about the problem here. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.yml b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.yml deleted file mode 100644 index 8b55cb6..0000000 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Pull request -description: Send a pull request (PR) for this project. -title: "[PR]" - -body: - - type: checkboxes - attributes: - label: Get started - options: - - label: >- - I have read [Contributing guidelines](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md). - required: true - - label: >- - I agree to follow the [Code of Conduct](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md). - required: true - - label: >- - I have confirmed that my pull request (PR) is not duplicated with an existing PR. - required: true - - label: >- - I have confirmed that my pull request (PR) passes the testing workflow of the project. - required: true - - - type: textarea - attributes: - label: Description - description: >- - Describe what you have done with this PR. - - - type: textarea - attributes: - label: Updated report - description: >- - Summarize your modifications as itemized report. - value: | - 1. Update ... - 2. Add ... - - - type: input - attributes: - label: mpegCoder version - description: >- - e.g. 3.1.0 - validations: - required: true - - - type: textarea - attributes: - label: Additional context - description: >- - Add any other context about the problem here. diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 8c1a3d3..0000000 --- a/.gitignore +++ /dev/null @@ -1,55 +0,0 @@ -# Others -include/* -lib/* -.vs/* -*.pdb -*.pyd -*.ipdb -*.iobj -*.exp -*.log -*.tlog -*.lastbuildstate -unsuccessfulbuild -/MpegCoder/x64/ - -# Compressed files -*.tar.xz -*.tar.gz -*.tar.bz2 -*.7z -*.zip -*.rar - -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..a474d23 --- /dev/null +++ b/404.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + +Page Not Found | mpegCoder + + + + +
+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + + + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 9c722a8..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,135 +0,0 @@ -# FFmpeg-Encoder-Decoder-for-Python - -## Update Report - -### V3.2.0 update report: - -1. Upgrade to `FFMpeg 5.0` Version. - -2. Fix the const assignment bug caused by the codec configuration method. - -### V3.1.0 update report: - -1. Support `str()` type for all string arguments. - -2. Support `http`, `ftp`, `sftp` streams for `MpegServer`. - -3. Support `nthread` option for `MpegDecoder`, `MpegEncoder`, `MpegClient` and `MpegServer`. - -4. Fix a bug caused by the constructor `MpegServer()`. - -5. Clean up all `gcc` warnings of the source codes. - -6. Fix typos in docstrings. - -### V3.0.0 update report: - -1. Fix a severe memory leaking bugs when using `AVPacket`. - -2. Fix a bug caused by using `MpegClient.terminate()` when a video is closed by the server. - -3. Support the `MpegServer`. This class is used for serving the online video streams. - -4. Refactor the implementation of the loggings. - -5. Add `getParameter()` and `setParameter(configDict)` APIs to `MpegEncoder` and `MpegServer`. - -6. Move `FFMpeg` depedencies and the `OutputStream` class to the `cmpc` space. - -7. Fix dependency issues and cpp standard issues. - -8. Upgrade to `FFMpeg 4.4` Version. - -9. Add a quick script for fetching the `FFMpeg` dependencies. - -### V2.05 update report: - -1. Fix a severe bug that causes the memory leak when using `MpegClient`.This bug also exists in `MpegDecoder`, but it seems that the bug would not cause memory leak in that case. (Although we have also fixed it now.) - -2. Upgrade to `FFMpeg 4.0` Version. - -### V2.01 update report: - -1. Fix a bug that occurs when the first received frame may has a PTS larger than zero. - -2. Enable the project produce the newest `FFMpeg 3.4.2` version and use `Python 3.6.4`, `numpy 1.14`. - -### V2.0 update report: - -1. Revise the bug of the encoder which may cause the stream duration is shorter than the real duration of the video in some not advanced media players. - -2. Improve the structure of the code and remove some unnecessary codes. - -3. Provide a complete version of client, which could demux the video stream from a server in any network protocol. - -### V1.8 update report: - -1. Provide options `(widthDst, heightDst)` to let `MpegDecoder` could control the output size manually. To ensure the option is valid, we must use the method `setParameter` before `FFmpegSetup`. Now you could use this options to get a rescaled output directly: - - ```python - d = mpegCoder.MpegDecoder() # initialize - d.setParameter(widthDst=400, heightDst=300) # noted that these options must be set before 'FFmpegSetup'! - d.FFmpegSetup(b'i.avi') # the original video size would not influence the output - print(d) # examine the parameters. You could also get the original video size by 'getParameter' - d.ExtractFrame(0, 100) # get 100 frames with 400x300 - ``` - - In another example, the set optional parameters could be inherited by encoder, too: - - ```python - d.setParameter(widthDst=400, heightDst=300) # set optional parameters - ... - e.setParameter(decoder=d) # the width/height would inherit from widthDst/heightDst rather than original width/height of the decoder. - ``` - - Noted that we do not provide `widthDst`/`heightDst` in `getParameter`, because these 2 options are all set by users. There is no need to get them from the video metadata. - -2. Optimize some realization of Decoder so that its efficiency could be improved. - -### V1.7-linux update report: - -Thanks to God, we succeed in this work! - -A new version is avaliable for Linux. To implement this tool, you need to install some libraries firstly: - -* python3.5 - -* numpy 1.13 - -If you want, you could install `ffmpeg` on Linux: Here are some instructions - -1. Check every pack which ffmpeg needs here: [Dependency of FFmpeg](https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu "Dependency of FFmpeg") - -2. Use these steps to install ffmpeg instead of provided commands on the above site. - -```Bash - $ git clone https://git.ffmpeg.org/ffmpeg.git - $ cd ffmpeg - $ ./configure --prefix=host --enable-gpl --enable-libx264 --enable-libx265 --enable-shared --disable-static --disable-doc - $ make - $ make install -``` - -### V1.7 update report: - -1. Realize the encoder totally. - -2. Provide a global option `dumpLevel` to control the log shown in the screen. - -3. Fix bugs in initialize functions. - -### V1.5 update report: - -1. Provide an incomplete version of encoder, which could encode frames as a video stream that could not be played by player. - -### V1.4 update report: - -1. Fix a severe bug of the decoder, which causes the memory collapsed if decoding a lot of frames. - -### V1.2 update report: - -1. Use numpy array to replace the native pyList, which improves the speed significantly. - -### V1.0 update report: - -1. Provide the decoder which could decode videos in arbitrary formats and arbitrary coding. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 4aa8000..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,128 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the - overall community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or - advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email - address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -cainmagi@gmail.com. -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.0, available at -https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -Community Impact Guidelines were inspired by [Mozilla's code of conduct -enforcement ladder](https://github.com/mozilla/diversity). - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see the FAQ at -https://www.contributor-covenant.org/faq. Translations are available at -https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index eddc2b7..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,59 +0,0 @@ -# Contributing to mpegCoder - -Thank you for your interest in contributing to `mpegCoder`! We are accepting pull -requests in any time. - -As a reminder, all contributors are expected to follow our [Code of Conduct][coc]. - -[coc]: https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md - -## Contributing to the package - -### Installation - -Please [fork] this project as your own repository, and create a sub-branch based on any branch in this project. The new branch name could be a short description of the implemented new feature. - -After that, clone your repository by - -```shell -git clone -b --single-branch https://github.com//FFmpeg-Encoder-Decoder-for-Python.git mpegCoder -``` - -In some cases, you may need to install some dependencies. Please follow the specific instructions for compling `mpegCoder`. - -### Debugging - -We have not provided any testing scripts now. I am glad to accept the help from anyone who is willing to writing the testing scripts for this project. - -### Sending pull requests - -After you finish your works, please send a new request, and compare your branch with the target branch in `mpegCoder`. You could explain your works concisely in the pull request description. You are not required to add the updating reports in the repository, or add the documentation. I could take over these works based on your description. - -## Contributing to docs - -If you want to contribute to docs, please fork the [`docs`](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/docs) branch, and clone it - -```shell -git clone -b docs --single-branch https://github.com//FFmpeg-Encoder-Decoder-for-Python.git mpegCoder-docs -``` - -You need to install `nodejs` and `yarn` first. We suggest to create an isolated conda environment: - -```shell -conda create -n docs -c conda-forge git python=3.9 nodejs=15.14.0 yarn=1.22.10 -``` - -Then you could initialize the docs project by - -```shell -cd mpegCoder-docs -yarn install -``` - -You could start the local debugging by - -```shell -yarn start -``` - -After you finish your works, you could also send a pull request. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 94a9ed0..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - 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/MpegCoder.sln b/MpegCoder.sln deleted file mode 100644 index 7215572..0000000 --- a/MpegCoder.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31410.357 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MpegCoder", "MpegCoder\MpegCoder.vcxproj", "{57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Debug|x64.ActiveCfg = Debug|x64 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Debug|x64.Build.0 = Debug|x64 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Debug|x86.ActiveCfg = Debug|Win32 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Debug|x86.Build.0 = Debug|Win32 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Release|x64.ActiveCfg = Release|x64 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Release|x64.Build.0 = Release|x64 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Release|x86.ActiveCfg = Release|Win32 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C950261D-8B64-4B1B-8275-B7B3F8F58C6E} - EndGlobalSection -EndGlobal diff --git a/MpegCoder/MpegBase.cpp b/MpegCoder/MpegBase.cpp deleted file mode 100644 index 55e76f7..0000000 --- a/MpegCoder/MpegBase.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "stdafx.h" -#include "MpegBase.h" - -// Global functions. -const string cmpc::av_make_error_string2_cpp(int errnum) { - char errbuf[AV_ERROR_MAX_STRING_SIZE]; - av_strerror(errnum, errbuf, AV_ERROR_MAX_STRING_SIZE); - string strerrbuf = errbuf; - return strerrbuf; -} - -const string cmpc::av_ts_make_string_cpp(int64_t ts) { - char tsstrbuf[AV_TS_MAX_STRING_SIZE]; - av_ts_make_string(tsstrbuf, ts); - string strtsstrbuf = tsstrbuf; - return strtsstrbuf; -} - -const string cmpc::av_ts_make_time_string_cpp(int64_t ts, AVRational* tb) { - char tsstrbuf[AV_TS_MAX_STRING_SIZE]; - av_ts_make_time_string(tsstrbuf, ts, tb); - string strtsstrbuf = tsstrbuf; - return strtsstrbuf; -} - -// CharList implementation. -cmpc::CharList::CharList(void) : data() { -} - -cmpc::CharList::CharList(const std::vector& args) : data() { - set(args); -} - -cmpc::CharList::CharList(const std::vector&& args) noexcept : - data(args) { -} - -cmpc::CharList::~CharList(void) { - clear(); -} - -cmpc::CharList::CharList(const CharList& ref) : data() { - set(ref.data); -} - -cmpc::CharList& cmpc::CharList::operator=(const CharList& ref) { - if (this != &ref) { - set(ref.data); - } - return *this; -} - -cmpc::CharList::CharList(CharList&& ref) noexcept : - data(std::move(ref.data)) { -} - -cmpc::CharList& cmpc::CharList::operator=(CharList&& ref) noexcept { - if (this != &ref) { - set(std::move(ref.data)); - } - return *this; -} - -cmpc::CharList& cmpc::CharList::operator=(const std::vector& args) { - set(args); - return *this; -} - -cmpc::CharList& cmpc::CharList::operator=(std::vector&& args) noexcept { - set(args); - return *this; -} - -void cmpc::CharList::set(const std::vector& args) { - data.clear(); - for (auto it = args.begin(); it != args.end(); ++it) { - string new_str(*it); - data.push_back(new_str); - } -} - -void cmpc::CharList::set(std::vector&& args) noexcept { - data = args; -} - -void cmpc::CharList::clear() { - data.clear(); -} - -std::shared_ptr cmpc::CharList::c_str() { - std::shared_ptr pointer(new const char* [data.size() + 1], std::default_delete()); - auto p_cur = pointer.get(); - for (auto it = data.begin(); it != data.end(); ++it) { - *p_cur = it->c_str(); - p_cur++; - } - *p_cur = nullptr; - return pointer; -} - diff --git a/MpegCoder/MpegBase.h b/MpegCoder/MpegBase.h deleted file mode 100644 index 74e43bc..0000000 --- a/MpegCoder/MpegBase.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef MPEGBASE_H_INCLUDED -#define MPEGBASE_H_INCLUDED - -#define MPEGCODER_EXPORTS -#ifdef MPEGCODER_EXPORTS - #define MPEGCODER_API __declspec(dllexport) -#else - #define MPEGCODER_API __declspec(dllimport) -#endif - -#define FFMPG3_4 -#define FFMPG4_0 -#define FFMPG4_4 -#define FFMPG5_0 - -#define MPEGCODER_CURRENT_VERSION "3.2.0" - -#define STREAM_PIX_FMT AVPixelFormat::AV_PIX_FMT_YUV420P /* default pix_fmt */ - -#define SCALE_FLAGS SWS_BICUBIC -//SWS_BILINEAR - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using std::string; -using std::cerr; -using std::cout; -using std::endl; -using std::ostream; - -namespace cmpc { - extern "C" - { - #include "libavcodec/avcodec.h" - #include "libavformat/avformat.h" - #include "libswscale/swscale.h" - #include "libavutil/imgutils.h" - #include "libavutil/samplefmt.h" - #include "libavutil/timestamp.h" - #include "libavutil/opt.h" - #include "libavutil/avassert.h" - #include "libavutil/channel_layout.h" - #include "libavutil/mathematics.h" - #include "libavutil/time.h" - #include "libswresample/swresample.h" - } -} - -#ifdef __cplusplus -namespace cmpc { - const string av_make_error_string2_cpp(int errnum); - #undef av_err2str - #define av_err2str(errnum) av_make_error_string2_cpp(errnum) - const string av_ts_make_string_cpp(int64_t ts); - #undef av_ts2str - #define av_ts2str(ts) av_ts_make_string_cpp(ts) - const string av_ts_make_time_string_cpp(int64_t ts, AVRational* tb); - #undef av_ts2timestr - #define av_ts2timestr(ts, tb) av_ts_make_time_string_cpp(ts, tb) -} -#endif // __cplusplus - -namespace cmpc { - // a wrapper around a single output AVStream - typedef struct _OutputStream { - AVStream* st; - AVCodecContext* enc; - - /* pts of the next frame that will be generated */ - int64_t next_frame; - - AVFrame* frame; - AVFrame* tmp_frame; - - struct SwsContext* sws_ctx; - } OutputStream; - - // A wrapper of the char *[] - class CharList { - public: - CharList(void); // Constructor. - CharList(const std::vector& args); // Copy constructor (string ver). - CharList(const std::vector&& args) noexcept; // Move constructor (string ver). - ~CharList(void); // 3-5 law. Destructor. - CharList(const CharList& ref); // Copy constructor. - CharList& operator=(const CharList& ref); // Copy assignment operator. - CharList(CharList&& ref) noexcept; // Move constructor. - CharList& operator=(CharList&& ref) noexcept; // Move assignment operator. - CharList& operator=(const std::vector& args); // Copy assignment operator (string ver). - CharList& operator=(std::vector&& args) noexcept; // Move assignment operator (string ver). - void set(const std::vector& args); // Set strings as data. - void set(std::vector&& args) noexcept; // Set strings as data (move). - void clear(); // clear all data. - std::shared_ptr c_str(); // Equivalent conversion for char ** - private: - std::vector data; - }; -} - -// compatibility with newer API -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1) - #define av_frame_alloc avcodec_alloc_frame - #define av_frame_free avcodec_free_frame -#endif - -#endif diff --git a/MpegCoder/MpegCoder.cpp b/MpegCoder/MpegCoder.cpp deleted file mode 100644 index 4f9abf6..0000000 --- a/MpegCoder/MpegCoder.cpp +++ /dev/null @@ -1,2008 +0,0 @@ -// MpegCoder.cpp: 定义 DLL 应用程序的导出函数。 -// - -#include "stdafx.h" - -#define NO_IMPORT_ARRAY -#define PY_ARRAY_UNIQUE_SYMBOL MPEGARRAY_API -#include -#include "MpegCoder.h" -#include "MpegStreamer.h" - -int8_t cmpc::__dumpControl = 1; - -// 这是已导出类的构造函数。 -// 有关类定义的信息,请参阅 MpegCoder.h - -// Constructors. -cmpc::CMpegDecoder::CMpegDecoder(void) : - videoPath(), width(0), height(0), widthDst(0), heightDst(0), - PPixelFormat(STREAM_PIX_FMT), PFormatCtx(nullptr), PCodecCtx(nullptr), PVideoStream(nullptr), - PVideoStreamIDX(-1), PVideoFrameCount(0), RGBbuffer(nullptr), PswsCtx(nullptr), - _str_codec(), _duration(0), _predictFrameNum(0), currentGOPTSM(0), EndofGOP(false), - nthread(0), refcount(1) { - /* Enable or disable frame reference counting. You are not supposed to support - * both paths in your application but pick the one most appropriate to your - * needs. Look for the use of refcount in this example to see what are the - * differences of API usage between them. */ - // refcount = 1; -} - -void cmpc::CMpegDecoder::meta_protected_clear(void) { - auto protectWidth = widthDst; - auto protectHeight = heightDst; - auto protectNthread = nthread; - clear(); - widthDst = protectWidth; - heightDst = protectHeight; - nthread = protectNthread; -} - -void cmpc::CMpegDecoder::clear(void) { - width = height = 0; - widthDst = heightDst = 0; - PVideoStreamIDX = -1; - PVideoFrameCount = 0; - nthread = 0; - _duration = 0; - _predictFrameNum = 0; - currentGOPTSM = 0; - EndofGOP = false; - PPixelFormat = STREAM_PIX_FMT; - _str_codec.clear(); - //videoPath.clear(); - - PVideoStream = nullptr; - if (PswsCtx) { - sws_freeContext(PswsCtx); - PswsCtx = nullptr; - } - if (RGBbuffer) { - av_free(RGBbuffer); - RGBbuffer = nullptr; - } - if (PCodecCtx) { - avcodec_free_context(&PCodecCtx); - PCodecCtx = nullptr; - } - if (PFormatCtx) { - avformat_close_input(&PFormatCtx); - PFormatCtx = nullptr; - } - refcount = 1; -} - -cmpc::CMpegDecoder::~CMpegDecoder() { - clear(); -} - -cmpc::CMpegDecoder::CMpegDecoder(const CMpegDecoder& ref) : - videoPath(ref.videoPath), width(0), height(0), widthDst(ref.widthDst), heightDst(ref.heightDst), - PPixelFormat(ref.PPixelFormat), PFormatCtx(nullptr), PCodecCtx(nullptr), PVideoStream(nullptr), - PVideoStreamIDX(-1), PVideoFrameCount(0), RGBbuffer(nullptr), PswsCtx(nullptr), - _str_codec(), _duration(0), _predictFrameNum(0), currentGOPTSM(0), EndofGOP(false), - nthread(ref.nthread), refcount(ref.refcount) { - if (!FFmpegSetup()) { - clear(); - } -} - -cmpc::CMpegDecoder& cmpc::CMpegDecoder::operator=(const CMpegDecoder& ref) { - if (this != &ref) { - videoPath.assign(ref.videoPath); - width = 0; - height = 0; - widthDst = ref.widthDst; - heightDst = ref.heightDst; - PPixelFormat = ref.PPixelFormat; - PFormatCtx = nullptr; - PCodecCtx = nullptr; - PVideoStream = nullptr; - PVideoStreamIDX = -1; - PVideoFrameCount = 0; - RGBbuffer = nullptr; - PswsCtx = nullptr; - _str_codec.clear(); - _duration = 0.0; - _predictFrameNum = 0; - currentGOPTSM = 0; - EndofGOP = false; - nthread = ref.nthread; - refcount = ref.refcount; - if (!FFmpegSetup()) { - clear(); - } - } - return *this; -} - -cmpc::CMpegDecoder::CMpegDecoder(CMpegDecoder&& ref) noexcept : - videoPath(std::move(ref.videoPath)), width(ref.width), height(ref.height), - widthDst(ref.widthDst), heightDst(ref.heightDst), PPixelFormat(ref.PPixelFormat), - PFormatCtx(ref.PFormatCtx), PCodecCtx(ref.PCodecCtx), PVideoStream(ref.PVideoStream), - PVideoStreamIDX(ref.PVideoStreamIDX), PVideoFrameCount(ref.PVideoFrameCount), - RGBbuffer(ref.RGBbuffer), PswsCtx(ref.PswsCtx), _str_codec(std::move(ref._str_codec)), - _duration(ref._duration), _predictFrameNum(ref._predictFrameNum), - currentGOPTSM(ref.currentGOPTSM), EndofGOP(ref.EndofGOP), - nthread(ref.nthread), refcount(ref.refcount) { - ref.PFormatCtx = nullptr; - ref.PCodecCtx = nullptr; - ref.PVideoStream = nullptr; - ref.PswsCtx = nullptr; -} - -cmpc::CMpegDecoder& cmpc::CMpegDecoder::operator=(CMpegDecoder&& ref) noexcept { - if (this != &ref) { - videoPath.assign(std::move(ref.videoPath)); - width = ref.width; - height = ref.height; - widthDst = ref.widthDst; - heightDst = ref.heightDst; - PPixelFormat = ref.PPixelFormat; - PFormatCtx = ref.PFormatCtx; - PCodecCtx = ref.PCodecCtx; - PVideoStream = ref.PVideoStream; - PVideoStreamIDX = ref.PVideoStreamIDX; - PVideoFrameCount = ref.PVideoFrameCount; - RGBbuffer = ref.RGBbuffer; - PswsCtx = ref.PswsCtx; - _str_codec.assign(std::move(ref._str_codec)); - _duration = ref._duration; - _predictFrameNum = ref._predictFrameNum; - currentGOPTSM = ref.currentGOPTSM; - EndofGOP = ref.EndofGOP; - nthread = ref.nthread; - refcount = ref.refcount; - ref.PFormatCtx = nullptr; - ref.PCodecCtx = nullptr; - ref.PVideoStream = nullptr; - ref.RGBbuffer = nullptr; - ref.PswsCtx = nullptr; - } - return *this; -} - -void cmpc::CMpegDecoder::resetPath(string inVideoPath) { - videoPath.assign(inVideoPath); -} - -void cmpc::CMpegDecoder::setGOPPosition(int64_t inpos) { - currentGOPTSM = __FrameToPts(inpos); - EndofGOP = false; -} - -void cmpc::CMpegDecoder::setGOPPosition(double inpos) { - currentGOPTSM = __TimeToPts(inpos); - EndofGOP = false; -} - -int cmpc::CMpegDecoder::_open_codec_context(int& stream_idx, AVCodecContext*& dec_ctx, \ - AVFormatContext* PFormatCtx, enum AVMediaType type) { // Search the correct decoder, and make the configurations. - auto ret = av_find_best_stream(PFormatCtx, type, -1, -1, nullptr, 0); - if (ret < 0) { - cerr << "Could not find " << av_get_media_type_string(type) << \ - " stream in input file '" << videoPath << "'" << endl; - return ret; - } - else { - auto stream_index = ret; - auto st = PFormatCtx->streams[stream_index]; // The AVStream object. - - /* find decoder for the stream */ - auto dec = avcodec_find_decoder(st->codecpar->codec_id); // Decoder (AVCodec). - if (!dec) { - cerr << "Failed to find " << av_get_media_type_string(type) << " codec" << endl; - return AVERROR(EINVAL); - } - _str_codec.assign(dec->name); - - /* Allocate a codec context for the decoder */ - auto dec_ctx_ = avcodec_alloc_context3(dec); // Decoder context (AVCodecContext). - if (!dec_ctx_) { - cerr << "Failed to allocate the " << av_get_media_type_string(type) << " codec context" << endl; - return AVERROR(ENOMEM); - } - - if (nthread > 0) { - dec_ctx_->thread_count = nthread; - } - - /* Copy codec parameters from input stream to output codec context */ - if ((ret = avcodec_parameters_to_context(dec_ctx_, st->codecpar)) < 0) { - cerr << "Failed to copy " << av_get_media_type_string(type) << \ - " codec parameters to decoder context" << endl; - return ret; - } - - /* Init the decoders, with or without reference counting */ - AVDictionary* opts = nullptr; // The uninitialized argument dictionary. - av_dict_set(&opts, "refcounted_frames", refcount ? "1" : "0", 0); - if ((ret = avcodec_open2(dec_ctx_, dec, &opts)) < 0) { - cerr << "Failed to open " << av_get_media_type_string(type) << " codec" << endl; - return ret; - } - dec_ctx = dec_ctx_; - stream_idx = stream_index; - } - return 0; -} - -bool cmpc::CMpegDecoder::FFmpegSetup(string inVideoPath) { - resetPath(inVideoPath); - return FFmpegSetup(); -} - -bool cmpc::CMpegDecoder::FFmpegSetup() { // Open the video file, and search the correct codec. - meta_protected_clear(); - - /* open input file, and allocate format context */ - if (avformat_open_input(&PFormatCtx, videoPath.c_str(), nullptr, nullptr) < 0) { - cerr << "Could not open source file " << videoPath << endl; - return false; - } - - /* retrieve stream information */ - if (avformat_find_stream_info(PFormatCtx, nullptr) < 0) { - cerr << "Could not find stream information" << endl; - return false; - } - - if (_open_codec_context(PVideoStreamIDX, PCodecCtx, PFormatCtx, AVMediaType::AVMEDIA_TYPE_VIDEO) >= 0) { - PVideoStream = PFormatCtx->streams[PVideoStreamIDX]; - auto time_base = PVideoStream->time_base; - auto frame_base = PVideoStream->avg_frame_rate; - - /* allocate image where the decoded image will be put */ - width = PCodecCtx->width; - height = PCodecCtx->height; - PPixelFormat = PCodecCtx->pix_fmt; - _duration = static_cast(PVideoStream->duration) / static_cast(time_base.den) * static_cast(time_base.num); - _predictFrameNum = av_rescale(static_cast(_duration * 0xFFFF), frame_base.num, frame_base.den) / 0xFFFF; - } - - /* dump input information to stderr */ - auto dump_level = av_log_get_level(); - if (dump_level >= AV_LOG_INFO) { - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 0); - } - - if (!PVideoStream) { // Check whether the video stream is opened correctly. - cerr << "Could not find audio or video stream in the input, aborting" << endl; - clear(); - return false; - } - - // Initialize SWS context for software scaling. - if (widthDst > 0 && heightDst > 0) { - PswsCtx = sws_getContext(width, height, PPixelFormat, widthDst, heightDst, AVPixelFormat::AV_PIX_FMT_RGB24, SCALE_FLAGS, nullptr, nullptr, nullptr); - auto numBytes = av_image_get_buffer_size(AVPixelFormat::AV_PIX_FMT_RGB24, widthDst, heightDst, 1); - RGBbuffer = (uint8_t*)av_malloc(numBytes * sizeof(uint8_t)); - } - else { - PswsCtx = sws_getContext(width, height, PPixelFormat, width, height, AVPixelFormat::AV_PIX_FMT_RGB24, SCALE_FLAGS, nullptr, nullptr, nullptr); - auto numBytes = av_image_get_buffer_size(AVPixelFormat::AV_PIX_FMT_RGB24, width, height, 1); - RGBbuffer = (uint8_t*)av_malloc(numBytes * sizeof(uint8_t)); - } - return true; -} - -void cmpc::CMpegDecoder::dumpFormat() { - if ((!videoPath.empty()) && PFormatCtx) { - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 0); - } - else { - cerr << "Still need to FFmpegSetup()" << endl; - } -} - -void cmpc::CMpegDecoder::setParameter(string keyword, void* ptr) { - if (keyword.compare("widthDst") == 0) { - auto ref = reinterpret_cast(ptr); - widthDst = *ref; - } - else if (keyword.compare("heightDst") == 0) { - auto ref = reinterpret_cast(ptr); - heightDst = *ref; - } - else if (keyword.compare("nthread") == 0) { - auto ref = reinterpret_cast(ptr); - if (PCodecCtx) { - PCodecCtx->thread_count = *ref; - } - nthread = *ref; - } -} - -PyObject* cmpc::CMpegDecoder::getParameter() { - auto res = PyDict_New(); - string key; - PyObject* val = nullptr; - // Fill the values. - key.assign("videoPath"); - val = Py_BuildValue("y", videoPath.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("codecName"); - val = Py_BuildValue("y", _str_codec.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (PCodecCtx) { - key.assign("bitRate"); - val = Py_BuildValue("L", PCodecCtx->bit_rate); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("GOPSize"); - val = Py_BuildValue("i", PCodecCtx->gop_size); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("maxBframe"); - val = Py_BuildValue("i", PCodecCtx->max_b_frames); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("nthread"); - val = Py_BuildValue("i", PCodecCtx->thread_count); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - else { - key.assign("nthread"); - val = Py_BuildValue("i", nthread); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - if (widthDst > 0) { - key.assign("widthDst"); - val = Py_BuildValue("i", widthDst); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - if (heightDst > 0) { - key.assign("heightDst"); - val = Py_BuildValue("i", heightDst); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - key.assign("width"); - val = Py_BuildValue("i", width); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("height"); - val = Py_BuildValue("i", height); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (PVideoStream) { - key.assign("frameRate"); - auto& frame_rate = PVideoStream->avg_frame_rate; - val = Py_BuildValue("(ii)", frame_rate.num, frame_rate.den); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - return res; -} - -PyObject* cmpc::CMpegDecoder::getParameter(string keyword) { - if (keyword.compare("videoPath") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(videoPath.c_str(), static_cast(videoPath.size())); - } - else if (keyword.compare("width") == 0) { - return Py_BuildValue("i", width); - } - else if (keyword.compare("height") == 0) { - return Py_BuildValue("i", height); - } - else if (keyword.compare("frameCount") == 0) { - return Py_BuildValue("i", PVideoFrameCount); - } - else if (keyword.compare("coderName") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(_str_codec.c_str(), static_cast(_str_codec.size())); - } - else if (keyword.compare("duration") == 0) { - return Py_BuildValue("d", _duration); - } - else if (keyword.compare("estFrameNum") == 0) { - return Py_BuildValue("L", _predictFrameNum); - } - else if (keyword.compare("avgFrameRate") == 0) { - auto frame_base = PVideoStream->avg_frame_rate; - double frameRate = static_cast(frame_base.num) / static_cast(frame_base.den); - return Py_BuildValue("d", frameRate); - } - else if (keyword.compare("nthread") == 0) { - if (PCodecCtx) { - return Py_BuildValue("i", PCodecCtx->thread_count); - } - else { - return Py_BuildValue("i", nthread); - } - } - else { - Py_RETURN_NONE; - } -} - -// The flush packet is a non-NULL packet with size 0 and data NULL -int cmpc::CMpegDecoder::__avcodec_decode_video2(AVCodecContext* avctx, AVFrame* frame, bool& got_frame, AVPacket* pkt) { - int ret; - - got_frame = false; - - if (pkt) { - ret = avcodec_send_packet(avctx, pkt); - // In particular, we don't expect AVERROR(EAGAIN), because we read all - // decoded frames with avcodec_receive_frame() until done. - if (ret < 0) { - //cout << ret << ", " << AVERROR(EAGAIN) << ", " << AVERROR_EOF << endl; - return ret == AVERROR_EOF ? 0 : ret; - } - } - - ret = avcodec_receive_frame(avctx, frame); - if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) - return ret; - if (ret >= 0) - got_frame = true; - - //cout << ret << ", " << AVERROR(EAGAIN) << ", " << AVERROR_EOF << endl; - - return 0; -} - -int cmpc::CMpegDecoder::_SaveFrame(PyObject* PyFrameList, AVFrame*& frame, AVFrame*& frameRGB, AVPacket*& pkt, bool& got_frame, int64_t minPTS, bool& processed, int cached) { - int ret = 0; - int decoded = pkt->size; - PyObject* OneFrame = nullptr; - - got_frame = false; - - if (pkt->stream_index == PVideoStreamIDX) { - /* decode video frame */ - ret = __avcodec_decode_video2(PCodecCtx, frame, got_frame, pkt); - if (ret < 0) { - cout << "Error decoding video frame (" << av_err2str(ret) << ")" << endl; - return ret; - } - - if (got_frame) { - - if (frame->pts < minPTS) { - //cout << frame->pts << " < " << minPTS << endl; - processed = false; - return decoded; - } - - if (frame->width != width || frame->height != height || - frame->format != PPixelFormat) { - /* To handle this change, one could call av_image_alloc again and - * decode the following frames into another rawvideo file. */ - cout << "Error: Width, height and pixel format have to be " - "constant in a rawvideo file, but the width, height or " - "pixel format of the input video changed:\n" - "old: width = " << width << ", height = " << height << ", format = " - << av_get_pix_fmt_name(PPixelFormat) << endl << - "new: width = " << frame->width << ", height = " << frame->height << ", format = " - << av_get_pix_fmt_name(static_cast(frame->format)) << endl; - return -1; - } - - - PVideoFrameCount++; - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "video_frame" << (cached ? "(cached)" : "") << " n:" << PVideoFrameCount << - " coded_n:" << frame->coded_picture_number << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - /* copy decoded frame to destination buffer: - * this is required since rawvideo expects non aligned data */ - - sws_scale(PswsCtx, frame->data, frame->linesize, 0, height, frameRGB->data, frameRGB->linesize); - - /* write to rawvideo file */ - if (widthDst > 0 && heightDst > 0) - OneFrame = _SaveFrame_castToPyFrameArray(frameRGB->data, widthDst, heightDst); - else - OneFrame = _SaveFrame_castToPyFrameArray(frameRGB->data, width, height); - PyList_Append(PyFrameList, OneFrame); - processed = true; - } - } - - /* If we use frame reference counting, we own the data and need - * to de-reference it when we don't use it anymore */ - - if (got_frame && refcount) - av_frame_unref(frame); - - return decoded; -} - -int cmpc::CMpegDecoder::_SaveFrameForGOP(PyObject* PyFrameList, AVFrame*& frame, AVFrame*& frameRGB, AVPacket*& pkt, bool& got_frame, int& GOPstate, bool& processed, int cached) { - int ret = 0; - int decoded = pkt->size; - PyObject* OneFrame = nullptr; - - got_frame = false; - - if (pkt->stream_index == PVideoStreamIDX) { - /* decode video frame */ - ret = __avcodec_decode_video2(PCodecCtx, frame, got_frame, pkt); - if (ret < 0) { - cout << "Error decoding video frame (" << av_err2str(ret) << ")" << endl; - return ret; - } - - if (got_frame) { - - currentGOPTSM = frame->pts + 1; - - switch (GOPstate) { - case 0: - if (frame->key_frame) { - GOPstate = 1; - } - else { - processed = false; - return decoded; - } - break; - case 1: - if (frame->key_frame) { - GOPstate = 2; - processed = false; - return decoded; - } - break; - default: - break; - } - - if (frame->width != width || frame->height != height || - frame->format != PPixelFormat) { - /* To handle this change, one could call av_image_alloc again and - * decode the following frames into another rawvideo file. */ - cout << "Error: Width, height and pixel format have to be " - "constant in a rawvideo file, but the width, height or " - "pixel format of the input video changed:\n" - "old: width = " << width << ", height = " << height << ", format = " - << av_get_pix_fmt_name(PPixelFormat) << endl << - "new: width = " << frame->width << ", height = " << frame->height << ", format = " - << av_get_pix_fmt_name(static_cast(frame->format)) << endl; - return -1; - } - - PVideoFrameCount++; - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "video_frame" << (cached ? "(cached)" : "") << " n:" << PVideoFrameCount << - " coded_n:" << frame->coded_picture_number << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - /* copy decoded frame to destination buffer: - * this is required since rawvideo expects non aligned data */ - /*av_image_copy(video_dst_data, video_dst_linesize, - (const uint8_t **)frame->data, frame->linesize, - PPixelFormat, width, height);*/ - - sws_scale(PswsCtx, frame->data, frame->linesize, 0, height, frameRGB->data, frameRGB->linesize); - - /* write to rawvideo file */ - if (widthDst > 0 && heightDst > 0) - OneFrame = _SaveFrame_castToPyFrameArray(frameRGB->data, widthDst, heightDst); - else - OneFrame = _SaveFrame_castToPyFrameArray(frameRGB->data, width, height); - PyList_Append(PyFrameList, OneFrame); - //cout << "[" << width << "-" << height << ", " << width*height << ", " << video_dst_bufsize << "]" << endl; - //cout << "PTS = " << frameRGB->pts << ", coded Fnum = " << frameRGB->coded_picture_number << endl; - processed = true; - } - } - - /* If we use frame reference counting, we own the data and need - * to de-reference it when we don't use it anymore */ - - if (got_frame && refcount) - av_frame_unref(frame); - - return decoded; -} - -PyObject* cmpc::CMpegDecoder::_SaveFrame_castToPyFrameArray(uint8_t* data[], int fWidth, int fHeight) { - npy_intp dims[] = { fHeight, fWidth, 3 }; - auto newdata = new uint8_t[static_cast(fHeight) * static_cast(fWidth) * 3]; - memcpy(newdata, data[0], static_cast(fHeight) * static_cast(fWidth) * 3); - PyObject* PyFrame = PyArray_SimpleNewFromData(3, dims, NPY_UINT8, reinterpret_cast(newdata)); - PyArray_ENABLEFLAGS((PyArrayObject*)PyFrame, NPY_ARRAY_OWNDATA); - return PyFrame; -} - -attribute_deprecated -PyObject* cmpc::CMpegDecoder::_SaveFrame_castToPyFrameArrayOld(uint8_t* data[], int fWidth, int fHeight) { - npy_intp dims[] = { static_cast(fHeight) * static_cast(fWidth) * 3 }; - PyObject* PyFrame = PyArray_SimpleNew(1, dims, NPY_UINT8); - if (PyFrame == NULL) { - Py_RETURN_NONE; - } - auto out_iter = NpyIter_New((PyArrayObject*)PyFrame, NPY_ITER_READWRITE, - NPY_CORDER, NPY_NO_CASTING, NULL); - if (out_iter == NULL) { - Py_DECREF(PyFrame); - Py_RETURN_NONE; - } - /* - * The iternext function gets stored in a local variable - * so it can be called repeatedly in an efficient manner. - */ - auto iternext = NpyIter_GetIterNext(out_iter, NULL); - if (iternext == NULL) { - NpyIter_Deallocate(out_iter); - Py_DECREF(PyFrame); - Py_RETURN_NONE; - } - /* The location of the data pointer which the iterator may update */ - auto dataptr = NpyIter_GetDataPtrArray(out_iter); - //auto out_iter = (PyArrayIterObject *)PyArray_IterNew(PyFrame); - uint8_t* pdata = data[0]; - for (auto i = 0; i < fHeight; i++) { - for (auto j = 0; j < fWidth; j++) { - for (auto k = 0; k < 3; k++, pdata++) { - uint8_t* out_dataptr = (uint8_t*)(*dataptr); - *out_dataptr = *pdata; - iternext(out_iter); - } - } - } - PyObject* pyshape = Py_BuildValue("[iii]", fHeight, fWidth, 3); - PyFrame = PyArray_Reshape((PyArrayObject*)PyFrame, pyshape); - Py_DECREF(pyshape); - NpyIter_Deallocate(out_iter); - PyGC_Collect(); - //Py_INCREF(PyFrame); - return PyFrame; -} - -int64_t cmpc::CMpegDecoder::__FrameToPts(int64_t seekFrame) const { - auto time_base = PVideoStream->time_base; - auto frame_base = PVideoStream->avg_frame_rate; - //cout << "Frame_Base: den=" << frame_base.den << ", num=" << frame_base.num << endl; - auto seekTimeStamp = PVideoStream->start_time + av_rescale(av_rescale(seekFrame, time_base.den, time_base.num), frame_base.den, frame_base.num); - return seekTimeStamp; -} - -int64_t cmpc::CMpegDecoder::__TimeToPts(double seekTime) const { - auto time_base = PVideoStream->time_base; - auto seekTimeStamp = PVideoStream->start_time + av_rescale(static_cast(seekTime * 1000), time_base.den, time_base.num) / 1000; - return seekTimeStamp; -} - -bool cmpc::CMpegDecoder::ExtractGOP(PyObject* PyFrameList) { - int ret; - bool got_frame; - - if (EndofGOP) - return false; - - AVFrame* frame = av_frame_alloc(); - auto pkt = av_packet_alloc(); - if (!frame) { - cerr << "Could not allocate frame" << endl; - ret = AVERROR(ENOMEM); - return false; - } - AVFrame* frameRGB = av_frame_alloc(); - if (!frameRGB) { - cerr << "Could not allocate frameRGB" << endl; - return false; - } - /* initialize packet, set data to NULL, let the demuxer fill it */ - if (PVideoStream && (__dumpControl > 0)) { - std::ostringstream str_data; - str_data << "Demuxing video from file '" << videoPath << "' into Python-List" << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - /* Reset the contex to remove the flushed state. */ - avcodec_flush_buffers(PCodecCtx); - - /* read frames from the file */ - bool frameProcessed = false; - PVideoFrameCount = 0; - - //cout << framePos_TimeBase << endl; - if (av_seek_frame(PFormatCtx, PVideoStreamIDX, currentGOPTSM, AVSEEK_FLAG_BACKWARD) < 0) { - cerr << "AV seek frame fail!" << endl; - av_seek_frame(PFormatCtx, -1, 0, AVSEEK_FLAG_BACKWARD); - } - - // Assign appropriate parts of buffer to image planes in pFrameRGB Note that pFrameRGB is an AVFrame, but AVFrame is a superset of AVPicture - if (widthDst > 0 && heightDst > 0) { - av_image_fill_arrays(frameRGB->data, frameRGB->linesize, RGBbuffer, AVPixelFormat::AV_PIX_FMT_RGB24, widthDst, heightDst, 1); - } - else { - av_image_fill_arrays(frameRGB->data, frameRGB->linesize, RGBbuffer, AVPixelFormat::AV_PIX_FMT_RGB24, width, height, 1); - } - - int GOPstate = 0; // 0: Have not meed key frame; 1: During GOP; 2: End of GOP - int count = 0; - - auto temp_pkt = av_packet_alloc(); - while (av_read_frame(PFormatCtx, pkt) >= 0) { - //cout << "[Test - " << pkt.size << " ]" << endl; - av_packet_ref(temp_pkt, pkt); - frameProcessed = false; - do { - ret = _SaveFrameForGOP(PyFrameList, frame, frameRGB, temp_pkt, got_frame, GOPstate, frameProcessed, 0); - if (ret < 0) - break; - temp_pkt->data += ret; - temp_pkt->size -= ret; - } while (temp_pkt->size > 0); - /* flush cached frames */ - av_packet_unref(temp_pkt); - av_packet_unref(pkt); - if (frameProcessed) - count++; - if (GOPstate == 2) - break; - } - av_packet_free(&temp_pkt); - - if (GOPstate == 1) { //If the end of reading is not raised by I frame, it indicates that the video reaches the end. - EndofGOP = true; - } - - do { - _SaveFrameForGOP(PyFrameList, frame, frameRGB, pkt, got_frame, GOPstate, frameProcessed, 1); - } while (got_frame); - - //cout << "Demuxing succeeded." << endl; - - if (PVideoStream && (__dumpControl > 0)) { - std::ostringstream str_data; - str_data << "Succeed in convert GOP into Python_List, got " << count << " frames." << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - //av_free(RGBbuffer); - //RGBbuffer = nullptr; - //cout << "Free Buffer" << endl; - //sws_freeContext(PswsCtx); - //cout << "Free ctx" << endl; - //PswsCtx = nullptr; - if (frameRGB) { - av_frame_free(&frameRGB); - } - if (frame) { - av_frame_free(&frame); - } - if (pkt) { - av_packet_free(&pkt); - } - - //cout << "End Process" << endl; - - return true; -} - -bool cmpc::CMpegDecoder::ExtractFrame(PyObject* PyFrameList, int64_t framePos, int64_t frameNum, double timePos, int mode) { - int ret; - bool got_frame; - auto frame = av_frame_alloc(); - if (!frame) { - cerr << "Could not allocate frame" << endl; - ret = AVERROR(ENOMEM); - return false; - } - auto pkt = av_packet_alloc(); - if (!pkt) { - cerr << "Could not allocate packet" << endl; - ret = AVERROR(ENOMEM); - return false; - } - auto frameRGB = av_frame_alloc(); - if (!frameRGB) { - cerr << "Could not allocate frameRGB" << endl; - return false; - } - /* initialize packet, set data to NULL, let the demuxer fill it */ - if (PVideoStream && (__dumpControl > 0)) { - std::ostringstream str_data; - str_data << "Demuxing video from file '" << videoPath << "' into Python-List" << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - /* Reset the contex to remove the flushed state. */ - avcodec_flush_buffers(PCodecCtx); - - /* read frames from the file */ - int64_t count = 0; - bool frameProcessed = false; - PVideoFrameCount = 0; - - int64_t framePos_TimeBase; - if (mode && 0x1) { - framePos_TimeBase = __TimeToPts(timePos); - } - else { - framePos_TimeBase = __FrameToPts(framePos); - } - if (av_seek_frame(PFormatCtx, PVideoStreamIDX, framePos_TimeBase, AVSEEK_FLAG_BACKWARD) < 0) { - cerr << "AV seek frame fail!" << endl; - av_seek_frame(PFormatCtx, -1, 0, AVSEEK_FLAG_BACKWARD); - } - - // Assign appropriate parts of buffer to image planes in pFrameRGB Note that pFrameRGB is an AVFrame, but AVFrame is a superset of AVPicture - if (widthDst > 0 && heightDst > 0) { - av_image_fill_arrays(frameRGB->data, frameRGB->linesize, RGBbuffer, AVPixelFormat::AV_PIX_FMT_RGB24, widthDst, heightDst, 1); - } - else { - av_image_fill_arrays(frameRGB->data, frameRGB->linesize, RGBbuffer, AVPixelFormat::AV_PIX_FMT_RGB24, width, height, 1); - } - - auto temp_pkt = av_packet_alloc(); - while (av_read_frame(PFormatCtx, pkt) >= 0) { - av_packet_ref(temp_pkt, pkt); - frameProcessed = false; - do { - ret = _SaveFrame(PyFrameList, frame, frameRGB, temp_pkt, got_frame, framePos_TimeBase, frameProcessed, 0); - if (ret < 0) - break; - temp_pkt->data += ret; - temp_pkt->size -= ret; - } while (temp_pkt->size > 0); - /* flush cached frames */ - av_packet_unref(temp_pkt); - av_packet_unref(pkt); - if (frameProcessed) - count++; - if (count >= frameNum) - break; - } - av_packet_free(&temp_pkt); - - do { - _SaveFrame(PyFrameList, frame, frameRGB, pkt, got_frame, framePos_TimeBase, frameProcessed, 1); - } while (got_frame); - - if (PVideoStream && count > 0 && (__dumpControl > 0)) { - std::ostringstream str_data; - str_data << "Succeed in convert frames into Python_List" << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - if (frameRGB) { - av_frame_free(&frameRGB); - } - if (frame) { - av_frame_free(&frame); - } - if (pkt) { - av_packet_free(&pkt); - } - - return true; -} - -ostream& cmpc::operator<<(ostream& out, cmpc::CMpegDecoder& self_class) { - out << std::setw(1) << "/"; - out << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setw(1) << " * Packed FFmpeg Decoder - Y. Jin V" << MPEGCODER_CURRENT_VERSION << endl; - out << " " << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * VideoPath: " \ - << self_class.videoPath << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (Width, Height): " \ - << self_class.width << ", " << self_class.height << endl; - if (self_class.widthDst > 0 && self_class.heightDst > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (WidthDst, HeightDst): " \ - << self_class.widthDst << ", " << self_class.heightDst << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Deccoder: " \ - << self_class._str_codec << endl; - if (self_class.PCodecCtx) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number: " \ - << self_class.PCodecCtx->thread_count << endl; - } - else { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number (P): " \ - << self_class.nthread << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Duration: " \ - << self_class._duration << " [s]" << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Predicted FrameNum: " \ - << self_class._predictFrameNum << endl; - out << std::setw(1) << " */"; - return out; -} - - -/** - * Related with the encoder. - */ - - // Constructors following 3-5 law. -cmpc::CMpegEncoder::CMpegEncoder(void) : - videoPath(), codecName(), bitRate(1024), width(100), height(100), widthSrc(0), heightSrc(0), - timeBase(_setAVRational(1, 25)), frameRate(_setAVRational(25, 1)), GOPSize(10), MaxBFrame(1), - PStreamContex({ 0 }), PFormatCtx(nullptr), Ppacket(nullptr), PswsCtx(nullptr), - __frameRGB(nullptr), RGBbuffer(nullptr), __have_video(false), __enable_header(false), - nthread(0) { - videoPath.clear(); - codecName.clear(); -} - -void cmpc::CMpegEncoder::clear(void) { - FFmpegClose(); - videoPath.clear(); - codecName.clear(); - bitRate = 1024; - width = 100; - height = 100; - heightSrc = 0; - widthSrc = 0; - timeBase = _setAVRational(1, 25); - frameRate = _setAVRational(25, 1); - GOPSize = 10; - MaxBFrame = 1; - nthread = 0; - PStreamContex = { 0 }; - __have_video = false; - __enable_header = false; -} - -cmpc::CMpegEncoder::~CMpegEncoder(void) { - clear(); -} - -cmpc::CMpegEncoder::CMpegEncoder(const CMpegEncoder& ref) : - videoPath(ref.videoPath), codecName(ref.codecName), bitRate(ref.bitRate), - width(ref.width), height(ref.height), widthSrc(ref.widthSrc), heightSrc(ref.heightSrc), - timeBase(ref.timeBase), frameRate(ref.frameRate), GOPSize(ref.GOPSize), MaxBFrame(ref.MaxBFrame), - PStreamContex({ 0 }), PFormatCtx(nullptr), Ppacket(nullptr), PswsCtx(nullptr), - __frameRGB(nullptr), RGBbuffer(nullptr), __have_video(false), __enable_header(false), - nthread(ref.nthread) { - if (!FFmpegSetup()) { - clear(); - } -} - -cmpc::CMpegEncoder& cmpc::CMpegEncoder::operator=(const CMpegEncoder& ref) { - if (this != &ref) { - videoPath.assign(ref.videoPath); - codecName.assign(ref.codecName); - bitRate = ref.bitRate; - width = ref.width; - height = ref.height; - widthSrc = ref.widthSrc; - heightSrc = ref.heightSrc; - timeBase = ref.timeBase; - frameRate = ref.frameRate; - GOPSize = ref.GOPSize; - MaxBFrame = ref.MaxBFrame; - PStreamContex = { 0 }; - PFormatCtx = nullptr; - Ppacket = nullptr; - PswsCtx = nullptr; - __frameRGB = nullptr; - RGBbuffer = nullptr; - __have_video = false; - __enable_header = false; - nthread = ref.nthread; - if (!FFmpegSetup()) { - clear(); - } - } - return *this; -} - -cmpc::CMpegEncoder::CMpegEncoder(CMpegEncoder&& ref) noexcept : - videoPath(std::move(ref.videoPath)), codecName(std::move(ref.codecName)), bitRate(ref.bitRate), - width(ref.width), height(ref.height), widthSrc(ref.widthSrc), heightSrc(ref.heightSrc), - timeBase(ref.timeBase), frameRate(ref.frameRate), GOPSize(ref.GOPSize), MaxBFrame(ref.MaxBFrame), - PStreamContex(std::move(ref.PStreamContex)), PFormatCtx(ref.PFormatCtx), Ppacket(ref.Ppacket), - PswsCtx(ref.PswsCtx), __frameRGB(ref.__frameRGB), RGBbuffer(ref.RGBbuffer), - __have_video(ref.__have_video), __enable_header(ref.__enable_header), nthread(ref.nthread) { - ref.PFormatCtx = nullptr; - ref.PStreamContex = { 0 }; - ref.PswsCtx = nullptr; - ref.RGBbuffer = nullptr; - ref.Ppacket = nullptr; - ref.__frameRGB = nullptr; -} - -cmpc::CMpegEncoder& cmpc::CMpegEncoder::operator=(CMpegEncoder&& ref) noexcept { - if (this != &ref) { - videoPath.assign(std::move(ref.videoPath)); - codecName.assign(std::move(ref.codecName)); - bitRate = ref.bitRate; - width = ref.width; - height = ref.height; - widthSrc = ref.widthSrc; - heightSrc = ref.heightSrc; - timeBase = ref.timeBase; - frameRate = ref.frameRate; - GOPSize = ref.GOPSize; - nthread = ref.nthread; - MaxBFrame = ref.MaxBFrame; - PFormatCtx = ref.PFormatCtx; - PStreamContex = std::move(ref.PStreamContex); - PswsCtx = ref.PswsCtx; - RGBbuffer = ref.RGBbuffer; - Ppacket = ref.Ppacket; - __frameRGB = ref.__frameRGB; - __have_video = ref.__have_video; - __enable_header = ref.__enable_header; - ref.PFormatCtx = nullptr; - ref.PStreamContex = { 0 }; - ref.PswsCtx = nullptr; - ref.RGBbuffer = nullptr; - ref.Ppacket = nullptr; - ref.__frameRGB = nullptr; - } - return *this; -} - -void cmpc::CMpegEncoder::resetPath(string inVideoPath) { - videoPath.assign(inVideoPath); -} - -bool cmpc::CMpegEncoder::FFmpegSetup(string inVideoPath) { - resetPath(inVideoPath); - return FFmpegSetup(); -} - -cmpc::AVRational cmpc::CMpegEncoder::_setAVRational(int num, int den) { - AVRational res; - res.num = num; res.den = den; - return res; -} - -int64_t cmpc::CMpegEncoder::__FrameToPts(int64_t seekFrame) const { - return av_rescale(av_rescale(seekFrame, timeBase.den, timeBase.num), frameRate.den, frameRate.num); -} - -int64_t cmpc::CMpegEncoder::__TimeToPts(double seekTime) const { - return av_rescale(static_cast(seekTime * 1000), timeBase.den, timeBase.num) / 1000; -} - -void cmpc::CMpegEncoder::__log_packet() { - AVRational* time_base = &PFormatCtx->streams[Ppacket->stream_index]->time_base; - std::ostringstream str_data; - str_data << "pts:" << av_ts2str(Ppacket->pts) << " pts_time:" << av_ts2timestr(Ppacket->pts, time_base) - << " dts:" << av_ts2str(Ppacket->dts) << " dts_time:" << av_ts2timestr(Ppacket->dts, time_base) << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); -} - -int cmpc::CMpegEncoder::__write_frame() { - /* rescale output packet timestamp values from codec to stream timebase */ - av_packet_rescale_ts(Ppacket, PStreamContex.enc->time_base, PStreamContex.st->time_base); - Ppacket->stream_index = PStreamContex.st->index; - - /* Write the compressed frame to the media file. */ - if (__dumpControl > 0) - __log_packet(); - return av_interleaved_write_frame(PFormatCtx, Ppacket); -} - -/* Add an output stream. */ -const cmpc::AVCodec* cmpc::CMpegEncoder::__add_stream() { - /* find the encoder */ - AVCodecID codec_id; - auto srcwidth = widthSrc > 0 ? widthSrc : width; - auto srcheight = heightSrc > 0 ? heightSrc : height; - auto const_codec = avcodec_find_encoder_by_name(codecName.c_str()); - const AVCodec* codec; - if (!(const_codec)) { - codec_id = PFormatCtx->oformat->video_codec; - cerr << "Could not find encoder " << codecName << ", use " << avcodec_get_name(codec_id) << " as an alternative." << endl; - codec = avcodec_find_encoder(codec_id); - } - else { - codec = const_codec; - codec_id = codec->id; - } - - if (!codec) { - cerr << "Could not find encoder for '" << avcodec_get_name(codec_id) << "'" << endl; - return nullptr; - } - - PStreamContex.st = avformat_new_stream(PFormatCtx, nullptr); - if (!PStreamContex.st) { - cerr << "Could not allocate stream" << endl; - return nullptr; - } - PStreamContex.st->id = PFormatCtx->nb_streams - 1; - auto c = avcodec_alloc_context3(codec); - if (!c) { - cerr << "Could not alloc an encoding context" << endl; - return nullptr; - } - if (nthread > 0) { - c->thread_count = nthread; - } - PStreamContex.enc = c; - - switch (codec->type) { - case AVMediaType::AVMEDIA_TYPE_VIDEO: - c->codec_id = codec_id; - - c->bit_rate = bitRate; - /* Resolution must be a multiple of two. */ - c->width = width; - c->height = height; - /* timebase: This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identical to 1. */ - PStreamContex.st->time_base.den = 0; - PStreamContex.st->time_base.num = 0; - //av_stream_set_r_frame_rate(PStreamContex.st, frameRate); - //cout << "(" << frameRate.num << ", " << frameRate.den << ")" << endl; - //PStreamContex.st->r_frame_rate - c->time_base = timeBase; - - //PStreamContex.st->frame - c->framerate = frameRate; - - c->gop_size = GOPSize; /* emit one intra frame every twelve frames at most */ - c->max_b_frames = MaxBFrame; - c->pix_fmt = STREAM_PIX_FMT; - if (c->codec_id == AVCodecID::AV_CODEC_ID_FLV1) { - /* just for testing, we also add B-frames */ - c->max_b_frames = 0; - } - if (c->codec_id == AVCodecID::AV_CODEC_ID_MPEG2VIDEO) { - /* just for testing, we also add B-frames */ - c->max_b_frames = 2; - } - if (c->codec_id == AVCodecID::AV_CODEC_ID_MPEG1VIDEO) { - /* Needed to avoid using macroblocks in which some coeffs overflow. - * This does not happen with normal video, it just happens here as - * the motion of the chroma plane does not match the luma plane. */ - c->mb_decision = 2; - } - if (c->pix_fmt != STREAM_PIX_FMT) { - /* as we only generate a YUV420P picture, we must convert it - * to the codec pixel format if needed */ - if (!PStreamContex.sws_ctx) { - PStreamContex.sws_ctx = sws_getContext(c->width, c->height, - STREAM_PIX_FMT, - c->width, c->height, - c->pix_fmt, - SCALE_FLAGS, nullptr, nullptr, nullptr); - if (!PStreamContex.sws_ctx) { - cerr << "Could not initialize the conversion context" << endl; - return nullptr; - } - } - } - if (!PswsCtx) { - PswsCtx = sws_getContext(srcwidth, srcheight, - AVPixelFormat::AV_PIX_FMT_RGB24, - c->width, c->height, - c->pix_fmt, - SCALE_FLAGS, nullptr, nullptr, nullptr); - if (!PswsCtx) { - cerr << "Could not initialize the conversion context" << endl; - return nullptr; - } - } - if (!RGBbuffer) { - auto numBytes = av_image_get_buffer_size(AVPixelFormat::AV_PIX_FMT_RGB24, srcwidth, srcheight, 1); - RGBbuffer = (uint8_t*)av_malloc(numBytes * sizeof(uint8_t)); - } - break; - - default: - break; - } - - /* Some formats want stream headers to be separate. */ - if (PFormatCtx->oformat->flags & AVFMT_GLOBALHEADER) - c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; - return codec; -} - -/* video output */ -cmpc::AVFrame* cmpc::CMpegEncoder::__alloc_picture(enum AVPixelFormat pix_fmt, int width, int height) { - auto picture = av_frame_alloc(); - if (!picture) - return nullptr; - picture->format = pix_fmt; - picture->width = width; - picture->height = height; - /* allocate the buffers for the frame data */ - auto ret = av_frame_get_buffer(picture, 32); - if (ret < 0) { - cerr << "Could not allocate frame data." << endl; - return nullptr; - } - return picture; -} - -bool cmpc::CMpegEncoder::__open_video(const AVCodec* codec, const AVDictionary* opt_arg) { - int ret; - auto c = PStreamContex.enc; - AVDictionary* opt = nullptr; - - av_dict_copy(&opt, opt_arg, 0); - /* open the codec */ - ret = avcodec_open2(c, codec, &opt); - av_dict_free(&opt); - if (ret < 0) { - cerr << "Could not open video codec: " << av_err2str(ret) << endl; - return false; - } - /* allocate and init a re-usable frame */ - PStreamContex.frame = __alloc_picture(c->pix_fmt, c->width, c->height); - if (!PStreamContex.frame) { - cerr << "Could not allocate video frame" << endl; - return false; - } - /* If the output format is not YUV420P, then a temporary YUV420P - * picture is needed too. It is then converted to the required - * output format. */ - PStreamContex.tmp_frame = nullptr; - if (c->pix_fmt != STREAM_PIX_FMT) { - PStreamContex.tmp_frame = __alloc_picture(STREAM_PIX_FMT, c->width, c->height); - if (!PStreamContex.tmp_frame) { - cerr << "Could not allocate temporary picture" << endl; - return false; - } - } - /* copy the stream parameters to the muxer */ - ret = avcodec_parameters_from_context(PStreamContex.st->codecpar, c); - if (ret < 0) { - cerr << "Could not copy the stream parameters" << endl; - return false; - } - return true; -} - -cmpc::AVFrame* cmpc::CMpegEncoder::__get_video_frame(PyArrayObject* PyFrame) { - auto c = PStreamContex.enc; - - /* check if we want to generate more frames */ - //if (av_compare_ts(PStreamContex.next_pts, c->time_base, STREAM_DURATION, { 1, 1 }) >= 0) - // return nullptr; - /* when we pass a frame to the encoder, it may keep a reference to it - * internally; make sure we do not overwrite it here */ - if (av_frame_make_writable(PStreamContex.frame) < 0) - return nullptr; - if (c->pix_fmt != STREAM_PIX_FMT) { - /* as we only generate a YUV420P picture, we must convert it - * to the codec pixel format if needed */ - if (!PStreamContex.sws_ctx) { - PStreamContex.sws_ctx = sws_getContext(c->width, c->height, - STREAM_PIX_FMT, - c->width, c->height, - c->pix_fmt, - SCALE_FLAGS, nullptr, nullptr, nullptr); - if (!PStreamContex.sws_ctx) { - cerr << "Could not initialize the conversion context" << endl; - return nullptr; - } - } - if (!_LoadFrame_castFromPyFrameArray(PStreamContex.tmp_frame, PyFrame)) { - return nullptr; - } - sws_scale(PStreamContex.sws_ctx, - (const uint8_t* const*)PStreamContex.tmp_frame->data, PStreamContex.tmp_frame->linesize, - 0, c->height, PStreamContex.frame->data, PStreamContex.frame->linesize); - } - else { - if (!_LoadFrame_castFromPyFrameArray(PStreamContex.frame, PyFrame)) { - return nullptr; - } - } - - PStreamContex.frame->pts = PStreamContex.next_frame; - PStreamContex.next_frame++; - return PStreamContex.frame; -} - -bool cmpc::CMpegEncoder::_LoadFrame_castFromPyFrameArray(AVFrame* frame, PyArrayObject* PyFrame) { - /* make sure the frame data is writable */ - if (!__frameRGB) { - cerr << "Could not allocate frameRGB" << endl; - return false; - } - auto out_dataptr = reinterpret_cast(PyArray_DATA(PyFrame)); - auto srcwidth = widthSrc > 0 ? widthSrc : width; - auto srcheight = heightSrc > 0 ? heightSrc : height; - memcpy(RGBbuffer, out_dataptr, static_cast(srcwidth) * static_cast(srcheight) * 3 * sizeof(uint8_t)); - // Assign appropriate parts of buffer to image planes in pFrameRGB Note that pFrameRGB is an AVFrame, but AVFrame is a superset of AVPicture - av_image_fill_arrays(__frameRGB->data, __frameRGB->linesize, RGBbuffer, AVPixelFormat::AV_PIX_FMT_RGB24, srcwidth, srcheight, 1); - sws_scale(PswsCtx, __frameRGB->data, __frameRGB->linesize, 0, srcheight, frame->data, frame->linesize); - //cout << "Free 1" << endl; - //delete frameRGB; - //cout << "Free 2" << endl; - return true; -} - -/* -* encode one video frame and send it to the muxer -* return 1 when encoding is finished, 0 otherwise -*/ -int cmpc::CMpegEncoder::__avcodec_encode_video2(AVCodecContext* enc_ctx, AVPacket* pkt, AVFrame* frame) { - int ret; - int wfret = 0; - - if (frame) { - if (__dumpControl > 1) { - std::ostringstream str_data; - str_data << "Send frame " << frame->pts << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_DEBUG, "%s", str_data_s.c_str()); - } - } - else { - return AVERROR(EAGAIN); - } - - ret = avcodec_send_frame(enc_ctx, frame); - // In particular, we don't expect AVERROR(EAGAIN), because we read all - // decoded frames with avcodec_receive_frame() until done. - if (ret < 0) { - return ret == AVERROR_EOF ? 0 : ret; - } - - ret = avcodec_receive_packet(enc_ctx, pkt); - if (ret == AVERROR(EAGAIN)) - return 0; - - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "Write packet " << pkt->pts << " (size=" << pkt->size << "), "; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - if (!ret) { - wfret = __write_frame(); - av_packet_unref(Ppacket); - if (wfret < 0) { - cerr << "Error while writing video frame: " << av_err2str(ret) << endl; - return wfret; - } - } - return ret; -} - -int cmpc::CMpegEncoder::__avcodec_encode_video2_flush(AVCodecContext* enc_ctx, AVPacket* pkt) { - int ret; - int wfret = 0; - if (__dumpControl > 1) { - std::ostringstream str_data; - str_data << "Flush all packets" << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_DEBUG, "%s", str_data_s.c_str()); - } - - ret = avcodec_send_frame(enc_ctx, nullptr); - // In particular, we don't expect AVERROR(EAGAIN), because we read all - // decoded frames with avcodec_receive_frame() until done. - if (ret < 0) { - return ret == AVERROR_EOF ? 0 : ret; - } - - while (ret >= 0) { - ret = avcodec_receive_packet(enc_ctx, pkt); - if (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) { - return 0; - } - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "Write packet " << pkt->pts << " (size=" << pkt->size << "), "; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - if (!ret) { - wfret = __write_frame(); - av_packet_unref(pkt); - } - else { - wfret = 0; - } - if (wfret < 0) { - cerr << "Error while writing video frame: " << av_err2str(ret) << endl; - return wfret; - } - } - return ret; -} - -int cmpc::CMpegEncoder::EncodeFrame(PyArrayObject* PyFrame) { - int ret; - auto c = PStreamContex.enc; - AVFrame* frame = nullptr; - if ((!__have_video) || (!__enable_header)) - cerr << "Not allowed to use this method before FFmpegSetup()" << endl; - if (PyFrame) { - frame = __get_video_frame(PyFrame); - ret = __avcodec_encode_video2(c, Ppacket, frame); - } - else { - frame = nullptr; - ret = __avcodec_encode_video2_flush(c, Ppacket); - } - - if (ret < 0) { - cerr << "Error encoding video frame: " << av_err2str(ret) << endl; - return ret; - } - return frame ? 0 : 1; -} - -void cmpc::CMpegEncoder::setParameter(string keyword, void* ptr) { - if (keyword.compare("decoder") == 0) { - CMpegDecoder* ref = reinterpret_cast(ptr); - resetPath(ref->videoPath); - codecName.assign(ref->_str_codec); - if (ref->PCodecCtx) { - bitRate = ref->PCodecCtx->bit_rate; - GOPSize = ref->PCodecCtx->gop_size; - MaxBFrame = ref->PCodecCtx->max_b_frames; - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->PCodecCtx->thread_count; - } - nthread = ref->PCodecCtx->thread_count; - } - else { - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->nthread; - } - nthread = ref->nthread; - } - if (ref->widthDst > 0 && ref->heightDst > 0) { - width = ref->widthDst; - height = ref->heightDst; - } - else { - width = ref->width; - height = ref->height; - } - widthSrc = width; - heightSrc = height; - if (ref->PVideoStream) { - //timeBase = ref->PVideoStream->time_base; - frameRate = ref->PVideoStream->avg_frame_rate; - timeBase = _setAVRational(frameRate.den, frameRate.num); - } - } - else if (keyword.compare("client") == 0) { - CMpegClient* ref = reinterpret_cast(ptr); - resetPath(ref->videoPath); - codecName.assign(ref->_str_codec); - if (ref->PCodecCtx) { - bitRate = ref->PCodecCtx->bit_rate; - GOPSize = ref->PCodecCtx->gop_size; - MaxBFrame = ref->PCodecCtx->max_b_frames; - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->PCodecCtx->thread_count; - } - nthread = ref->PCodecCtx->thread_count; - } - else { - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->nthread; - } - nthread = ref->nthread; - } - if (ref->widthDst > 0 && ref->heightDst > 0) { - width = ref->widthDst; - height = ref->heightDst; - } - else { - width = ref->width; - height = ref->height; - } - widthSrc = width; - heightSrc = height; - if (ref->PVideoStream) { - //timeBase = ref->PVideoStream->time_base; - frameRate = ref->PVideoStream->avg_frame_rate; - timeBase = _setAVRational(frameRate.den, frameRate.num); - } - } - else if (keyword.compare("configDict") == 0) { - PyObject* ref = reinterpret_cast(ptr); - if (PyDict_Check(ref)) { - string key; - PyObject* val; - // Set parameters. - key.assign("videoPath"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyBytes_Check(val)) { - auto val_str = string(PyBytes_AsString(val)); - resetPath(val_str); - } - } - else { - key.assign("videoAddress"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyBytes_Check(val)) { - auto val_str = string(PyBytes_AsString(val)); - resetPath(val_str); - } - } - } - key.assign("codecName"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyBytes_Check(val)) { - auto val_str = string(PyBytes_AsString(val)); - codecName.assign(val_str); - } - } - key.assign("bitRate"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLongLong(val)); - bitRate = val_num; - } - } - key.assign("GOPSize"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - GOPSize = val_num; - } - } - key.assign("maxBframe"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - MaxBFrame = val_num; - } - } - key.assign("width"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - width = val_num; - widthSrc = val_num; - } - } - key.assign("height"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - height = val_num; - heightSrc = val_num; - } - } - key.assign("widthSrc"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_1 = static_cast(PyLong_AsLong(val)); - key.assign("heightSrc"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_2 = static_cast(PyLong_AsLong(val)); - widthSrc = val_num_1; - heightSrc = val_num_2; - } - } - } - } - key.assign("widthDst"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_1 = static_cast(PyLong_AsLong(val)); - key.assign("heightDst"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_2 = static_cast(PyLong_AsLong(val)); - width = val_num_1; - height = val_num_2; - } - } - } - } - key.assign("frameRate"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyTuple_Check(val)) { - auto valObj = PyTuple_GetItem(val, 0); - int num = static_cast(PyLong_AsLong(valObj)); - valObj = PyTuple_GetItem(val, 1); - int den = static_cast(PyLong_AsLong(valObj)); - frameRate = _setAVRational(num, den); - timeBase = _setAVRational(den, num); - } - } - key.assign("nthread"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = val_num; - } - nthread = val_num; - } - } - } - } - else if (keyword.compare("videoPath") == 0) { - string* ref = reinterpret_cast(ptr); - resetPath(*ref); - } - else if (keyword.compare("codecName") == 0) { - string* ref = reinterpret_cast(ptr); - codecName.assign(*ref); - } - else if (keyword.compare("bitRate") == 0) { - double* ref = reinterpret_cast(ptr); - auto bit_rate = static_cast((*ref) * 1024); - bitRate = bit_rate; - } - else if (keyword.compare("width") == 0) { - int* ref = reinterpret_cast(ptr); - width = *ref; - } - else if (keyword.compare("height") == 0) { - int* ref = reinterpret_cast(ptr); - height = *ref; - } - else if (keyword.compare("widthSrc") == 0) { - int* ref = reinterpret_cast(ptr); - widthSrc = *ref; - } - else if (keyword.compare("heightSrc") == 0) { - int* ref = reinterpret_cast(ptr); - heightSrc = *ref; - } - else if (keyword.compare("GOPSize") == 0) { - int* ref = reinterpret_cast(ptr); - GOPSize = *ref; - } - else if (keyword.compare("maxBframe") == 0) { - int* ref = reinterpret_cast(ptr); - MaxBFrame = *ref; - } - else if (keyword.compare("frameRate") == 0) { - PyObject* ref = reinterpret_cast(ptr); - auto refObj = PyTuple_GetItem(ref, 0); - int num = static_cast(PyLong_AsLong(refObj)); - refObj = PyTuple_GetItem(ref, 1); - int den = static_cast(PyLong_AsLong(refObj)); - frameRate = _setAVRational(num, den); - timeBase = _setAVRational(den, num); - } - else if (keyword.compare("nthread") == 0) { - auto ref = reinterpret_cast(ptr); - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = *ref; - } - nthread = *ref; - } -} - -PyObject* cmpc::CMpegEncoder::getParameter(string keyword) { - if (keyword.compare("videoPath") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(videoPath.c_str(), static_cast(videoPath.size())); - } - else if (keyword.compare("codecName") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(codecName.c_str(), static_cast(codecName.size())); - } - else if (keyword.compare("bitRate") == 0) { - auto bit_rate = static_cast(bitRate) / 1024; - return Py_BuildValue("d", bit_rate); - } - else if (keyword.compare("width") == 0) { - return Py_BuildValue("i", width); - } - else if (keyword.compare("height") == 0) { - return Py_BuildValue("i", height); - } - else if (keyword.compare("widthSrc") == 0) { - return Py_BuildValue("i", widthSrc); - } - else if (keyword.compare("heightSrc") == 0) { - return Py_BuildValue("i", heightSrc); - } - else if (keyword.compare("GOPSize") == 0) { - return Py_BuildValue("i", GOPSize); - } - else if (keyword.compare("maxBframe") == 0) { - return Py_BuildValue("i", MaxBFrame); - } - else if (keyword.compare("frameRate") == 0) { - auto frame_base = frameRate; - double frameRate = static_cast(frame_base.num) / static_cast(frame_base.den); - return Py_BuildValue("d", frameRate); - } - else if (keyword.compare("nthread") == 0) { - if (PStreamContex.enc) { - return Py_BuildValue("i", PStreamContex.enc->thread_count); - } - else { - return Py_BuildValue("i", nthread); - } - } - else { - Py_RETURN_NONE; - } -} - -PyObject* cmpc::CMpegEncoder::getParameter() { - auto res = PyDict_New(); - string key; - PyObject* val = nullptr; - // Fill the values. - key.assign("videoPath"); - val = Py_BuildValue("y", videoPath.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("codecName"); - val = Py_BuildValue("y", codecName.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("bitRate"); - val = Py_BuildValue("L", bitRate); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("GOPSize"); - val = Py_BuildValue("i", GOPSize); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("maxBframe"); - val = Py_BuildValue("i", MaxBFrame); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (widthSrc > 0) { - key.assign("widthSrc"); - val = Py_BuildValue("i", widthSrc); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - if (heightSrc > 0) { - key.assign("heightSrc"); - val = Py_BuildValue("i", heightSrc); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - key.assign("width"); - val = Py_BuildValue("i", width); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("height"); - val = Py_BuildValue("i", height); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("frameRate"); - val = Py_BuildValue("(ii)", frameRate.num, frameRate.den); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (PStreamContex.enc) { - key.assign("nthread"); - val = Py_BuildValue("i", PStreamContex.enc->thread_count); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - else { - key.assign("nthread"); - val = Py_BuildValue("i", nthread); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - return res; -} - -bool cmpc::CMpegEncoder::FFmpegSetup() { - const AVCodec* video_codec; - int ret; - - if (Ppacket) - av_packet_free(&Ppacket); - Ppacket = av_packet_alloc(); - if (!Ppacket) - return false; - - AVDictionary* opt = nullptr; - //av_dict_set(&opt, "vcodec", codecName.c_str(), 0); - //av_dict_set(&opt, "fflags", "", 0); - - /* allocate the output media context */ - //auto getFormat = av_guess_format(codecName.c_str(), nullptr, nullptr); - avformat_alloc_output_context2(&PFormatCtx, nullptr, nullptr, videoPath.c_str()); - PFormatCtx->avoid_negative_ts = AVFMT_AVOID_NEG_TS_AUTO; - if (!PFormatCtx) { - cout << "Could not select the encoder automatically: using MPEG." << endl; - //cout << "Could not deduce output format from file extension: using MPEG." << endl; - avformat_alloc_output_context2(&PFormatCtx, nullptr, "mpeg", videoPath.c_str()); - } - if (!PFormatCtx) - return false; - - auto fmt = PFormatCtx->oformat; - - /* Add the audio and video streams using the default format codecs - * and initialize the codecs. */ - if (fmt->video_codec != AVCodecID::AV_CODEC_ID_NONE) { - video_codec = __add_stream(); - if (!video_codec) { - FFmpegClose(); - return false; - } - else - __have_video = true; - } - else { - video_codec = nullptr; - } - - /* Now that all the parameters are set, we can open the audio and - * video codecs and allocate the necessary encode buffers. */ - if (__have_video) { - if (!__open_video(video_codec, opt)) { - FFmpegClose(); - return false; - } - else - __have_video = true; - } - - if (__dumpControl > 1) { - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 1); - } - - /* open the output file, if needed */ - if (!(fmt->flags & AVFMT_NOFILE)) { - ret = avio_open2(&PFormatCtx->pb, videoPath.c_str(), AVIO_FLAG_WRITE, nullptr, nullptr); - if (ret < 0) { - cerr << "Could not open '" << videoPath << "': " << av_err2str(ret) << endl; - FFmpegClose(); - return false; - } - } - - if (!(__frameRGB = av_frame_alloc())) { - cerr << "Could Allocate Temp Frame" << endl; - FFmpegClose(); - return false; - } - - /* Write the stream header, if any. */ - ret = avformat_write_header(PFormatCtx, &opt); - if (ret < 0) { - cerr << "Error occurred when opening output file: " << av_err2str(ret) << endl; - FFmpegClose(); - return false; - } - else { - __enable_header = true; - } - return true; -} - -void cmpc::CMpegEncoder::FFmpegClose() { - if (__enable_header && __have_video) { - //cout << "Flush Video" << endl; - int x; - if ((x = EncodeFrame(nullptr)) == 0) { - // cout << "Ret: " << x << endl; - } - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "All frames are flushed from cache, the video would be closed." << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - } - if (PFormatCtx) { - if (__enable_header) { - av_write_trailer(PFormatCtx); - __enable_header = false; - } - /* Close each codec. */ - if (__have_video) { - /* free the stream */ - //avformat_free_context(PFormatCtx); - if (PStreamContex.enc) - avcodec_free_context(&PStreamContex.enc); - if (PStreamContex.frame) - av_frame_free(&PStreamContex.frame); - if (PStreamContex.tmp_frame) - av_frame_free(&PStreamContex.tmp_frame); - if (PStreamContex.sws_ctx) { - sws_freeContext(PStreamContex.sws_ctx); - PStreamContex.sws_ctx = nullptr; - } - if (PswsCtx) { - sws_freeContext(PswsCtx); - PswsCtx = nullptr; - } - if (RGBbuffer) { - av_free(RGBbuffer); - RGBbuffer = nullptr; - } - __have_video = false; - } - auto fmt = PFormatCtx->oformat; - if (!(fmt->flags & AVFMT_NOFILE)) - /* Close the output file. */ - avio_closep(&PFormatCtx->pb); - /* free the stream */ - avformat_free_context(PFormatCtx); - PFormatCtx = nullptr; - } - if (Ppacket) { - av_packet_free(&Ppacket); - Ppacket = nullptr; - } - if (__frameRGB) { - av_frame_free(&__frameRGB); - } -} - -void cmpc::CMpegEncoder::dumpFormat() { - if (PFormatCtx) - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 1); - else - cerr << "Not loaded video format context now. dumpFormat() is not avaliable." << endl; -} - -ostream& cmpc::operator<<(ostream& out, cmpc::CMpegEncoder& self_class) { - out << std::setw(1) << "/"; - out << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setw(1) << " * Packed FFmpeg Encoder - Y. Jin V" << MPEGCODER_CURRENT_VERSION << endl; - out << " " << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * VideoPath: " \ - << self_class.videoPath << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (Width, Height): " \ - << self_class.width << ", " << self_class.height << endl; - if (self_class.widthSrc > 0 && self_class.heightSrc > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (WidthSrc, HeightSrc): " \ - << self_class.widthSrc << ", " << self_class.heightSrc << endl; - } - else if (self_class.widthSrc > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * WidthSrc: " \ - << self_class.widthSrc << endl; - } - else if (self_class.heightSrc > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * HeightSrc: " \ - << self_class.heightSrc << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Enccoder: " \ - << self_class.codecName << endl; - if (self_class.PStreamContex.enc) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number: " \ - << self_class.PStreamContex.enc->thread_count << endl; - } - else { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number (P): " \ - << self_class.nthread << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Bit Rate: " \ - << (self_class.bitRate >> 10) << " [Kbit/s]" << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Frame Rate: " \ - << static_cast(self_class.frameRate.num) / static_cast(self_class.frameRate.den) << " [FPS]" << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * GOP Size: " \ - << self_class.GOPSize << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Maxmal Bframe Density: " \ - << self_class.MaxBFrame << " [/GOP]" << endl; - out << std::setw(1) << " */"; - return out; -} diff --git a/MpegCoder/MpegCoder.h b/MpegCoder/MpegCoder.h deleted file mode 100644 index 2ddf98b..0000000 --- a/MpegCoder/MpegCoder.h +++ /dev/null @@ -1,137 +0,0 @@ -// 下列 ifdef 块是创建使从 DLL 导出更简单的 -// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MPEGCODER_EXPORT -// 符号编译的。在使用此 DLL 的 -// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 -// MPEGCODER_API 函数视为自 DLL 导入,而此 DLL 则将用此宏定义的 -// 符号视为是被导出的。 -#ifndef MPEGCODER_H_INCLUDED -#define MPEGCODER_H_INCLUDED - -#include "MpegBase.h" - -#define MPEGCODER_DEBUG - -// Exported from MpegCoder.dll -namespace cmpc { - - extern int8_t __dumpControl; - class CMpegClient; - class CMpegServer; - - class CMpegDecoder { - public: - CMpegDecoder(void); // Constructor. - ~CMpegDecoder(void); // 3-5 law. Destructor. - CMpegDecoder(const CMpegDecoder& ref); // Copy constructor. - CMpegDecoder& operator=(const CMpegDecoder& ref); // Copy assignment operator. - CMpegDecoder(CMpegDecoder&& ref) noexcept; // Move constructor. - CMpegDecoder& operator=(CMpegDecoder&& ref) noexcept; // Move assignment operator. - friend class CMpegEncoder; // Let the encoder be able to access the member of this class. - friend class CMpegServer; // Let the server be able to access the member of this class. - friend ostream& operator<<(ostream& out, CMpegDecoder& self_class); // Show the results. - void clear(void); // Clear all configurations and resources. - void meta_protected_clear(void); // Clear the resources, but the configurations are remained. - void dumpFormat(); // Show the av_format results. - void setParameter(string keyword, void* ptr); // Set arguments. - PyObject* getParameter(string keyword); // Get the current arguments. - PyObject* getParameter(); // Get all key arguments. - void resetPath(string inVideoPath); // Reset the path (encoded) of the online video stream. - bool FFmpegSetup(); // Configure the decoder, and extract the basic meta-data. This method is also equipped in the constructor. - bool FFmpegSetup(string inVideoPath); // Configure the decoder with extra arguments. - bool ExtractFrame(PyObject* PyFrameList, int64_t framePos, int64_t frameNum, double timePos, int mode); // Extract n frames as PyFrame, where n is given by frameNum, and the starting postion is given by framePos. - bool ExtractGOP(PyObject* PyFrameList); // Extract a GOP as PyFrames. - void setGOPPosition(int64_t inpos); // Set the current GOP poistion by the index of frames. - void setGOPPosition(double inpos); // Set the cuurent GOP position by the time. - private: - string videoPath; // The path of video stream to be decoded. - int width, height; // Width, height of the video. - int widthDst, heightDst; // Target width, height of ExtractFrame(). - enum AVPixelFormat PPixelFormat; // Enum object of the pixel format. - AVFormatContext* PFormatCtx; // Format context of the video. - AVCodecContext* PCodecCtx; // Codec context of the video. - AVStream* PVideoStream; // Video stream. - - int PVideoStreamIDX; // The index of the video stream. - int PVideoFrameCount; // The counter of the decoded frames. - uint8_t* RGBbuffer; // The buffer of the RGB formatted images. - struct SwsContext* PswsCtx; // The context of the scale transformator. - - string _str_codec; // Show the name of the current codec. - double _duration; // Show the time of the video play. - int64_t _predictFrameNum; // The prediction of the total number of frames. - - int64_t currentGOPTSM; // The timestamp where the GOP cursor is pointinng to. - bool EndofGOP; // A flag of reading GOP. This value need to be reset to be false by the reset methods. - int nthread; // The number of threads; - - /* Enable or disable frame reference counting. You are not supposed to support - * both paths in your application but pick the one most appropriate to your - * needs. Look for the use of refcount in this example to see what are the - * differences of API usage between them. */ - int refcount; // Reference count of the video frame. - int _open_codec_context(int& stream_idx, AVCodecContext*& dec_ctx, AVFormatContext* PFormatCtx, enum AVMediaType type); - int _SaveFrame(PyObject* PyFrameList, AVFrame*& frame, AVFrame*& frameRGB, AVPacket*& pkt, bool& got_frame, int64_t minPTS, bool& processed, int cached); - int _SaveFrameForGOP(PyObject* PyFrameList, AVFrame*& frame, AVFrame*& frameRGB, AVPacket*& pkt, bool& got_frame, int& GOPstate, bool& processed, int cached); - PyObject* _SaveFrame_castToPyFrameArray(uint8_t* data[], int fWidth, int fHeight); - PyObject* _SaveFrame_castToPyFrameArrayOld(uint8_t* data[], int fWidth, int fHeight); - int __avcodec_decode_video2(AVCodecContext* avctx, AVFrame* frame, bool& got_frame, AVPacket* pkt); - int64_t __FrameToPts(int64_t seekFrame) const; - int64_t __TimeToPts(double seekTime) const; - }; - - class CMpegEncoder { - public: - CMpegEncoder(void); // Constructor. - ~CMpegEncoder(void); // 3-5 law. Destructor. - CMpegEncoder(const CMpegEncoder& ref); // Copy constructor. - CMpegEncoder& operator=(const CMpegEncoder& ref); // Copy assignment operator. - CMpegEncoder(CMpegEncoder&& ref) noexcept; // Move constructor. - CMpegEncoder& operator=(CMpegEncoder&& ref) noexcept; // Move assignment operator. - friend ostream& operator<<(ostream& out, CMpegEncoder& self_class); // Show the results. - void clear(void); // Clear all configurations and resources. - void resetPath(string inVideoPath); // Reset the path of the output video stream. - void dumpFormat(); // Show the av_format results. - bool FFmpegSetup(); // Configure the encoder, and create the file handle. This method is also equipped in the constructor. - bool FFmpegSetup(string inVideoPath); // Configure the encoder with extra arguments. - void FFmpegClose(); // Close the encoder, and finalize the written of the encoded video. - int EncodeFrame(PyArrayObject* PyFrame); // Encode one frame. - void setParameter(string keyword, void* ptr); // Set arguments. - PyObject* getParameter(string keyword); // Get the current arguments. - PyObject* getParameter(); // Get all key arguments. - private: - string videoPath; // The path of the output video stream. - string codecName; // The name of the codec - int64_t bitRate; // The bit rate of the output video. - int width, height; // The size of the frames in the output video. - int widthSrc, heightSrc; // The size of the input data (frames). - AVRational timeBase, frameRate; // The time base and the frame rate. - int GOPSize, MaxBFrame; // The size of GOPs, and the maximal number of B frames. - OutputStream PStreamContex; // The context of the current video parser. - AVFormatContext* PFormatCtx; // Format context of the video. - AVPacket* Ppacket; // AV Packet used for writing frames. - struct SwsContext* PswsCtx; // The context of the scale transformator. - AVFrame* __frameRGB; // A temp AV frame object. Used for converting the data format. - uint8_t* RGBbuffer; // Data buffer. - bool __have_video, __enable_header; - - int nthread; // The number of threads; - - AVRational _setAVRational(int num, int den); - int64_t __FrameToPts(int64_t seekFrame) const; - int64_t __TimeToPts(double seekTime) const; - bool _LoadFrame_castFromPyFrameArray(AVFrame* frame, PyArrayObject* PyFrame); - void __log_packet(); - int __write_frame(); - const AVCodec* __add_stream(); - AVFrame* __alloc_picture(enum AVPixelFormat pix_fmt, int width, int height); - bool __open_video(const AVCodec* codec, const AVDictionary* opt_arg); - AVFrame* __get_video_frame(PyArrayObject* PyFrame); - int __avcodec_encode_video2(AVCodecContext* enc_ctx, AVPacket* pkt, AVFrame* frame); - int __avcodec_encode_video2_flush(AVCodecContext* enc_ctx, AVPacket* pkt); - }; - - ostream& operator<<(ostream& out, CMpegDecoder& self_class); - ostream& operator<<(ostream& out, CMpegEncoder& self_class); -} - -#endif diff --git a/MpegCoder/MpegCoder.vcxproj b/MpegCoder/MpegCoder.vcxproj deleted file mode 100644 index 8aeef01..0000000 --- a/MpegCoder/MpegCoder.vcxproj +++ /dev/null @@ -1,196 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {57C5DB39-2AA7-40DD-B7E1-162B3E7F7044} - Win32Proj - MpegCoder - 10.0 - - - - DynamicLibrary - true - v143 - Unicode - - - DynamicLibrary - false - v143 - true - Unicode - - - DynamicLibrary - true - v143 - Unicode - - - DynamicLibrary - false - v143 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - C:\Program Files\Python37\include;../include;$(IncludePath) - C:\Program Files\Python37\libs;../lib;$(LibraryPath) - - - true - C:\Users\cainm\.conda\envs\py310\include;C:\Users\cainm\.conda\envs\py310\lib\site-packages\numpy\core\include;..\include;$(IncludePath) - C:\Users\cainm\.conda\envs\py310\libs;C:\Users\cainm\.conda\envs\py310\lib\site-packages\numpy\core\lib;..\lib;$(LibraryPath) - - - false - C:\Program Files\Python37\include;../include;$(IncludePath) - C:\Program Files\Python37\libs;../lib;$(LibraryPath) - - - false - C:\Users\cainm\.conda\envs\py310\include;C:\Users\cainm\.conda\envs\py310\lib\site-packages\numpy\core\include;..\include;$(IncludePath) - C:\Users\cainm\.conda\envs\py310\libs;C:\Users\cainm\.conda\envs\py310\lib\site-packages\numpy\core\lib;..\lib;$(LibraryPath) - - - - Use - Level3 - Disabled - WIN32;_DEBUG;MpegCoder_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - avcodec.lib;avdevice.lib;avfilter.lib;avformat.lib;avutil.lib;postproc.lib;swresample.lib;swscale.lib;%(AdditionalDependencies) - - - - - Use - Level3 - Disabled - _DEBUG;MpegCoder_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - true - - - Windows - true - python310.lib;python3.lib;npymath.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;%(AdditionalDependencies) - - - echo F | xcopy /y /i "$(OutDir)$(TargetName)$(TargetExt)" "$(OutDir)mpegCoder.pyd" - - - - - Use - Level3 - MaxSpeed - true - true - WIN32;NDEBUG;MpegCoder_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - true - true - avcodec.lib;avdevice.lib;avfilter.lib;avformat.lib;avutil.lib;postproc.lib;swresample.lib;swscale.lib;%(AdditionalDependencies) - - - - - Use - Level3 - MaxSpeed - true - true - NDEBUG;MpegCoder_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - true - - - Windows - true - true - true - python310.lib;python3.lib;npymath.lib;avcodec.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;%(AdditionalDependencies) - - - echo F | xcopy /y /i "$(OutDir)$(TargetName)$(TargetExt)" "$(OutDir)mpegCoder.pyd" - - - - - - - - - - - - - - - - - - Create - Create - Create - Create - - - - - - - - - - - - - \ No newline at end of file diff --git a/MpegCoder/MpegCoder.vcxproj.filters b/MpegCoder/MpegCoder.vcxproj.filters deleted file mode 100644 index 573b077..0000000 --- a/MpegCoder/MpegCoder.vcxproj.filters +++ /dev/null @@ -1,64 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - - - 源文件 - - - 源文件 - - - 源文件 - - - 源文件 - - - 源文件 - - - 源文件 - - - - - - - - - - \ No newline at end of file diff --git a/MpegCoder/MpegCoder.vcxproj.user b/MpegCoder/MpegCoder.vcxproj.user deleted file mode 100644 index be25078..0000000 --- a/MpegCoder/MpegCoder.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/MpegCoder/MpegPyd.h b/MpegCoder/MpegPyd.h deleted file mode 100644 index 4aaa373..0000000 --- a/MpegCoder/MpegPyd.h +++ /dev/null @@ -1,1675 +0,0 @@ -#ifndef MPEGPYD_H_INCLUDED -#define MPEGPYD_H_INCLUDED - -#define PY_ARRAY_UNIQUE_SYMBOL MPEGARRAY_API - -#include -#include -#include -#include -#include -#include -#include -#include -#include "MpegCoder.h" -#include "MpegStreamer.h" -using std::string; -using std::ostringstream; - -PyObject *str2PyStr(string Str) { // Convert the output string to the widechar unicode string. - int wlen = MultiByteToWideChar(CP_ACP, NULL, Str.c_str(), int(Str.size()), NULL, 0); - wchar_t* wszString = new wchar_t[static_cast(wlen) + 1]; - MultiByteToWideChar(CP_ACP, NULL, Str.c_str(), int(Str.size()), wszString, wlen); - wszString[wlen] = 0; - PyObject* res = PyUnicode_FromWideChar(wszString, wlen); - delete[] wszString; - return res; -} - -bool PyStr2str(PyObject* py_str, string& s_str) { // Convert a python str to std::string. - if (!py_str) { - return false; - } - if (PyUnicode_Check(py_str)) { - auto py_bytes = PyUnicode_EncodeFSDefault(py_str); - if (!py_bytes) { - PyErr_SetString(PyExc_TypeError, "Error.PyStr2str: fail to encode the unicode str.'"); - return false; - } - auto c_str = PyBytes_AsString(py_bytes); - if (!c_str) { - PyErr_SetString(PyExc_TypeError, "Error.PyStr2str: fail to parse data from the encoded str.'"); - return false; - } - s_str.assign(c_str); - Py_DECREF(py_bytes); - } - else { - if (PyBytes_Check(py_str)) { - auto c_str = PyBytes_AsString(py_str); - if (!c_str) { - PyErr_SetString(PyExc_TypeError, "Error.PyStr2str: fail to parse data from the bytes object.'"); - return false; - } - s_str.assign(c_str); - } - else { - PyErr_SetString(PyExc_TypeError, "Error.PyStr2str: fail to convert the object to string, maybe the object is not str or bytes.'"); - return false; - } - } - return true; -} - -/***************************************************************************** -* C style definition of Python classes. -* Each class would ref the C implemented class directly. -* No extra python data member is added to these classes, -* because the data members have been already packed as private members of the -* C classes. -*****************************************************************************/ -typedef struct _C_MpegDecoder -{ - PyObject_HEAD // == PyObject ob_base; Define the PyObject header. - cmpc::CMpegDecoder* _in_Handle; // Define the implementation of the C Object. -} C_MpegDecoder; - -typedef struct _C_MpegEncoder -{ - PyObject_HEAD // == PyObject ob_base; Define the PyObject header. - cmpc::CMpegEncoder* _in_Handle; // Define the implementation of the C Object. -} C_MpegEncoder; - -typedef struct _C_MpegClient -{ - PyObject_HEAD // == PyObject ob_base; Define the PyObject header. - cmpc::CMpegClient* _in_Handle; // Define the implementation of the C Object. -} C_MpegClient; - -typedef struct _C_MpegServer -{ - PyObject_HEAD // == PyObject ob_base; Define the PyObject header. - cmpc::CMpegServer* _in_Handle; // Define the implementation of the C Object. -} C_MpegServer; - -static PyMemberDef C_MPDC_DataMembers[] = // Register the members of the python class. -{ // Do not register any data, because all data of this class is private. - //{"m_dEnglish", T_FLOAT, offsetof(CScore, m_dEnglish), 0, "The English score of instance."}, - { "hAddress", T_ULONGLONG, offsetof(C_MpegDecoder, _in_Handle), READONLY, "The address of the handle in memory." }, - { nullptr, 0, 0, 0, nullptr } -}; - -static PyMemberDef C_MPEC_DataMembers[] = // Register the members of the python class. -{ // Do not register any data, because all data of this class is private. - //{"m_dEnglish", T_FLOAT, offsetof(CScore, m_dEnglish), 0, "The English score of instance."}, - { "hAddress", T_ULONGLONG, offsetof(C_MpegEncoder, _in_Handle), READONLY, "The address of the handle in memory." }, - { nullptr, 0, 0, 0, nullptr } -}; - -static PyMemberDef C_MPCT_DataMembers[] = // Register the members of the python class. -{ // Do not register any data, because all data of this class is private. - //{"m_dEnglish", T_FLOAT, offsetof(CScore, m_dEnglish), 0, "The English score of instance."}, - { "hAddress", T_ULONGLONG, offsetof(C_MpegClient, _in_Handle), READONLY, "The address of the handle in memory." }, - { nullptr, 0, 0, 0, nullptr } -}; - -static PyMemberDef C_MPSV_DataMembers[] = // Register the members of the python class. -{ // Do not register any data, because all data of this class is private. - //{"m_dEnglish", T_FLOAT, offsetof(CScore, m_dEnglish), 0, "The English score of instance."}, - { "hAddress", T_ULONGLONG, offsetof(C_MpegServer, _in_Handle), READONLY, "The address of the handle in memory." }, - { nullptr, 0, 0, 0, nullptr } -}; - -/***************************************************************************** -* Delearaction of all methods and functions. -* Prepare the function objects for the registeration of the classes and -* functions. -*****************************************************************************/ -/*static void Example(ClassName* Self, PyObject* pArgs); -PyMODINIT_FUNC PyFunc_Example(void);*/ - -static PyObject* C_MPC_Global(PyObject* Self, PyObject* args, PyObject* kwargs) { - char dumpLevel = -1; - cmpc::CharList kwlist_str({ "dumpLevel" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|B", kwlist, &dumpLevel)) { - PyErr_SetString(PyExc_TypeError, "Error.GlobalSettings: invalid keyword'"); - return nullptr; - } - if (dumpLevel != -1) { - cmpc::__dumpControl = static_cast(dumpLevel); - switch (dumpLevel) { - case 0: - cmpc::av_log_set_level(AV_LOG_ERROR); - break; - case 1: - cmpc::av_log_set_level(AV_LOG_INFO); - break; - case 2: - default: - cmpc::av_log_set_level(AV_LOG_DEBUG); - break; - } - } - Py_RETURN_NONE; -} - -static PyObject* C_MPC_Help(PyObject* Self) { - cout << R"(================================================================================ - __ _ _ _ _ ,___ - ( / / / o ( / ) ) / / / - (__/ , , _, /_ _ _ _' ( / / / ,_ _ _, / __ __/ _ _ - _/_(_/_(__/ /_(/_/ / /_/_)_ / / (__/|_)_(/_(_)_(___/(_)(_/_(/_/ (_ - // /| /| - (/ (/ (/ -================================================================================ -Yuchen's Mpeg Coder - Readme - This is a mpegcoder adapted from FFmpeg & Python-c-api.Using it you could - get access to processing video easily. Just use it as a common module in - python like this. - >>> import mpegCoder - Noted that this API need you to install numpy. - An example of decoding a video in an arbitrary format: - >>> d = mpegCoder.MpegDecoder() - >>> d.FFmpegSetup(b'inputVideo.mp4') - >>> p = d.ExtractGOP(10) # Get a gop of current video by setting the - start position of 10th frame. - >>> p = d.ExtractGOP() # Get a gop of current video, using the current - position after the last ExtractGOP. - >>> d.ExtractFrame(100, 100) # Extract 100 frames from the begining of - 100th frame. - An example of transfer the coding of a video with an assigned codec: - >>> d = mpegCoder.MpegDecoder() - >>> d.FFmpegSetup(b'i.avi') - >>> e = mpegCoder.MpegEncoder() - >>> e.setParameter(decoder=d, codecName=b'libx264', videoPath=b'o.mp4') - # inherit most of parameters from the decoder. - >>> opened = e.FFmpegSetup() # Load the encoder. - >>> if opened: # If encoder is not loaded successfully, do not continue. - ... p = True - ... while p: - ... p = d.ExtractGOP() # Extract current GOP. - ... if p is not None: - ... for i in p: # Select every frame. - ... e.EncodeFrame(i) # Encode current frame. - ... e.FFmpegClose() # End encoding, and flush all frames in cache. - >>> d.clear() # Close the input video. - An example of demuxing the video streamer from a server: - >>> d = mpegCoder.MpegClient() # create the handle - >>> d.setParameter(dstFrameRate=(5,1), readSize=5, cacheSize=12) - # normalize the frame rate to 5 FPS, and use a cache which size is - # 12 frames. Read 5 frames each time. - >>> success = d.FFmpegSetup(b'rtsp://localhost:8554/video') - >>> if not success: # exit if fail to connect with the server - ... exit() - >>> d.start() # start the sub-thread for demuxing the stream. - >>> for i in range(10): # processing loop - ... time.sleep(5) - ... p = d.ExtractFrame() # every 5 seconds, read 5 frames (1 sec.) - ... # do some processing - >>> d.terminate() # shut down the current thread. You could call start() - # and let it restart. - >>> d.clear() # Disconnect with the stream. - For more instructions, you could tap help(mpegCoder). -================================================================================ -V3.2.0 update report: - 1. Upgrade FFMpeg to 5.0. - 2. Fix the const assignment bug caused by the codec configuration method. -V3.1.0 update report: - 1. Support str() type for all string arguments. - 2. Support http, ftp, sftp streams for MpegServer. - 3. Support "nthread" option for MpegDecoder, MpegEncoder, MpegClient and - MpegServer. - 4. Fix a bug caused by the constructor MpegServer(). - 5. Clean up all gcc warnings of the source codes. - 6. Fix typos in docstrings. -V3.0.0 update report: - 1. Fix a severe memory leaking bugs when using AVPacket. - 2. Fix a bug caused by using MpegClient.terminate() when a video is closed - by the server. - 3. Support the MpegServer. This class is used for serving the online video - streams. - 4. Refactor the implementation of the loggings. - 5. Add getParameter() and setParameter(configDict) APIs to MpegEncoder and - MpegServer. - 6. Move FFMpeg depedencies and the OutputStream class to the cmpc space. - 7. Fix dependency issues and cpp standard issues. - 8. Upgrade to `FFMpeg 4.4` Version. - 9. Add a quick script for fetching the `FFMpeg` dependencies. -V2.05 update report: - 1. Fix a severe bug that causes the memory leak when using MpegClient. - This bug also exists in MpegDecoder, but it seems that the bug would not cause - memory leak in that case. (Although we have also fixed it now.) - 2. Upgrade to FFMpeg 4.0 Version. -V2.01 update report: - Fix a bug that occurs when the first received frame may has a PTS larger than - zero. -V2.0 update report: - 1. Revise the bug of the encoder which may cause the stream duration is shorter - than the real duration of the video in some not advanced media players. - 2. Improve the structure of the code and remove some unnecessary codes. - 3. Provide a complete version of client, which could demux the video stream - from a server in any network protocol. -V1.8 update report: - 1. Provide options (widthDst, heightDst) to let MpegDecoder could control the - output size manually. To ensure the option is valid, we must use the method - 'setParameter' before 'FFmpegSetup'. - 2. Optimize some realization of Decoder so that its efficiency could be - improved. -V1.7 update report: - 1. Realize the encoder totally. - 2. Provide a global option 'dumpLevel' to control the log shown in the screen. - 3. Fix bugs in initalize functions. -V1.5 update report: - 1. Provide an incomplete version of encoder, which could encode frames as a - video stream that could not be played by player. -V1.4 update report: - 1. Fix a severe bug of the decoder, which causes the memory collapsed if - decoding a lot of frames. -V1.2 update report: - 1. Use numpy array to replace the native pyList, which improves the speed - significantlly. -V1.0 update report: - 1. Provide the decoder which could decode videos in arbitrary formats and - arbitrary coding. -)"; - Py_RETURN_NONE; -} - -/***************************************************************************** -* Declare the core methods of the classes. -*****************************************************************************/ -static int C_MPDC_init(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { // Construct - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoPath" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.Initialize: need 'videoPath(str)'"); - return -1; - } - string in_vpath; - if (!vpath) { - in_vpath.clear(); - } - else if (!PyStr2str(vpath, in_vpath)) { - return -1; - } - Self->_in_Handle = new cmpc::CMpegDecoder; - if (!in_vpath.empty()) { - Self->_in_Handle->FFmpegSetup(in_vpath); - } - - in_vpath.clear(); - //cout << sizeof(Self->_in_Handle) << " - " << sizeof(unsigned long long) << endl; - return 0; -} - -static int C_MPEC_init(C_MpegEncoder* Self) { // Construct - Self->_in_Handle = new cmpc::CMpegEncoder; - return 0; -} - -static int C_MPCT_init(C_MpegClient* Self) { // Construct - Self->_in_Handle = new cmpc::CMpegClient; - return 0; -} - -static int C_MPSV_init(C_MpegServer* Self) { // Construct - Self->_in_Handle = new cmpc::CMpegServer; - return 0; -} - -static void C_MPDC_Destruct(C_MpegDecoder* Self) { // Destructor - delete Self->_in_Handle; // Delete the allocated class implementation. - /* If there are still other members, also need to deallocate them, - * for example, Py_XDECREF(Self->Member); */ - Py_TYPE(Self)->tp_free((PyObject*)Self); // Destruct the PyObject. -} - -static void C_MPEC_Destruct(C_MpegEncoder* Self) { // Destructor - delete Self->_in_Handle; // Delete the allocated class implementation. - /* If there are still other members, also need to deallocate them, - * for example, Py_XDECREF(Self->Member); */ - Py_TYPE(Self)->tp_free((PyObject*)Self); // Destruct the PyObject. -} - -static void C_MPCT_Destruct(C_MpegClient* Self) { // Destructor - delete Self->_in_Handle; // Delete the allocated class implementation. - /* If there are still other members, also need to deallocate them, - * for example, Py_XDECREF(Self->Member); */ - Py_TYPE(Self)->tp_free((PyObject*)Self); // Destruct the PyObject. -} - -static void C_MPSV_Destruct(C_MpegServer* Self) { // Destructor - delete Self->_in_Handle; // Delete the allocated class implementation. - /* If there are still other members, also need to deallocate them, - * for example, Py_XDECREF(Self->Member); */ - Py_TYPE(Self)->tp_free((PyObject*)Self); // Destruct the PyObject. -} - -static PyObject* C_MPDC_Str(C_MpegDecoder* Self) { // The __str__ (print) operator. - ostringstream OStr; - OStr << *(Self->_in_Handle); - string Str = OStr.str(); - return str2PyStr(Str); // Convert the string to unicode wide char. -} - -static PyObject* C_MPEC_Str(C_MpegEncoder* Self) { // The __str__ (print) operator. - ostringstream OStr; - OStr << *(Self->_in_Handle); - string Str = OStr.str(); - return str2PyStr(Str); // Convert the string to unicode wide char. -} - -static PyObject* C_MPCT_Str(C_MpegClient* Self) { // The __str__ (print) operator. - ostringstream OStr; - OStr << *(Self->_in_Handle); - string Str = OStr.str(); - return str2PyStr(Str); // Convert the string to unicode wide char. -} - -static PyObject* C_MPSV_Str(C_MpegServer* Self) { // The __str__ (print) operator. - ostringstream OStr; - OStr << *(Self->_in_Handle); - string Str = OStr.str(); - return str2PyStr(Str); // Convert the string to unicode wide char. -} - -static PyObject* C_MPDC_Repr(C_MpegDecoder* Self) { // The __repr__ operator. - return C_MPDC_Str(Self); -} - -static PyObject* C_MPEC_Repr(C_MpegEncoder* Self) { // The __repr__ operator. - return C_MPEC_Str(Self); -} - -static PyObject* C_MPCT_Repr(C_MpegClient* Self) { // The __repr__ operator. - return C_MPCT_Str(Self); -} - -static PyObject* C_MPSV_Repr(C_MpegServer* Self) { // The __repr__ operator. - return C_MPSV_Str(Self); -} - -/***************************************************************************** -* Define the Python-C-APIs for . -* C_MPDC_Setup: Configure the decoder by the video. -* C_MPDC_ExtractFrame Extract serveral frames. -*****************************************************************************/ -static PyObject* C_MPDC_Setup(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPDC_Setup method, the inputs are: - * videoPath [str/bytes->str]: the video path to be decoded. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoPath" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoPath(str)'"); - return nullptr; - } - string in_vpath; - if (!vpath) { - in_vpath.clear(); - } - else if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - bool res; - if (!in_vpath.empty()) - res = Self->_in_Handle->FFmpegSetup(in_vpath); - else - res = Self->_in_Handle->FFmpegSetup(); - - in_vpath.clear(); - if (res) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - -static PyObject* C_MPEC_Setup(C_MpegEncoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPEC_Setup method, the inputs are: - * videoPath [str/bytes->str]: the video path to be encoded. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoPath" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoPath(str)'"); - return nullptr; - } - string in_vpath; - if (!vpath) { - in_vpath.clear(); - } - else if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - bool res; - if (!in_vpath.empty()) - res = Self->_in_Handle->FFmpegSetup(in_vpath); - else - res = Self->_in_Handle->FFmpegSetup(); - - in_vpath.clear(); - if (res) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - -static PyObject* C_MPCT_Setup(C_MpegClient* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPCT_Setup method, the inputs are: - * videoAddress [str/bytes->str]: the video path to be demuxed. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoAddress" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoAddress(str)'"); - return nullptr; - } - string in_vpath; - if (!vpath) { - in_vpath.clear(); - } - else if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - bool res; - if (!in_vpath.empty()) - res = Self->_in_Handle->FFmpegSetup(in_vpath); - else - res = Self->_in_Handle->FFmpegSetup(); - - in_vpath.clear(); - if (res) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - -static PyObject* C_MPSV_Setup(C_MpegServer* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPSV_Setup method, the inputs are: - * videoAddress [str/bytes->str]: the video address to be served. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoAddress" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoAddress(str)'"); - return nullptr; - } - string in_vpath; - if (!vpath) { - in_vpath.clear(); - } - else if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - bool res; - if (!in_vpath.empty()) - res = Self->_in_Handle->FFmpegSetup(in_vpath); - else - res = Self->_in_Handle->FFmpegSetup(); - - in_vpath.clear(); - if (res) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - -static PyObject* C_MPDC_resetPath(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPDC_resetPath method, the inputs are: - * videoPath [str/bytes->str]: the video path to be decoded. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoPath" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoPath(str)'"); - return nullptr; - } - string in_vpath; - if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - Self->_in_Handle->resetPath(in_vpath); - - in_vpath.clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPEC_resetPath(C_MpegEncoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPEC_resetPath method, the inputs are: - * videoPath [str/bytes->str]: the video path to be encoded. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoPath" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoPath(str)'"); - return nullptr; - } - string in_vpath; - if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - Self->_in_Handle->resetPath(in_vpath); - - in_vpath.clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPCT_resetPath(C_MpegClient* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPCT_resetPath method, the inputs are: - * videoAddress [str/bytes->str]: the video path to be demuxed. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoAddress" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoAddress(str)'"); - return nullptr; - } - string in_vpath; - if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - Self->_in_Handle->resetPath(in_vpath); - - in_vpath.clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPSV_resetPath(C_MpegServer* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPSV_resetPath method, the inputs are: - * videoAddress [str/bytes->str]: the video address to be served. - */ - PyObject* vpath = nullptr; - cmpc::CharList kwlist_str({ "videoAddress" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &vpath)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'videoAddress(str)'"); - return nullptr; - } - string in_vpath; - if (!PyStr2str(vpath, in_vpath)) { - return nullptr; - } - Self->_in_Handle->resetPath(in_vpath); - - in_vpath.clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPCT_Start(C_MpegClient* Self) { - /* Wrapped (void)Start method, the input is required to be empty. */ - auto success = Self->_in_Handle->start(); - if (!success) { - PyErr_SetString(PyExc_ConnectionError, "Error.Start: before call this method, need to call FFmpegSetup() successfully, and also you should not call it when the decoding thread is running.'"); - return nullptr; - } - Py_RETURN_NONE; -} - -static PyObject* C_MPCT_Terminate(C_MpegClient* Self) { - /* Wrapped (void)Terminate method, the input is required to be empty. */ - Self->_in_Handle->terminate(); - Py_RETURN_NONE; -} - -/* Pay attention to the following two methods : - * Why do we remove the Py_IN/DECREF? - * Because no temp variables are created, so we do not need to manage them, - * but just use None as the returned value. */ -static PyObject* FreePyArray(PyArrayObject* PyArray) { - uint8_t* out_dataptr = (uint8_t*)PyArray_DATA(PyArray); - delete[] out_dataptr; - return nullptr; -} -void FreePyList(PyObject* PyList) { - Py_ssize_t getlen = PyList_Size(PyList); - for (Py_ssize_t i = 0; i < getlen; i++) { - PyObject* Item = PyList_GetItem(PyList, i); - FreePyArray((PyArrayObject*)Item); - } - Py_DECREF(PyList); - PyGC_Collect(); -} - -static PyObject* C_MPDC_ExtractFrame(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (int)ExtractFrame method, the inputs are: - * framePos [int->int64_t]: the start position of the extracted frames. - * frameNum [int->int64_t]: the number of extracted frames. - */ - int64_t framePos = 0, frameNum = 1; - cmpc::CharList kwlist_str({ "framePos", "frameNum" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|LL", kwlist, &framePos, &frameNum)) { - PyErr_SetString(PyExc_TypeError, "Error.ExtractFrame: need 'framePos(int)/frameNum(int)'"); - return nullptr; - } - PyObject* PyFrameList = PyList_New(static_cast(0)); - //cout << framePos << " - " << frameNum << endl; - bool res = Self->_in_Handle->ExtractFrame(PyFrameList, framePos, frameNum, 0, 0); - Py_ssize_t getlen = PyList_Size(PyFrameList); - res = res && (getlen > 0); - if (res) { - PyObject* PyFrameArray = PyArray_FromObject(PyFrameList, NPY_UINT8, 4, 4); - FreePyList(PyFrameList); - return PyFrameArray; - } - else { - Py_DECREF(PyFrameList); - PyGC_Collect(); - Py_RETURN_NONE; - } -} - -static PyObject* C_MPDC_ExtractFrame_Time(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (int)ExtractFrame method, the inputs are: - * timePos [float->double]: the start position (time unit) of the extracted frames. - * frameNum [int->int64_t]: the number of extracted frames. - */ - double timePos = 0; - int64_t frameNum = 1; - cmpc::CharList kwlist_str({ "timePos", "frameNum" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|dL", kwlist, &timePos, &frameNum)) { - PyErr_SetString(PyExc_TypeError, "Error.ExtractFrame_Time: need 'timePos(float)/frameNum(int)'"); - return nullptr; - } - PyObject* PyFrameList = PyList_New(static_cast(0)); - //cout << framePos << " - " << frameNum << endl; - bool res = Self->_in_Handle->ExtractFrame(PyFrameList, 0, frameNum, timePos, 1); - Py_ssize_t getlen = PyList_Size(PyFrameList); - res = res && (getlen > 0); - if (res) { - PyObject* PyFrameArray = PyArray_FromObject(PyFrameList, NPY_UINT8, 4, 4); - FreePyList(PyFrameList); - return PyFrameArray; - } - else { - Py_DECREF(PyFrameList); - PyGC_Collect(); - Py_RETURN_NONE; - } -} - -static PyObject* C_MPEC_EncodeFrame(C_MpegEncoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)EncodeFrame method, the inputs are: - * PyArrayFrame [ndarray->PyArrayObject]: the frame to be encoded. - */ - PyObject* PyArrayFrame = nullptr; - cmpc::CharList kwlist_str({ "PyArrayFrame" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &PyArrayFrame)) { - PyErr_SetString(PyExc_TypeError, "Error.EncodeFrame: need 'PyArrayFrame(ndarray)'"); - return nullptr; - } - int res = Self->_in_Handle->EncodeFrame(reinterpret_cast(PyArrayFrame)); - if (res >= 0) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - -static PyObject* C_MPSV_ServeFrame(C_MpegServer* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)ServeFrame method, the inputs are: - * PyArrayFrame [ndarray->PyArrayObject]: the frame to be encoded and served. - */ - PyObject* PyArrayFrame = nullptr; - cmpc::CharList kwlist_str({ "PyArrayFrame" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &PyArrayFrame)) { - PyErr_SetString(PyExc_TypeError, "Error.EncodeFrame: need 'PyArrayFrame(ndarray)'"); - return nullptr; - } - int res = Self->_in_Handle->ServeFrame(reinterpret_cast(PyArrayFrame)); - if (res >= 0) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - -static PyObject* C_MPSV_ServeFrameBlock(C_MpegServer* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)ServeFrameBlock method, the inputs are: - * PyArrayFrame [ndarray->PyArrayObject]: the frame to be encoded and served. - */ - PyObject* PyArrayFrame = nullptr; - cmpc::CharList kwlist_str({ "PyArrayFrame" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &PyArrayFrame)) { - PyErr_SetString(PyExc_TypeError, "Error.EncodeFrame: need 'PyArrayFrame(ndarray)'"); - return nullptr; - } - int res = Self->_in_Handle->ServeFrameBlock(reinterpret_cast(PyArrayFrame)); - if (res >= 0) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; -} - -static PyObject* C_MPCT_ExtractFrame(C_MpegClient* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (int)ExtractFrame method, the inputs are: - * readSize [int->int64_t]: the number of frames to be readed. This value could not - * exceeded the size of the frame buffer. - */ - int64_t readSize = 0; - cmpc::CharList kwlist_str({ "readSize" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|L", kwlist, &readSize)) { - PyErr_SetString(PyExc_TypeError, "Error.ExtractFrame: need 'readSize(int)'"); - return nullptr; - } - PyObject* res = nullptr; - if (readSize > 0) - res = Self->_in_Handle->ExtractFrame(readSize); - else - res = Self->_in_Handle->ExtractFrame(); - if (res) { - return res; - } - else { - Py_RETURN_NONE; - } -} - -static PyObject* C_MPDC_ExtractGOP(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (int)ExtractGOP method, the inputs are: - * framePos [int->int64_t]: the start position of the GOP to be extracted. - */ - int64_t framePos = -1; - cmpc::CharList kwlist_str({ "framePos" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|L", kwlist, &framePos)) { - PyErr_SetString(PyExc_TypeError, "Error.ExtractGOP: need 'framePos(int)'"); - return nullptr; - } - PyObject* PyFrameList = PyList_New(static_cast(0)); - //cout << framePos << " - " << frameNum << endl; - if (!(framePos < 0)) - Self->_in_Handle->setGOPPosition(framePos); - bool res = Self->_in_Handle->ExtractGOP(PyFrameList); - Py_ssize_t getlen = PyList_Size(PyFrameList); - res = res && (getlen > 0); - if (res) { - PyObject* PyFrameArray = PyArray_FromObject(PyFrameList, NPY_UINT8, 4, 4); - FreePyList(PyFrameList); - return PyFrameArray; - } - else { - Py_DECREF(PyFrameList); - PyGC_Collect(); - Py_RETURN_NONE; - } -} - -static PyObject* C_MPDC_ExtractGOP_Time(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (int)ExtractGOP_Time method, the inputs are: - * timePos [float->double]: the start position (time unit) of the GOP to be extracted. - */ - double timePos = -1; - cmpc::CharList kwlist_str({ "timePos" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|d", kwlist, &timePos)) { - PyErr_SetString(PyExc_TypeError, "Error.ExtractGOP_Time: need 'timePos(float)'"); - return nullptr; - } - PyObject* PyFrameList = PyList_New(static_cast(0)); - //cout << framePos << " - " << frameNum << endl; - if (!(timePos < 0)) - Self->_in_Handle->setGOPPosition(timePos); - bool res = Self->_in_Handle->ExtractGOP(PyFrameList); - Py_ssize_t getlen = PyList_Size(PyFrameList); - res = res && (getlen > 0); - if (res) { - PyObject* PyFrameArray = PyArray_FromObject(PyFrameList, NPY_UINT8, 4, 4); - FreePyList(PyFrameList); - return PyFrameArray; - } - else { - Py_DECREF(PyFrameList); - PyGC_Collect(); - Py_RETURN_NONE; - } -} - -static PyObject* C_MPDC_setGOPPosition(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (void)setGOPPosition method, the inputs are: - * framePos [int->int64_t]: the start position of the GOP to be extracted. - * timePos [float->double]: the start position (time unit) of the GOP to be extracted. - */ - int64_t framePos = -1; - double timePos = -1; - cmpc::CharList kwlist_str({ "framePos", "timePos" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Ld", kwlist, &framePos, &timePos)) { - PyErr_SetString(PyExc_TypeError, "Error.setGOPPosition: need 'framePos(int)'/'timePos(float)'"); - return nullptr; - } - if (!(framePos < 0)) - Self->_in_Handle->setGOPPosition(framePos); - else if (!(timePos < 0)) - Self->_in_Handle->setGOPPosition(timePos); - Py_RETURN_NONE; -} - -static PyObject* C_MPDC_getParam(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPDC_getParam function, the inputs are: - * paramName [str/bytes->str]: The name of the parameter to be gotten, could be. - * videoPath: [str] Path of the current video. - * width/height: [int] The width / height of the frame. - * frameCount: [int] The count of frames of the current decoding work. - * coderName: [str] The name of the decoder. - * nthread: [int] The number of decoder threads. - * duration: [float] The duration of the video. - * estFrameNum: [int] The estimated total frame number. - * avgFrameRate [float] The average frame rate. - */ - PyObject* param = nullptr; - cmpc::CharList kwlist_str({ "paramName" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, ¶m)) { - PyErr_SetString(PyExc_TypeError, "Error.getParameter: need 'paramName(str)'"); - return nullptr; - } - string in_param; - if (!param) { - in_param.clear(); - } - else if (!PyStr2str(param, in_param)) { - return nullptr; - } - PyObject* res = nullptr; - if (in_param.empty()) { - res = Self->_in_Handle->getParameter(); - } - else { - res = Self->_in_Handle->getParameter(in_param); - } - in_param.clear(); - return res; -} - -static PyObject* C_MPEC_getParam(C_MpegEncoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPEC_getParam function, the inputs are: - * paramName [str/bytes->str]: The name of the parameter to be gotten, could be. - * videoPath: [str] Path of the current video. - * codecName: [str] The name of the codec. - * nthread: [int] The number of encoder threads. - * bitRate: [int] The target bit rate. - * width/height: [int] The width / height of the encoded frame. - * widthSrc/heightSrc: [int] The width / height of the input frame. - * GOPSize: [int] The size of one GOP. - * maxBframe: [int] The maximal number of continuous B frames. - * frameRate: [float] The target frame rate. - */ - PyObject* param = nullptr; - cmpc::CharList kwlist_str({ "paramName" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, ¶m)) { - PyErr_SetString(PyExc_TypeError, "Error.getParameter: need 'paramName(str)'"); - return nullptr; - } - string in_param; - if (!param) { - in_param.clear(); - } - else if (!PyStr2str(param, in_param)) { - return nullptr; - } - PyObject* res = nullptr; - if (in_param.empty()) { - res = Self->_in_Handle->getParameter(); - } - else { - res = Self->_in_Handle->getParameter(in_param); - } - in_param.clear(); - return res; -} - -static PyObject* C_MPCT_getParam(C_MpegClient* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPCT_getParam method, the inputs are: - * parameter [str/bytes->str]: The name of the parameter to be gotten, could be. - * videoAddress: [str] The address of the current video. - * width/height: [int] The width / height of the received frame. - * frameCount: [int] The count of frames of the current decoding work. - * coderName: [str] The name of the decoder. - * nthread: [int] The number of decoder threads. - * duration: [float] The duration of the video. - * estFrameNum: [int] The estimated total frame number. - * avgFrameRate [float] The average frame rate. - */ - PyObject* param = nullptr; - cmpc::CharList kwlist_str({ "paramName" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, ¶m)) { - PyErr_SetString(PyExc_TypeError, "Error.getParameter: need 'paramName(str)'"); - return nullptr; - } - string in_param; - if (!param) { - in_param.clear(); - } - else if (!PyStr2str(param, in_param)) { - return nullptr; - } - PyObject* res = nullptr; - if (in_param.empty()) { - res = Self->_in_Handle->getParameter(); - } - else { - res = Self->_in_Handle->getParameter(in_param); - } - in_param.clear(); - return res; -} - -static PyObject* C_MPSV_getParam(C_MpegServer* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPSV_getParam function, the inputs are: - * paramName [str/bytes->str]: The name of the parameter to be gotten, could be. - * videoAddress: [str] The address of the current video. - * codecName: [str] The name of the codec. - * formatName: [str] The name of the stream format. - * nthread: [int] The number of encoder threads. - * bitRate: [int] The target bit rate. - * width/height: [int] The width / height of the encoded frame. - * widthSrc/heightSrc: [int] The width / height of the input frame. - * GOPSize: [int] The size of one GOP. - * maxBframe: [int] The maximal number of continuous B frames. - * frameRate: [float] The target frame rate. - * waitRef [float] The reference used for sync. waiting. - * ptsAhead [int] The ahead time duration in the uit of time stamp. - */ - PyObject* param = nullptr; - cmpc::CharList kwlist_str({ "paramName" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, ¶m)) { - PyErr_SetString(PyExc_TypeError, "Error.getParameter: need 'paramName(str)'"); - return nullptr; - } - string in_param; - if (!param) { - in_param.clear(); - } - else if (!PyStr2str(param, in_param)) { - return nullptr; - } - PyObject* res = nullptr; - if (in_param.empty()) { - res = Self->_in_Handle->getParameter(); - } - else { - res = Self->_in_Handle->getParameter(in_param); - } - in_param.clear(); - return res; -} - -static PyObject* C_MPDC_setParam(C_MpegDecoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (void)C_MPDC_setParam method, the inputs are: - * widthDst/heightDst: [int] The width / height of the decoded frames. - * nthread: [int] The number of decoder threads. - */ - int widthDst = 0; - int heightDst = 0; - int nthread = 0; - cmpc::CharList kwlist_str({ "widthDst", "heightDst", "nthread" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iii", kwlist, &widthDst, &heightDst, &nthread)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'params'"); - return nullptr; - } - if (widthDst > 0) { - Self->_in_Handle->setParameter("widthDst", &widthDst); - } - if (heightDst > 0) { - Self->_in_Handle->setParameter("heightDst", &heightDst); - } - if (nthread > 0) { - Self->_in_Handle->setParameter("nthread", &nthread); - } - Py_RETURN_NONE; -} - -static PyObject* C_MPEC_setParam(C_MpegEncoder* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPEC_setParam method, the inputs are: - * decoder: [MpegDecoder / MpegClient]: The parameters to be configured. - * configDict: [dict] A collection of key params. - * videoPath: [str/bytes] Path of the current video. - * codecName: [str/bytes] The name of the codec. - * nthread: [int] The number of encoder threads. - * bitRate: [double] The target bit rate. - * width/height: [int] The width / height of the encoded frame. - * widthSrc/heightSrc: [int] The width / height of the input frame. - * GOPSize: [int] The size of one GOP. - * maxBframe: [int] The maximal number of continuous B frames. - * frameRate: [tuple] The target frame rate. - */ - PyObject* decoder = nullptr; - PyObject* configDict = nullptr; - PyObject* videoPath = nullptr; - PyObject* codecName = nullptr; - double bitRate = -1; - int nthread = 0; - int width = 0; - int height = 0; - int widthSrc = 0; - int heightSrc = 0; - int GOPSize = 0; - int MaxBframe = -1; - PyObject* frameRate = nullptr; - cmpc::CharList kwlist_str({ "decoder", "configDict", "videoPath", "codecName", "nthread", "bitRate", "width", "height", "widthSrc", "heightSrc", "GOPSize", "maxBframe", "frameRate" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOOOidiiiiiiO", kwlist, &decoder, &configDict, &videoPath, &codecName, &nthread, &bitRate, &width, &height, &widthSrc, &heightSrc, &GOPSize, &MaxBframe, &frameRate)) { - PyErr_SetString(PyExc_TypeError, "Error.setParameter: need 'params'"); - return nullptr; - } - string temp_str; - if (decoder) { - temp_str.assign(decoder->ob_type->tp_name); - if (temp_str.compare("mpegCoder.MpegDecoder") == 0) { - auto decoderPtr = reinterpret_cast(decoder); - Self->_in_Handle->setParameter("decoder", decoderPtr->_in_Handle); - } - else if (temp_str.compare("mpegCoder.MpegClient") == 0) { - auto decoderPtr = reinterpret_cast(decoder); - Self->_in_Handle->setParameter("client", decoderPtr->_in_Handle); - } - else { - cerr << "Warning.setParameter: Not intended decoder type, no valid update in this step." << endl; - } - } - else if (configDict) { - if (PyDict_Check(configDict)) { - Self->_in_Handle->setParameter("configDict", configDict); - } - else { - cerr << "Warning.setParameter: Not intended configDict type (require to be a dict), no valid update in this step." << endl; - } - } - if (videoPath) { - if (PyStr2str(videoPath, temp_str)) { - Self->_in_Handle->setParameter("videoPath", &temp_str); - } - else { - return nullptr; - } - } - if (codecName) { - if (PyStr2str(codecName, temp_str)) { - Self->_in_Handle->setParameter("codecName", &temp_str); - } - else { - return nullptr; - } - } - if (nthread > 0) { - Self->_in_Handle->setParameter("nthread", &nthread); - } - if (bitRate > 0) { - Self->_in_Handle->setParameter("bitRate", &bitRate); - } - if (width > 0) { - Self->_in_Handle->setParameter("width", &width); - } - if (height > 0) { - Self->_in_Handle->setParameter("height", &height); - } - if (widthSrc > 0) { - Self->_in_Handle->setParameter("widthSrc", &widthSrc); - } - if (heightSrc > 0) { - Self->_in_Handle->setParameter("heightSrc", &heightSrc); - } - if (GOPSize > 0) { - Self->_in_Handle->setParameter("GOPSize", &GOPSize); - } - if (MaxBframe >= 0) { - Self->_in_Handle->setParameter("maxBframe", &MaxBframe); - } - if (frameRate) { - if (PyTuple_Check(frameRate) && PyTuple_Size(frameRate) == 2) { - Self->_in_Handle->setParameter("frameRate", frameRate); - } - else { - cerr << "Warning.setParameter: {frameRate} must be a 2-dim tuple, so there is no valid update in this step." << endl; - } - } - temp_str.clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPCT_setParam(C_MpegClient* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (void)C_MPCT_setParam method, the inputs are: - * widthDst/heightDst: [int] The width / height of the decoded frames. - * cacheSize/readSize: [int] The size of the cache, and the reading size. - * dstFrameRate: [tuple] The target frame rate of the client. - * nthread: [int] The number of decoder threads. - */ - int widthDst = 0; - int heightDst = 0; - int nthread = 0; - int64_t cacheSize = 0; - int64_t readSize = 0; - PyObject* frameRate = nullptr; - cmpc::CharList kwlist_str({ "widthDst", "heightDst", "cacheSize", "readSize", "dstFrameRate", "nthread" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiLLOi", kwlist, &widthDst, &heightDst, &cacheSize, &readSize, &frameRate, &nthread)) { - PyErr_SetString(PyExc_TypeError, "Error.FFmpegSetup: need 'params'"); - return nullptr; - } - if (widthDst > 0) { - Self->_in_Handle->setParameter("widthDst", &widthDst); - } - if (heightDst > 0) { - Self->_in_Handle->setParameter("heightDst", &heightDst); - } - if (cacheSize > 0) { - Self->_in_Handle->setParameter("cacheSize", &cacheSize); - } - if (readSize > 0) { - Self->_in_Handle->setParameter("readSize", &readSize); - } - if (frameRate) { - if (PyTuple_Check(frameRate) && PyTuple_Size(frameRate) == 2) { - Self->_in_Handle->setParameter("dstFrameRate", frameRate); - } - else { - cerr << "Warning.setParameter: {dstFrameRate} must be a 2-dim tuple, so there is no valid update in this step." << endl; - } - } - if (nthread > 0) { - Self->_in_Handle->setParameter("nthread", &nthread); - } - Py_RETURN_NONE; -} - -static PyObject* C_MPSV_setParam(C_MpegServer* Self, PyObject* args, PyObject* kwargs) { - /* Wrapped (bool)C_MPSV_setParam method, the inputs are: - * decoder [MpegDecoder / MpegClient]: The parameters to be configured. - * videoAddress: [str/bytes] The address of the current video. - * codecName: [str/bytes] The name of the codec. - * nthread: [int] The number of encoder threads. - * bitRate: [double] The target bit rate. - * width/height: [int] The width / height of the encoded frame. - * widthSrc/heightSrc: [int] The width / height of the input frame. - * GOPSize: [int] The size of one GOP. - * maxBframe: [int] The maximal number of continuous B frames. - * frameRate: [tuple] The target frame rate. - * frameAhead [int] The number of ahead frames. This value is suggested - * to be larger than the GOPSize. - */ - PyObject* decoder = nullptr; - PyObject* configDict = nullptr; - PyObject* videoAddress = nullptr; - PyObject* codecName = nullptr; - double bitRate = -1; - int nthread = 0; - int width = 0; - int height = 0; - int widthSrc = 0; - int heightSrc = 0; - int GOPSize = 0; - int MaxBframe = -1; - int frameAhead = 0; - PyObject* frameRate = nullptr; - cmpc::CharList kwlist_str({ "decoder", "configDict", "videoAddress", "codecName", "nthread", "bitRate", "width", "height", "widthSrc", "heightSrc", "GOPSize", "maxBframe", "frameRate", "frameAhead" }); - auto kwlist_ptr = kwlist_str.c_str(); - auto kwlist = (char**)(kwlist_ptr.get()); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|OOOOidiiiiiiOi", kwlist, &decoder, &configDict, &videoAddress, &codecName, &nthread, &bitRate, &width, &height, &widthSrc, &heightSrc, &GOPSize, &MaxBframe, &frameRate, &frameAhead)) { - PyErr_SetString(PyExc_TypeError, "Error.setParameter: need 'params'"); - return nullptr; - } - string temp_str; - if (decoder) { - temp_str.assign(decoder->ob_type->tp_name); - if (temp_str.compare("mpegCoder.MpegDecoder") == 0) { - auto decoderPtr = reinterpret_cast(decoder); - Self->_in_Handle->setParameter("decoder", decoderPtr->_in_Handle); - } - else if (temp_str.compare("mpegCoder.MpegClient") == 0) { - auto decoderPtr = reinterpret_cast(decoder); - Self->_in_Handle->setParameter("client", decoderPtr->_in_Handle); - } - else { - cerr << "Warning.setParameter: Not intended decoder type, no valid update in this step." << endl; - } - } - else if (configDict) { - if (PyDict_Check(configDict)) { - Self->_in_Handle->setParameter("configDict", configDict); - } - else { - cerr << "Warning.setParameter: Not intended configDict type (require to be a dict), no valid update in this step." << endl; - } - } - if (videoAddress) { - if (PyStr2str(videoAddress, temp_str)) { - Self->_in_Handle->setParameter("videoAddress", &temp_str); - } - else { - return nullptr; - } - } - if (codecName) { - if (PyStr2str(codecName, temp_str)) { - Self->_in_Handle->setParameter("codecName", &temp_str); - } - else { - return nullptr; - } - } - if (nthread > 0) { - Self->_in_Handle->setParameter("nthread", &nthread); - } - if (bitRate > 0) { - Self->_in_Handle->setParameter("bitRate", &bitRate); - } - if (width > 0) { - Self->_in_Handle->setParameter("width", &width); - } - if (height > 0) { - Self->_in_Handle->setParameter("height", &height); - } - if (widthSrc > 0) { - Self->_in_Handle->setParameter("widthSrc", &widthSrc); - } - if (heightSrc > 0) { - Self->_in_Handle->setParameter("heightSrc", &heightSrc); - } - if (GOPSize > 0) { - Self->_in_Handle->setParameter("GOPSize", &GOPSize); - } - if (MaxBframe >= 0) { - Self->_in_Handle->setParameter("maxBframe", &MaxBframe); - } - if (frameRate) { - if (PyTuple_Check(frameRate) && PyTuple_Size(frameRate) == 2) { - Self->_in_Handle->setParameter("frameRate", frameRate); - } - else { - cerr << "Warning.setParameter: {frameRate} must be a 2-dim tuple, so there is no valid update in this step." << endl; - } - } - if (frameAhead > 0) { - Self->_in_Handle->setParameter("frameAhead", &frameAhead); - } - temp_str.clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPDC_DumpFile(C_MpegDecoder* Self) { - /* Wrapped (void)dumpFormat method, the input is required to be empty. */ - Self->_in_Handle->dumpFormat(); - Py_RETURN_NONE; -} - -static PyObject* C_MPEC_DumpFile(C_MpegEncoder* Self) { - /* Wrapped (void)dumpFormat method, the input is required to be empty. */ - Self->_in_Handle->dumpFormat(); - Py_RETURN_NONE; -} - -static PyObject* C_MPCT_DumpFile(C_MpegClient* Self) { - /* Wrapped (void)dumpFormat method, the input is required to be empty. */ - Self->_in_Handle->dumpFormat(); - Py_RETURN_NONE; -} - -static PyObject* C_MPSV_DumpFile(C_MpegServer* Self) { - /* Wrapped (void)dumpFormat method, the input is required to be empty. */ - Self->_in_Handle->dumpFormat(); - Py_RETURN_NONE; -} - -static PyObject* C_MPDC_Clear(C_MpegDecoder* Self) { - /* Wrapped (void)clear method, the input is required to be empty. */ - Self->_in_Handle->clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPEC_Clear(C_MpegEncoder* Self) { - /* Wrapped (void)clear method, the input is required to be empty. */ - Self->_in_Handle->clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPCT_Clear(C_MpegClient* Self) { - /* Wrapped (void)clear method, the input is required to be empty. */ - Self->_in_Handle->clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPSV_Clear(C_MpegServer* Self) { - /* Wrapped (void)clear method, the input is required to be empty. */ - Self->_in_Handle->clear(); - Py_RETURN_NONE; -} - -static PyObject* C_MPEC_Close(C_MpegEncoder* Self) { - /* Wrapped (void)close method, the input is required to be empty. */ - Self->_in_Handle->FFmpegClose(); - Py_RETURN_NONE; -} - -static PyObject* C_MPSV_Close(C_MpegServer* Self) { - /* Wrapped (void)close method, the input is required to be empty. */ - Self->_in_Handle->FFmpegClose(); - Py_RETURN_NONE; -} - -/***************************************************************************** -* Register the methods of each class. -*****************************************************************************/ -static PyMethodDef C_MPC_MethodMembers[] = // Register the global method list. -{ - { "setGlobal", (PyCFunction)C_MPC_Global, METH_VARARGS | METH_KEYWORDS, \ - "Set global setting parameters.\n - dumpLevel: [int] the level of dumped log.\n -|- 0: silent executing.\n -|- 1: [default] dump basic informations.\n -|- 2: dump all informations." }, - { "readme", (PyCFunction)C_MPC_Help, METH_NOARGS, \ - "Use it to see readme and some useful instructions." }, - { nullptr, nullptr, 0, nullptr } -}; - -static PyMethodDef C_MPDC_MethodMembers[] = // Register the member methods of Decoder. -{ // This step add the methods to the C-API of the class. - { "FFmpegSetup", (PyCFunction)C_MPDC_Setup, METH_VARARGS | METH_KEYWORDS, \ - "Reset the decoder and the video format.\n - videoPath: [str/bytes] the path of decoded video file." }, - { "resetPath", (PyCFunction)C_MPDC_resetPath, METH_VARARGS | METH_KEYWORDS, \ - "Reset the path of decoded video.\n - videoPath: [str/bytes] the path of decoded video file." }, - { "ExtractFrame", (PyCFunction)C_MPDC_ExtractFrame, METH_VARARGS | METH_KEYWORDS, \ - "Extract a series of continius frames at the specific position.\n - framePos: [int] the start position of the decoder.\n - frameNum: [int] the expected number of extracted frames." }, - { "ExtractFrameByTime", (PyCFunction)C_MPDC_ExtractFrame_Time, METH_VARARGS | METH_KEYWORDS, \ - "Extract a series of continius frames at the specific position (time based).\n - timePos: [double] the start position (second) of the decoder.\n - frameNum: [int] the expected number of extracted frames." }, - { "ExtractGOP", (PyCFunction)C_MPDC_ExtractGOP, METH_VARARGS | METH_KEYWORDS, \ - "Extract a series of continius frames as a GOP at the specific position.\n - framePos: [int] the start position of the decoder." }, - { "ExtractGOPByTime", (PyCFunction)C_MPDC_ExtractGOP_Time, METH_VARARGS | METH_KEYWORDS, \ - "Extract a series of continius frames as a GOP at the specific position (time based).\n - timePos: [double] the start position (second) of the decoder." }, - { "ResetGOPPosition", (PyCFunction)C_MPDC_setGOPPosition, METH_VARARGS | METH_KEYWORDS, \ - "Reset the start position of GOP flow.\n - framePos: [int] the start position of the decoder.\n - timePos: [double] the start position (second) of the decoder." }, - { "clear", (PyCFunction)C_MPDC_Clear, METH_NOARGS, \ - "Clear all states (except the videoPath)." }, - { "dumpFile", (PyCFunction)C_MPDC_DumpFile, METH_NOARGS, \ - "Show current state of formatContex." }, - { "setParameter", (PyCFunction)C_MPDC_setParam, METH_VARARGS | METH_KEYWORDS, \ - "Set the optional parameters of 'Setup' & 'Extract' functions via different methods.\n - widthDst: [int] the width of destination (frame), if <=0 (default), it would take no effect.\n - heightDst: [int] the height of destination (frame), if <=0 (default), it would take no effect.\n - nthread: [int] number of decoder threads." }, - { "getParameter", (PyCFunction)C_MPDC_getParam, METH_VARARGS | METH_KEYWORDS, \ - "Input a parameter's name to get it.\n - paramName: [str/bytes] the name of needed parameter. If set empty, would return all key params.\n -|- videoPath: [str] the current path of the read video.\n -|- width/height: [int] the size of one frame.\n -|- frameCount: [int] the number of returned frames in the last ExtractFrame().\n -|- coderName: [str] the name of the decoder.\n -|- nthread: [int] number of decoder threads.\n -|- duration: [double] the total seconds of this video.\n -|- estFrameNum: [int] the estimated total frame number(may be not accurate).\n -|- avgFrameRate: [double] the average of FPS." }, - { nullptr, nullptr, 0, nullptr } -}; - -static PyMethodDef C_MPEC_MethodMembers[] = // Register the member methods of Encoder. -{ // This step add the methods to the C-API of the class. - { "FFmpegSetup", (PyCFunction)C_MPEC_Setup, METH_VARARGS | METH_KEYWORDS, \ - "Open the encoded video and reset the encoder.\n - videoPath: [str/bytes] the path of encoded(written) video file." }, - { "resetPath", (PyCFunction)C_MPEC_resetPath, METH_VARARGS | METH_KEYWORDS, \ - "Reset the output path of encoded video.\n - videoPath: [str/bytes] the path of encoded video file." }, - { "EncodeFrame", (PyCFunction)C_MPEC_EncodeFrame, METH_VARARGS | METH_KEYWORDS, \ - "Encode one frame.\n - PyArrayFrame: [ndarray] the frame that needs to be encoded." }, - { "setParameter", (PyCFunction)C_MPEC_setParam, METH_VARARGS | METH_KEYWORDS, \ - "Set the necessary parameters of 'Setup' & 'Encode' functions via different methods.\n - decoder: [MpegDecoder / MpegClient] copy metadata from a known decoder.\n - configDict: [dict] a config dict returned by getParameter().\n - videoPath: [str/bytes] the current path of the encoded video.\n - codecName: [str/bytes] the name of the encoder.\n - nthread: [int] number of encoder threads.\n - bitRate: [float] the indended bit rate (Kb/s).\n - width/height: [int] the size of one encoded (scaled) frame.\n - widthSrc/heightSrc: [int] the size of one input frame, if set <=0, these parameters would not be enabled.\n - GOPSize: [int] the number of frames in a GOP.\n - maxBframe: [int] the maximal number of B frames in a GOP.\n - frameRate: [tuple] a 2-dim tuple indicating the FPS(num, den) of the stream." }, - { "getParameter", (PyCFunction)C_MPEC_getParam, METH_VARARGS | METH_KEYWORDS, \ - "Input a parameter's name to get it.\n - paramName: [str/bytes] the name of needed parameter. If set empty, would return all key params.\n -|- videoPath: [str] the current path of the encoded video.\n -|- codecName: [str] the name of the encoder.\n -|- nthread: [int] number of encoder threads.\n -|- bitRate: [float] the indended bit rate (Kb/s).\n -|- width/height: [int] the size of one encoded (scaled) frame.\n -|- widthSrc/heightSrc: [int] the size of one input frame, if set <=0, these parameters would not be enabled.\n -|- GOPSize: [int] the number of frames in a GOP.\n -|- maxBframe: [int] the maximal number of B frames in a GOP.\n -|- frameRate: [tuple] a 2-dim tuple indicating the FPS(num, den) of the stream." }, - { "clear", (PyCFunction)C_MPEC_Clear, METH_NOARGS, \ - "Clear all states." }, - { "dumpFile", (PyCFunction)C_MPEC_DumpFile, METH_NOARGS, \ - "Show current state of formatContex." }, - { "FFmpegClose", (PyCFunction)C_MPEC_Close, METH_NOARGS, \ - "Close currently encoded video and write the end code of a MPEG file." }, - { nullptr, nullptr, 0, nullptr } -}; - -static PyMethodDef C_MPCT_MethodMembers[] = // Register the member methods of Encoder. -{ // This step add the methods to the C-API of the class. - { "FFmpegSetup", (PyCFunction)C_MPCT_Setup, METH_VARARGS | METH_KEYWORDS, \ - "Reset the decoder and the video format.\n - videoAddress: [str/bytes] the path of decoded video file." }, - { "resetPath", (PyCFunction)C_MPCT_resetPath, METH_VARARGS | METH_KEYWORDS, \ - "Reset the address of decoded video.\n - videoAddress: [str/bytes] the path of decoded video file." }, - { "start", (PyCFunction)C_MPCT_Start, METH_NOARGS, \ - "Start the demuxing thread, must be called after FFmpegSetup()." }, - { "terminate", (PyCFunction)C_MPCT_Terminate, METH_NOARGS, \ - "Terminate all current demuxing threads, usually used when there is only one thread." }, - { "ExtractFrame", (PyCFunction)C_MPCT_ExtractFrame, METH_VARARGS | METH_KEYWORDS, \ - "Extract frames from the current buffer.\n - readSize: [int] the number of extracted frames, should not be larger than cache number. \nIf not set, will be used as the default value." }, - { "clear", (PyCFunction)C_MPCT_Clear, METH_NOARGS, \ - "Clear all states (except the videoAddress)." }, - { "dumpFile", (PyCFunction)C_MPCT_DumpFile, METH_NOARGS, \ - "Show current state of formatContex." }, - { "setParameter", (PyCFunction)C_MPCT_setParam, METH_VARARGS | METH_KEYWORDS, \ - "Set the optional parameters of 'Setup' & 'Extract' functions and the demuxing thread via different methods.\n - widthDst: [int] the width of destination (frame), if <=0 (default), it would take no effect.\n - heightDst: [int] the height of destination (frame), if <=0 (default), it would take no effect.\n - cacheSize: [int] the number of allocated avaliable frames in the cache.\n - readSize: [int] the default value of ExtractFrame().\n - dstFrameRate: [tuple] a 2-dim tuple indicating the destination FPS(num, den) of the stream.\n - nthread: [int] number of decoder threads." }, - { "getParameter", (PyCFunction)C_MPCT_getParam, METH_VARARGS | METH_KEYWORDS, \ - "Input a parameter's name to get it.\n - paramName: [str/bytes] the name of needed parameter. If set empty, would return all key params.\n -|- videoAddress: [str] the current path of the read video.\n -|- width/height: [int] the size of one frame.\n -|- frameCount: [int] the number of returned frames in the last ExtractFrame().\n -|- coderName: [str] the name of the decoder.\n -|- nthread: [int] number of decoder threads.\n -|- duration: [double] the total seconds of this video.\n -|- estFrameNum: [int] the estimated total frame number(may be not accurate).\n -|- srcFrameRate: [double] the average of FPS of the source video." }, - { nullptr, nullptr, 0, nullptr } -}; - -static PyMethodDef C_MPSV_MethodMembers[] = // Register the member methods of Server. -{ // This step add the methods to the C-API of the class. - { "FFmpegSetup", (PyCFunction)C_MPSV_Setup, METH_VARARGS | METH_KEYWORDS, \ - "Open the encoded video and reset the encoder.\n - videoAddress: [str/bytes] the path of encoded(written) video file." }, - { "resetPath", (PyCFunction)C_MPSV_resetPath, METH_VARARGS | METH_KEYWORDS, \ - "Reset the output path of encoded video.\n - videoAddress: [str/bytes] the path of encoded video file." }, - { "ServeFrame", (PyCFunction)C_MPSV_ServeFrame, METH_VARARGS | METH_KEYWORDS, \ - "Encode one frame and send the frame non-blockly.\n - PyArrayFrame: [ndarray] the frame that needs to be encoded." }, - { "ServeFrameBlock", (PyCFunction)C_MPSV_ServeFrameBlock, METH_VARARGS | METH_KEYWORDS, \ - "Encode one frame and send the frame blockly. This method is suggested to be used in sub-processes.\n - PyArrayFrame: [ndarray] the frame that needs to be encoded." }, - { "setParameter", (PyCFunction)C_MPSV_setParam, METH_VARARGS | METH_KEYWORDS, \ - "Set the necessary parameters of 'Setup' & 'Serve' functions via different methods.\n - decoder: [MpegDecoder / MpegClient] copy metadata from a known decoder.\n - configDict: [dict] a config dict returned by getParameter().\n - videoAddress: [str/bytes] the current path of the encoded video.\n - codecName: [str/bytes] the name of the encoder.\n - nthread: [int] number of encoder threads.\n - bitRate: [float] the indended bit rate (Kb/s).\n - width/height: [int] the size of one encoded (scaled) frame.\n - widthSrc/heightSrc: [int] the size of one input frame, if set <=0, these parameters would not be enabled.\n - GOPSize: [int] the number of frames in a GOP.\n - maxBframe: [int] the maximal number of B frames in a GOP.\n - frameRate: [tuple] a 2-dim tuple indicating the FPS(num, den) of the stream.\n - frameAhead: [int] The number of ahead frames. This value is suggested to be larger than the GOPSize.." }, - { "getParameter", (PyCFunction)C_MPSV_getParam, METH_VARARGS | METH_KEYWORDS, \ - "Input a parameter's name to get it.\n - paramName: [str/bytes] the name of needed parameter. If set empty, would return all key params.\n -|- videoAddress: [str] the current path of the encoded video.\n -|- codecName: [str] the name of the encoder.\n -|- formatName: [str] the format name of the stream.\n -|- nthread: [int] number of encoder threads.\n -|- bitRate: [float] the indended bit rate (Kb/s).\n -|- width/height: [int] the size of one encoded (scaled) frame.\n -|- widthSrc/heightSrc: [int] the size of one input frame, if set <=0, these parameters would not be enabled.\n -|- GOPSize: [int] the number of frames in a GOP.\n -|- maxBframe: [int] the maximal number of B frames in a GOP.\n -|- frameRate: [tuple] a 2-dim tuple indicating the FPS(num, den) of the stream.\n -|- waitRef: [float] The reference used for sync. waiting.\n -|- ptsAhead: [int] The ahead time duration in the uit of time stamp." }, - { "clear", (PyCFunction)C_MPSV_Clear, METH_NOARGS, \ - "Clear all states." }, - { "dumpFile", (PyCFunction)C_MPSV_DumpFile, METH_NOARGS, \ - "Show current state of formatContex." }, - { "FFmpegClose", (PyCFunction)C_MPSV_Close, METH_NOARGS, \ - "Close currently encoded video and write the end code of a MPEG file." }, - { nullptr, nullptr, 0, nullptr } -}; - -/***************************************************************************** -* Declaration of the class, including the name, information and the members. -* This is the top-level packing of the class APIs. -*****************************************************************************/ -static PyTypeObject C_MPDC_ClassInfo = -{ - PyVarObject_HEAD_INIT(nullptr, 0)"mpegCoder.MpegDecoder", // The implementation of the __class__.__name__. - sizeof(C_MpegDecoder), // The memory length of the class. This value is required for PyObject_New. - 0, - (destructor)C_MPDC_Destruct, // Destructor. - 0, - 0, - 0, - 0, - (reprfunc)C_MPDC_Repr, // __repr__ method. - 0, - 0, - 0, - 0, - 0, - (reprfunc)C_MPDC_Str, // __str__ method. - 0, - 0, - 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, // If no methods are provided, this value is Py_TPFLAGS_DEFAULE. - "This class has wrapped the C-API of FFmpeg decoder so that users could call its methods\n to decode the frame data in python quickly.", // __doc__, the docstring of the class. - 0, - 0, - 0, - 0, - 0, - 0, - C_MPDC_MethodMembers, // The collection of all method members. - C_MPDC_DataMembers, // THe collection of all data members. - 0, - 0, - 0, - 0, - 0, - 0, - (initproc)C_MPDC_init, // Constructor. - 0, -}; - -static PyTypeObject C_MPEC_ClassInfo = -{ - PyVarObject_HEAD_INIT(nullptr, 0)"mpegCoder.MpegEncoder", // The implementation of the __class__.__name__. - sizeof(C_MpegEncoder), // The memory length of the class. This value is required for PyObject_New. - 0, - (destructor)C_MPEC_Destruct, // Destructor. - 0, - 0, - 0, - 0, - (reprfunc)C_MPEC_Repr, // __repr__ method. - 0, - 0, - 0, - 0, - 0, - (reprfunc)C_MPEC_Str, // __str__ method. - 0, - 0, - 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, // If no methods are provided, this value is Py_TPFLAGS_DEFAULE. - "This class has wrapped the C-API of FFmpeg encoder so that users could call its methods\n to encode frames by using numpy-data quickly.", // __doc__, the docstring of the class. - 0, - 0, - 0, - 0, - 0, - 0, - C_MPEC_MethodMembers, // The collection of all method members. - C_MPEC_DataMembers, // THe collection of all data members. - 0, - 0, - 0, - 0, - 0, - 0, - (initproc)C_MPEC_init, // Constructor. - 0, -}; - -static PyTypeObject C_MPCT_ClassInfo = -{ - PyVarObject_HEAD_INIT(nullptr, 0)"mpegCoder.MpegClient", // The implementation of the __class__.__name__. - sizeof(C_MpegClient), // The memory length of the class. This value is required for PyObject_New. - 0, - (destructor)C_MPCT_Destruct, // Destructor. - 0, - 0, - 0, - 0, - (reprfunc)C_MPCT_Repr, // __repr__ method. - 0, - 0, - 0, - 0, - 0, - (reprfunc)C_MPCT_Str, // __str__ method. - 0, - 0, - 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, // If no methods are provided, this value is Py_TPFLAGS_DEFAULE. - "This class has wrapped the C-API of FFmpeg demuxer so that users could call its methods\n to demux the network stream in python quickly.", // __doc__, the docstring of the class. - 0, - 0, - 0, - 0, - 0, - 0, - C_MPCT_MethodMembers, // The collection of all method members. - C_MPCT_DataMembers, // THe collection of all data members. - 0, - 0, - 0, - 0, - 0, - 0, - (initproc)C_MPCT_init, // Constructor. - 0, -}; - -static PyTypeObject C_MPSV_ClassInfo = -{ - PyVarObject_HEAD_INIT(nullptr, 0)"mpegCoder.MpegServer", // The implementation of the __class__.__name__. - sizeof(C_MpegServer), // The memory length of the class. This value is required for PyObject_New. - 0, - (destructor)C_MPSV_Destruct, // Destructor. - 0, - 0, - 0, - 0, - (reprfunc)C_MPSV_Repr, // __repr__ method. - 0, - 0, - 0, - 0, - 0, - (reprfunc)C_MPSV_Str, // __str__ method. - 0, - 0, - 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, // If no methods are provided, this value is Py_TPFLAGS_DEFAULE. - "This class has wrapped the C-API of FFmpeg stream server so that users could call its methods\n to server streamed frames by using numpy-data quickly.", // __doc__, the docstring of the class. - 0, - 0, - 0, - 0, - 0, - 0, - C_MPSV_MethodMembers, // The collection of all method members. - C_MPSV_DataMembers, // THe collection of all data members. - 0, - 0, - 0, - 0, - 0, - 0, - (initproc)C_MPSV_init, // Constructor. - 0, -}; - -/***************************************************************************** -* Decleartion of the module. -* This is the top-level packing of the module APIs. -*****************************************************************************/ -static PyModuleDef ModuleInfo = -{ - PyModuleDef_HEAD_INIT, - "mpegCoder", // The __name__ of the module. - "A FFmpeg module which could provide a class for encode/decode a video in any format.", // __doc__; The docstring of the module. - -1, - nullptr, nullptr, nullptr, nullptr, nullptr -}; - -#endif diff --git a/MpegCoder/MpegStreamer.cpp b/MpegCoder/MpegStreamer.cpp deleted file mode 100644 index 5be484e..0000000 --- a/MpegCoder/MpegStreamer.cpp +++ /dev/null @@ -1,2225 +0,0 @@ -#include "stdafx.h" - -#define NO_IMPORT_ARRAY -#define PY_ARRAY_UNIQUE_SYMBOL MPEGARRAY_API -#include -#include "MpegCoder.h" -#include "MpegStreamer.h" - -cmpc::CMpegClient::CMpegClient(void) : - videoPath(), width(0), height(0), widthDst(0), heightDst(0), - PPixelFormat(AVPixelFormat::AV_PIX_FMT_NONE), PFormatCtx(nullptr), PCodecCtx(nullptr), - PVideoStream(nullptr), frame(nullptr), PVideoStreamIDX(0), PVideoFrameCount(0), - buffer(), PswsCtx(nullptr), cache_size(0), read_size(0), - frameRate({ 0,0 }), read_handle(), read_check(), info_lock(), reading(false), - _str_codec(), _duration(0), _predictFrameNum(0), nthread(0), refcount(1) { -} -cmpc::CMpegClient::~CMpegClient(void) { - clear(); -} -cmpc::CMpegClient::CMpegClient(CMpegClient&& ref) noexcept : - videoPath(std::move(ref.videoPath)), width(ref.width), height(ref.height), - widthDst(ref.widthDst), heightDst(ref.heightDst), - PPixelFormat(ref.PPixelFormat), PFormatCtx(ref.PFormatCtx), PCodecCtx(ref.PCodecCtx), - PVideoStream(ref.PVideoStream), frame(ref.frame), - PVideoStreamIDX(ref.PVideoStreamIDX), PVideoFrameCount(ref.PVideoFrameCount), - buffer(std::move(ref.buffer)), PswsCtx(ref.PswsCtx), - cache_size(ref.cache_size), read_size(ref.read_size), - frameRate(ref.frameRate), read_handle(std::move(std::thread())), read_check(), info_lock(), - reading(ref.reading), _str_codec(std::move(ref._str_codec)), _duration(ref._duration), - _predictFrameNum(ref._predictFrameNum), nthread(ref.nthread), refcount(ref.refcount) { - ref.PFormatCtx = nullptr; - ref.PCodecCtx = nullptr; - ref.PVideoStream = nullptr; - ref.frame = nullptr; - ref.PswsCtx = nullptr; -} -cmpc::CMpegClient& cmpc::CMpegClient::operator=(CMpegClient&& ref) noexcept { - if (this != &ref) { - videoPath = std::move(ref.videoPath); - width = ref.width; - height = ref.height; - widthDst = ref.widthDst; - heightDst = ref.heightDst; - PPixelFormat = ref.PPixelFormat; - PVideoStreamIDX = ref.PVideoStreamIDX; - PVideoFrameCount = ref.PVideoFrameCount; - cache_size = ref.cache_size; - read_size = ref.read_size; - frameRate = ref.frameRate; - reading = ref.reading; - _duration = ref._duration; - _predictFrameNum = ref._predictFrameNum; - refcount = ref.refcount; - PFormatCtx = ref.PFormatCtx; - PCodecCtx = ref.PCodecCtx; - PVideoStream = ref.PVideoStream; - frame = ref.frame; - PswsCtx = ref.PswsCtx; - buffer = std::move(ref.buffer); - read_handle = std::move(std::thread()); - nthread = ref.nthread; - ref.PFormatCtx = nullptr; - ref.PCodecCtx = nullptr; - ref.PVideoStream = nullptr; - ref.frame = nullptr; - ref.PswsCtx = nullptr; - } - return *this; -} - -void cmpc::CMpegClient::meta_protected_clear(void) { - auto protectWidth = widthDst; - auto protectHeight = heightDst; - auto protectCacheSize = cache_size; - auto protectReadSize = read_size; - auto protectFrameRate = frameRate; - auto protectNthread = nthread; - clear(); - widthDst = protectWidth; - heightDst = protectHeight; - cache_size = protectCacheSize; - read_size = protectReadSize; - frameRate = protectFrameRate; - nthread = protectNthread; -} - -void cmpc::CMpegClient::clear(void) { - if (read_handle.joinable()) { - read_check.lock(); - reading = false; - read_check.unlock(); - read_handle.join(); - //std::terminate(); - read_handle = std::move(std::thread()); - } - else { - read_handle = std::move(std::thread()); - } - width = height = 0; - widthDst = heightDst = 0; - PPixelFormat = AVPixelFormat::AV_PIX_FMT_NONE; - PVideoStreamIDX = -1; - PVideoFrameCount = 0; - _duration = 0; - _predictFrameNum = 0; - _str_codec.clear(); - //videoPath.clear(); - buffer.clear(); - cache_size = 0; - read_size = 0; - frameRate = _setAVRational(0, 0); - read_check.lock(); - read_check.unlock(); - info_lock.lock(); - info_lock.unlock(); - nthread = 0; - PVideoStream = nullptr; - if (frame) { - av_frame_free(&frame); - frame = nullptr; - } - if (PswsCtx) { - sws_freeContext(PswsCtx); - PswsCtx = nullptr; - } - if (PCodecCtx) { - avcodec_free_context(&PCodecCtx); - PCodecCtx = nullptr; - } - if (PFormatCtx) { - avformat_close_input(&PFormatCtx); - PFormatCtx = nullptr; - } - refcount = 1; -} - -int cmpc::CMpegClient::_open_codec_context(int& stream_idx, AVCodecContext*& dec_ctx, \ - AVFormatContext* PFormatCtx, enum cmpc::AVMediaType type) { // Search the correct decoder, and make the configurations. - int ret; - - //search video stream - ret = av_find_best_stream(PFormatCtx, type, -1, -1, nullptr, 0); - if (ret < 0) { - cerr << "Could not find " << av_get_media_type_string(type) << \ - " stream in input address: '" << videoPath << "'" << endl; - return ret; - } - else { - auto stream_index = ret; - auto st = PFormatCtx->streams[stream_index]; // The AVStream object. - - /* find decoder for the stream */ - auto dec = avcodec_find_decoder(st->codecpar->codec_id); // Decoder (AVCodec). - if (!dec) { - cerr << "Failed to find " << av_get_media_type_string(type) << " codec" << endl; - return AVERROR(EINVAL); - } - _str_codec.assign(dec->name); - - /* Allocate a codec context for the decoder / Add this to allocate the context by codec */ - auto dec_ctx_ = avcodec_alloc_context3(dec); // Decoder context (AVCodecContext). - if (!dec_ctx_) { - cerr << "Failed to allocate the " << av_get_media_type_string(type) << " codec context" << endl; - return AVERROR(ENOMEM); - } - - if (nthread > 0) { - dec_ctx_->thread_count = nthread; - } - - /* Copy codec parameters from input stream to output codec context */ - if ((ret = avcodec_parameters_to_context(dec_ctx_, st->codecpar)) < 0) { - cerr << "Failed to copy " << av_get_media_type_string(type) << \ - " codec parameters to decoder context" << endl; - return ret; - } - - /* Init the decoders, with or without reference counting */ - AVDictionary* opts = nullptr; // The uninitialized argument dictionary. - av_dict_set(&opts, "refcounted_frames", refcount ? "1" : "0", 0); - if ((ret = avcodec_open2(dec_ctx_, dec, &opts)) < 0) { - cerr << "Failed to open " << av_get_media_type_string(type) << " codec" << endl; - return ret; - } - dec_ctx = dec_ctx_; - stream_idx = stream_index; - } - return 0; -} - -bool cmpc::CMpegClient::__setup_check() const { - if (cache_size > 0 && read_size > 0 && frameRate.den > 0 && frameRate.num > 0 && (!read_handle.joinable())) { - return true; - } - else { - return false; - } -} - -bool cmpc::CMpegClient::FFmpegSetup(string inVideoPath) { - videoPath.assign(inVideoPath); - return FFmpegSetup(); -} - -bool cmpc::CMpegClient::FFmpegSetup() { - if (!__setup_check()) { - cerr << "Have not get necessary and correct configurations, so FFmpegSetup() should not be called." << endl; - return false; - } - meta_protected_clear(); - - /* open Stream: register all formats and codecs */ - if (avformat_open_input(&PFormatCtx, videoPath.c_str(), nullptr, nullptr) < 0) { - cerr << "Could not open source address " << videoPath << endl; - clear(); - return false; - } // For example, "rtsp://localhost:8554/h264.3gp" - - /* retrieve stream information */ - if (avformat_find_stream_info(PFormatCtx, nullptr) < 0) { - cerr << "Could not find stream information" << endl; - clear(); - return false; - } - AVRational time_base, frame_base; - if (_open_codec_context(PVideoStreamIDX, PCodecCtx, PFormatCtx, AVMEDIA_TYPE_VIDEO) >= 0) { - PVideoStream = PFormatCtx->streams[PVideoStreamIDX]; - time_base = PVideoStream->time_base; - frame_base = PVideoStream->avg_frame_rate; - - /* allocate image where the decoded image will be put */ - width = PCodecCtx->width; - height = PCodecCtx->height; - if (widthDst <= 0) { - widthDst = width; - } - if (heightDst <= 0) { - heightDst = height; - } - PPixelFormat = PCodecCtx->pix_fmt; - _duration = static_cast(PVideoStream->duration) / static_cast(time_base.den) * static_cast(time_base.num); - _predictFrameNum = av_rescale(static_cast(_duration * 0xFFFF), frame_base.num, frame_base.den) / 0xFFFF; - } - else { - cerr << "Could not get codec context from the stream, aborting" << endl; - clear(); - return false; - } - - /* dump input information to stderr */ - if (__dumpControl > 1) { - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 0); - } - - if (!PVideoStream) { // Check whether the video stream is correctly opened. - cerr << "Could not find audio or video stream in the network, aborting" << endl; - clear(); - return false; - } - - if (width == 0 || height == 0) { - cerr << "Could not get enough meta-data in the network, aborting" << endl; - clear(); - return false; - } - - PswsCtx = sws_getContext(width, height, PCodecCtx->pix_fmt, widthDst, heightDst, AV_PIX_FMT_RGB24, - SCALE_FLAGS, nullptr, nullptr, nullptr); - - buffer.set(cache_size, width, height, widthDst, heightDst); - buffer.set_timer(frameRate, time_base); - if (!buffer.reset_memory()) { // Check whether the buffer is allocated correctly. - cerr << "Could not allocate the memory of frame buffer list." << endl; - clear(); - return false; - } - - read_check.lock(); - reading = true; - read_check.unlock(); - return true; -} - -void cmpc::CMpegClient::dumpFormat() { - if ((!videoPath.empty()) && PFormatCtx) { - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 0); - } - else { - cerr << "Still need to FFmpegSetup()" << endl; - } -} - -void cmpc::CMpegClient::resetPath(string inVideoPath) { - videoPath.assign(inVideoPath); -} - -cmpc::AVRational cmpc::CMpegClient::_setAVRational(int num, int den) { - AVRational res; - res.num = num; res.den = den; - return res; -} - -int cmpc::CMpegClient::__save_frame(AVFrame*& frame, AVPacket*& pkt, bool& got_frame, int cached) { - int ret = 0; - int decoded = pkt->size; - - got_frame = false; - - if (pkt->stream_index == PVideoStreamIDX) { - /* decode video frame */ - ret = __avcodec_decode_video2(PCodecCtx, frame, got_frame, pkt); - if (ret < 0) { - cout << "Error decoding video frame (" << av_err2str(ret) << ")" << endl; - return ret; - } - - if (got_frame) { - - if (frame->width != width || frame->height != height || - frame->format != PPixelFormat) { - /* To handle this change, one could call av_image_alloc again and - * decode the following frames into another rawvideo file. */ - cout << "Error: Width, height and pixel format have to be " - "constant in a rawvideo file, but the width, height or " - "pixel format of the input video changed:\n" - "old: width = " << width << ", height = " << height << ", format = " - << av_get_pix_fmt_name(PPixelFormat) << endl << - "new: width = " << frame->width << ", height = " << frame->height << ", format = " - << av_get_pix_fmt_name(static_cast(frame->format)) << endl; - return -1; - } - - info_lock.lock(); - PVideoFrameCount++; - info_lock.unlock(); - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "video_frame" << (cached ? "(cached)" : "") << " n:" << PVideoFrameCount << - " coded_n:" << frame->coded_picture_number << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - /* copy decoded frame to destination buffer: - * this is required since rawvideo expects non aligned data */ - - buffer.write(PswsCtx, frame); - } - } - - /* If we use frame reference counting, we own the data and need - * to de-reference it when we don't use it anymore */ - - if (got_frame && refcount) - av_frame_unref(frame); - - return decoded; -} - -void cmpc::CMpegClient::__client_holder() { - int ret; - bool got_frame; - if (frame) { - cerr << "Current frame is occupied, could not start a new client." << endl; - return; - } - frame = av_frame_alloc(); - auto pkt = av_packet_alloc(); - if (!frame) { - cerr << "Could not allocate frame" << endl; - ret = AVERROR(ENOMEM); - return; - } - /* initialize packet, set data to NULL, let the demuxer fill it */ - if (PVideoStream && (__dumpControl > 0)) { - std::ostringstream str_data; - str_data << "Demuxing video from address '" << videoPath << "' into Python-List" << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - /* Reset the contex to remove the flushed state. */ - avcodec_flush_buffers(PCodecCtx); - - /* read frames from the file */ - info_lock.lock(); - PVideoFrameCount = 0; - info_lock.unlock(); - - //start reading packets from stream and write them to file - av_read_play(PFormatCtx); //play RTSP - - auto temp_pkt = av_packet_alloc(); - while (av_read_frame(PFormatCtx, pkt) >= 0) { - //cout << "[Test - " << pkt.size << " ]" << endl; - av_packet_ref(temp_pkt, pkt); - do { - ret = __save_frame(frame, temp_pkt, got_frame, 0); - if (ret < 0) - break; - temp_pkt->data += ret; - temp_pkt->size -= ret; - } while (temp_pkt->size > 0); - /* flush cached frames */ - av_packet_unref(pkt); - av_packet_unref(temp_pkt); - read_check.lock(); - if (!reading) { - read_check.unlock(); - break; - } - else { - read_check.unlock(); - } - } - av_packet_free(&temp_pkt); - - do { - __save_frame(frame, pkt, got_frame, 1); - } while (got_frame); - - //cout << "Demuxing succeeded." << endl; - - if (PVideoStream && (__dumpControl > 0)) { - std::ostringstream str_data; - str_data << "End of stream client." << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - if (frame) { - av_frame_free(&frame); - frame = nullptr; - } - if (pkt) { - av_packet_free(&pkt); - } - - read_check.lock(); - reading = false; - read_check.unlock(); -} - -int cmpc::CMpegClient::__avcodec_decode_video2(AVCodecContext* avctx, AVFrame* frame, bool& got_frame, AVPacket* pkt) { - int ret; - - got_frame = false; - - if (pkt) { - ret = avcodec_send_packet(avctx, pkt); - // In particular, we don't expect AVERROR(EAGAIN), because we read all - // decoded frames with avcodec_receive_frame() until done. - if (ret < 0) { - //cout << ret << ", " << AVERROR(EAGAIN) << ", " << AVERROR_EOF << endl; - return ret == AVERROR_EOF ? 0 : ret; - } - } - - ret = avcodec_receive_frame(avctx, frame); - if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) - return ret; - if (ret >= 0) - got_frame = true; - - //cout << ret << ", " << AVERROR(EAGAIN) << ", " << AVERROR_EOF << endl; - - return 0; -} - -PyObject* cmpc::CMpegClient::ExtractFrame() { - return ExtractFrame(read_size); -} - -PyObject* cmpc::CMpegClient::ExtractFrame(int64_t readsize) { - if (readsize == 0 || readsize > cache_size) { - cerr << "Read size of frames is out of range." << endl; - return nullptr; - } - else if (frame == nullptr) { - cerr << "Current frame object is empty, maybe the client has not been started." << endl; - return nullptr; - } - buffer.freeze_write(readsize); - auto res = buffer.read(); - if (res == nullptr) { - cerr << "Unable to get frames from current buffer." << endl; - } - return res; -} - -void cmpc::CMpegClient::setParameter(string keyword, void* ptr) { - if (keyword.compare("widthDst") == 0) { - auto ref = reinterpret_cast(ptr); - widthDst = *ref; - } - else if (keyword.compare("heightDst") == 0) { - auto ref = reinterpret_cast(ptr); - heightDst = *ref; - } - else if (keyword.compare("cacheSize") == 0) { - auto ref = reinterpret_cast(ptr); - cache_size = *ref; - } - else if (keyword.compare("readSize") == 0) { - auto ref = reinterpret_cast(ptr); - read_size = *ref; - } - else if (keyword.compare("dstFrameRate") == 0) { - PyObject* ref = reinterpret_cast(ptr); - auto refObj = PyTuple_GetItem(ref, 0); - int num = static_cast(PyLong_AsLong(refObj)); - refObj = PyTuple_GetItem(ref, 1); - int den = static_cast(PyLong_AsLong(refObj)); - frameRate = _setAVRational(num, den); - } - else if (keyword.compare("nthread") == 0) { - auto ref = reinterpret_cast(ptr); - if (PCodecCtx) { - PCodecCtx->thread_count = *ref; - } - nthread = *ref; - } -} - -PyObject* cmpc::CMpegClient::getParameter(string keyword) { - if (keyword.compare("videoAddress") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(videoPath.c_str(), static_cast(videoPath.size())); - } - else if (keyword.compare("width") == 0) { - return Py_BuildValue("i", width); - } - else if (keyword.compare("height") == 0) { - return Py_BuildValue("i", height); - } - else if (keyword.compare("frameCount") == 0) { - info_lock.lock(); - auto value = Py_BuildValue("i", PVideoFrameCount); - info_lock.unlock(); - return value; - } - else if (keyword.compare("coderName") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(_str_codec.c_str(), static_cast(_str_codec.size())); - } - else if (keyword.compare("duration") == 0) { - return Py_BuildValue("d", _duration); - } - else if (keyword.compare("estFrameNum") == 0) { - return Py_BuildValue("L", _predictFrameNum); - } - else if (keyword.compare("srcFrameRate") == 0) { - if (!PVideoStream) { - return Py_BuildValue("d", 0.0); - } - auto frame_base = PVideoStream->avg_frame_rate; - double srcFrameRate = static_cast(frame_base.num) / static_cast(frame_base.den); - return Py_BuildValue("d", srcFrameRate); - } - else if (keyword.compare("nthread") == 0) { - if (PCodecCtx) { - return Py_BuildValue("i", PCodecCtx->thread_count); - } - else { - return Py_BuildValue("i", nthread); - } - } - else { - Py_RETURN_NONE; - } -} - -PyObject* cmpc::CMpegClient::getParameter() { - auto res = PyDict_New(); - string key; - PyObject* val = nullptr; - // Fill the values. - key.assign("videoAddress"); - val = Py_BuildValue("y", videoPath.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("codecName"); - val = Py_BuildValue("y", _str_codec.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (PCodecCtx) { - key.assign("bitRate"); - val = Py_BuildValue("L", PCodecCtx->bit_rate); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("GOPSize"); - val = Py_BuildValue("i", PCodecCtx->gop_size); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("maxBframe"); - val = Py_BuildValue("i", PCodecCtx->max_b_frames); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("nthread"); - val = Py_BuildValue("i", PCodecCtx->thread_count); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - else { - key.assign("nthread"); - val = Py_BuildValue("i", nthread); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - if (widthDst > 0) { - key.assign("widthDst"); - val = Py_BuildValue("i", widthDst); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - if (heightDst > 0) { - key.assign("heightDst"); - val = Py_BuildValue("i", heightDst); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - key.assign("width"); - val = Py_BuildValue("i", width); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("height"); - val = Py_BuildValue("i", height); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (PVideoStream) { - key.assign("frameRate"); - auto& frame_rate = PVideoStream->avg_frame_rate; - val = Py_BuildValue("(ii)", frame_rate.num, frame_rate.den); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - return res; -} - -bool cmpc::CMpegClient::start() { - if (reading && (frame == nullptr)) { - read_handle = std::move(std::thread(std::mem_fn(&CMpegClient::__client_holder), std::ref(*this))); - return true; - } - return false; -} -void cmpc::CMpegClient::terminate() { - read_check.lock(); - auto protectReading = reading; - read_check.unlock(); - if (read_handle.joinable()) { - read_check.lock(); - reading = false; - read_check.unlock(); - read_handle.join(); - //std::terminate(); - read_handle = std::move(std::thread()); - } - else { - read_handle = std::move(std::thread()); - } - info_lock.lock(); - info_lock.unlock(); - read_check.lock(); - reading = protectReading; - read_check.unlock(); - if (frame) { - av_frame_free(&frame); - } -} -ostream& cmpc::operator<<(ostream& out, cmpc::CMpegClient& self_class) { - double dstFrameRate; - out << std::setw(1) << "/"; - out << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setw(1) << " * Packed FFmpeg Client - Y. Jin V" << MPEGCODER_CURRENT_VERSION << endl; - out << " " << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * VideoAddress: " \ - << self_class.videoPath << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (Width, Height): " \ - << self_class.width << ", " << self_class.height << endl; - if (self_class.widthDst > 0 && self_class.heightDst > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (WidthDst, HeightDst): " \ - << self_class.widthDst << ", " << self_class.heightDst << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Deccoder: " \ - << self_class._str_codec << endl; - if (self_class.PCodecCtx) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number: " \ - << self_class.PCodecCtx->thread_count << endl; - } - else { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number (P): " \ - << self_class.nthread << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Duration: " \ - << self_class._duration << " [s]" << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Predicted FrameNum: " \ - << self_class._predictFrameNum << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Read/Cache size: " \ - << self_class.read_size << "/" << self_class.cache_size << endl; - if (self_class.PVideoStream) { - auto frame_base = self_class.PVideoStream->avg_frame_rate; - double srcFrameRate = static_cast(frame_base.num) / static_cast(frame_base.den); - if (self_class.frameRate.den) { - dstFrameRate = static_cast(self_class.frameRate.num) / static_cast(self_class.frameRate.den); - } - else { - dstFrameRate = 0; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Dst./Src. frame rate: " \ - << std::setprecision(3) << dstFrameRate << "/" << srcFrameRate << std::setprecision(6) << endl; - } - else { - if (self_class.frameRate.den) { - dstFrameRate = static_cast(self_class.frameRate.num) / static_cast(self_class.frameRate.den); - } - else { - dstFrameRate = 0; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Src. frame rate: " \ - << std::setprecision(3) << dstFrameRate << std::setprecision(6) << endl; - } - out << std::setw(1) << " */"; - return out; -} - -cmpc::BufferList::BufferList(void) : - _Buffer_pos(0), _Buffer_rpos(-1), _Buffer_size(0), __Read_size(0), - next_pts(0), interval_pts(0), dst_width(0), dst_height(0), - src_width(0), src_height(0), _Buffer_capacity(0), - frameRGB(nullptr), _Buffer_List(nullptr) { -} -cmpc::BufferList::~BufferList(void) { - if (_Buffer_List) { - for (auto i = 0; i < _Buffer_size; i++) { - if (_Buffer_List[i]) { - av_free(_Buffer_List[i]); - _Buffer_List[i] = nullptr; - } - } - delete[]_Buffer_List; - _Buffer_List = nullptr; - } - if (frameRGB) { - av_frame_free(&frameRGB); - } -} -cmpc::BufferList::BufferList(const BufferList& ref) : - _Buffer_pos(ref._Buffer_pos), _Buffer_rpos(ref._Buffer_rpos), _Buffer_size(ref._Buffer_size), - __Read_size(ref.__Read_size), next_pts(ref.next_pts), interval_pts(ref.interval_pts), - dst_width(ref.dst_width), dst_height(ref.dst_height), - src_width(ref.src_width), src_height(ref.src_height), - _Buffer_capacity(ref._Buffer_capacity), frameRGB(ref.frameRGB), _Buffer_List(nullptr) { - if (!(frameRGB = av_frame_alloc())) { - cerr << "Could Allocate Temp Frame (RGB)" << endl; - return; - } - _Buffer_List = new uint8_t * [_Buffer_size]; - memset(_Buffer_List, 0, _Buffer_size * sizeof(uint8_t*)); - if (_Buffer_capacity > 0) { - for (auto i = 0; i < _Buffer_size; i++) { - if (ref._Buffer_List[i] != nullptr) { - _Buffer_List[i] = (uint8_t*)av_malloc(_Buffer_capacity * sizeof(uint8_t)); - memcpy(_Buffer_List[i], ref._Buffer_List[i], _Buffer_capacity * sizeof(uint8_t)); - } - } - } -} -cmpc::BufferList& cmpc::BufferList::operator=(const BufferList& ref) { - if (this != &ref) { - _Buffer_pos = ref._Buffer_pos; - _Buffer_rpos = ref._Buffer_rpos; - _Buffer_size = ref._Buffer_size; - __Read_size = ref.__Read_size; - next_pts = ref.next_pts; - interval_pts = ref.interval_pts; - dst_width = ref.dst_width; - dst_height = ref.dst_height; - src_width = ref.src_width; - src_height = ref.src_height; - _Buffer_capacity = ref._Buffer_capacity; - if (!(frameRGB = av_frame_alloc())) { - cerr << "Could Allocate Temp Frame (RGB)" << endl; - return *this; - } - _Buffer_List = new uint8_t * [_Buffer_size]; - memset(_Buffer_List, 0, _Buffer_size * sizeof(uint8_t*)); - if (_Buffer_capacity > 0) { - for (auto i = 0; i < _Buffer_size; i++) { - if (ref._Buffer_List[i] != nullptr) { - _Buffer_List[i] = (uint8_t*)av_malloc(_Buffer_capacity * sizeof(uint8_t)); - memcpy(_Buffer_List[i], ref._Buffer_List[i], _Buffer_capacity * sizeof(uint8_t)); - } - } - } - } - return *this; -} -cmpc::BufferList::BufferList(BufferList&& ref) noexcept : - _Buffer_pos(ref._Buffer_pos), _Buffer_rpos(ref._Buffer_rpos), _Buffer_size(ref._Buffer_size), - __Read_size(ref.__Read_size), next_pts(ref.next_pts), interval_pts(ref.interval_pts), - dst_width(ref.dst_width), dst_height(ref.dst_height), - src_width(ref.src_width), src_height(ref.src_height), - _Buffer_capacity(ref._Buffer_capacity), frameRGB(ref.frameRGB), _Buffer_List(ref._Buffer_List) { - ref._Buffer_List = nullptr; - ref.frameRGB = nullptr; -} -cmpc::BufferList& cmpc::BufferList::operator=(BufferList&& ref) noexcept { - if (this != &ref) { - _Buffer_pos = ref._Buffer_pos; - _Buffer_rpos = ref._Buffer_rpos; - _Buffer_size = ref._Buffer_size; - __Read_size = ref.__Read_size; - interval_pts = ref.interval_pts; - next_pts = ref.next_pts; - dst_width = ref.dst_width; - dst_height = ref.dst_height; - src_width = ref.src_width; - src_height = ref.src_height; - _Buffer_capacity = ref._Buffer_capacity; - _Buffer_List = ref._Buffer_List; - frameRGB = ref.frameRGB; - ref._Buffer_List = nullptr; - ref.frameRGB = nullptr; - } - return *this; -} -void cmpc::BufferList::clear(void) { - if (_Buffer_List) { - for (auto i = 0; i < _Buffer_size; i++) { - if (_Buffer_List[i]) { - av_free(_Buffer_List[i]); - _Buffer_List[i] = nullptr; - } - } - delete[]_Buffer_List; - _Buffer_List = nullptr; - } - _Buffer_pos = 0; - _Buffer_rpos = -1; - _Buffer_size = 0; - __Read_size = 0; - next_pts = 0; - interval_pts = 0; - src_width = 0; - src_height = 0; - dst_width = 0; - dst_height = 0; - if (frameRGB) { - av_frame_free(&frameRGB); - } -} -const int64_t cmpc::BufferList::size() const { - return _Buffer_size; -} -void cmpc::BufferList::set(int64_t set_size, int width, int height, int widthDst, int heightDst) { - _Buffer_size = set_size; - if (widthDst != 0) { - dst_width = widthDst; - } - else { - dst_width = width; - } - if (heightDst != 0) { - dst_height = heightDst; - } - else { - dst_height = height; - } - src_width = width; - src_height = height; - _Buffer_capacity = av_image_get_buffer_size(AV_PIX_FMT_RGB24, dst_width, dst_height, 1); -} -void cmpc::BufferList::set_timer(AVRational targetFrameRate, AVRational timeBase) { - interval_pts = av_rescale(av_rescale(1, timeBase.den, timeBase.num), targetFrameRate.den, targetFrameRate.num); -} -bool cmpc::BufferList::reset_memory() { - if (!frameRGB) { - if (!(frameRGB = av_frame_alloc())) { - cerr << "Could Allocate Temp Frame (RGB)" << endl; - return false; - } - } - if (!_Buffer_List) { - _Buffer_List = new uint8_t * [_Buffer_size]; - memset(_Buffer_List, 0, _Buffer_size * sizeof(uint8_t*)); - } - for (auto i = 0; i < _Buffer_size; i++) { - if (!_Buffer_List[i]) { - _Buffer_List[i] = (uint8_t*)av_malloc(_Buffer_capacity * sizeof(uint8_t)); - } - memset(_Buffer_List[i], 0, _Buffer_capacity * sizeof(uint8_t)); - } - return true; -} -void cmpc::BufferList::freeze_write(int64_t read_size) { - auto read_pos = _Buffer_pos - read_size; - if (read_pos < 0) { - read_pos += _Buffer_size; - } - _Buffer_rpos = read_pos; - __Read_size = read_size; -} -bool cmpc::BufferList::write(SwsContext* PswsCtx, AVFrame* frame) { - if (frame->pts < next_pts) { - if (frame->pts > (next_pts - 2 * interval_pts)) { - return false; - } - else { - next_pts = frame->pts + interval_pts; - } - } - else { - if (next_pts > 0) - next_pts += interval_pts; - else - next_pts = frame->pts; - } - if (_Buffer_pos == _Buffer_rpos) { - return false; - } - av_image_fill_arrays(frameRGB->data, frameRGB->linesize, _Buffer_List[_Buffer_pos], AV_PIX_FMT_RGB24, dst_width, dst_height, 1); - sws_scale(PswsCtx, frame->data, frame->linesize, 0, src_height, frameRGB->data, frameRGB->linesize); - _Buffer_pos++; - if (_Buffer_pos >= _Buffer_size) - _Buffer_pos -= _Buffer_size; - return true; -} -PyObject* cmpc::BufferList::read() { - if (_Buffer_rpos < 0) { - return nullptr; - } - auto _Buffer_rend = (_Buffer_rpos + __Read_size) % _Buffer_size; - npy_intp dims[] = { __Read_size, dst_height, dst_width, 3 }; - auto newdata = new uint8_t[__Read_size * _Buffer_capacity]; - auto p = newdata; - for (auto i = _Buffer_rpos; i != _Buffer_rend; i = (i + 1) % _Buffer_size) { - memcpy(p, _Buffer_List[i], _Buffer_capacity * sizeof(uint8_t)); - p += _Buffer_capacity; - } - PyObject* PyFrame = PyArray_SimpleNewFromData(4, dims, NPY_UINT8, reinterpret_cast(newdata)); - PyArray_ENABLEFLAGS((PyArrayObject*)PyFrame, NPY_ARRAY_OWNDATA); - _Buffer_rpos = -1; - __Read_size = 0; - return PyArray_Return((PyArrayObject*)PyFrame); - //Py_RETURN_NONE; -} - -/** - * Related with the encoder. - */ - - // Constructors following 3-5 law. -cmpc::CMpegServer::CMpegServer(void) : - videoPath(), __formatName(), codecName(), bitRate(1024), - __start_time(0), __cur_time(0), width(100), height(100), widthSrc(0), heightSrc(0), - timeBase(_setAVRational(1, 25)), frameRate(_setAVRational(25, 1)), - time_base_q(_setAVRational(1, AV_TIME_BASE)), GOPSize(10), MaxBFrame(1), - PStreamContex({ 0 }), PFormatCtx(nullptr), Ppacket(nullptr), PswsCtx(nullptr), - __frameRGB(nullptr), RGBbuffer(nullptr), __have_video(false), __enable_header(false), - nthread(0) { - __pts_ahead = av_rescale(av_rescale(20, timeBase.den, timeBase.num), frameRate.den, frameRate.num); -} - -void cmpc::CMpegServer::meta_protected_clear(void) { - auto protectWidth = width; - auto protectHeight = height; - auto protectWidthSrc = widthSrc; - auto protectHeightSrc = heightSrc; - auto protectBitRate = bitRate; - auto protectGOPSize = GOPSize; - auto protectMaxBFrame = MaxBFrame; - auto protectPTSAhead = __pts_ahead; - auto protectVideoPath(videoPath); - auto protectFormatName(__formatName); - auto protectCodecName(codecName); - auto protectTimeBase(timeBase); - auto protectFrameRate(frameRate); - auto protectNthread = nthread; - clear(); - width = protectWidth; - height = protectHeight; - widthSrc = protectWidthSrc; - heightSrc = protectHeightSrc; - bitRate = protectBitRate; - GOPSize = protectGOPSize; - MaxBFrame = protectMaxBFrame; - timeBase = protectTimeBase; - frameRate = protectFrameRate; - __pts_ahead = protectPTSAhead; - videoPath.assign(protectVideoPath); - __formatName.assign(protectFormatName); - codecName.assign(protectCodecName); - nthread = protectNthread; -} - -void cmpc::CMpegServer::clear(void) { - FFmpegClose(); - videoPath.clear(); - __formatName.clear(); - codecName.clear(); - bitRate = 1024; - width = 100; - height = 100; - heightSrc = 0; - widthSrc = 0; - timeBase = _setAVRational(1, 25); - frameRate = _setAVRational(25, 1); - GOPSize = 10; - MaxBFrame = 1; - nthread = 0; - PStreamContex = { 0 }; - __have_video = false; - __enable_header = false; - __pts_ahead = av_rescale(av_rescale(20, timeBase.den, timeBase.num), frameRate.den, frameRate.num); - __start_time = 0; - __cur_time = 0; -} - -cmpc::CMpegServer::~CMpegServer(void) { - clear(); -} - - -cmpc::CMpegServer::CMpegServer(const CMpegServer& ref) : - videoPath(ref.videoPath), __formatName(ref.__formatName), codecName(ref.codecName), - bitRate(ref.bitRate), __pts_ahead(ref.__pts_ahead), __start_time(0), __cur_time(0), - width(ref.width), height(ref.height), widthSrc(ref.widthSrc), heightSrc(ref.heightSrc), - timeBase(ref.timeBase), frameRate(ref.frameRate), - time_base_q(_setAVRational(1, AV_TIME_BASE)), GOPSize(ref.GOPSize), MaxBFrame(ref.MaxBFrame), - PStreamContex({ 0 }), PFormatCtx(nullptr), Ppacket(nullptr), PswsCtx(nullptr), - __frameRGB(nullptr), RGBbuffer(nullptr), __have_video(false), __enable_header(false), - nthread(ref.nthread) { - if (!FFmpegSetup()) { - clear(); - } -} - -cmpc::CMpegServer& cmpc::CMpegServer::operator=(const CMpegServer& ref) { - if (this != &ref) { - videoPath = ref.videoPath; - __formatName = ref.__formatName; - codecName = ref.codecName; - bitRate = ref.bitRate; - __pts_ahead = ref.__pts_ahead; - __start_time = 0; - __cur_time = 0; - width = ref.width; - height = ref.height; - widthSrc = ref.widthSrc; - heightSrc = ref.heightSrc; - timeBase = ref.timeBase; - frameRate = ref.frameRate; - time_base_q = _setAVRational(1, AV_TIME_BASE); - GOPSize = ref.GOPSize; - MaxBFrame = ref.MaxBFrame; - PStreamContex = { 0 }; - PFormatCtx = nullptr; - Ppacket = nullptr; - PswsCtx = nullptr; - __frameRGB = nullptr; - RGBbuffer = nullptr; - __have_video = false; - __enable_header = false; - nthread = ref.nthread; - if (!FFmpegSetup()) { - clear(); - } - } - return *this; -} - -cmpc::CMpegServer::CMpegServer(CMpegServer&& ref) noexcept : - videoPath(std::move(ref.videoPath)), __formatName(std::move(ref.__formatName)), - codecName(std::move(ref.codecName)), bitRate(ref.bitRate), __pts_ahead(ref.__pts_ahead), - __start_time(ref.__start_time), __cur_time(ref.__cur_time), - width(ref.width), height(ref.height), widthSrc(ref.widthSrc), heightSrc(ref.heightSrc), - timeBase(ref.timeBase), frameRate(ref.frameRate), time_base_q(ref.time_base_q), - GOPSize(ref.GOPSize), MaxBFrame(ref.MaxBFrame), PStreamContex(std::move(ref.PStreamContex)), - PFormatCtx(ref.PFormatCtx), Ppacket(ref.Ppacket), PswsCtx(ref.PswsCtx), - __frameRGB(ref.__frameRGB), RGBbuffer(ref.RGBbuffer), - __have_video(ref.__have_video), __enable_header(ref.__enable_header), nthread(ref.nthread) { - ref.PFormatCtx = nullptr; - ref.PStreamContex = { 0 }; - ref.PswsCtx = nullptr; - ref.RGBbuffer = nullptr; - ref.Ppacket = nullptr; - ref.__frameRGB = nullptr; -} - -cmpc::CMpegServer& cmpc::CMpegServer::operator=(CMpegServer&& ref) noexcept { - if (this != &ref) { - videoPath.assign(std::move(ref.videoPath)); - __formatName.assign(std::move(ref.__formatName)); - codecName.assign(std::move(ref.codecName)); - bitRate = ref.bitRate; - width = ref.width; - height = ref.height; - widthSrc = ref.widthSrc; - heightSrc = ref.heightSrc; - timeBase = ref.timeBase; - frameRate = ref.frameRate; - time_base_q = ref.time_base_q; - GOPSize = ref.GOPSize; - MaxBFrame = ref.MaxBFrame; - __pts_ahead = ref.__pts_ahead; - __start_time = ref.__start_time; - __cur_time = ref.__cur_time; - PFormatCtx = ref.PFormatCtx; - PStreamContex = std::move(ref.PStreamContex); - PswsCtx = ref.PswsCtx; - RGBbuffer = ref.RGBbuffer; - Ppacket = ref.Ppacket; - nthread = ref.nthread; - __frameRGB = ref.__frameRGB; - __have_video = ref.__have_video; - __enable_header = ref.__enable_header; - ref.PFormatCtx = nullptr; - ref.PStreamContex = { 0 }; - ref.PswsCtx = nullptr; - ref.RGBbuffer = nullptr; - ref.Ppacket = nullptr; - ref.__frameRGB = nullptr; - } - return *this; -} - -void cmpc::CMpegServer::resetPath(string inVideoPath) { - videoPath.assign(inVideoPath); - if (videoPath.compare(0, 7, "rtsp://") == 0) { - __formatName.assign("rtsp"); - } - else if (videoPath.compare(0, 7, "rtmp://") == 0) { - __formatName.assign("rtmp"); - } - else if (videoPath.compare(0, 7, "http://") == 0) { - __formatName.assign("http"); - } - else if (videoPath.compare(0, 6, "ftp://") == 0) { - __formatName.assign("ftp"); - } - else if (videoPath.compare(0, 7, "sftp://") == 0) { - __formatName.assign("sftp"); - } - else { - __formatName.clear(); - } -} - -bool cmpc::CMpegServer::FFmpegSetup(string inVideoPath) { - resetPath(inVideoPath); - return FFmpegSetup(); -} - -cmpc::AVRational cmpc::CMpegServer::_setAVRational(int num, int den) { - AVRational res; - res.num = num; res.den = den; - return res; -} - -int64_t cmpc::CMpegServer::__FrameToPts(int64_t seekFrame) const { - return av_rescale(av_rescale(seekFrame, timeBase.den, timeBase.num), frameRate.den, frameRate.num); -} - -int64_t cmpc::CMpegServer::__TimeToPts(double seekTime) const { - return av_rescale(static_cast(seekTime * 1000), timeBase.den, timeBase.num) / 1000; -} - -bool cmpc::CMpegServer::__setup_check() const { - if ((!videoPath.empty()) && (!__formatName.empty()) && frameRate.den > 0 && frameRate.num > 0) { - return true; - } - else { - return false; - } -} - -void cmpc::CMpegServer::__log_packet() { - AVRational* time_base = &PFormatCtx->streams[Ppacket->stream_index]->time_base; - std::ostringstream str_data; - str_data << "pts:" << av_ts2str(Ppacket->pts) << " pts_time:" << av_ts2timestr(Ppacket->pts, time_base) - << " dts:" << av_ts2str(Ppacket->dts) << " dts_time:" << av_ts2timestr(Ppacket->dts, time_base) << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); -} - -int cmpc::CMpegServer::__write_frame() { - /* rescale output packet timestamp values from codec to stream timebase */ - av_packet_rescale_ts(Ppacket, PStreamContex.enc->time_base, PStreamContex.st->time_base); - Ppacket->stream_index = PStreamContex.st->index; - - // Update the time cursor according to the packet index. - AVRational& time_base = PFormatCtx->streams[Ppacket->stream_index]->time_base; - - auto cur_time = av_rescale_q(Ppacket->pts, time_base, time_base_q); - if (cur_time > __cur_time) { - __cur_time = cur_time; - } - - /* Write the compressed frame to the media file. */ - if (__dumpControl > 0) - __log_packet(); - return av_interleaved_write_frame(PFormatCtx, Ppacket); -} - -/* Add an output stream. */ -const cmpc::AVCodec* cmpc::CMpegServer::__add_stream() { - /* find the encoder */ - AVCodecID codec_id; - auto srcwidth = widthSrc > 0 ? widthSrc : width; - auto srcheight = heightSrc > 0 ? heightSrc : height; - auto const_codec = avcodec_find_encoder_by_name(codecName.c_str()); - const AVCodec* codec; - if (!(const_codec)) { - codec_id = PFormatCtx->oformat->video_codec; - cerr << "Could not find encoder " << codecName << ", use " << avcodec_get_name(codec_id) << " as an alternative." << endl; - codec = avcodec_find_encoder(codec_id); - } - else { - codec = const_codec; - codec_id = codec->id; - } - - if (!codec) { - cerr << "Could not find encoder for '" << avcodec_get_name(codec_id) << "'" << endl; - return nullptr; - } - - PStreamContex.st = avformat_new_stream(PFormatCtx, nullptr); - if (!PStreamContex.st) { - cerr << "Could not allocate stream" << endl; - return nullptr; - } - PStreamContex.st->id = PFormatCtx->nb_streams - 1; - auto c = avcodec_alloc_context3(codec); - if (!c) { - cerr << "Could not alloc an encoding context" << endl; - return nullptr; - } - if (nthread > 0) { - c->thread_count = nthread; - } - PStreamContex.enc = c; - - switch (codec->type) { - case AVMediaType::AVMEDIA_TYPE_VIDEO: - c->codec_id = codec_id; - - c->bit_rate = bitRate; - /* Resolution must be a multiple of two. */ - c->width = width; - c->height = height; - /* timebase: This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identical to 1. */ - PStreamContex.st->time_base.den = 0; - PStreamContex.st->time_base.num = 0; - //av_stream_set_r_frame_rate(PStreamContex.st, frameRate); - //cout << "(" << frameRate.num << ", " << frameRate.den << ")" << endl; - //PStreamContex.st->r_frame_rate - c->time_base = timeBase; - - //PStreamContex.st->frame - c->framerate = frameRate; - - c->gop_size = GOPSize; /* emit one intra frame every twelve frames at most */ - c->max_b_frames = MaxBFrame; - c->pix_fmt = STREAM_PIX_FMT; - if (c->codec_id == AVCodecID::AV_CODEC_ID_FLV1) { - /* just for testing, we also add B-frames */ - c->max_b_frames = 0; - } - if (c->codec_id == AVCodecID::AV_CODEC_ID_MPEG2VIDEO) { - /* just for testing, we also add B-frames */ - c->max_b_frames = 2; - } - if (c->codec_id == AVCodecID::AV_CODEC_ID_MPEG1VIDEO) { - /* Needed to avoid using macroblocks in which some coeffs overflow. - * This does not happen with normal video, it just happens here as - * the motion of the chroma plane does not match the luma plane. */ - c->mb_decision = 2; - } - if (c->pix_fmt != STREAM_PIX_FMT) { - /* as we only generate a YUV420P picture, we must convert it - * to the codec pixel format if needed */ - if (!PStreamContex.sws_ctx) { - PStreamContex.sws_ctx = sws_getContext(c->width, c->height, - STREAM_PIX_FMT, - c->width, c->height, - c->pix_fmt, - SCALE_FLAGS, nullptr, nullptr, nullptr); - if (!PStreamContex.sws_ctx) { - cerr << "Could not initialize the conversion context" << endl; - return nullptr; - } - } - } - if (!PswsCtx) { - PswsCtx = sws_getContext(srcwidth, srcheight, - AVPixelFormat::AV_PIX_FMT_RGB24, - c->width, c->height, - c->pix_fmt, - SCALE_FLAGS, nullptr, nullptr, nullptr); - if (!PswsCtx) { - cerr << "Could not initialize the conversion context" << endl; - return nullptr; - } - } - if (!RGBbuffer) { - auto numBytes = av_image_get_buffer_size(AVPixelFormat::AV_PIX_FMT_RGB24, srcwidth, srcheight, 1); - RGBbuffer = (uint8_t*)av_malloc(numBytes * sizeof(uint8_t)); - } - break; - - default: - break; - } - - /* Some formats want stream headers to be separate. */ - if (PFormatCtx->oformat->flags & AVFMT_GLOBALHEADER) - c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; - return codec; -} - -/* video output */ -cmpc::AVFrame* cmpc::CMpegServer::__alloc_picture(enum AVPixelFormat pix_fmt, int width, int height) { - auto picture = av_frame_alloc(); - if (!picture) - return nullptr; - picture->format = pix_fmt; - picture->width = width; - picture->height = height; - /* allocate the buffers for the frame data */ - auto ret = av_frame_get_buffer(picture, 32); - if (ret < 0) { - cerr << "Could not allocate frame data." << endl; - return nullptr; - } - return picture; -} - -bool cmpc::CMpegServer::__open_video(const AVCodec* codec, const AVDictionary* opt_arg) { - int ret; - auto c = PStreamContex.enc; - AVDictionary* opt = nullptr; - - av_dict_copy(&opt, opt_arg, 0); - /* open the codec */ - ret = avcodec_open2(c, codec, &opt); - av_dict_free(&opt); - if (ret < 0) { - cerr << "Could not open video codec: " << av_err2str(ret) << endl; - return false; - } - /* allocate and init a re-usable frame */ - PStreamContex.frame = __alloc_picture(c->pix_fmt, c->width, c->height); - if (!PStreamContex.frame) { - cerr << "Could not allocate video frame" << endl; - return false; - } - /* If the output format is not YUV420P, then a temporary YUV420P - * picture is needed too. It is then converted to the required - * output format. */ - PStreamContex.tmp_frame = nullptr; - if (c->pix_fmt != STREAM_PIX_FMT) { - PStreamContex.tmp_frame = __alloc_picture(STREAM_PIX_FMT, c->width, c->height); - if (!PStreamContex.tmp_frame) { - cerr << "Could not allocate temporary picture" << endl; - return false; - } - } - /* copy the stream parameters to the muxer */ - ret = avcodec_parameters_from_context(PStreamContex.st->codecpar, c); - if (ret < 0) { - cerr << "Could not copy the stream parameters" << endl; - return false; - } - return true; -} - -cmpc::AVFrame* cmpc::CMpegServer::__get_video_frame(PyArrayObject* PyFrame) { - auto c = PStreamContex.enc; - - /* check if we want to generate more frames */ - //if (av_compare_ts(PStreamContex.next_pts, c->time_base, STREAM_DURATION, { 1, 1 }) >= 0) - // return nullptr; - /* when we pass a frame to the encoder, it may keep a reference to it - * internally; make sure we do not overwrite it here */ - if (av_frame_make_writable(PStreamContex.frame) < 0) - return nullptr; - if (c->pix_fmt != STREAM_PIX_FMT) { - /* as we only generate a YUV420P picture, we must convert it - * to the codec pixel format if needed */ - if (!PStreamContex.sws_ctx) { - PStreamContex.sws_ctx = sws_getContext(c->width, c->height, - STREAM_PIX_FMT, - c->width, c->height, - c->pix_fmt, - SCALE_FLAGS, nullptr, nullptr, nullptr); - if (!PStreamContex.sws_ctx) { - cerr << "Could not initialize the conversion context" << endl; - return nullptr; - } - } - if (!_LoadFrame_castFromPyFrameArray(PStreamContex.tmp_frame, PyFrame)) { - return nullptr; - } - sws_scale(PStreamContex.sws_ctx, - (const uint8_t* const*)PStreamContex.tmp_frame->data, PStreamContex.tmp_frame->linesize, - 0, c->height, PStreamContex.frame->data, PStreamContex.frame->linesize); - } - else { - if (!_LoadFrame_castFromPyFrameArray(PStreamContex.frame, PyFrame)) { - return nullptr; - } - } - - PStreamContex.frame->pts = PStreamContex.next_frame; - PStreamContex.next_frame++; - return PStreamContex.frame; -} - -bool cmpc::CMpegServer::_LoadFrame_castFromPyFrameArray(AVFrame* frame, PyArrayObject* PyFrame) { - /* make sure the frame data is writable */ - if (!__frameRGB) { - cerr << "Could not allocate frameRGB" << endl; - return false; - } - auto out_dataptr = reinterpret_cast(PyArray_DATA(PyFrame)); - auto srcwidth = widthSrc > 0 ? widthSrc : width; - auto srcheight = heightSrc > 0 ? heightSrc : height; - memcpy(RGBbuffer, out_dataptr, static_cast(srcwidth) * static_cast(srcheight) * 3 * sizeof(uint8_t)); - // Assign appropriate parts of buffer to image planes in pFrameRGB Note that pFrameRGB is an AVFrame, but AVFrame is a superset of AVPicture - av_image_fill_arrays(__frameRGB->data, __frameRGB->linesize, RGBbuffer, AVPixelFormat::AV_PIX_FMT_RGB24, srcwidth, srcheight, 1); - sws_scale(PswsCtx, __frameRGB->data, __frameRGB->linesize, 0, srcheight, frame->data, frame->linesize); - //cout << "Free 1" << endl; - //delete frameRGB; - //cout << "Free 2" << endl; - return true; -} - -/* -* encode one video frame and send it to the muxer -* return 1 when encoding is finished, 0 otherwise -*/ -int cmpc::CMpegServer::__avcodec_encode_video2(AVCodecContext* enc_ctx, AVPacket* pkt, AVFrame* frame) { - int ret; - int wfret = 0; - - if (frame) { - if (__dumpControl > 1) { - std::ostringstream str_data; - str_data << "Send frame " << frame->pts << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_DEBUG, "%s", str_data_s.c_str()); - } - } - else { - return AVERROR(EAGAIN); - } - - ret = avcodec_send_frame(enc_ctx, frame); - // In particular, we don't expect AVERROR(EAGAIN), because we read all - // decoded frames with avcodec_receive_frame() until done. - if (ret < 0) { - return ret == AVERROR_EOF ? 0 : ret; - } - - ret = avcodec_receive_packet(enc_ctx, pkt); - if (ret == AVERROR(EAGAIN)) - return 0; - - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "Write packet " << pkt->pts << " (size=" << pkt->size << "), "; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - - if (!ret) { - wfret = __write_frame(); - av_packet_unref(Ppacket); - if (wfret < 0) { - cerr << "Error while writing video frame: " << av_err2str(ret) << endl; - return wfret; - } - } - return ret; -} - -int cmpc::CMpegServer::__avcodec_encode_video2_flush(AVCodecContext* enc_ctx, AVPacket* pkt) { - int ret; - int wfret = 0; - if (__dumpControl > 1) { - std::ostringstream str_data; - str_data << "Flush all packets" << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_DEBUG, "%s", str_data_s.c_str()); - } - - ret = avcodec_send_frame(enc_ctx, nullptr); - // In particular, we don't expect AVERROR(EAGAIN), because we read all - // decoded frames with avcodec_receive_frame() until done. - if (ret < 0) { - return ret == AVERROR_EOF ? 0 : ret; - } - - while (ret >= 0) { - ret = avcodec_receive_packet(enc_ctx, pkt); - if (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) { - return 0; - } - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "Write packet " << pkt->pts << " (size=" << pkt->size << "), "; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - if (!ret) { - wfret = __write_frame(); - av_packet_unref(pkt); - } - else { - wfret = 0; - } - if (wfret < 0) { - cerr << "Error while writing video frame: " << av_err2str(ret) << endl; - return wfret; - } - } - return ret; -} - -int cmpc::CMpegServer::ServeFrameBlock(PyArrayObject* PyFrame) { - if (__start_time > 0) { - auto cur_time = static_cast(av_gettime() - __start_time); - if (cur_time < __cur_time) { - av_usleep(static_cast((__cur_time - cur_time) / 2)); - } - ServeFrame(PyFrame); - return 0; - } - else { - return -1; - } -} - -int cmpc::CMpegServer::ServeFrame(PyArrayObject* PyFrame) { - int ret; - auto c = PStreamContex.enc; - AVFrame* frame = nullptr; - - if ((!__have_video) || (!__enable_header)) - cerr << "Not allowed to use this method before FFmpegSetup()" << endl; - if (PyFrame) { - frame = __get_video_frame(PyFrame); - ret = __avcodec_encode_video2(c, Ppacket, frame); - } - else { - frame = nullptr; - ret = __avcodec_encode_video2_flush(c, Ppacket); - } - - if (ret < 0) { - cerr << "Error encoding video frame: " << av_err2str(ret) << endl; - return ret; - } - return frame ? 0 : 1; -} - -void cmpc::CMpegServer::setParameter(string keyword, void* ptr) { - if (keyword.compare("decoder") == 0) { - CMpegDecoder* ref = reinterpret_cast(ptr); - resetPath(ref->videoPath); - codecName.assign(ref->_str_codec); - if (ref->PCodecCtx) { - bitRate = ref->PCodecCtx->bit_rate; - GOPSize = ref->PCodecCtx->gop_size; - MaxBFrame = ref->PCodecCtx->max_b_frames; - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->PCodecCtx->thread_count; - } - nthread = ref->PCodecCtx->thread_count; - } - else { - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->nthread; - } - nthread = ref->nthread; - } - if (ref->widthDst > 0 && ref->heightDst > 0) { - width = ref->widthDst; - height = ref->heightDst; - } - else { - width = ref->width; - height = ref->height; - } - widthSrc = width; - heightSrc = height; - if (ref->PVideoStream) { - //timeBase = ref->PVideoStream->time_base; - frameRate = ref->PVideoStream->avg_frame_rate; - timeBase = _setAVRational(frameRate.den, frameRate.num); - } - if (GOPSize > 0) { - auto frame_ahead = 2 * GOPSize; - __pts_ahead = __FrameToPts(static_cast(frame_ahead)); - } - } - else if (keyword.compare("client") == 0) { - CMpegClient* ref = reinterpret_cast(ptr); - resetPath(ref->videoPath); - codecName.assign(ref->_str_codec); - if (ref->PCodecCtx) { - bitRate = ref->PCodecCtx->bit_rate; - GOPSize = ref->PCodecCtx->gop_size; - MaxBFrame = ref->PCodecCtx->max_b_frames; - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->PCodecCtx->thread_count; - } - nthread = ref->PCodecCtx->thread_count; - } - else { - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = ref->nthread; - } - nthread = ref->nthread; - } - if (ref->widthDst > 0 && ref->heightDst > 0) { - width = ref->widthDst; - height = ref->heightDst; - } - else { - width = ref->width; - height = ref->height; - } - widthSrc = width; - heightSrc = height; - if (ref->PVideoStream) { - //timeBase = ref->PVideoStream->time_base; - frameRate = ref->PVideoStream->avg_frame_rate; - timeBase = _setAVRational(frameRate.den, frameRate.num); - } - if (GOPSize > 0) { - auto frame_ahead = 2 * GOPSize; - __pts_ahead = __FrameToPts(static_cast(frame_ahead)); - } - } - else if (keyword.compare("configDict") == 0) { - PyObject* ref = reinterpret_cast(ptr); - if (PyDict_Check(ref)) { - string key; - PyObject* val; - // Set parameters. - key.assign("videoPath"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyBytes_Check(val)) { - auto val_str = string(PyBytes_AsString(val)); - resetPath(val_str); - } - } - else { - key.assign("videoAddress"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyBytes_Check(val)) { - auto val_str = string(PyBytes_AsString(val)); - resetPath(val_str); - } - } - } - key.assign("codecName"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyBytes_Check(val)) { - auto val_str = string(PyBytes_AsString(val)); - codecName.assign(val_str); - } - } - key.assign("bitRate"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLongLong(val)); - bitRate = val_num; - } - } - key.assign("GOPSize"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - GOPSize = val_num; - } - } - key.assign("maxBframe"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - MaxBFrame = val_num; - } - } - key.assign("width"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - width = val_num; - widthSrc = val_num; - } - } - key.assign("height"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - height = val_num; - heightSrc = val_num; - } - } - key.assign("widthSrc"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_1 = static_cast(PyLong_AsLong(val)); - key.assign("heightSrc"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_2 = static_cast(PyLong_AsLong(val)); - widthSrc = val_num_1; - heightSrc = val_num_2; - } - } - } - } - key.assign("widthDst"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_1 = static_cast(PyLong_AsLong(val)); - key.assign("heightDst"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num_2 = static_cast(PyLong_AsLong(val)); - width = val_num_1; - height = val_num_2; - } - } - } - } - key.assign("frameRate"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyTuple_Check(val)) { - auto valObj = PyTuple_GetItem(val, 0); - int num = static_cast(PyLong_AsLong(valObj)); - valObj = PyTuple_GetItem(val, 1); - int den = static_cast(PyLong_AsLong(valObj)); - frameRate = _setAVRational(num, den); - timeBase = _setAVRational(den, num); - if (GOPSize > 0) { - auto frame_ahead = 2 * GOPSize; - __pts_ahead = __FrameToPts(static_cast(frame_ahead)); - } - } - } - key.assign("nthread"); - val = PyDict_GetItemString(ref, key.c_str()); - if (val) { - if (PyLong_Check(val)) { - auto val_num = static_cast(PyLong_AsLong(val)); - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = val_num; - } - nthread = val_num; - } - } - } - } - else if (keyword.compare("videoAddress") == 0) { - string* ref = reinterpret_cast(ptr); - resetPath(*ref); - } - else if (keyword.compare("codecName") == 0) { - string* ref = reinterpret_cast(ptr); - codecName.assign(*ref); - } - else if (keyword.compare("bitRate") == 0) { - double* ref = reinterpret_cast(ptr); - auto bit_rate = static_cast((*ref) * 1024); - bitRate = bit_rate; - } - else if (keyword.compare("width") == 0) { - int* ref = reinterpret_cast(ptr); - width = *ref; - } - else if (keyword.compare("height") == 0) { - int* ref = reinterpret_cast(ptr); - height = *ref; - } - else if (keyword.compare("widthSrc") == 0) { - int* ref = reinterpret_cast(ptr); - widthSrc = *ref; - } - else if (keyword.compare("heightSrc") == 0) { - int* ref = reinterpret_cast(ptr); - heightSrc = *ref; - } - else if (keyword.compare("GOPSize") == 0) { - int* ref = reinterpret_cast(ptr); - GOPSize = *ref; - } - else if (keyword.compare("frameAhead") == 0) { - int* ref = reinterpret_cast(ptr); - auto frame_ahead = *ref; - __pts_ahead = __FrameToPts(static_cast(frame_ahead)); - } - else if (keyword.compare("maxBframe") == 0) { - int* ref = reinterpret_cast(ptr); - MaxBFrame = *ref; - } - else if (keyword.compare("frameRate") == 0) { - PyObject* ref = reinterpret_cast(ptr); - auto refObj = PyTuple_GetItem(ref, 0); - int num = static_cast(PyLong_AsLong(refObj)); - refObj = PyTuple_GetItem(ref, 1); - int den = static_cast(PyLong_AsLong(refObj)); - frameRate = _setAVRational(num, den); - timeBase = _setAVRational(den, num); - if (GOPSize > 0) { - auto frame_ahead = 2 * GOPSize; - __pts_ahead = __FrameToPts(static_cast(frame_ahead)); - } - } - else if (keyword.compare("nthread") == 0) { - auto ref = reinterpret_cast(ptr); - if (PStreamContex.enc) { - PStreamContex.enc->thread_count = *ref; - } - nthread = *ref; - } -} - -PyObject* cmpc::CMpegServer::getParameter(string keyword) { - if (keyword.compare("videoAddress") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(videoPath.c_str(), static_cast(videoPath.size())); - } - else if (keyword.compare("codecName") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(codecName.c_str(), static_cast(codecName.size())); - } - else if (keyword.compare("formatName") == 0) { - return PyUnicode_DecodeFSDefaultAndSize(__formatName.c_str(), static_cast(__formatName.size())); - } - else if (keyword.compare("bitRate") == 0) { - auto bit_rate = static_cast(bitRate) / 1024; - return Py_BuildValue("d", bit_rate); - } - else if (keyword.compare("width") == 0) { - return Py_BuildValue("i", width); - } - else if (keyword.compare("height") == 0) { - return Py_BuildValue("i", height); - } - else if (keyword.compare("widthSrc") == 0) { - return Py_BuildValue("i", widthSrc); - } - else if (keyword.compare("heightSrc") == 0) { - return Py_BuildValue("i", heightSrc); - } - else if (keyword.compare("GOPSize") == 0) { - return Py_BuildValue("i", GOPSize); - } - else if (keyword.compare("maxBframe") == 0) { - return Py_BuildValue("i", MaxBFrame); - } - else if (keyword.compare("ptsAhead") == 0) { - return Py_BuildValue("L", __pts_ahead); - } - else if (keyword.compare("waitRef") == 0) { - int64_t cur_time = 0; - if (__start_time > 0) { - cur_time = av_gettime() - __start_time; - if (cur_time < __cur_time) { - return Py_BuildValue("d", static_cast(__cur_time - cur_time) * av_q2d(time_base_q) / 2); - } - else { - return Py_BuildValue("d", 0.0); - } - } - else { - return Py_BuildValue("d", 0.0); - } - } - else if (keyword.compare("frameRate") == 0) { - auto frame_base = frameRate; - auto frame_rate = static_cast(frame_base.num) / static_cast(frame_base.den); - return Py_BuildValue("d", frame_rate); - } - else if (keyword.compare("nthread") == 0) { - if (PStreamContex.enc) { - return Py_BuildValue("i", PStreamContex.enc->thread_count); - } - else { - return Py_BuildValue("i", nthread); - } - } - else { - Py_RETURN_NONE; - } -} - -PyObject* cmpc::CMpegServer::getParameter() { - auto res = PyDict_New(); - string key; - PyObject* val = nullptr; - // Fill the values. - key.assign("videoAddress"); - val = Py_BuildValue("y", videoPath.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("codecName"); - val = Py_BuildValue("y", codecName.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("formatName"); - val = Py_BuildValue("y", __formatName.c_str()); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("bitRate"); - val = Py_BuildValue("L", bitRate); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("GOPSize"); - val = Py_BuildValue("i", GOPSize); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("maxBframe"); - val = Py_BuildValue("i", MaxBFrame); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("ptsAhead"); - val = Py_BuildValue("L", __pts_ahead); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (widthSrc > 0) { - key.assign("widthSrc"); - val = Py_BuildValue("i", widthSrc); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - if (heightSrc > 0) { - key.assign("heightSrc"); - val = Py_BuildValue("i", heightSrc); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - key.assign("width"); - val = Py_BuildValue("i", width); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("height"); - val = Py_BuildValue("i", height); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - key.assign("frameRate"); - val = Py_BuildValue("(ii)", frameRate.num, frameRate.den); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - if (PStreamContex.enc) { - key.assign("nthread"); - val = Py_BuildValue("i", PStreamContex.enc->thread_count); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - else { - key.assign("nthread"); - val = Py_BuildValue("i", nthread); - PyDict_SetItemString(res, key.c_str(), val); - Py_DECREF(val); - } - return res; -} - -bool cmpc::CMpegServer::FFmpegSetup() { - if (!__setup_check()) { - cerr << "Have not get necessary and correct configurations, so FFmpegSetup() should not be called." << endl; - return false; - } - const AVCodec* video_codec; - int ret; - - if (Ppacket) - av_packet_free(&Ppacket); - Ppacket = av_packet_alloc(); - if (!Ppacket) - return false; - - AVDictionary* opt = nullptr; - //av_dict_set(&opt, "vcodec", codecName.c_str(), 0); - //av_dict_set(&opt, "fflags", "", 0); - - /* allocate the output media context */ - //auto getFormat = av_guess_format(codecName.c_str(), nullptr, nullptr); - string format_name; - if (__formatName.compare("rtsp") == 0) { - format_name.assign("rtsp"); - } - else if (__formatName.compare("rtmp") == 0) { - format_name.assign("flv"); - } - else if (__formatName.compare("http") == 0) { - format_name.assign("flv"); - } - else if (__formatName.compare("ftp") == 0) { - format_name.assign("flv"); - } - else if (__formatName.compare("sftp") == 0) { - format_name.assign("flv"); - } - else { - cout << "The format name " << __formatName << " is not supported. Now we only support \"rtsp\", \"rtmp\", \"http\"." << endl; - return false; - } - avformat_alloc_output_context2(&PFormatCtx, nullptr, format_name.c_str(), videoPath.c_str()); - PFormatCtx->avoid_negative_ts = AVFMT_AVOID_NEG_TS_AUTO; - if (!PFormatCtx) { - cout << "Could not select the encoder. The allocation is failed." << endl; - return false; - } - - auto fmt = PFormatCtx->oformat; - - /* Add the audio and video streams using the default format codecs - * and initialize the codecs. */ - if (fmt->video_codec != AVCodecID::AV_CODEC_ID_NONE) { - video_codec = __add_stream(); - if (!video_codec) { - FFmpegClose(); - return false; - } - else - __have_video = true; - } - else { - video_codec = nullptr; - } - - /* Now that all the parameters are set, we can open the audio and - * video codecs and allocate the necessary encode buffers. */ - if (__have_video) { - if (!__open_video(video_codec, opt)) { - FFmpegClose(); - return false; - } - else - __have_video = true; - } - - if (__dumpControl > 1) { - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 1); - } - - /* open the output file, if needed */ - if (!(fmt->flags & AVFMT_NOFILE)) { - AVDictionary* opt_io = nullptr; - /*if (__formatName.compare("http") == 0) { - ret = av_dict_set(&opt_io, "listen", "1", 0); - if (ret < 0) { - cerr << "Could not set the options for the file: " << av_err2str(ret) << endl; - FFmpegClose(); - return false; - } - }*/ - ret = avio_open2(&PFormatCtx->pb, videoPath.c_str(), AVIO_FLAG_WRITE, nullptr, &opt_io); - if (ret < 0) { - cerr << "Could not open '" << videoPath << "': " << av_err2str(ret) << endl; - FFmpegClose(); - return false; - } - if (opt_io) { - av_dict_free(&opt_io); - } - } - - if (!(__frameRGB = av_frame_alloc())) { - cerr << "Could Allocate Temp Frame" << endl; - FFmpegClose(); - return false; - } - - /* Write the stream header, if any. */ - ret = avformat_write_header(PFormatCtx, &opt); - if (ret < 0) { - cerr << "Error occurred when opening output file: " << av_err2str(ret) << endl; - FFmpegClose(); - return false; - } - else { - __enable_header = true; - } - - // Register the start time. - __start_time = av_gettime(); - return true; -} - -void cmpc::CMpegServer::FFmpegClose() { - if (__enable_header && __have_video) { - //cout << "Flush Video" << endl; - int x; - if ((x = ServeFrame(nullptr)) == 0) { - // cout << "Ret: " << x << endl; - } - if (__dumpControl > 0) { - std::ostringstream str_data; - str_data << "All frames are flushed from cache, the video would be closed." << endl; - auto str_data_s = str_data.str(); - av_log(nullptr, AV_LOG_INFO, "%s", str_data_s.c_str()); - } - } - __start_time = 0; - __cur_time = 0; - if (PFormatCtx) { - if (__enable_header) { - av_write_trailer(PFormatCtx); - __enable_header = false; - } - /* Close each codec. */ - if (__have_video) { - /* free the stream */ - //avformat_free_context(PFormatCtx); - if (PStreamContex.enc) - avcodec_free_context(&PStreamContex.enc); - if (PStreamContex.frame) - av_frame_free(&PStreamContex.frame); - if (PStreamContex.tmp_frame) - av_frame_free(&PStreamContex.tmp_frame); - if (PStreamContex.sws_ctx) { - sws_freeContext(PStreamContex.sws_ctx); - PStreamContex.sws_ctx = nullptr; - } - if (PswsCtx) { - sws_freeContext(PswsCtx); - PswsCtx = nullptr; - } - if (RGBbuffer) { - av_free(RGBbuffer); - RGBbuffer = nullptr; - } - __have_video = false; - } - auto fmt = PFormatCtx->oformat; - if (!(fmt->flags & AVFMT_NOFILE)) - /* Close the output file. */ - avio_closep(&PFormatCtx->pb); - /* free the stream */ - avformat_free_context(PFormatCtx); - PFormatCtx = nullptr; - } - if (Ppacket) { - av_packet_free(&Ppacket); - Ppacket = nullptr; - } - if (__frameRGB) { - av_frame_free(&__frameRGB); - } -} - -void cmpc::CMpegServer::dumpFormat() { - if (PFormatCtx) - av_dump_format(PFormatCtx, 0, videoPath.c_str(), 1); - else - cerr << "Not loaded video format context now. dumpFormat() is not avaliable." << endl; -} - -ostream& cmpc::operator<<(ostream& out, cmpc::CMpegServer& self_class) { - out << std::setw(1) << "/"; - out << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setw(1) << " * Packed FFmpeg Server - Y. Jin V" << MPEGCODER_CURRENT_VERSION << endl; - out << " " << std::setfill('*') << std::setw(44) << "" << std::setfill(' ') << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * VideoAddress: " \ - << self_class.videoPath << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (Width, Height): " \ - << self_class.width << ", " << self_class.height << endl; - if (self_class.widthSrc > 0 && self_class.heightSrc > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * (WidthSrc, HeightSrc): " \ - << self_class.widthSrc << ", " << self_class.heightSrc << endl; - } - else if (self_class.widthSrc > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * WidthSrc: " \ - << self_class.widthSrc << endl; - } - else if (self_class.heightSrc > 0) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * HeightSrc: " \ - << self_class.heightSrc << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Enccoder: " \ - << self_class.codecName << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Stream format: " \ - << self_class.__formatName << endl; - if (self_class.PStreamContex.enc) { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number: " \ - << self_class.PStreamContex.enc->thread_count << endl; - } - else { - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Thread number (P): " \ - << self_class.nthread << endl; - } - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Bit Rate: " \ - << (self_class.bitRate >> 10) << " [Kbit/s]" << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Frame Rate: " \ - << static_cast(self_class.frameRate.num) / static_cast(self_class.frameRate.den) << " [FPS]" << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Ahead PTS: " \ - << self_class.__pts_ahead << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * GOP Size: " \ - << self_class.GOPSize << endl; - out << std::setiosflags(std::ios::left) << std::setw(25) << " * Maxmal Bframe Density: " \ - << self_class.MaxBFrame << " [/GOP]" << endl; - out << std::setw(1) << " */"; - return out; -} diff --git a/MpegCoder/MpegStreamer.h b/MpegCoder/MpegStreamer.h deleted file mode 100644 index f809171..0000000 --- a/MpegCoder/MpegStreamer.h +++ /dev/null @@ -1,178 +0,0 @@ -// 下列 ifdef 块是创建使从 DLL 导出更简单的 -// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MPEGCODER_EXPORT -// 符号编译的。在使用此 DLL 的 -// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 -// MPEGCODER_API 函数视为自 DLL 导入,而此 DLL 则将用此宏定义的 -// 符号视为是被导出的。 -#ifndef MPEGSTREAMER_H_INCLUDED -#define MPEGSTREAMER_H_INCLUDED - -#include "MpegBase.h" - -// Exported from MpegCoder.dll -namespace cmpc { - - extern int8_t __dumpControl; - class CMpegDecoder; - class CMpegEncoder; - - class BufferList { // A buffer holder of several frames - public: - BufferList(void); - ~BufferList(void); - BufferList(const BufferList& ref); - BufferList& operator=(const BufferList& ref); - BufferList(BufferList&& ref) noexcept; - BufferList& operator=(BufferList&& ref) noexcept; - void clear(void); - const int64_t size() const; - void set(int64_t set_size, int width, int height, int widthDst = 0, int heightDst = 0); - void set_timer(AVRational targetFrameRate, AVRational timeBase); - bool reset_memory(); - void freeze_write(int64_t read_size); - bool write(SwsContext* PswsCtx, AVFrame* frame); - PyObject* read(); - private: - int64_t _Buffer_pos; // Writring cursor of the source buffer,pointing to the index of the currently written frame. - int64_t _Buffer_rpos; // Reading cursor of the source buffer,pointing to the index of the currently read frame. - int64_t _Buffer_size; // Size of the source buffer, it should be determined by the numeber of required frames. - int64_t __Read_size; // A temporary variable used for showing the size of the data to be read. - int64_t next_pts; - int64_t interval_pts; - int dst_width, dst_height; - int src_width, src_height; - int _Buffer_capacity; - AVFrame* frameRGB; - uint8_t** _Buffer_List; // Source buffer, the size of this buffer is determined by the number of required frames. - }; - - class CMpegClient { - public: - CMpegClient(void); // Constructor. - ~CMpegClient(void); // 3-5 law. Destructor. - CMpegClient(const CMpegClient& ref) = delete; // Delete the copy constructor. - CMpegClient& operator=(const CMpegClient& ref) = delete; // Delete the copy assignment operator. - CMpegClient(CMpegClient&& ref) noexcept; // Move constructor. - CMpegClient& operator=(CMpegClient&& ref) noexcept; // Move assignment operator. - friend class CMpegEncoder; // Let the encoder be able to access the member of this class. - friend class CMpegServer; // Let the server be able to access the member of this class. - friend ostream& operator<<(ostream& out, CMpegClient& self_class); // Show the results. - void clear(void); // Clear all configurations and resources. - void meta_protected_clear(void); // Clear the resources, but the configurations are remained. - void dumpFormat(); // Show the av_format results. - void setParameter(string keyword, void* ptr); // Set arguments. - PyObject* getParameter(string keyword); // Get the current arguments. - PyObject* getParameter(); // Get all key arguments. - void resetPath(string inVideoPath); // Reset the path (URL) of the online video stream. - bool FFmpegSetup(); // Configure the decoder, and extract the basic meta-data. This method is also equipped in the constructor. - bool FFmpegSetup(string inVideoPath); // Configure the decoder with extra arguments. - bool start(); // Start the listening to the online stream. - void terminate(); // Terminate the listener. - PyObject* ExtractFrame(int64_t readsize); // Extract frames with the given number. - PyObject* ExtractFrame(); // Extract frames. The number is configured in the class properties. - private: - string videoPath; // The path (URL) of the online video stream. - int width, height; // Width, height of the video. - int widthDst, heightDst; // Target width, height of ExtractFrame(). - enum AVPixelFormat PPixelFormat; // Enum object of the pixel format. - AVFormatContext* PFormatCtx; // Format context of the video. - AVCodecContext* PCodecCtx; // Codec context of the video. - AVStream* PVideoStream; // Video stream. - - AVFrame* frame; - - int PVideoStreamIDX; // The index of the video stream. - int PVideoFrameCount; // The counter of the decoded frames. - BufferList buffer; // The buffer of the RGB formatted images. - struct SwsContext* PswsCtx; // The context of the scale transformator. - int64_t cache_size, read_size; - AVRational frameRate; - - std::thread read_handle; // The thread of the circular frame reader. - std::mutex read_check; // Lock for reading the status. - std::mutex info_lock; // Lock for reading the info. - bool reading; - - string _str_codec; // The name of the current codec. - double _duration; // The duration of the current video. - int64_t _predictFrameNum; // The prediction of the total number of frames. - int nthread; // The number of threads; - - /* Enable or disable frame reference counting. You are not supposed to support - * both paths in your application but pick the one most appropriate to your - * needs. Look for the use of refcount in this example to see what are the - * differences of API usage between them. */ - int refcount; // Reference count of the video frame. - bool __setup_check() const; - int _open_codec_context(int& stream_idx, AVCodecContext*& dec_ctx, AVFormatContext* PFormatCtx, enum AVMediaType type); - void __client_holder(); - AVRational _setAVRational(int num, int den); - int __save_frame(AVFrame*& frame, AVPacket*& pkt, bool& got_frame, int cached); - int __avcodec_decode_video2(AVCodecContext* avctx, AVFrame* frame, bool& got_frame, AVPacket* pkt); - }; - - class CMpegServer { - public: - CMpegServer(void); // Constructor. - ~CMpegServer(void); // 3-5 law. Destructor. - CMpegServer(const CMpegServer& ref); // Delete the copy constructor. - CMpegServer& operator=(const CMpegServer& ref); // Delete the copy assignment operator. - CMpegServer(CMpegServer&& ref) noexcept; // Move constructor. - CMpegServer& operator=(CMpegServer&& ref) noexcept; // Move assignment operator. - //friend class CMpegEncoder; // Let the server be able to access the member of this class. - friend ostream& operator<<(ostream& out, CMpegServer& self_class); // Show the results. - void clear(void); // Clear all configurations and resources. - void meta_protected_clear(void); // Clear the resources, but the configurations are remained. - void resetPath(string inVideoPath); // Reset the path of the output video stream. - void dumpFormat(); // Show the av_format results. - bool FFmpegSetup(); // Configure the encoder, and create the file handle. This method is also equipped in the constructor. - bool FFmpegSetup(string inVideoPath); // Configure the encoder with extra arguments. - void FFmpegClose(); // Close the encoder, and finalize the written of the encoded video. - void setParameter(string keyword, void* ptr); // Set arguments. - PyObject* getParameter(string keyword); // Get the current arguments. - PyObject* getParameter(); // Get all key arguments. - int ServeFrameBlock(PyArrayObject* PyFrame); // Encode the frame into the output stream (block mode). - int ServeFrame(PyArrayObject* PyFrame); // Encode the frame into the output stream. - private: - string videoPath; // The path of the output video stream. - string __formatName; // The format name of the stream. Could be "rtsp" or "rtmp". This value is detected from the videoPath. - string codecName; // The name of the codec - int64_t bitRate; // The bit rate of the output video. - int64_t __pts_ahead; // The ahead pts. - int64_t __start_time; // The start time stamp. This value is used for controlling the writing of the frames. - int64_t __cur_time; // The current time stamp. This value is restricted by __pts_ahead. - int width, height; // The size of the frames in the output video. - int widthSrc, heightSrc; // The size of the input data (frames). - AVRational timeBase, frameRate; // The time base and the frame rate. - AVRational time_base_q; // The time base used for calculating the absolute time. - int GOPSize, MaxBFrame; // The size of GOPs, and the maximal number of B frames. - OutputStream PStreamContex; // The context of the current video parser. - AVFormatContext* PFormatCtx; // Format context of the video. - AVPacket* Ppacket; // AV Packet used for writing frames. - struct SwsContext* PswsCtx; // The context of the scale transformator. - AVFrame* __frameRGB; // A temp AV frame object. Used for converting the data format. - uint8_t* RGBbuffer; // Data buffer. - bool __have_video, __enable_header; - - int nthread; // The number of threads; - - AVRational _setAVRational(int num, int den); - int64_t __FrameToPts(int64_t seekFrame) const; - int64_t __TimeToPts(double seekTime) const; - bool __setup_check() const; - bool _LoadFrame_castFromPyFrameArray(AVFrame* frame, PyArrayObject* PyFrame); - void __log_packet(); - int __write_frame(); - const AVCodec* __add_stream(); - AVFrame* __alloc_picture(enum AVPixelFormat pix_fmt, int width, int height); - bool __open_video(const AVCodec* codec, const AVDictionary* opt_arg); - AVFrame* __get_video_frame(PyArrayObject* PyFrame); - int __avcodec_encode_video2(AVCodecContext* enc_ctx, AVPacket* pkt, AVFrame* frame); - int __avcodec_encode_video2_flush(AVCodecContext* enc_ctx, AVPacket* pkt); - }; - - ostream& operator<<(ostream& out, CMpegClient& self_class); - ostream& operator<<(ostream& out, CMpegServer& self_class); -} - -#endif diff --git a/MpegCoder/dllmain.cpp b/MpegCoder/dllmain.cpp deleted file mode 100644 index 0f676a8..0000000 --- a/MpegCoder/dllmain.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// dllmain.cpp : The entry of the dll program. -#include "stdafx.h" -#include "MpegPyd.h" - -/***************************************************************************** -* The initialization of the module. Would be invoked when using import. -*****************************************************************************/ -PyMODINIT_FUNC // == __decslpec(dllexport) PyObject*, Define the exported main function. -PyInit_mpegCoder(void) { // The external module name is: --CppClass - import_array(); - /* Initialize libavcodec, and register all codecs and formats. */ - // Register everything - #ifndef FFMPG3_4 - av_register_all(); - #endif - #ifndef FFMPG4_0 - avformat_network_init(); - #endif - - PyObject* pReturn = 0; - // Configure the __new__ method as the default method. This method is used for building the instances. - C_MPDC_ClassInfo.tp_new = PyType_GenericNew; - C_MPEC_ClassInfo.tp_new = PyType_GenericNew; - C_MPCT_ClassInfo.tp_new = PyType_GenericNew; - C_MPSV_ClassInfo.tp_new = PyType_GenericNew; - - /* Finish the initialization, including the derivations. - * When success, return 0; Otherwise, return -1 and throw errors. */ - if (PyType_Ready(&C_MPDC_ClassInfo) < 0) - return nullptr; - if (PyType_Ready(&C_MPEC_ClassInfo) < 0) - return nullptr; - if (PyType_Ready(&C_MPCT_ClassInfo) < 0) - return nullptr; - if (PyType_Ready(&C_MPSV_ClassInfo) < 0) - return nullptr; - - pReturn = PyModule_Create(&ModuleInfo); // Create the module according to the module info. - if (pReturn == 0) - return nullptr; - - Py_INCREF(&ModuleInfo); // Because the module is not registered to the python counter, Py_INCREF is required to be invoked. - PyModule_AddFunctions(pReturn, C_MPC_MethodMembers); // Add the global method members. - PyModule_AddObject(pReturn, "MpegDecoder", (PyObject*)&C_MPDC_ClassInfo); // Add the class as one module member. - PyModule_AddObject(pReturn, "MpegEncoder", (PyObject*)&C_MPEC_ClassInfo); - PyModule_AddObject(pReturn, "MpegClient", (PyObject*)&C_MPCT_ClassInfo); - PyModule_AddObject(pReturn, "MpegServer", (PyObject*)&C_MPSV_ClassInfo); - return pReturn; -} - -/* -BOOL APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} -*/ diff --git a/MpegCoder/snprintf.cpp b/MpegCoder/snprintf.cpp deleted file mode 100644 index 8142cf8..0000000 --- a/MpegCoder/snprintf.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * C99-compatible snprintf() and vsnprintf() implementations - * Copyright (c) 2012 Ronald S. Bultje - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "stdafx.h" - -extern "C" -{ - #include - #include - #include - #include -} - -#include "compat/va_copy.h" -#include "libavutil/error.h" -#include "compat/msvcrt/snprintf.h" - -#if defined(__MINGW32__) -#define EOVERFLOW EFBIG -#endif - -extern "C" -{ - int avpriv_snprintf(char *s, size_t n, const char *fmt, ...) { - va_list ap; - int ret; - - va_start(ap, fmt); - ret = avpriv_vsnprintf(s, n, fmt, ap); - va_end(ap); - - return ret; - } - - int avpriv_vsnprintf(char *s, size_t n, const char *fmt, va_list ap) { - int ret; - va_list ap_copy; - - if (n == 0) - return _vscprintf(fmt, ap); - else if (n > INT_MAX) - return AVERROR(EOVERFLOW); - - /* we use n - 1 here because if the buffer is not big enough, the MS - * runtime libraries don't add a terminating zero at the end. MSDN - * recommends to provide _snprintf/_vsnprintf() a buffer size that - * is one less than the actual buffer, and zero it before calling - * _snprintf/_vsnprintf() to workaround this problem. - * See http://msdn.microsoft.com/en-us/library/1kt27hek(v=vs.80).aspx */ - memset(s, 0, n); - va_copy(ap_copy, ap); - ret = _vsnprintf_s(s, n - 1, INT_MAX, fmt, ap_copy); - va_end(ap_copy); - if (ret == -1) - ret = _vscprintf(fmt, ap); - - return ret; - } -} \ No newline at end of file diff --git a/MpegCoder/stdafx.cpp b/MpegCoder/stdafx.cpp deleted file mode 100644 index fa90b1c..0000000 --- a/MpegCoder/stdafx.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// stdafx.cpp : 只包括标准包含文件的源文件 -// $safeprojectname$.pch 将作为预编译标头 -// stdafx.obj 将包含预编译类型信息 - -#include "stdafx.h" - -// TODO: 在 STDAFX.H 中引用任何所需的附加头文件, -//而不是在此文件中引用 diff --git a/MpegCoder/stdafx.h b/MpegCoder/stdafx.h deleted file mode 100644 index 4b4e4a8..0000000 --- a/MpegCoder/stdafx.h +++ /dev/null @@ -1,19 +0,0 @@ -// stdafx.h : 标准系统包含文件的包含文件, -// 或是经常使用但不常更改的 -// 特定于项目的包含文件 -// - -#pragma once - -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料 -// Numpy header: -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -// Windows header: -#define _CRT_SECURE_NO_WARNINGS -#include - - - -// TODO: 在此处引用程序需要的其他头文件 diff --git a/MpegCoder/targetver.h b/MpegCoder/targetver.h deleted file mode 100644 index 91042b9..0000000 --- a/MpegCoder/targetver.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 - -// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将 -// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 - -#include diff --git a/README.md b/README.md deleted file mode 100644 index 7d4b1a0..0000000 --- a/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# FFmpeg-Encoder-Decoder-for-Python - -This is a mpegCoder adapted from FFmpeg & Python-c-api. Using it you could get access to processing video easily. Just use it as a common module in python like this. - -```python -import mpegCoder -``` - -| Branch | Description | -| :-------------: | :-----------: | -| `master` :link: | The source project of `mpegCoder`, Windows version. | -| [`master-linux` :link:][git-linux] | The source project of `mpegCoder`, Linux version. | -| [`example-client-check` :link:][exp1] | A testing project of the online video stream demuxing. | -| [`example-client-player` :link:][exp2] | A testing project of the simple online video stream player. | - -## Source project of `mpegCoder` (Windows) - -The following instructions are used for building the project on Windows with Visual Studio 2019. - -1. Clone the `master` branch which only contains the codes of `mpegCoder`: - - ```bash - git clone --single-branch -b master https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python.git - ``` - -2. Download the FFMpeg dependencies, including `include` and `lib`. Users could download dependencies manually by checking [the release page :link:](https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/tag/deps-3.0.0). However, we recommend users to use the following script to get the dependencies quickly: - - ```bash - python webtools.py - ``` - - This script requires users to install `urllib3`. The `tqdm` is also recommended to be installed. - -3. The following configurations should be set for `All` (both debug and release) and `x64`. Open the project by `MpegCoder.sln`. Then configure the following paths of the include directories and the library directories. In both configurations, the first item is required to be modified according to your python path, the second item is required to be modified according to your numpy path. - - | Path | Screenshot | - | :----- | :----------: | - | `includes` | ![Configure includes](./display/config-include.png) | - | `libs` | ![Configure libs](./display/config-include.png) | - -4. Modify the linker configs. We only need to change the item `python3x.lib` according to the python version you have. - ![Configure linker](./display/config-linker.png) - -5. Run the `Release`, `x64` build. The built file should be saved as `x64\Release\mpegCoder.pyd`. - -6. The `mpegCoder.pyd` should be used together with the FFMpeg shared libraries, including: - - ```shell - avcodec-59.dll - avformat-59.dll - avutil-57.dll - swresample-4.dll - swscale-6.dll - ``` - -## Update reports - -Has been moved to [:bookmark_tabs: CHANGELOG.md](./CHANGELOG.md) - -## Version of currently used FFmpeg library - -Current FFMpeg version is `5.0`. - -| Dependency | Version | -| :-------------: | :------------: | -| `libavcodec` | `59.18.100.0` | -| `libavformat` | `59.16.100.0` | -| `libavutil` | `57.17.100.0` | -| `libswresample` | `4.3.100.0` | -| `libswscale` | `6.4.100.0` | - -[git-linux]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/master-linux "master (Linux)" -[exp1]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-check "check the client" -[exp2]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-player "client with player" diff --git a/assets/css/styles.30217619.css b/assets/css/styles.30217619.css new file mode 100644 index 0000000..729ef17 --- /dev/null +++ b/assets/css/styles.30217619.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.admonition-icon svg,.alert__icon svg{fill:var(--ifm-alert-foreground-color)}.toggleButton_rCf9,html{-webkit-tap-highlight-color:transparent}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:2;--ifm-z-index-fixed:3;--ifm-z-index-overlay:5;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#3a853a;--ifm-color-primary-dark:#347834;--ifm-color-primary-darker:#317131;--ifm-color-primary-darkest:#295d29;--ifm-color-primary-light:#409240;--ifm-color-primary-lighter:#439943;--ifm-color-primary-lightest:#4bad4b;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:rgba(0,0,0,.08);--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}html{-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base)}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_HAaG article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_KU1_,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_Geot .wordWrapButtonIcon_azs1{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center,div.center,p.center,td.center,th.center{text-align:center}.text--left,div.left,p.left,td.left,th.left{text-align:left}.text--justify{text-align:justify}.text--right,div.right,p.right,td.right,th.right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonition h5,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{-webkit-text-decoration-color:var(--ifm-alert-border-color);text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_hzTh:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(0);visibility:visible}#nprogress,.dropdown__menu,.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-moves] *,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:10rem}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_vinB article>:first-child,.docItemContainer_vinB header+*,.footer__item{margin-top:0}.admonition-content>:last-child,.cardContainer_woeA :last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_Px3r,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.docsWrapper_mKqt,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:-webkit-sticky;position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input:-ms-input-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-duration:.25s;transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-duration:.1s;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.admonition h5{margin-bottom:8px;margin-top:0}.admonition h5 code{text-transform:none}.admonition-icon{display:inline-block;margin-right:.4em;vertical-align:middle}.admonition-icon svg{stroke-width:0;stroke:var(--ifm-alert-foreground-color);display:inline-block;height:22px;width:22px}.admonition{margin-bottom:1em}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:6}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}:root[data-theme=dark]{--ifm-color-primary:#78c478;--ifm-color-primary-dark:#62ba62;--ifm-color-primary-darker:#57b657;--ifm-color-primary-darkest:#439a43;--ifm-color-primary-light:#8ece8e;--ifm-color-primary-lighter:#99d299;--ifm-color-primary-lightest:#bae1ba;--docusaurus-highlighted-code-line-bg:hsla(0,0%,100%,.05)}div.maxspan,p.maxspan,td.maxspan,th.maxspan{width:-webkit-max-content;width:max-content}div.noemph,p.noemph,td.noemph,th.noemph{opacity:.75}.arrow_bCLT:not(.disabled_AqwA):hover,.footerLogoLink_gHmE:hover,.hash-link:focus,:hover>.hash-link,div.noemph:focus,div.noemph:hover,p.noemph:focus,p.noemph:hover,td.noemph:focus,td.noemph:hover,th.noemph:focus,th.noemph:hover{opacity:1}.header-github-link:hover,.header-pypi-link:hover{opacity:.6}.header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M2.6 10.59 8.38 4.8l1.69 1.7c-.24.85.15 1.78.93 2.23v5.54c-.6.34-1 .99-1 1.73a2 2 0 0 0 2 2 2 2 0 0 0 2-2c0-.74-.4-1.39-1-1.73V9.41l2.07 2.09c-.07.15-.07.32-.07.5a2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0-2-2c-.18 0-.35 0-.5.07L13.93 7.5a1.98 1.98 0 0 0-1.15-2.34c-.43-.16-.88-.2-1.28-.09L9.8 3.38l.79-.78c.78-.79 2.04-.79 2.82 0l7.99 7.99c.79.78.79 2.04 0 2.82l-7.99 7.99c-.78.79-2.04.79-2.82 0L2.6 13.41c-.79-.78-.79-2.04 0-2.82Z'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='%23fff' d='M2.6 10.59 8.38 4.8l1.69 1.7c-.24.85.15 1.78.93 2.23v5.54c-.6.34-1 .99-1 1.73a2 2 0 0 0 2 2 2 2 0 0 0 2-2c0-.74-.4-1.39-1-1.73V9.41l2.07 2.09c-.07.15-.07.32-.07.5a2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0-2-2c-.18 0-.35 0-.5.07L13.93 7.5a1.98 1.98 0 0 0-1.15-2.34c-.43-.16-.88-.2-1.28-.09L9.8 3.38l.79-.78c.78-.79 2.04-.79 2.82 0l7.99 7.99c.79.78.79 2.04 0 2.82l-7.99 7.99c-.78.79-2.04.79-2.82 0L2.6 13.41c-.79-.78-.79-2.04 0-2.82Z'/%3E%3C/svg%3E") no-repeat}.header-pypi-link.navbar__item{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal) var(--ifm-navbar-item-padding-vertical) 0}.header-pypi-link:before{background:url('data:image/svg+xml;charset=utf-8,') no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-pypi-link:before{background:url('data:image/svg+xml;charset=utf-8,') no-repeat}a.noline:hover{filter:brightness(85%);-webkit-text-decoration:var(--ifm-link-decoration);text-decoration:var(--ifm-link-decoration)}html[data-theme=dark] a.noline:hover{filter:brightness(125%)}html[data-theme=dark] .mermaid [data-tstyle=font-d]{fill:#ddd!important}html[data-theme=dark] .mermaid [data-tstyle=font-e]{fill:#eee!important}html[data-theme=dark] .mermaid [data-tstyle=font-f],html[data-theme=dark] .themeColor [data-tcolor=black]{fill:#fff!important}html[data-theme=dark] .mermaid [data-tstyle=module-box]{fill:#474848!important;stroke:#fff!important}html[data-theme=dark] .mermaid [data-tstyle=class-box]{fill:#241b42!important;stroke:#81b1db!important}html[data-theme=dark] .mermaid [data-tstyle=func-box]{fill:#1f2020!important;stroke:#ddd!important}html[data-theme=dark] .mermaid [data-tstyle=d-line]{stroke:#999!important}html[data-theme=dark] .themeColor [data-tcolor=sblack]{stroke:#fff!important}html[data-theme=dark] .themeColor [data-tcolor=blue]{fill:#aaf!important}html[data-theme=dark] .themeColor [data-tcolor=sblue]{stroke:#aaf!important}html[data-theme=dark] .themeColor [data-tcolor=red]{fill:#faa!important}html[data-theme=dark] .themeColor [data-tcolor=sred]{stroke:#faa!important}#docusaurus-base-url-issue-banner-container,.arrow_bCLT.hidden_gC4B,.collapseSidebarButton_FykI,.docSidebarContainer_UQUJ,.sidebarLogo_YUvz,.themedImage_W2Cr,[data-theme=dark] .lightToggleIcon_v35p,[data-theme=light] .darkToggleIcon_nQuB,html[data-announcement-bar-initially-dismissed=true] .announcementBar_IbjG{display:none}.dots_V3wA .dot_TDDQ:focus,body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.skipToContent_ZgBM{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_ZgBM:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.announcementBar_IbjG{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_NC_W{flex:0 0 10px}.announcementBarClose_FG1z{align-self:stretch;flex:0 0 30px;line-height:0;padding:0}.announcementBarContent_KsVm{flex:1 1 auto;font-size:85%;padding:5px 0;text-align:center}.announcementBarContent_KsVm a{color:inherit;text-decoration:underline}.DocSearch-Container a,.tag_hD8n:hover{text-decoration:none}.toggle_S7eR{height:2rem;width:2rem}.toggleButton_rCf9{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_rCf9:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_Pu9x{cursor:not-allowed}[data-theme=dark] .themedImage--dark_oUvU,[data-theme=light] .themedImage--light_TfLj{display:initial}.iconExternalLink_I5OW{margin-left:.3rem}.iconLanguage_dNtB{margin-right:5px;vertical-align:text-bottom}.navbarHideable_ObN2{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_FtgE{transform:translate3d(0,calc(-100% - 2px),0)}.footerLogoLink_gHmE{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.main-wrapper{flex:1 0 auto}.docusaurus-mt-lg{margin-top:3rem}.cardContainer_woeA{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_woeA:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardTitle_pNjP{font-size:1.2rem}.cardDescription_qC_k{font-size:.8rem}.features_PJNP,.features_xdhU{align-items:center;display:flex;padding:2rem 0;width:100%}.featureSvg_UK3L,.featureSvg__8YW{height:200px;width:200px}.keen-slider:not([data-keen-slider-disabled]){-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;align-content:flex-start;display:flex;overflow:hidden;position:relative;touch-action:pan-y;-webkit-user-select:none;-ms-user-select:none;user-select:none;-khtml-user-select:none;width:100%}.keen-slider:not([data-keen-slider-disabled]) .keen-slider__slide{min-height:100%;overflow:hidden;position:relative;width:100%}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-reverse]{flex-direction:row-reverse}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-v]{flex-wrap:wrap}.navigationWrapper_JWzE{position:relative}.arrow_bCLT{fill:rgba(0,0,0,.6);height:50px;margin-top:-15px;opacity:.5;position:absolute;top:50%;transform:translateY(-50%);-webkit-transform:translateY(-50%);width:30.6818181818px;z-index:1}html[data-theme=dark] .arrow_bCLT{fill:hsla(0,0%,100%,.6)}.arrow_bCLT:not(.disabled_AqwA):not(.hidden_gC4B){cursor:pointer}.arrow_bCLT.left_UJxi{left:5px}.arrow_bCLT.right_iVh6{left:auto;right:5px}.arrow_bCLT.disabled_AqwA{fill:hsla(0,0%,40%,.533)}html[data-theme=dark] .arrow_bCLT.disabled_AqwA.disabled_AqwA{fill:hsla(0,0%,67%,.533)}.dots_V3wA{display:flex;justify-content:center;padding:10px 0}.dots_V3wA .dot_TDDQ{background:#c5c5c5;border:none;border-radius:50%;cursor:pointer;height:10px;margin:0 5px;padding:5px;width:10px}html[data-theme=dark] .dots_V3wA .dot_TDDQ{background:#444}.dots_V3wA .dot_TDDQ:not(.active_Hf3j):hover{background:#555}html[data-theme=dark] .dots_V3wA .dot_TDDQ:not(.active_Hf3j):hover{background:#a5a5a5}.dots_V3wA .dot_TDDQ.active_Hf3j{background:#000}html[data-theme=dark] .dots_V3wA .dot_TDDQ.active_Hf3j{background:#fff}.slideItem_rSD0{margin:0 auto;min-height:6rem}.iconEdit_dcUD{margin-right:.3em;vertical-align:sub}.tag_hD8n{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_hD8n:hover{--docusaurus-tag-list-border:var(--ifm-link-color)}.tagRegular_D6E_{border-radius:.5rem;font-size:90%;padding:.3rem .5rem}.tagWithCount_i0QQ{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_i0QQ:after,.tagWithCount_i0QQ:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_i0QQ:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_i0QQ:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_i0QQ span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_XVD_{display:inline}.tag_JSN8{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_foO9{font-size:smaller;font-style:italic;margin-top:.2rem}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7:-ms-input-placeholder{color:var(--docsearch-muted-color)}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:rgba(255,215,142,.25);color:var(--docsearch-hit-color);padding:.09em 0}.backToTopButton_RiI4{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_RiI4:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_ssHd{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.docMainContainer_uL0j,.docPage_ualW{display:flex;width:100%}.heroBanner_jHI5{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_Pntg{align-items:center;display:flex;justify-content:center}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.buttons_Pntg a:not(:last-child){margin-right:1em}.title-logo_x3SF{height:56px;vertical-align:text-bottom;width:56px}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.DocSearch-Footer,.DocSearch-Help{-webkit-user-select:none;-ms-user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding-bottom:2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:3}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:0 0;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;border:0;cursor:pointer}.DocSearch-Input:-ms-input-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:focus{outline:0}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:0 0}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:-webkit-sticky;position:sticky;top:0;z-index:1}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon,.tocCollapsibleContent_NNA8 a{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;user-select:none;width:100%;z-index:4}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding-bottom:1px;width:20px}.buttonGroup_hRr1 button,.codeBlockContainer_MPoW{background:var(--prism-background-color);color:var(--prism-color)}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}.breadcrumbsContainer_Xlws{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.breadcrumbHomeIcon_kU5B{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.codeBlockContainer_MPoW{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_B9tL{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_YYkX{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock__0OG{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_YYkX+.codeBlockContent_B9tL .codeBlock__0OG{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_gEuF{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_hGCP{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup_hRr1{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup_hRr1 button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity .2s ease-in-out}.buttonGroup_hRr1 button:focus-visible,.buttonGroup_hRr1 button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup_hRr1 button{opacity:.4}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.codeLine_rqGN{counter-increment:a;display:table-row}.codeLineNumber_hzTh{background:var(--ifm-pre-background);display:table-cell;left:0;padding:0 var(--ifm-pre-padding);position:-webkit-sticky;position:sticky;text-align:right;width:1%}.codeLineNumber_hzTh:before{content:counter(a);opacity:.4}.codeLineContent_hM6e{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_ljy5{opacity:1!important}.copyButtonIcons_W9eQ{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_XEyF,.copyButtonSuccessIcon_i9w9{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:.15s;width:inherit}.copyButtonSuccessIcon_i9w9{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_ljy5 .copyButtonIcon_XEyF{opacity:0;transform:scale(.33)}.copyButtonCopied_ljy5 .copyButtonSuccessIcon_i9w9{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tableOfContents_cNA8{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:-webkit-sticky;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.tocCollapsible_bZGK{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_NNA8>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_NNA8 ul li{margin:.4rem .8rem}.tocCollapsibleButtonExpanded_KeTX:after,.tocCollapsibleExpanded_IqtF{transform:none}.tocCollapsibleButton_l22C{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_l22C:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.wordWrapButtonIcon_azs1{height:1.2rem;width:1.2rem}.anchorWithStickyNavbar_mojV{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_R0VQ{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;-ms-user-select:none;user-select:none}.hash-link:before{content:"#"}.title_qBh7{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_BAp3{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_E7b_{height:auto}.mdxPageWrapper_zHyg{justify-content:center}@media (min-width:997px){.collapseSidebarButton_FykI,.expandButton__5cy{background-color:var(--docusaurus-collapse-button-bg)}.collapseSidebarButton_FykI:focus,.collapseSidebarButton_FykI:hover,.expandButton__5cy:focus,.expandButton__5cy:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_FG1z,.announcementBarPlaceholder_NC_W{flex-basis:50px}.searchBox_dLyj{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_foO9{text-align:right}.collapseSidebarButton_FykI{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:-webkit-sticky;position:sticky}.collapseSidebarButtonIcon_DTRl{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_FlNX,[dir=rtl] .collapseSidebarButtonIcon_DTRl{transform:rotate(0)}.menuHtmlItem_hP_2{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_izAj{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_izAj{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_l2a_{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_RiAD{display:flex;flex-direction:column;height:100%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:-webkit-sticky;position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_d0QC{padding-top:0}.sidebarHidden_Lg_2{height:0;opacity:0;overflow:hidden;visibility:hidden}.sidebarLogo_YUvz{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_YUvz img{height:2rem;margin-right:.5rem}.expandButton__5cy{align-items:center;display:flex;height:100%;justify-content:center;max-height:100vh;position:-webkit-sticky;position:sticky;top:0;transition:background-color var(--ifm-transition-fast) ease}[dir=rtl] .expandButtonIcon_FlNX{transform:rotate(180deg)}.docSidebarContainer_UQUJ{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_f7XD{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.docMainContainer_uL0j{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_oQfM{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_HFwV{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.docItemCol_DM6M,.generatedIndexPage_vzzw{max-width:75%!important}.list_HAaG article:nth-last-child(-n+2){margin-bottom:0!important}.tocMobile_TmEX{display:none}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_vKtC,.footer__link-separator,.navbar__item,.tableOfContents_cNA8{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_dLyj{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_WX_Y{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media screen and (max-width:966px){.heroBanner_jHI5{padding:2rem}}@media (max-width:750px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_RiI4:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}@media print{.announcementBar_IbjG,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_TmEX{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_gEuF{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/server-dd63ab08f996ce882cf07555a28f9091.png b/assets/images/server-dd63ab08f996ce882cf07555a28f9091.png new file mode 100644 index 0000000..68621af Binary files /dev/null and b/assets/images/server-dd63ab08f996ce882cf07555a28f9091.png differ diff --git a/assets/js/05a6b305.b86d8314.js b/assets/js/05a6b305.b86d8314.js new file mode 100644 index 0000000..7238833 --- /dev/null +++ b/assets/js/05a6b305.b86d8314.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3466],{4555:function(e){e.exports=JSON.parse('{"title":"Examples","description":"Start the video processing or streaming with mpegCoder.","slug":"/category/examples","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/examples","navigation":{"previous":{"title":"Legacy","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/legacy"},"next":{"title":"Decoding","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/decoding"}}}')}}]); \ No newline at end of file diff --git a/assets/js/06d76465.1e0b1994.js b/assets/js/06d76465.1e0b1994.js new file mode 100644 index 0000000..8fe0a0d --- /dev/null +++ b/assets/js/06d76465.1e0b1994.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3683],{8793:function(e,t,n){var o=n(7294),i=n(9960),r=n(1954),a=n(2949);t.Z=function(e){var t=(0,o.useState)(!1),n=t[0],l=t[1];(0,o.useEffect)((function(){l(!0)}),[]);var p,d,s,m=(p=(0,a.I)(),d=p.colorMode,p.setColorMode,"dark"===d?"button--secondary button--outline":"button--secondary");return s=e.index?"button "+m+" button--lg button--index":"button "+m+" button--lg",o.createElement(i.Z,{key:String(n),className:s,to:e.to},e.icon&&o.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},6616:function(e,t,n){n.r(t),n.d(t,{assets:function(){return k},contentTitle:function(){return h},default:function(){return f},frontMatter:function(){return u},metadata:function(){return c},toc:function(){return g}});var o=n(3117),i=n(102),r=(n(7294),n(3905)),a=n(8793),l=n(541),p=n(5514),d=n(3807),s=n(7225),m=["components"],u={id:"installation",title:"Troubleshooting for installation",sidebar_label:"Installation",slug:"/troubleshooting/installation",description:"The troubleshooting for installation."},h=void 0,c={unversionedId:"troubleshooting/installation",id:"version-3.2.x/troubleshooting/installation",title:"Troubleshooting for installation",description:"The troubleshooting for installation.",source:"@site/versioned_docs/version-3.2.x/troubleshooting/installation.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/installation",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/troubleshooting/installation.mdx",tags:[],version:"3.2.x",frontMatter:{id:"installation",title:"Troubleshooting for installation",sidebar_label:"Installation",slug:"/troubleshooting/installation",description:"The troubleshooting for installation."},sidebar:"docs",previous:{title:"Troubleshooting",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/troubleshooting"},next:{title:"Running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/running"}},k={},g=[{value:"Introduction",id:"introduction",level:2},{value:"Questions and answers",id:"questions-and-answers",level:2},{value:"Meet permission denied and import failure during the first run",id:"meet-permission-denied-and-import-failure-during-the-first-run",level:3},{value:"DLL not found",id:"dll-not-found",level:3},{value:".so not found",id:"so-not-found",level:3},{value:"numpy.core.multiarray not found",id:"numpycoremultiarray-not-found",level:3},{value:"GLibC 2.29 not found",id:"glibc-2-29-not-found",level:3},{value:"GLibC 2.28 not found",id:"glibc-2-28-not-found",level:3},{value:"libcrypyto not found",id:"libcrypyto-not-found",level:3},{value:"Incorrect dependencies",id:"incorrect-dependencies",level:3},{value:"tqdm has no attribute wrapattr",id:"tqdm-has-no-attribute-wrapattr",level:3}],N={toc:g};function f(e){var t=e.components,n=(0,i.Z)(e,m);return(0,r.kt)("wrapper",(0,o.Z)({},N,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"If you could not find your problem in this page, please fire an issue:"),(0,r.kt)("p",null,(0,r.kt)(a.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/new/choose",icon:d.Z,mdxType:"DarkButton"},"Fire an issue")),(0,r.kt)("h2",{id:"questions-and-answers"},"Questions and answers"),(0,r.kt)("h3",{id:"meet-permission-denied-and-import-failure-during-the-first-run"},"Meet permission denied and import failure during the first run"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When I import ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," for the first time, why it fails to download something into the ",(0,r.kt)("inlineCode",{parentName:"p"},"site-pacakges")," folder?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": To reduce the size of the ",(0,r.kt)("inlineCode",{parentName:"p"},".whl")," package, in the newer release, I decide to not pack the ",(0,r.kt)("inlineCode",{parentName:"p"},".dll")," / ",(0,r.kt)("inlineCode",{parentName:"p"},".so")," dependencies with ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". Instead, when importing ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," for the first time, it will automatically download the dependencies into the package folder. To ensure that you have the permission to fetch the dependencies, I recommend the following to solutions:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"The first solution is to install ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder")," in a virtual environment where you own the permission."),(0,r.kt)("li",{parentName:"ul"},"The second solution is to run ",(0,r.kt)("inlineCode",{parentName:"li"},'python -c "import mpegCoder"')," in Administrator mode or ",(0,r.kt)("inlineCode",{parentName:"li"},"sudo")," mode. This command will let ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder")," start to download the dependencies.")))),(0,r.kt)("h3",{id:"dll-not-found"},"DLL not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"ImportError: DLL load failed while importing mpegCoder: The specified module could not be found.\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": It seems that this error will only occurs when both the following conditions are satisfied:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"You are using Windows."),(0,r.kt)("li",{parentName:"ul"},"You are using the maunally installed ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder"),", not the pip version.")),(0,r.kt)("p",{parentName:"li"},"This error is caused by the absent of required dependencies. It is typically caused when:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Your python version does not match the ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder")," module."),(0,r.kt)("li",{parentName:"ul"},"The required DLL files are neither in the same folder of ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder.pyd"),", nor in the path (environment variable ",(0,r.kt)("inlineCode",{parentName:"li"},"PATH"),")."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Download the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/dll-win-ffmpeg_5_0.tar.xz"},"dependencies",(0,r.kt)(p.Z,{icon:s.Z,mdxType:"InlineIcon"}))," and extract the DLLs in the same folder of ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd"),"."))),(0,r.kt)("h3",{id:"so-not-found"},(0,r.kt)("inlineCode",{parentName:"h3"},".so")," not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"ImportError: lib*****.so.**: cannot open shared object file: No such file or directory\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": It seems that this error will only occurs when both the following conditions are satisfied:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"You are using Linux."),(0,r.kt)("li",{parentName:"ul"},"You are using the maunally installed ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder"),", not the pip version.")),(0,r.kt)("p",{parentName:"li"},"This error is caused by the absent of required dependencies. It is typically caused when:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Your python version does not match the ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder")," module, in this case, the library name should be ",(0,r.kt)("inlineCode",{parentName:"li"},"libpython3.*.so.**"),"."),(0,r.kt)("li",{parentName:"ul"},"The required dependencies files are not in your environment variable ",(0,r.kt)("inlineCode",{parentName:"li"},"$LD_LIBRARY_PATH"),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Download the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/so-linux-ffmpeg_5_0.tar.xz"},"dependencies",(0,r.kt)(p.Z,{icon:s.Z,mdxType:"InlineIcon"}))," and extract the missing ",(0,r.kt)("inlineCode",{parentName:"p"},".so")," to a folder in ",(0,r.kt)("inlineCode",{parentName:"p"},"$LD_LIBRARY_PATH"),"."))),(0,r.kt)("h3",{id:"numpycoremultiarray-not-found"},(0,r.kt)("inlineCode",{parentName:"h3"},"numpy.core.multiarray")," not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"ImportError: numpy.core.multiarray failed to import\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": You may not install ",(0,r.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"})),", or your Numpy version is not match the pre-compiled ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". In most cases, a little bit mismatch of the Numpy would not cause this error. Maybe your Numpy version is different from the requirement too much. See ",(0,r.kt)("a",{parentName:"p",href:"../installation/windows#download-mpegcoder"},"Compilation list (Win)")," or ",(0,r.kt)("a",{parentName:"p",href:"../installation/linux#download-mpegcoder"},"Compilation list (Linux)")," to find the best Numpy version.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Reinstall Numpy, or compile ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," by yourself."))),(0,r.kt)("h3",{id:"glibc-2-29-not-found"},"GLibC 2.29 not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ******/mpegCoder/lib/libsrt.so.1.4)\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": Your GLibC version is not ",(0,r.kt)("inlineCode",{parentName:"p"},">=2.29"),". To verify that, you could run"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ldd --version\n")),(0,r.kt)("p",{parentName:"li"},"This problem often occurs when you are using an older Linux OS. The supported OS list could be found ",(0,r.kt)("a",{parentName:"p",href:"../installation/linux#import"},"here"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": We recommend to compile and install GLibC ",(0,r.kt)("inlineCode",{parentName:"p"},">=2.31"),". However, if users want a faster hotfix. Please follow the follwing instructions."),(0,r.kt)("p",{parentName:"li"},"If you are using ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," from pip. You could find a folder named ",(0,r.kt)("inlineCode",{parentName:"p"},"lib-fix")," in where ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," is installed, then run the following command:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ln -sf /lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6\n")),(0,r.kt)("p",{parentName:"li"},"The same file (",(0,r.kt)("inlineCode",{parentName:"p"},"libm-2.31.so"),") could be also found in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/so-linux-ffmpeg_5_0.tar.xz"},"Linux dependencies",(0,r.kt)(p.Z,{icon:s.Z,mdxType:"InlineIcon"})),"."))),(0,r.kt)("h3",{id:"glibc-2-28-not-found"},"GLibC 2.28 not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"OSError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by ******/mpegCoder/lib/librav1e.so.0)\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": Your GLibC version is not ",(0,r.kt)("inlineCode",{parentName:"p"},">=2.28"),". To verify that, you could run"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ldd --version\n")),(0,r.kt)("p",{parentName:"li"},"This problem often occurs when you are using an older Linux OS. The supported OS list could be found ",(0,r.kt)("a",{parentName:"p",href:"../installation/linux#import"},"here"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": To our knowledge, this issue cannot be solved if you do not upgrade to a newer OS release or compile GLibC by yourself. In the next version, we will try to build our toolchain with compiling GLibC first. This change may eliminate this issue in the future release of ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,r.kt)("h3",{id:"libcrypyto-not-found"},"libcrypyto not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"OSError: libcrypto.so.1.1: cannot open shared object file: No such file or directory\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": This problem is caused by a small mistake in the packaging. This dependency should be, but is actually not bundled with our ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". When using a non-conda environment on Ubuntu 22.04, you may meet this problem.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": To solve this issue, please upgrade to ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder>=3.1.1"),", or install a ",(0,r.kt)("inlineCode",{parentName:"p"},"conda")," environment. If you do not want to do so, you can also use ",(0,r.kt)("inlineCode",{parentName:"p"},"Debian 11")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04"),"."))),(0,r.kt)("h3",{id:"incorrect-dependencies"},"Incorrect dependencies"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": I have not installed any dependencies, and I am not using the PyPI version. Why could I import ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," successfully?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": You may have installed FFMpeg before. The FFMpeg libraries are already in your environment. It is danger to work with an incorrect FFMpeg version, because the FFMpeg APIs are keeping changing. Please ensure that your ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," version and your FFMpeg version are consistent.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Install ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," from PyPI, or download our dependencies, or compile ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," by yourself."))),(0,r.kt)("h3",{id:"tqdm-has-no-attribute-wrapattr"},(0,r.kt)("inlineCode",{parentName:"h3"},"tqdm")," has no attribute ",(0,r.kt)("inlineCode",{parentName:"h3"},"wrapattr")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"AttributeError: type object 'tqdm' has no attribute 'wrapattr'\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": This problem only exists from ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder==3.1.0b0")," to ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder==3.2.3"),", where ",(0,r.kt)("inlineCode",{parentName:"p"},"tqdm")," is an optional package and not listed in the dependencies. However, this optional ",(0,r.kt)("inlineCode",{parentName:"p"},"tqdm")," requires to have the feature ",(0,r.kt)("a",{parentName:"p",href:"https://tqdm.github.io/docs/tqdm/#wrapattr",title:"tqdm.tqdm.wrapattr"},(0,r.kt)("inlineCode",{parentName:"a"},"tqdm.tqdm.wrapattr"),(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," which was firstly introduced in ",(0,r.kt)("inlineCode",{parentName:"p"},"tqdm==4.40.0"),". In other words, if a user has installed ",(0,r.kt)("inlineCode",{parentName:"p"},"tqdm<4.40.0"),", this bug will trigger. On the other hand, if ",(0,r.kt)("inlineCode",{parentName:"p"},"tqdm")," is not installed or with a version ",(0,r.kt)("inlineCode",{parentName:"p"},"tqdm>=4.40.0"),", this bug should not happen.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": To solve this issue, please upgrade to ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder>=3.2.4"),", or run the following command for upgrading your ",(0,r.kt)("inlineCode",{parentName:"p"},"tqdm"),":"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'python -m pip install "tqdm>=4.40.0"\n')))))}f.isMDXComponent=!0},7225:function(e,t){t.Z={body:'',width:24,height:24}},3807:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/0721e2d4.b8104d5d.js b/assets/js/0721e2d4.b8104d5d.js new file mode 100644 index 0000000..9b7e275 --- /dev/null +++ b/assets/js/0721e2d4.b8104d5d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8216],{2707:function(e,t,n){n.r(t),n.d(t,{assets:function(){return d},contentTitle:function(){return s},default:function(){return m},frontMatter:function(){return l},metadata:function(){return p},toc:function(){return c}});var a=n(3117),i=n(102),o=(n(7294),n(3905)),r=["components"],l={id:"pypi",title:"Installation from PyPI",sidebar_label:"PyPI",slug:"/installation/pypi",description:"A tutorial about the installation of the package from PyPI."},s=void 0,p={unversionedId:"guides/install/pypi",id:"guides/install/pypi",title:"Installation from PyPI",description:"A tutorial about the installation of the package from PyPI.",source:"@site/docs/guides/install/pypi.mdx",sourceDirName:"guides/install",slug:"/installation/pypi",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/pypi",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/install/pypi.mdx",tags:[],version:"current",frontMatter:{id:"pypi",title:"Installation from PyPI",sidebar_label:"PyPI",slug:"/installation/pypi",description:"A tutorial about the installation of the package from PyPI."},sidebar:"docs",previous:{title:"Installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/installation"},next:{title:"Windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/windows"}},d={},c=[],u={toc:c};function m(e){var t=e.components,n=(0,i.Z)(e,r);return(0,o.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"To install the pre-compiled package, just run"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"pip install mpegCoder\n")),(0,o.kt)("p",null,"The PyPI repository is supported since ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.1.0"),". The supported versions are listed as below:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"th"},"mpegCoder")," version"),(0,o.kt)("th",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"th"},"Python")," version"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.1.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},">=3.5, <=3.9"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},">=3.2.0,<=3.2.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},">=3.6, <=3.10"))))),(0,o.kt)("p",null,"To check the details of each pre-compiled version, please view the manual installation guides for ",(0,o.kt)("a",{parentName:"p",href:"./windows"},"Windows")," and ",(0,o.kt)("a",{parentName:"p",href:"./linux"},"Linux"),"."),(0,o.kt)("p",null,"The package installed by this method is shipped with all required dynamic libraries. Users do not need to install any other dependencies in this case. However, if users find that the package could not be imported after the installation, please check the ",(0,o.kt)("a",{parentName:"p",href:"../troubleshooting/installation"},"troubleshooting page")," first."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/07e76464.fd69746a.js b/assets/js/07e76464.fd69746a.js new file mode 100644 index 0000000..027792b --- /dev/null +++ b/assets/js/07e76464.fd69746a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[1209],{5549:function(e,t,a){a.d(t,{A:function(){return l},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function l(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=d+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},6862:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return k},default:function(){return v},frontMatter:function(){return h},metadata:function(){return N},toc:function(){return g}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),d=a(541),l=a(5514),o=a(6577),p=a(2895),m=a(7508),c=a(5549),s=["components"],h={id:"MpegEncoder",title:"MpegEncoder",sidebar_label:"MpegEncoder",slug:"/apis/MpegEncoder",description:"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly."},k=void 0,N={unversionedId:"apis/MpegEncoder",id:"version-3.2.x/apis/MpegEncoder",title:"MpegEncoder",description:"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly.",source:"@site/versioned_docs/version-3.2.x/apis/MpegEncoder.mdx",sourceDirName:"apis",slug:"/apis/MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegEncoder",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/apis/MpegEncoder.mdx",tags:[],version:"3.2.x",frontMatter:{id:"MpegEncoder",title:"MpegEncoder",sidebar_label:"MpegEncoder",slug:"/apis/MpegEncoder",description:"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly."},sidebar:"apis",previous:{title:"MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegDecoder"},next:{title:"MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegClient"}},u={},g=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"EncodeFrame",id:"encodeframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"FFmpegClose",id:"ffmpegclose",level:3},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Optimize the video encoding",id:"optimize-the-video-encoding",level:3},{value:"Rescale and resample the video",id:"rescale-and-resample-the-video",level:3},{value:"Use the AV1 encoder",id:"use-the-av1-encoder",level:3},{value:"Use multi-thread encoding",id:"use-multi-thread-encoding",level:3}],f={toc:g};function v(e){var t=e.components,a=(0,r.Z)(e,s);return(0,i.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(c.q,{mdxType:"Splitter"}),(0,i.kt)(c.A,{ver:"3.2.0",url:"MpegCoder.h#L82",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc = mpegCoder.MpegEncoder()\n")),(0,i.kt)("p",null,"The frame-level video encoder used for muxing a video file."),(0,i.kt)("p",null,"This encoder instance serves as a video file writer. It supports:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Encode a 3D ",(0,i.kt)("a",{parentName:"li",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," as a video frame."),(0,i.kt)("li",{parentName:"ul"},"Configure the codec type and the video parameters."),(0,i.kt)("li",{parentName:"ul"},"Scaling the encoded video frames to a specific size.")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," requires users to initialize the encoder before writing frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the encoder is destructed. During the distruction, hitting ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," will cause the written video to break."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("p",null,"This class does not has initialization arguments."),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"including")," the default video path. If a video is opened by the encoder, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file writers."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.resetPath(videoPath)\n")),(0,i.kt)("p",null,"Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be written.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = enc.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the written video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"codecName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the written video (Kb/s). This value determines the output video size directly.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the written video. This value is mainly determined by the user configurations.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the written video. This value is mainly determined by the user configurations.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,i.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,i.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the written video. The unit is FPS.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.setParameter(\n decoder=None, configDict=None, videoPath=None, codecName=None,\n nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None,\n GOPSize=None, maxBframe=None, frameRate=None\n)\n")),(0,i.kt)("p",null,"Set the configurations of the encoder. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"decoder")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"./MpegDecoder"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegDecoder"))," or ",(0,i.kt)("a",{parentName:"td",href:"./MpegClient"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegClient"))),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"When configure this argument, the required configurations will be copied from a decoder or a client. If users also provide duplicated arguments in the same call, these copied parameters have a lower preference than those specified by users. This argument is useful when trancoding a video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"configDict")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"dict")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"An alternative of the argument ",(0,i.kt)("inlineCode",{parentName:"td"},"decoder")," when the parameters need to be passed through different processes. Using ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict=decoder.getParameter()")," is equivalent to using ",(0,i.kt)("inlineCode",{parentName:"td"},"decoder=decoder"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the written video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"codecName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the written video (Kb/s). This value determines the output video size directly.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the written video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the written video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,i.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,i.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"tuple")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the written video. This value should be a tuple of two ",(0,i.kt)("inlineCode",{parentName:"td"},"int"),"s: ",(0,i.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". This format is consistent with ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/structAVRational.html",title:"AVRational"},(0,i.kt)("inlineCode",{parentName:"a"},"AVRational"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.FFmpegSetup(videoPath=None)\n")),(0,i.kt)("p",null,"Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the file name and the user configurations set by ",(0,i.kt)("a",{parentName:"p",href:"#setparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"setParameter()")),". If an video is being opened by the encoder now, this video will be closed first, then the new video will be opened with the same configurations."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be written. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"encodeframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"EncodeFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"is_success = enc.EncodeFrame(PyArrayFrame)\n")),(0,i.kt)("p",null,"Encode one frame into the video. Note that in most cases, the frame will not be written to the file instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the file."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"is_success")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bool")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The status of the frame encoding. If the given frame succeeds to be encoded, will return ",(0,i.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,i.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegclose"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegClose")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.FFmpegClose()\n")),(0,i.kt)("p",null,"Close the video file. Calling this method will flush all buffered frames into the file. Then the video tail will be writen to the file. If users does not call this method explicitly, it will be called when ",(0,i.kt)("a",{parentName:"p",href:"#clear"},(0,i.kt)("inlineCode",{parentName:"a"},"clear()"))," is called or when the encoder is destructed."),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(enc)\n")),(0,i.kt)("p",null,"Return a brief report of the current encoder status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the encoder status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/transcoding"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Transcoding")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"optimize-the-video-encoding"},"Optimize the video encoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\n...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(decoder=dec, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16)\n...\n")),(0,i.kt)("h3",{id:"rescale-and-resample-the-video"},"Rescale and resample the video"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(width=1280, height=720, frameRate=(5, 1), codecName='libx265', videoPath='test-video-x265.mp4')\n...\n")),(0,i.kt)("h3",{id:"use-the-av1-encoder"},"Use the AV1 encoder"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(width=1280, height=720, codecName='libsvtav1', videoPath='test-video-av1.mp4')\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-encoding"},"Use multi-thread encoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(nthread=8)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/12bcf886.dac60cbd.js b/assets/js/12bcf886.dac60cbd.js new file mode 100644 index 0000000..f5f4e0c --- /dev/null +++ b/assets/js/12bcf886.dac60cbd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7350],{5549:function(e,t,l){l.d(t,{A:function(){return i},q:function(){return d}});var n=l(7294),a=l(9960),r="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",o="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=o+"/"+e.url;break;case"3.1.0":t=r+"/"+e.url}else t=o+"/"+e.url;return n.createElement(a.Z,{to:t,className:"noline"},e.children)}function d(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}d.defaultProps={padx:"1ex"}},5913:function(e,t,l){l.r(t),l.d(t,{assets:function(){return g},contentTitle:function(){return u},default:function(){return h},frontMatter:function(){return p},metadata:function(){return m},toc:function(){return b}});var n=l(3117),a=l(102),r=(l(7294),l(3905)),o=l(5514),i=l(7795),d=l(7508),s=l(5549),c=["components"],p={id:"setGlobal",title:"setGlobal",sidebar_label:"setGlobal",slug:"/apis/setGlobal",description:"Set global configurations."},u=void 0,m={unversionedId:"apis/setGlobal",id:"version-3.2.x/apis/setGlobal",title:"setGlobal",description:"Set global configurations.",source:"@site/versioned_docs/version-3.2.x/apis/setGlobal.mdx",sourceDirName:"apis",slug:"/apis/setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/setGlobal",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/apis/setGlobal.mdx",tags:[],version:"3.2.x",frontMatter:{id:"setGlobal",title:"setGlobal",sidebar_label:"setGlobal",slug:"/apis/setGlobal",description:"Set global configurations."},sidebar:"apis",previous:{title:"readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/readme"},next:{title:"MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegDecoder"}},g={},b=[{value:"Arguments",id:"arguments",level:2},{value:"Requires",id:"requires",level:3},{value:"Example",id:"example",level:2},{value:"Disable all logs except errors",id:"disable-all-logs-except-errors",level:3}],f={toc:b};function h(e){var t=e.components,l=(0,a.Z)(e,c);return(0,r.kt)("wrapper",(0,n.Z)({},f,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)(o.Z,{icon:i.Z,mdxType:"InlineIcon"})," Function",(0,r.kt)(s.q,{mdxType:"Splitter"}),(0,r.kt)(s.A,{ver:"3.2.0",url:"MpegPyd.h#L131",mdxType:"SourceURL"},(0,r.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"})," Source")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=None)\n")),(0,r.kt)("p",null,"A function used for setting global configurations. If a configuration is not specified, that item will not be changed."),(0,r.kt)("h2",{id:"arguments"},"Arguments"),(0,r.kt)("h3",{id:"requires"},"Requires"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"dumpLevel")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"int")),(0,r.kt)("td",{parentName:"tr",align:"center"}),(0,r.kt)("td",{parentName:"tr",align:"left"},"The level of dumped log. This level will only influence ",(0,r.kt)("inlineCode",{parentName:"td"},"mpegCoder")," logs, FFMpeg logs and some codec logs. A few codec, like ",(0,r.kt)("inlineCode",{parentName:"td"},"libx265")," is not influenced by this configuration. Avaliable values: ",(0,r.kt)("inlineCode",{parentName:"td"},"0"),": Silent executing; ",(0,r.kt)("inlineCode",{parentName:"td"},"1"),": (default) Dump basic informations; ",(0,r.kt)("inlineCode",{parentName:"td"},"2"),": Dump all informations.")))),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("h3",{id:"disable-all-logs-except-errors"},"Disable all logs except errors"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=0)\n")))}h.isMDXComponent=!0},7795:function(e,t){t.Z={body:'',width:24,height:24}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/14ad129b.7c44e1c5.js b/assets/js/14ad129b.7c44e1c5.js new file mode 100644 index 0000000..e6a3eba --- /dev/null +++ b/assets/js/14ad129b.7c44e1c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9],{8793:function(e,n,t){var o=t(7294),r=t(9960),i=t(1954),a=t(2949);n.Z=function(e){var n=(0,o.useState)(!1),t=n[0],l=n[1];(0,o.useEffect)((function(){l(!0)}),[]);var s,u,p,d=(s=(0,a.I)(),u=s.colorMode,s.setColorMode,"dark"===u?"button--secondary button--outline":"button--secondary");return p=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",o.createElement(r.Z,{key:String(t),className:p,to:e.to},e.icon&&o.createElement(i.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},4186:function(e,n,t){t.r(n),t.d(n,{assets:function(){return m},contentTitle:function(){return d},default:function(){return f},frontMatter:function(){return p},metadata:function(){return c},toc:function(){return g}});var o=t(3117),r=t(102),i=(t(7294),t(3905)),a=t(8793),l=t(541),s=t(3751),u=["components"],p={id:"qna",title:"Questions and answers",sidebar_label:"Q&A",slug:"/troubleshooting/qna",description:"The questions and answers for mpegCoder."},d=void 0,c={unversionedId:"troubleshooting/qna",id:"version-3.1.0/troubleshooting/qna",title:"Questions and answers",description:"The questions and answers for mpegCoder.",source:"@site/versioned_docs/version-3.1.0/troubleshooting/qna.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/qna",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/qna",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/troubleshooting/qna.mdx",tags:[],version:"3.1.0",frontMatter:{id:"qna",title:"Questions and answers",sidebar_label:"Q&A",slug:"/troubleshooting/qna",description:"The questions and answers for mpegCoder."},sidebar:"version-3.1.0/docs",previous:{title:"Running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/running"},next:{title:"Changelog",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/changelog"}},m={},g=[{value:"Introduction",id:"introduction",level:2},{value:"Plan for audio processing",id:"plan-for-audio-processing",level:3},{value:"Plan for no-encoding streaming",id:"plan-for-no-encoding-streaming",level:3},{value:"Commercial plan",id:"commercial-plan",level:3}],h={toc:g};function f(e){var n=e.components,t=(0,r.Z)(e,u);return(0,i.kt)("wrapper",(0,o.Z)({},h,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"introduction"},"Introduction"),(0,i.kt)("p",null,"If you feel like asking more questions, please contact me by the email:"),(0,i.kt)("p",null,(0,i.kt)(a.Z,{to:"mailto:cainmagi@gmail.com",icon:s.Z,mdxType:"DarkButton"},"Contact me")),(0,i.kt)("h3",{id:"plan-for-audio-processing"},"Plan for audio processing"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Question"),": The audio processing is not supported by ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.x"),". Will it be implemented future?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Answer"),": Sure. The audio processing would be supported since ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder 4.x"),". But I do not have enough time on this project, so it may take a long time to implement. I am very glad if there is anyone willing to send me a pull request (PR) about this."))),(0,i.kt)("h3",{id:"plan-for-no-encoding-streaming"},"Plan for no-encoding streaming"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Question"),": In ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.x"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegServer")," only support streaming while encoding. Will there be a class for reading a video while pushing it as a stream?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Answer"),": No. I believe that using the official FFMpeg is a good enough solution. We recommend users to use a server program together with the official ",(0,i.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg",(0,i.kt)(l.Z,{mdxType:"IconExternalLink"}))," streaming features."))),(0,i.kt)("h3",{id:"commercial-plan"},"Commercial plan"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Question"),": Will there be a commercial plan for ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"?")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Answer"),": No. ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder")," shares exactly the same license (GPL v3) of FFMpeg. This project is totally open-sourced. Although GPLv3 enables coders to add a commercial plan, such a plan would be a burden for me. I will not concern anything about the commercial plan for this project, even sponsorship."))))}f.isMDXComponent=!0},3751:function(e,n){n.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.e0ab1490.js b/assets/js/14eb3368.e0ab1490.js new file mode 100644 index 0000000..f07beb8 --- /dev/null +++ b/assets/js/14eb3368.e0ab1490.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9817],{6487:function(e,t,n){n.d(t,{Z:function(){return p}});var a=n(3117),r=n(7294),i=n(3651),l=n(8596),c=n(5281),s={breadcrumbsContainer:"breadcrumbsContainer_Xlws",breadcrumbHomeIcon:"breadcrumbHomeIcon_kU5B"},o=n(6010),m=n(9960),d=n(4996),u=n(5999);function v(e){return r.createElement("svg",(0,a.Z)({viewBox:"0 0 24 24"},e),r.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}function b(e){var t=e.children,n=e.href,a="breadcrumbs__link";return e.isLast?r.createElement("span",{className:a,itemProp:"name"},t):n?r.createElement(m.Z,{className:a,href:n,itemProp:"item"},r.createElement("span",{itemProp:"name"},t)):r.createElement("span",{className:a},t)}function h(e){var t=e.children,n=e.active,i=e.index,l=e.addMicrodata;return r.createElement("li",(0,a.Z)({},l&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,o.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,r.createElement("meta",{itemProp:"position",content:String(i+1)}))}function g(){var e=(0,d.Z)("/");return r.createElement("li",{className:"breadcrumbs__item"},r.createElement(m.Z,{"aria-label":(0,u.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,o.Z)("breadcrumbs__link",s.breadcrumbsItemLink),href:e},r.createElement(v,{className:s.breadcrumbHomeIcon})))}function p(){var e=(0,i.s1)(),t=(0,l.Ns)();return e?r.createElement("nav",{className:(0,o.Z)(c.k.docs.docBreadcrumbs,s.breadcrumbsContainer),"aria-label":(0,u.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},r.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&r.createElement(g,null),e.map((function(t,n){var a=n===e.length-1;return r.createElement(h,{key:n,active:a,index:n,addMicrodata:!!t.href},r.createElement(b,{href:t.href,isLast:a},t.label))})))):null}},8507:function(e,t,n){n.r(t),n.d(t,{default:function(){return C}});var a=n(7294),r=n(833),i=n(3651),l=n(6010),c=n(9960),s="cardContainer_woeA",o="cardTitle_pNjP",m="cardDescription_qC_k",d=n(3919),u=n(5999);function v(e){var t=e.href,n=e.children;return a.createElement(c.Z,{href:t,className:(0,l.Z)("card padding--lg",s)},n)}function b(e){var t=e.href,n=e.icon,r=e.title,i=e.description;return a.createElement(v,{href:t},a.createElement("h2",{className:(0,l.Z)("text--truncate",o),title:r},n," ",r),i&&a.createElement("p",{className:(0,l.Z)("text--truncate",m),title:i},i))}function h(e){var t=e.item,n=(0,i.Wl)(t);return n?a.createElement(b,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:(0,u.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function g(e){var t,n=e.item,r=(0,d.Z)(n.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,i.xz)(null!=(t=n.docId)?t:void 0);return a.createElement(b,{href:n.href,icon:r,title:n.label,description:null==l?void 0:l.description})}function p(e){var t=e.item;switch(t.type){case"link":return a.createElement(g,{item:t});case"category":return a.createElement(h,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}function f(e){var t=e.items,n=e.className;return a.createElement("section",{className:(0,l.Z)("row",n)},function(e){return e.filter((function(e){return"category"!==e.type||!!(0,i.Wl)(e)}))}(t).map((function(e,t){return a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(p,{key:t,item:e}))})))}var E=n(5214),Z=n(4474),N=n(7597),k=n(6487),_=n(9649),L=n(4996),y="generatedIndexPage_vzzw",T="list_HAaG",w="title_qBh7";function x(e){var t=e.categoryGeneratedIndex;return a.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,L.Z)(t.image)})}function I(e){var t=e.categoryGeneratedIndex,n=(0,i.jA)();return a.createElement(a.Fragment,null,a.createElement(r.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,L.Z)(t.image)}),a.createElement("div",{className:y},a.createElement(Z.Z,null),a.createElement(k.Z,null),a.createElement(N.Z,null),a.createElement("header",null,a.createElement(_.Z,{as:"h1",className:w},t.title),t.description&&a.createElement("p",null,t.description)),a.createElement("article",{className:"margin-top--lg"},a.createElement(f,{items:n.items,className:T})),a.createElement("footer",{className:"margin-top--lg"},a.createElement(E.Z,{previous:t.navigation.previous,next:t.navigation.next}))))}function C(e){return a.createElement(a.Fragment,null,a.createElement(x,e),a.createElement(I,e))}},5214:function(e,t,n){n.d(t,{Z:function(){return o}});var a=n(3117),r=n(7294),i=n(5999),l=n(6010),c=n(9960);function s(e){var t=e.permalink,n=e.title,a=e.subLabel,i=e.isNext;return r.createElement(c.Z,{className:(0,l.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},a&&r.createElement("div",{className:"pagination-nav__sublabel"},a),r.createElement("div",{className:"pagination-nav__label"},n))}function o(e){var t=e.previous,n=e.next;return r.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&r.createElement(s,(0,a.Z)({},t,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&r.createElement(s,(0,a.Z)({},n,{subLabel:r.createElement(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},7597:function(e,t,n){n.d(t,{Z:function(){return s}});var a=n(7294),r=n(5999),i=n(4477),l=n(5281),c=n(6010);function s(e){var t=e.className,n=(0,i.E)();return n.badge?a.createElement("span",{className:(0,c.Z)(t,l.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(r.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},4474:function(e,t,n){n.d(t,{Z:function(){return g}});var a=n(7294),r=n(2263),i=n(9960),l=n(5999),c=n(5551),s=n(373),o=n(5281),m=n(4477),d=n(6010);var u={unreleased:function(e){var t=e.siteTitle,n=e.versionMetadata;return a.createElement(l.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){var t=e.siteTitle,n=e.versionMetadata;return a.createElement(l.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function v(e){var t=u[e.versionMetadata.banner];return a.createElement(t,e)}function b(e){var t=e.versionLabel,n=e.to,r=e.onClick;return a.createElement(l.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(i.Z,{to:n,onClick:r},a.createElement(l.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function h(e){var t,n=e.className,i=e.versionMetadata,l=(0,r.Z)().siteConfig.title,m=(0,c.gA)({failfast:!0}).pluginId,u=(0,s.J)(m).savePreferredVersionName,h=(0,c.Jo)(m),g=h.latestDocSuggestion,p=h.latestVersionSuggestion,f=null!=g?g:(t=p).docs.find((function(e){return e.id===t.mainDocId}));return a.createElement("div",{className:(0,d.Z)(n,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(v,{siteTitle:l,versionMetadata:i})),a.createElement("div",{className:"margin-top--md"},a.createElement(b,{versionLabel:p.label,to:f.path,onClick:function(){return u(p.name)}})))}function g(e){var t=e.className,n=(0,m.E)();return n.banner?a.createElement(h,{className:t,versionMetadata:n}):null}},9649:function(e,t,n){n.d(t,{Z:function(){return u}});var a=n(3117),r=n(102),i=n(7294),l=n(6010),c=n(5999),s=n(6668),o="anchorWithStickyNavbar_mojV",m="anchorWithHideOnScrollNavbar_R0VQ",d=["as","id"];function u(e){var t=e.as,n=e.id,u=(0,r.Z)(e,d),v=(0,s.L)().navbar.hideOnScroll;return"h1"!==t&&n?i.createElement(t,(0,a.Z)({},u,{className:(0,l.Z)("anchor",v?m:o),id:n}),u.children,i.createElement("a",{className:"hash-link",href:"#"+n,title:(0,c.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):i.createElement(t,(0,a.Z)({},u,{id:void 0}))}}}]); \ No newline at end of file diff --git a/assets/js/15c68e3a.06691454.js b/assets/js/15c68e3a.06691454.js new file mode 100644 index 0000000..d2fee6c --- /dev/null +++ b/assets/js/15c68e3a.06691454.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[1428],{8450:function(e){e.exports=JSON.parse('{"pluginId":"default","version":"3.2.x","label":"3.2.x","banner":null,"badge":true,"className":"docs-version-3.2.x","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Introduction","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/","docId":"introduction"},{"type":"category","label":"Installation","collapsed":false,"items":[{"type":"link","label":"PyPI","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/pypi","docId":"guides/install/pypi"},{"type":"link","label":"Windows","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/windows","docId":"guides/install/windows"},{"type":"link","label":"Linux","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/linux","docId":"guides/install/linux"},{"type":"link","label":"Legacy","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/legacy","docId":"guides/install/legacy"}],"collapsible":true,"href":"/FFmpeg-Encoder-Decoder-for-Python/docs/category/installation"},{"type":"category","label":"Examples","items":[{"type":"link","label":"Decoding","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/decoding","docId":"guides/examples/decoding"},{"type":"link","label":"Transcoding","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/transcoding","docId":"guides/examples/transcoding"},{"type":"link","label":"Client","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/client","docId":"guides/examples/client"},{"type":"link","label":"Server","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/server","docId":"guides/examples/server"}],"collapsed":true,"collapsible":true,"href":"/FFmpeg-Encoder-Decoder-for-Python/docs/category/examples"},{"type":"category","label":"Troubleshooting","items":[{"type":"link","label":"Installation","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/installation","docId":"troubleshooting/installation"},{"type":"link","label":"Running","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/running","docId":"troubleshooting/running"},{"type":"link","label":"Q&A","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/qna","docId":"troubleshooting/qna"}],"collapsed":true,"collapsible":true,"href":"/FFmpeg-Encoder-Decoder-for-Python/docs/category/troubleshooting"},{"type":"link","label":"Changelog","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/changelog","docId":"changelog"}],"apis":[{"type":"link","label":"Overview","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/","docId":"apis"},{"type":"link","label":"readme","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/readme","docId":"apis/readme"},{"type":"link","label":"setGlobal","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/setGlobal","docId":"apis/setGlobal"},{"type":"link","label":"MpegDecoder","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegDecoder","docId":"apis/MpegDecoder"},{"type":"link","label":"MpegEncoder","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegEncoder","docId":"apis/MpegEncoder"},{"type":"link","label":"MpegClient","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegClient","docId":"apis/MpegClient"},{"type":"link","label":"MpegServer","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegServer","docId":"apis/MpegServer"}]},"docs":{"apis":{"id":"apis","title":"Overview","description":"The overview of all APIs.","sidebar":"apis"},"apis/MpegClient":{"id":"apis/MpegClient","title":"MpegClient","description":"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly.","sidebar":"apis"},"apis/MpegDecoder":{"id":"apis/MpegDecoder","title":"MpegDecoder","description":"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly.","sidebar":"apis"},"apis/MpegEncoder":{"id":"apis/MpegEncoder","title":"MpegEncoder","description":"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly.","sidebar":"apis"},"apis/MpegServer":{"id":"apis/MpegServer","title":"MpegServer","description":"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly.","sidebar":"apis"},"apis/readme":{"id":"apis/readme","title":"readme","description":"Use it to see README and some useful instructions.","sidebar":"apis"},"apis/setGlobal":{"id":"apis/setGlobal","title":"setGlobal","description":"Set global configurations.","sidebar":"apis"},"changelog":{"id":"changelog","title":"Changelog","description":"The changelog of this project.","sidebar":"docs"},"guides/examples/client":{"id":"guides/examples/client","title":"Pulling a video stream","description":"Example codes for pulling a stream on the client side.","sidebar":"docs"},"guides/examples/decoding":{"id":"guides/examples/decoding","title":"Decoding a video","description":"Example codes for decoding a video.","sidebar":"docs"},"guides/examples/server":{"id":"guides/examples/server","title":"Pushing a video stream","description":"Example codes for pushing a stream on the server side.","sidebar":"docs"},"guides/examples/transcoding":{"id":"guides/examples/transcoding","title":"Transcoding a video","description":"Example codes for encoding or transcoding a video.","sidebar":"docs"},"guides/install/legacy":{"id":"guides/install/legacy","title":"Installation (legacy versions)","description":"Archived legacy pre-compiled versions of mpegCoder.","sidebar":"docs"},"guides/install/linux":{"id":"guides/install/linux","title":"Installation for Linux","description":"A tutorial about the installation or compilation of the package for Linux.","sidebar":"docs"},"guides/install/pypi":{"id":"guides/install/pypi","title":"Installation from PyPI","description":"A tutorial about the installation of the package from PyPI.","sidebar":"docs"},"guides/install/windows":{"id":"guides/install/windows","title":"Installation for Windows","description":"A tutorial about the installation or compilation of the package for Windows.","sidebar":"docs"},"introduction":{"id":"introduction","title":"Introduction","description":"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.","sidebar":"docs"},"troubleshooting/installation":{"id":"troubleshooting/installation","title":"Troubleshooting for installation","description":"The troubleshooting for installation.","sidebar":"docs"},"troubleshooting/qna":{"id":"troubleshooting/qna","title":"Questions and answers","description":"The questions and answers for mpegCoder.","sidebar":"docs"},"troubleshooting/running":{"id":"troubleshooting/running","title":"Troubleshooting for running","description":"The troubleshooting for running mpegCoder.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/15cbd20d.c2e26614.js b/assets/js/15cbd20d.c2e26614.js new file mode 100644 index 0000000..f1fd22e --- /dev/null +++ b/assets/js/15cbd20d.c2e26614.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8719],{8793:function(e,t,n){var a=n(7294),i=n(9960),r=n(1954),o=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],l=t[1];(0,a.useEffect)((function(){l(!0)}),[]);var d,p,m,c=(d=(0,o.I)(),p=d.colorMode,d.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+c+" button--lg button--index":"button "+c+" button--lg",a.createElement(i.Z,{key:String(n),className:m,to:e.to},e.icon&&a.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},7777:function(e,t,n){n.r(t),n.d(t,{assets:function(){return f},contentTitle:function(){return g},default:function(){return v},frontMatter:function(){return h},metadata:function(){return N},toc:function(){return C}});var a=n(3117),i=n(102),r=(n(7294),n(3905)),o=n(8793),l=n(541),d=n(5514),p=n(7225),m=n(866),c=n(2895),s=n(5099),u=n(6564),k=["components"],h={id:"linux",title:"Installation for Linux",sidebar_label:"Linux",slug:"/installation/linux",description:"A tutorial about the installation or compilation of the package for Linux."},g=void 0,N={unversionedId:"guides/install/linux",id:"version-3.2.x/guides/install/linux",title:"Installation for Linux",description:"A tutorial about the installation or compilation of the package for Linux.",source:"@site/versioned_docs/version-3.2.x/guides/install/linux.mdx",sourceDirName:"guides/install",slug:"/installation/linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/linux",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/guides/install/linux.mdx",tags:[],version:"3.2.x",frontMatter:{id:"linux",title:"Installation for Linux",sidebar_label:"Linux",slug:"/installation/linux",description:"A tutorial about the installation or compilation of the package for Linux."},sidebar:"docs",previous:{title:"Windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/windows"},next:{title:"Legacy",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/legacy"}},f={},C=[{value:"Install the pre-compiled module",id:"install-the-pre-compiled-module",level:2},{value:"Download mpegCoder",id:"download-mpegcoder",level:3},{value:"Install Numpy",id:"install-numpy",level:3},{value:"Download dependencies",id:"download-dependencies",level:3},{value:"Import",id:"import",level:3},{value:"Compile the module",id:"compile-the-module",level:2},{value:"Compile mpegCoder",id:"compile-mpegcoder",level:3},{value:"Compile FFMpeg",id:"compile-ffmpeg",level:3}],b={toc:C};function v(e){var t=e.components,n=(0,i.Z)(e,k);return(0,r.kt)("wrapper",(0,a.Z)({},b,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This guide contains steps for installing or compiling the ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," module manually. We recommend users who need to use ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," in a project locally to install the package by this way."),(0,r.kt)("h2",{id:"install-the-pre-compiled-module"},"Install the pre-compiled module"),(0,r.kt)("h3",{id:"download-mpegcoder"},"Download ",(0,r.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,r.kt)("p",null,"First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,r.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GCC/G++"),(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py310.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.10.4")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py39.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.9.12")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py38.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.8.13")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py37.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.21.5")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.7.13")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py36.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.19.5")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.6.15")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))))),(0,r.kt)("p",null,"After extracting the tarball, we could get ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.so"),"."),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Note that the above versions only show the environment when building ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". It does not mean that they are the dependencies of running ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". For example, users could use ",(0,r.kt)("inlineCode",{parentName:"p"},"python 3.9.5")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"numpy 1.22.0")," to run ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,r.kt)("h3",{id:"install-numpy"},"Install Numpy"),(0,r.kt)("p",null,"To run ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", you are required to install ",(0,r.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," with the correct version first. The best version for each ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," release has been listed before. If your Numpy version is differnt from the best version too much, ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," may not work. Here is the command for installation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"python -m pip install numpy==\n")),(0,r.kt)("h3",{id:"download-dependencies"},"Download dependencies"),(0,r.kt)("p",null,"The pre-compiled dependencies are available on our release page. The dependencies contain several ",(0,r.kt)("inlineCode",{parentName:"p"},".so")," files. Users also need to download the tarball with the correct FFMpeg version, and extract the files."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GCC/G++"),(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/so-linux-ffmpeg_5_0.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"5.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian ",(0,r.kt)("inlineCode",{parentName:"td"},"11"))))),(0,r.kt)("p",null,"These files are compiled by myself, because FFMpeg has not released the fully built shared libraries for Linux. To learn how to compile the FFMpeg, please check ",(0,r.kt)("a",{parentName:"p",href:"#compile-the-module"},"the compilation section"),"."),(0,r.kt)("h3",{id:"import"},"Import"),(0,r.kt)("p",null,"Running the pre-compiled ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," requires users to add the required dynamic libraries to your library path. The extracted dependency files should contain two folders:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},".\n|---lib\n`---lib-fix\n")),(0,r.kt)("p",null,"We recommend users to place the two folders in a global domain, for example,"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"/opt/ffmpeg/\n|---lib\n`---lib-fix\n")),(0,r.kt)("p",null,"After that, users could add the following lines to your ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.bashrc")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"export LD_LIBRARY_PATH=/opt/ffmpeg/lib:$LD_LIBRARY_PATH\nexport PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH\nexport PKG_CONFIG_LIBDIR=/opt/ffmpeg/lib/:$PKG_CONFIG_LIBDIR\n")),(0,r.kt)("p",null,"To make the configurations take effects instantly, please run"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"source ~/.bashrc\n")),(0,r.kt)("p",null,"Running the module requires users to install ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc>=2.29"),". Please check the following table and find whether the requirements are fulfilled in your case:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GLibC"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Fulfilled"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Ubuntu bionic (",(0,r.kt)("inlineCode",{parentName:"td"},"18.04"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.27")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:s.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Ubuntu focal (",(0,r.kt)("inlineCode",{parentName:"td"},"20.04"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.31")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:c.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian buster (",(0,r.kt)("inlineCode",{parentName:"td"},"10"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.28")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:s.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian bullseye (",(0,r.kt)("inlineCode",{parentName:"td"},"11"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.31")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:c.Z,mdxType:"InlineIcon"}))))),(0,r.kt)("p",null,"If the ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc>=2.29")," is not provided by your OS, we recommend users to compile and install GLibC by themselves. However, if users want a faster hotfix. Please check the extracted dependencies."),(0,r.kt)("p",null,"Take the above steps as an example, then users could link the provided GLibC to your ",(0,r.kt)("inlineCode",{parentName:"p"},"/lib")," folder."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ln -sf /opt/ffmpeg/lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6\n")),(0,r.kt)("p",null,"After all, users could place ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.so")," in your project folder, and import the module by"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import mpegCoder\n")),(0,r.kt)("h2",{id:"compile-the-module"},"Compile the module"),(0,r.kt)("h3",{id:"compile-mpegcoder"},"Compile ",(0,r.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,r.kt)("p",null,"If users need to compile the module by themselves, please follow the instructions on Github:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/3.2.0-linux/README.md",icon:m.Z,mdxType:"DarkButton"},"Compile with GCC/G++")),(0,r.kt)("h3",{id:"compile-ffmpeg"},"Compile FFMpeg"),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Users are not required for compiling FFMpeg by themselves, because ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," could be compiled with our provided pre-compiled FFMpeg. But in some cases, user may need to built ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," with a specified FFMpeg version."),(0,r.kt)("p",{parentName:"div"},"If users are using their own FFMpeg to compile ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", please check the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/setup.py#L34"},"configuration",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," in the setup file and the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/MpegCoder/MpegBase.h#L11"},"macros",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," in the source codes."))),(0,r.kt)("p",null,"We have provided some scripts for compiling FFMpeg. Please check the following branch:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/deps",icon:u.Z,mdxType:"DarkButton"},"Scripts for compilation")),(0,r.kt)("p",null,"For example, if users want to compile FFMpeg ",(0,r.kt)("inlineCode",{parentName:"p"},"5.0"),", they could run"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"curl -O https://raw.githubusercontent.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/deps/install-ffmpeg-5_0.sh\nchmod +rwx install-ffmpeg-5_0.sh\n./install-ffmpeg-5_0.sh --all --nvcuda\n")),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Note that users may need to modify the scripts according to their own cases. Our script has been only and successfully tested on ",(0,r.kt)("inlineCode",{parentName:"p"},"Ubuntu 22.04"),"+",(0,r.kt)("inlineCode",{parentName:"p"},"GCC 11.2.0")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Debian 11"),"+",(0,r.kt)("inlineCode",{parentName:"p"},"GCC 10.2.1"),"."))))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},5099:function(e,t){t.Z={body:''}},866:function(e,t){t.Z={body:'',width:24,height:24}},7225:function(e,t){t.Z={body:'',width:24,height:24}},6564:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/16f671b0.8e5fa805.js b/assets/js/16f671b0.8e5fa805.js new file mode 100644 index 0000000..a0012cf --- /dev/null +++ b/assets/js/16f671b0.8e5fa805.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3480],{4212:function(e,t,a){var l,c,r=a(7294),n=["title","titleId"];function i(){return i=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,o=s(e,n);return r.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{maxWidth:360,height:"auto",maxHeight:360},viewBox:"0 0 360 360","aria-labelledby":a},o),t?r.createElement("title",{id:a},t):null,l||(l=r.createElement("defs",null,r.createElement("linearGradient",{id:"a"},r.createElement("stop",{stopColor:"#ffe052",offset:0}),r.createElement("stop",{stopColor:"#ffc331",offset:1})),r.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",xlinkHref:"#a",id:"d",x1:89.137,y1:111.921,x2:147.777,y2:168.101,gradientUnits:"userSpaceOnUse"}),r.createElement("linearGradient",{id:"b"},r.createElement("stop",{stopColor:"#387eb8",offset:0}),r.createElement("stop",{stopColor:"#366994",offset:1})),r.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",href:"#b",xlinkHref:"#b",id:"c",x1:55.549,y1:77.07,x2:110.149,y2:131.853,gradientUnits:"userSpaceOnUse"}))),c||(c=r.createElement("g",{stroke:"null"},r.createElement("path",{fill:"url(#c)",d:"M223.912 105.999c-72.204 0-67.695 31.312-67.695 31.312l.08 32.438H225.2v9.74h-96.27s-46.203-5.24-46.203 67.614c0 72.855 40.327 70.271 40.327 70.271h24.068v-33.807s-1.298-40.327 39.683-40.327h68.339s38.395.62 38.395-37.108V143.75s5.83-37.75-69.627-37.75zm-37.993 21.813a12.384 12.384 0 0 1 12.396 12.396c0 6.856-5.54 12.396-12.396 12.396a12.384 12.384 0 0 1-12.396-12.396 12.385 12.385 0 0 1 12.396-12.396z",transform:"translate(-44.938 -67.469)"}),r.createElement("path",{fill:"url(#d)",d:"M225.963 388.939c72.204 0 67.695-31.312 67.695-31.312l-.08-32.439h-68.903v-9.74h96.27s46.203 5.24 46.203-67.614-40.327-70.27-40.327-70.27h-24.068v33.807s1.298 40.327-39.683 40.327h-68.339s-38.395-.621-38.395 37.107v62.382s-5.83 37.752 69.627 37.752zm37.993-21.814a12.384 12.384 0 0 1-12.396-12.396c0-6.855 5.54-12.396 12.396-12.396 6.855 0 12.396 5.54 12.396 12.396a12.385 12.385 0 0 1-12.396 12.396z",transform:"translate(-44.938 -67.469)"}))))}},3503:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,P,j,Z=a(7294),F=["title","titleId"];function S(){return S=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,A=V(e,F);return Z.createElement("svg",S({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:888,height:476.815,viewBox:"0 0 888 476.815","aria-labelledby":a},A),t?Z.createElement("title",{id:a},t):null,l||(l=Z.createElement("path",{d:"M552.642 164.076a75.14 75.14 0 0 0-147.426-15.843c-.91-.032-1.82-.069-2.738-.069a75.158 75.158 0 0 0-72.096 53.97 53.104 53.104 0 0 0-63.012 15.673h234.388c28.796 0 52.111-23.851 50.937-52.623q-.023-.553-.053-1.108zM.096 70.892A75.14 75.14 0 0 1 147.522 55.05c.91-.032 1.82-.069 2.738-.069a75.158 75.158 0 0 1 72.095 53.969 53.104 53.104 0 0 1 63.012 15.674H50.979C22.183 124.624-1.13 100.773.042 72q.023-.554.054-1.109z",fill:"#e6e6e6"})),c||(c=Z.createElement("path",{fill:"#5cb85c",d:"M336.372 145.025H151.746L59.433 304.916l92.313 159.891h184.626l92.313-159.891-92.313-159.891z"})),r||(r=Z.createElement("path",{d:"M167.2 438.04h153.718l76.859-133.124-76.86-133.124H167.2L90.341 304.916z",fill:"#fff"})),n||(n=Z.createElement("path",{fill:"#3f3d56",d:"M0 463.686h888v2.241H0z"})),i||(i=Z.createElement("path",{fill:"#a0616a",d:"m697.681 58.277 8.023 22.731-13.372 26.743-22.731-38.777 28.08-10.697z"})),s||(s=Z.createElement("path",{d:"M765.207 333.06c-4.4 6.165-38.323 41.84-61.014 65.534a20123.845 20123.845 0 0 1-15.417 16.06c-3.236 3.356-5.135 5.321-5.135 5.321l-10.256-21.448-4.453-9.306.067-.08 2.795-3.57 26.65-34.098 27.986-35.795-22.732-45.463 28.08-4.012 18.667 1.097 4.065.24s17.383 56.16 10.697 65.52z",fill:"#2f2e41"})),o||(o=Z.createElement("path",{d:"M686.315 442.707c-1.738 1.738-4.76-.481-8.036-4.279-6.78-7.862-14.695-22.464-14.695-22.464l-9.36-20.057c1.002-5.99 10.175-6.753 14.775-6.766 1.565 0 2.608.08 2.608.08l.775 1.15 16.394 24.282s2.888 22.705-2.46 28.054z",fill:"#2f2e41"})),m||(m=Z.createElement("path",{d:"M688.776 414.653s2.888 22.705-2.46 28.054c-1.74 1.738-4.761-.481-8.037-4.279l-4.894-39.9-1.003-8.157-.588-4.8 26.65-34.098 5.749 47.121a20201.877 20201.877 0 0 1-15.417 16.06zm18.519-137.244-3.597-7.194 28.08-4.012 18.667 1.097.053.24-43.203 9.869z",opacity:.2})),d||(d=Z.createElement("path",{fill:"#2f2e41",d:"M671.607 208.706h-9.361l2.675 88.252 18.72 152.435h30.754l-13.371-109.647 6.686-61.508 46.8-10.698-13.372-61.508-69.531 2.674z"})),f||(f=Z.createElement("path",{d:"M686.315 445.381s-2.674 18.72-1.337 20.057 2.674 2.675 2.674 5.349 16.046 9.36 24.069 4.011 2.674-13.371 2.674-13.371l-8.023-16.046z",fill:"#2f2e41"})),p||(p=Z.createElement("circle",{cx:680.967,cy:52.26,r:22.732,fill:"#a0616a"})),h||(h=Z.createElement("path",{fill:"#e6e6e6",d:"m694.338 88.363-17.489-7.025-10.591 131.379 73.543 5.349-25.406-135.052-11.365-10.671-8.692 16.02z"})),y||(y=Z.createElement("path",{d:"M674.522 77.37 660.91 88.363l-25.405 13.371 9.36 84.24 1.337 48.138s-17.383 42.789-4.012 53.486 28.08 6.685 25.406-16.046-8.023-38.777 17.383-62.846 3.157-136.98-10.456-131.336zm27.126-7.854 16.759 10.824 22.731 12.034 17.383 192.55-38.777 12.034S698.26 74.738 701.648 69.516z",fill:"#2f2e41"})),u||(u=Z.createElement("path",{d:"M745.15 228.763s-20.058 30.755-5.349 30.755 18.72-25.406 18.72-25.406zm-82.904 0s20.058 30.755 5.35 30.755-18.721-25.406-18.721-25.406z",fill:"#a0616a"})),E||(E=Z.createElement("path",{d:"m682.304 18.83-6.686-4.01 1.337 2.674-5.348-1.337 1.337 1.337-6.686-1.337 2.674 2.674s-10.697 0-12.034 10.697l-6.686 1.337 2.674 4.012v4.011l2.675 2.674v4.012l2.674 6.686 2.674-9.36s12.035 2.674 17.383-8.023c0 0 1.337 4.011 8.023 2.674l10.697 18.72s1.337-8.299 6.018-9.498 2.005-11.896 2.005-11.896-4.011-4.012-4.011-6.686-4.012-5.349-6.686-5.349-9.36-5.348-9.36-5.348zM646.2 103.071l-6.224-3.691-4.472 2.354s-5.35 2.674-6.686 12.034-14.709 66.858-14.709 66.858-1.337 9.36 5.349 25.406 32.091 44.126 32.091 44.126l24.069-20.058-36.103-44.126 9.36-36.103zm84.241-10.697h10.697l17.383 65.52 5.349 81.566-25.406-9.36v-58.834l-8.023-78.892z",fill:"#2f2e41"})),x||(x=Z.createElement("path",{fill:"#3f3d56",d:"M184.701 171.594h2v82.555h-2z"})),z||(z=Z.createElement("circle",{cx:185.701,cy:258.894,r:5.693,fill:"#5cb85c"})),v||(v=Z.createElement("path",{fill:"#3f3d56",d:"M227.402 171.594h2v82.555h-2z"})),M||(M=Z.createElement("circle",{cx:228.402,cy:258.894,r:5.693,fill:"#3f3d56"})),g||(g=Z.createElement("path",{fill:"#3f3d56",d:"M302.366 171.594h2v82.555h-2z"})),k||(k=Z.createElement("circle",{cx:303.366,cy:258.894,r:5.693,fill:"#3f3d56"})),b||(b=Z.createElement("circle",{cx:272.052,cy:340.5,r:5.693,fill:"#3f3d56"})),w||(w=Z.createElement("circle",{cx:156.285,cy:288.31,r:5.693,fill:"#3f3d56"})),H||(H=Z.createElement("path",{fill:"#3f3d56",d:"M273.052 335.755h-2v-99.479h-42.65v-2h44.65v101.479z"})),O||(O=Z.createElement("circle",{cx:198.986,cy:376.558,r:5.693,fill:"#5cb85c"})),G||(G=Z.createElement("path",{fill:"#3f3d56",d:"M199.986 371.814h-2v-99.48h-42.65v-2h44.65v101.48z"})),T||(T=Z.createElement("circle",{cx:330.884,cy:331.96,r:5.693,fill:"#5cb85c"})),L||(L=Z.createElement("path",{fill:"#3f3d56",d:"M331.884 327.215h-2v-99.479h-27.467v-2h29.467v101.479zm-174.599-44.599h-2v-49.461h30.416v2h-28.416v47.461z"})),C||(C=Z.createElement("circle",{cx:228.876,cy:398.858,r:5.693,fill:"#3f3d56"})),I||(I=Z.createElement("path",{fill:"#3f3d56",d:"M229.876 393.164h-2v-47.461H199.46v-2h30.416v49.461z"})),P||(P=Z.createElement("circle",{cx:301.468,cy:356.631,r:5.693,fill:"#3f3d56"})),j||(j=Z.createElement("path",{fill:"#3f3d56",d:"M302.468 350.938h-2v-49.461h30.416v2h-28.416v47.461z"})))}},7353:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G=a(7294),T=["title","titleId"];function L(){return L=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,I=C(e,T);return G.createElement("svg",L({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1144,height:751.924,viewBox:"0 0 1144 751.924","aria-labelledby":a},I),void 0===t?G.createElement("title",{id:a},"3333"):t?G.createElement("title",{id:a},t):null,l||(l=G.createElement("path",{fill:"#f2f2f2",d:"M1111.983 428.056 904.837 604.443l-45.323 38.589-126.827-.774-108.238-.658-8.99-.053-21.965-25.799-87.33-102.562-43.838-51.49-13.181-15.476-9.535-11.201-21.249-24.956-34.403-40.401 34.844-29.667 33.277-28.338 23.92-20.366L777.168 34.846l334.815 393.21z"})),c||(c=G.createElement("path",{fill:"#3f3d56",d:"M97 101.924h397v287H97zm482 593h374v2H579z"})),r||(r=G.createElement("path",{d:"M1133.924 641.924H834.57s-6.068-88.998 29.834-90.009 31.857 39.442 76.862-16.181 99.616-52.59 106.695-19.721-13.653 59.163 24.272 51.072 92.536 13.147 61.69 74.839z",fill:"#5cb85c"})),n||(n=G.createElement("path",{d:"m979.194 641.944-1.01-.04c2.356-58.596 14.628-96.243 24.507-117.508 10.727-23.089 21.064-32.435 21.168-32.527l.672.755c-.102.091-10.319 9.345-20.96 32.278-9.825 21.174-22.03 58.668-24.377 117.042zm108.344.121-.971-.283c11.69-40.126 39.22-65.46 39.497-65.712l.68.749c-.275.249-27.599 25.404-39.206 65.246zm-205.818-.072-1.002-.14c3.966-28.605-3.198-50.799-9.907-64.38-7.265-14.704-15.553-22.736-15.636-22.815l.7-.73c.084.08 8.5 8.235 15.842 23.098 6.772 13.708 14.004 36.107 10.003 64.967z",fill:"#f2f2f2"})),i||(i=G.createElement("path",{fill:"#3f3d56",d:"M43 641.924h1101v2H43z"})),s||(s=G.createElement("path",{fill:"#2f2e41",d:"M724.735 39.413h94.695v117.651h-94.695z"})),o||(o=G.createElement("path",{fill:"#ffb8b8",d:"m646.54 588.213-12.913 47.348 21.522 15.782 5.739-4.304 10.043-48.782-24.391-10.044zm162.129-4.304-4.304 57.391h27.261v-53.087l-22.957-4.304zm-86.086-362.997v34.434l53.087 8.609 45.912-18.652-8.608-21.522-90.391-2.869z"})),m||(m=G.createElement("path",{d:"M765.626 249.607 719.714 241l-11.479 93.26-28.695 116.216s-43.043 99-37.304 121.956l2.87 7.174-2.87 12.913 28.695 11.478 11.479-18.652s8.608 12.913 22.956-14.348 74.608-196.564 74.608-196.564l10.043 28.696a59.132 59.132 0 0 0-1.434 27.26c2.87 14.348 5.739 58.826 5.739 58.826s-15.783 77.478 5.739 83.217l4.304 17.217 30.13 2.87 5.74-17.218s28.695-10.043 21.521-60.26-10.043-215.216-10.043-215.216l-28.266-69.693zm-123.39 383.084s-7.174-5.739-10.043-4.304-33 40.174-33 40.174-31.565 24.39-8.609 27.26 86.086-28.695 86.086-35.87-13.265-25.14-13.265-25.14-9.69 7.924-21.17-2.12zm159.26-4.304s25.825-1.604 30.13 2.785 2.87 25.91 2.87 25.91 2.869 38.74-20.088 38.74-17.217-25.827-17.217-25.827z",fill:"#2f2e41"})),d||(d=G.createElement("circle",{cx:775.67,cy:58.783,r:35.869,fill:"#ffb8b8"})),f||(f=G.createElement("path",{d:"M751.996 81.022s20.087 24.39-20.087 43.043 28.696 96.13 28.696 96.13 80.347-30.13 73.173-88.956c0 0-48.782-8.609-37.304-48.783z",fill:"#ffb8b8"})),p||(p=G.createElement("path",{d:"M730.474 122.63s-33-4.304-34.434 22.956 0 93.26 0 93.26-14.348 57.391-7.174 107.608c0 0-8.609 58.826 14.348 55.956s5.739-60.26 5.739-60.26l10.043-93.26-4.304-68.87 18.652-41.607zm94.973 6.339s31.287-.6 32.722 22.356-10.043 93.26-10.043 93.26l-17.218 8.61-15.782-48.783z",fill:"#ffb8b8"})),h||(h=G.createElement("path",{d:"m834.495 246.738-2.87 7.174 8.61 21.521s-34.435 27.26-31.566 33 18.652-7.174 18.652-7.174l22.957 11.478s18.652-20.087 10.043-38.739-11.934-31.04-11.934-31.04-12.457-.525-13.892 3.78z",fill:"#ffb8b8"})),y||(y=G.createElement("path",{d:"m724.018 117.608-4.304 47.348s-20.087 20.087 2.87 47.347l-2.87 21.522s53.086-2.87 63.13 0 41.06-2.31 41.06-2.31l.548-16.342s14.348-20.087 10.043-50.217 0-40.174 0-40.174l-10.043-1.435s-6.457 43.761-50.935 48.065c0 0-55.238 5.022-39.456-53.804z",fill:"#5cb85c"})),u||(u=G.createElement("path",{d:"M779.257.674s-37.304-2.312-45.913 20.885-23.674 35.376-23.674 35.376-23.731 16.496-11.865 45.944c0 0-36.917 24.808-12.526 46.846 0 0-1.435 22.037 12.913 37.115 0 0 11.478 5.8 7.174 9.28s28.695 1.16 25.826-30.157 16.5-53.376 16.5-53.376-18.652-40.603-10.044-54.522c5.227-8.45 7.471-14.752 11.81-18.399a54.432 54.432 0 0 0 6.698-6.537 15.455 15.455 0 0 1 16.644-5.19c12.913 3.48 15.783 13.918 15.783 13.918s9.326 24.937 25.108 36.536-12.196 31.896-12.196 31.896 4.864 23.898 17.497 38.046-3.64 26.48-4.584 28.067c-2.152 3.619-10.747 26.474 24.757 26.575 0 0 8.243-17.297 19.721-27.735s2.87-40.596 2.87-40.596 17.217-10.438-1.435-35.956c0 0 5.74-23.197-10.043-38.275 0 0-22.24-67.86-71.021-59.74z",fill:"#2f2e41"})),E||(E=G.createElement("ellipse",{cx:736.931,cy:58.065,rx:3.587,ry:5.739,fill:"#ffb8b8"})),x||(x=G.createElement("path",{d:"M593 750.924H1s-12-176 59-178 63 78 152-32 197-104 211-39-27 117 48 101 183 26 122 148z",fill:"#5cb85c"})),z||(z=G.createElement("path",{d:"m287.007 750.964-1.998-.08c4.66-115.878 28.928-190.33 48.466-232.381 21.214-45.661 41.656-64.145 41.86-64.327l1.33 1.495c-.202.18-20.406 18.48-41.45 63.832-19.43 41.874-43.566 116.02-48.208 231.46zm214.26.239-1.92-.559c23.119-79.353 77.561-129.455 78.11-129.952l1.343 1.48c-.543.494-54.578 50.24-77.533 129.03zm-407.024-.142-1.982-.275c7.844-56.57-6.324-100.461-19.592-127.319-14.366-29.08-30.757-44.962-30.92-45.12l1.383-1.443c.166.16 16.81 16.286 31.33 45.678 13.392 27.11 27.694 71.405 19.78 128.48z",fill:"#f2f2f2"})),v||(v=G.createElement("path",{fill:"#3f3d56",d:"M0 749.924h837v2H0zm565-360H96v-372h469zm-467-2h465v-368H98z"})),M||(M=G.createElement("circle",{cx:137,cy:170.924,r:17,fill:"#5cb85c"})),g||(g=G.createElement("circle",{cx:185,cy:170.924,r:17,fill:"#d0cde1"})),k||(k=G.createElement("circle",{cx:233,cy:170.924,r:17,fill:"#5cb85c",opacity:.5})),b||(b=G.createElement("circle",{cx:281,cy:170.924,r:17,fill:"#f2f2f2"})),w||(w=G.createElement("path",{fill:"#f2f2f2",d:"M330 162.924h140v16H330z"})),H||(H=G.createElement("circle",{cx:288,cy:283.924,r:46,fill:"#f2f2f2"})),O||(O=G.createElement("path",{d:"m288.191 297.772-23.02-23.02a4 4 0 0 1 5.658-5.657l16.98 16.98 54.184-61.789a4 4 0 1 1 6.014 5.275z",fill:"#5cb85c"})))}},3073:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,P,j,Z,F,S,V,A,q,D,N,_,U,B,R,W,X,K,J,Q,Y,$,ee,te,ae,le,ce,re,ne,ie,se,oe,me,de,fe,pe,he,ye,ue,Ee,xe,ze,ve,Me,ge,ke,be,we,He,Oe,Ge,Te,Le,Ce,Ie,Pe,je,Ze,Fe,Se,Ve,Ae,qe,De,Ne,_e,Ue,Be,Re,We,Xe,Ke,Je,Qe,Ye,$e,et,tt,at,lt,ct,rt,nt,it,st,ot,mt,dt,ft,pt,ht,yt,ut,Et,xt,zt,vt,Mt,gt,kt,bt=a(7294),wt=["title","titleId"];function Ht(){return Ht=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,Gt=Ot(e,wt);return bt.createElement("svg",Ht({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:1099.2,height:725.77,viewBox:"0 0 1099.2 725.77","aria-labelledby":a},Gt),l||(l=bt.createElement("defs",null,bt.createElement("linearGradient",{id:"a",x1:837,y1:580.8,x2:989.66,y2:580.8,gradientTransform:"matrix(-1 0 0 1 1862 0)",gradientUnits:"userSpaceOnUse"},bt.createElement("stop",{offset:0,stopColor:"gray",stopOpacity:.25}),bt.createElement("stop",{offset:.54,stopColor:"gray",stopOpacity:.12}),bt.createElement("stop",{offset:1,stopColor:"gray",stopOpacity:.1})),bt.createElement("linearGradient",{id:"b",x1:-106.89,y1:588.73,x2:-106.89,y2:244.28,gradientTransform:"matrix(-1 -.04 -.04 1 494.48 21.29)",xlinkHref:"#a"}))),void 0===t?bt.createElement("title",{id:a},"compose music"):t?bt.createElement("title",{id:a},t):null,c||(c=bt.createElement("circle",{cx:985.58,cy:371.09,r:21.63,fill:"#a4a4a4",opacity:.1})),r||(r=bt.createElement("circle",{cx:1062.95,cy:274.65,r:36.25,fill:"#a4a4a4",opacity:.1})),n||(n=bt.createElement("circle",{cx:455.32,cy:27.78,r:21.63,fill:"#a4a4a4",opacity:.1})),i||(i=bt.createElement("circle",{cx:703.43,cy:52.64,r:21.63,fill:"#a4a4a4",opacity:.1})),s||(s=bt.createElement("circle",{cx:36.25,cy:326.22,r:36.25,fill:"#a4a4a4",opacity:.1})),o||(o=bt.createElement("path",{d:"M608.11 119.66c-64.72-2.41-126.36-24.85-185.22-49.41S305.72 18.5 242.6 5.49c-40.63-8.37-87.09-9.56-119.83 13.84-31.55 22.56-41.73 61.39-47.17 97.45-4.12 27.14-6.54 55.7 4.74 81.1 7.83 17.64 21.74 32.46 31.36 49.35 33.47 58.78 9.81 131.27-26.46 188.66-17 26.92-36.74 52.6-49.87 81.26s-19.23 61.5-7.77 90.74c11.38 29 38.51 50.74 67.9 66 59.69 31.09 130 40 198.61 45 151.82 11.16 304.46 6.33 456.69 1.49 56.33-1.79 112.92-3.61 168.34-13 30.78-5.2 62.55-13.45 84.89-33.36 28.37-25.27 35.4-68.07 16.39-99.76-31.88-53.16-120-66.37-142.31-123.42-12.26-31.4.33-66.38 18.16-95.5 38.23-62.48 102.33-117.29 105.7-188.71 2.32-49-28.49-98.16-76.13-121.37-49.94-24.33-119.18-21.27-156 19-37.92 41.63-104.59 57.54-161.73 55.4z",fill:"#a4a4a4",opacity:.1})),m||(m=bt.createElement("path",{d:"M872.34 482.75a5.91 5.91 0 0 0 1.33 3.46 19.66 19.66 0 0 0 5.32 4.52v5.42s16 13.37 19.29 18.42c3.17 4.82 6.41 9.73 10.92 13.32a9.85 9.85 0 0 0 4.07 2.16h.27a4.23 4.23 0 0 1-1.56 1 3.7 3.7 0 0 0 4.36 3.13 7.29 7.29 0 0 0 2.16-1.08l6.34-4.1a18.16 18.16 0 0 0 2.95-2.21c1.18-1.19 2-2.68 3.16-3.9 2-2.08 4.84-3.32 6.23-5.82.87-1.56 1-3.41 1.56-5.12.35-1.12.86-2.18 1.2-3.3a11.93 11.93 0 0 0 .41-2.06c.22.19.45.38.69.56.49-.32 1.43.52 1.21 1.06s-.75.93-.93 1.49c-.4 1.28 1.18 2.23 1.84 3.4s.32 2.67.39 4 .68 2.93.87 4.42c.46 3.48-1.26 7.15 0 10.44a3.29 3.29 0 0 0-3.25 2.53 9.58 9.58 0 0 0 .13 4.45 6.12 6.12 0 0 0-3 5.59 1.37 1.37 0 0 1-.14 1 1.42 1.42 0 0 1-.57.33 5.64 5.64 0 0 0-3.48 5.24 2.6 2.6 0 0 1-.1 1.11 2.63 2.63 0 0 1-.82.84 6.52 6.52 0 0 0-2.43 5.1 3.7 3.7 0 0 0 1.72 3.34h.07a18 18 0 0 0-6 11.39 46.76 46.76 0 0 0 .78 11.79h.36v.29a5.25 5.25 0 0 0 .57 1.7 24.36 24.36 0 0 1 2.15 8.76 7.76 7.76 0 0 0 .3 2.21 11.14 11.14 0 0 0 1.13 1.94c1.33 2.17 1.64 4.79 2.09 7.3a57.72 57.72 0 0 0 2.55 9.57c1.53 4.24 3.59 8.58 2.89 13a13 13 0 0 0-.4 3.21 9.39 9.39 0 0 0 1.26 3.37c.51 1 1 2.06 1.4 3.12a2.52 2.52 0 0 0 .62 1.69c.12.33.22.67.32 1s.17.53.25.8a10.32 10.32 0 0 1 .31 1.36l-.06 1.05v1a2.49 2.49 0 0 1-.48.89 3.58 3.58 0 0 1-.26.29l-.24.27a1.8 1.8 0 0 0-.27.39 1.87 1.87 0 0 0-.08 1.15c0 .15.06.3.1.45.25 1.08.52 2.16.79 3.23.08.33.17.65.25 1 .22.84.44 1.69.67 2.53v.11l.15.56.57 2.06c.12.41.24.81.35 1.22l.44 1.49q.51 1.74 1.05 3.48c3.57 11.78 7.4 23.49 9.76 35.57a3.83 3.83 0 0 0 1.43 2.14 8.24 8.24 0 0 0 2.49 1.34c.23 1.77.8 3.93.87 5 .22 3.49.38 7.21-.89 10.39a.84.84 0 0 0-.76.24 31 31 0 0 0-2.29 2.43l-4.69 5a7.75 7.75 0 0 0-1.06 1.29 4.51 4.51 0 0 0-.45 3.69 5 5 0 0 0 2.41 2.86 4 4 0 0 1 .76.43 4.51 4.51 0 0 0 .47.4 1.82 1.82 0 0 0 1 .19 35.71 35.71 0 0 0 7.87-1.34 6.31 6.31 0 0 0 3.25-1.53 6.08 6.08 0 0 0 1.11-2.16l.94-2.6a29.61 29.61 0 0 0 1.43-4.85 10 10 0 0 0-.25-5 1 1 0 0 0-.24.41c.23-1.45.45-2.91.68-4.37.07-.43.13-.87.19-1.32.3 3.89-.27 7.81-.09 11.71a13.65 13.65 0 0 0-.39 2.19c.26 3.58 1.75 7.49 4.64 9.62a4.75 4.75 0 0 0 1.59.83 5.62 5.62 0 0 0 1.64 0 20.9 20.9 0 0 0 6.24-1.18 7.67 7.67 0 0 0 4.49-4.26 10 10 0 0 0 .45-3.08 11.83 11.83 0 0 0-.29-3.25 24.79 24.79 0 0 0-1.64-3.79 36.17 36.17 0 0 1-1.86-5.58l-.87-3.17c-.24-.9-.49-1.8-.8-2.68a4.49 4.49 0 0 0-1.11-2.11c-.36-.28-.6-.3-.76-.14v-.34a35.86 35.86 0 0 0 .23-3.71c-.24-2-1.83-3.63-2.86-5.41a10.56 10.56 0 0 1-1.14-2.86c-.06-.22-.1-.43-.14-.66a2.33 2.33 0 0 1 .57-.37l1.78 1c-1.57-11.8-.74-24.17-5.32-35.15-2-4.78-5.85-9.76-5.42-14.91a4.2 4.2 0 0 1 .47-6.7c.77-.42 1.72-.62 2.25-1.33a3.63 3.63 0 0 0 .51-1.29 204.58 204.58 0 0 1 9.88-29.65c.89-2.11 1.81-4.2 2.74-6.29l3.1-7.05 3.78-8.58c1.28-2.89 2.57-6.19 1.36-9.1-.48-1.15-1.33-2.24-1.21-3.47a21.78 21.78 0 0 1 .74-2.29 5.7 5.7 0 0 0-.19-2.49 89.79 89.79 0 0 0-.82-3.23 18 18 0 0 1 2.41.46c.48-.81-.29-1.75-.76-2.57a8.69 8.69 0 0 1-.87-3.57l-1-10.09a17.9 17.9 0 0 1-.08-4.2c.2-1.48.77-2.89 1.06-4.37.55-2.83 0-5.75.18-8.64a38.74 38.74 0 0 1 1.32-7.52c.09-.37.17-.73.26-1.1a6 6 0 0 0 1.45.25h1.24a4 4 0 0 0 .55-.14h.12a6 6 0 0 0 .59-.23c-.24-.51-.46-1-.67-1.54-.09-.21-.17-.42-.25-.63s-.23-.59-.33-.89-.2-.55-.29-.82-.15-.46-.22-.69-.19-.63-.28-1-.18-.66-.27-1l.15-.31a8.77 8.77 0 0 0 1.65 1.13c2 3.45 3.81 7 5.48 10.58a3.36 3.36 0 0 0 .51-1.29 6.19 6.19 0 0 0 .71.91 10.6 10.6 0 0 0 2.33 1.71 6 6 0 0 0 2.76 1 5.15 5.15 0 0 0 3.53-1.53c2.91-2.55 4.36-6.34 5.71-10a75.29 75.29 0 0 0 4.3-14.73c.82-5.43.47-11.07 2-16.34-1.39-2.76-2.27-5.81-3.83-8.48a37.92 37.92 0 0 1-2.64-4.95 17.1 17.1 0 0 1-.47-11.44 1.57 1.57 0 0 0-1.83.1 3.83 3.83 0 0 0-1.1 1.6 14.19 14.19 0 0 0-1.09 6.72 2.68 2.68 0 0 1-.19 1.64 2.06 2.06 0 0 1-1.78.75 15.34 15.34 0 0 1-4.12-.75 38.28 38.28 0 0 0-11.48-1.12 9.11 9.11 0 0 0-1-1l-.43-.35-.44-.34-.22-.18a5 5 0 0 1-.42-.37 2.77 2.77 0 0 1-1-1.75 2.25 2.25 0 0 1 0-.26 1.94 1.94 0 0 1 0-.24 3.38 3.38 0 0 1 .23-.7 4.71 4.71 0 0 1 .22-.45l.11-.23c0-.07.07-.15.11-.22a6.59 6.59 0 0 0 .32-.84 6.13 6.13 0 0 0 .21-.87 6.54 6.54 0 0 0 .09-.89v-1.35a9.09 9.09 0 0 0-.37-1.78 9.87 9.87 0 0 0-.48-1.28 14.16 14.16 0 0 0-.85-1.58 24.18 24.18 0 0 0-2.14-2.91l-.59-.69-.6-.68a23.75 23.75 0 0 1-1.74-2.13 8.28 8.28 0 0 1-1-1.78 6.84 6.84 0 0 1-.21-.64 6.51 6.51 0 0 1-.18-1.24v-.41a15.44 15.44 0 0 1 .08-1.67c.08-.78.19-1.57.3-2.37.07-.53.15-1.06.22-1.59 0-.26.06-.53.1-.79.06-.53.12-1.06.16-1.59a15.24 15.24 0 0 0-.26-4.63 8.77 8.77 0 0 0-.47-1.48 9.39 9.39 0 0 0-1-1.8 13 13 0 0 0-5.56-4.33 25.6 25.6 0 0 0-5.09-1.63c-.7-.15-1.39-.28-2.08-.39-10.4-1.67-21.44 1.49-28 10-3.42 4.42-6.33 9.38-7.57 14.83s-.68 11.49 2.39 16.17c1.29 2 3 3.68 4.13 5.74.94 1.68 1.5 3.57 2.51 5.21a12.3 12.3 0 0 0 5.55 4.67l-.44.4a13.48 13.48 0 0 0-3.11.06c-1.06.18-2.09.59-3.16.72-1.32.17-2.67-.09-4 .08-2.46.32-4.48 2-6.35 3.65-2.19 1.91-4.54 4.14-4.71 7v.08l-1.47 2a7.89 7.89 0 0 0-.92 1.45c-.59 1.39-.26 3-.58 4.48a9.58 9.58 0 0 1-1.16 2.67 60.07 60.07 0 0 1-5 7.46 12.64 12.64 0 0 1-3.11 3.08 5.6 5.6 0 0 1-3.24.92 20.77 20.77 0 0 1-4.74-3.17 30.57 30.57 0 0 1-4.19-5.21c-2.38-3.43 5 6.83 2.62 3.39l-21.34-35.56a29 29 0 0 1-.84-5.06c0-.65-.27-1.51-.93-1.53a1.13 1.13 0 0 0-.75.36 4.34 4.34 0 0 0-1.39 3.7 5.13 5.13 0 0 0-3.27.58 1.87 1.87 0 0 0-.41 2.66v.27a1.42 1.42 0 0 0-.75 1.5 5.08 5.08 0 0 0-3.51.17c-1.05.59-1.45 2.32-.43 3a3.07 3.07 0 0 0-1.96 2.9zm133.68 5.1a16.52 16.52 0 0 0 1.87.48 29.85 29.85 0 0 1 5.8 2 3.18 3.18 0 0 1 1.51 1.13 3.36 3.36 0 0 1-.18 2.84l-2.64 7.13c-.42 1.12-.83 2.24-1.35 3.31-.2.43-.43.86-.66 1.28q-.12-.36-.24-.69a58.51 58.51 0 0 1-1.9-6.64c-.44-1.94-.81-3.9-1.12-5.86a28.64 28.64 0 0 0-1.11-4.98zm-2.76-5.59.2.14a2.25 2.25 0 0 1 .69.48 1.07 1.07 0 0 1 0 1zm-4.77-6.87 3.16.46a4.15 4.15 0 0 1 2.13.73 1.43 1.43 0 0 1 .29 2 4.76 4.76 0 0 1-.7.47 2 2 0 0 0-.75 2.07 22.41 22.41 0 0 0-1.81-2.81 13.9 13.9 0 0 0-2.11-2.16c-.07-.25-.13-.51-.21-.76zm-30.37 227.33a11.28 11.28 0 0 0 1.17 0 11.23 11.23 0 0 0-.19 2.84z",transform:"translate(-50.4 -87.11)",fill:"url(#a)"})),d||(d=bt.createElement("path",{d:"M921.92 339.11c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87 21.4 21.4 0 0 1-7.75-10.52c-4.27 1-8.62 1.89-13 1.5s-8.79-2.37-11.08-6.09c-1-1.64-1.57-3.53-2.51-5.21-1.15-2.06-2.85-3.75-4.14-5.73-3.06-4.68-3.62-10.69-2.38-16.15s4.14-10.39 7.57-14.81c6.63-8.51 17.67-11.67 28.06-10z",fill:"#3a3768"})),f||(f=bt.createElement("path",{d:"M921.92 339.11c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87 21.4 21.4 0 0 1-7.75-10.52c-4.27 1-8.62 1.89-13 1.5s-8.79-2.37-11.08-6.09c-1-1.64-1.57-3.53-2.51-5.21-1.15-2.06-2.85-3.75-4.14-5.73-3.06-4.68-3.62-10.69-2.38-16.15s4.14-10.39 7.57-14.81c6.63-8.51 17.67-11.67 28.06-10z",fill:"#3f3d56"})),p||(p=bt.createElement("path",{d:"M956.54 407.68c.31 2 .68 3.92 1.13 5.87a56.16 56.16 0 0 0 1.89 6.62 6.36 6.36 0 0 1 .59 3 5.61 5.61 0 0 1-.73 1.82c-2.51 4.45-5.89 8.75-6.18 13.85-.07 1.27 0 2.64-.68 3.69q-2.91-6.24-6.41-12.18c-2.44-4.14-5.15-8.32-5.85-13.08a24.8 24.8 0 0 1 .08-6.72 14.63 14.63 0 0 1 2.42-7.07c1.65-2.16 6.2-5.43 9.14-4.76 3.45.84 4.16 6.17 4.6 8.96z",fill:"#f86d70"})),h||(h=bt.createElement("path",{d:"M868.17 431.67c-3.28-1.34-6.62-2.75-9.23-5.16a30.11 30.11 0 0 1-4.19-5.2l-7.71-11.14c-1.83-2.65-3.71-5.43-4.1-8.62a28.37 28.37 0 0 1-7.71-17.5c0-.66-.26-1.51-.92-1.53a1.16 1.16 0 0 0-.76.36 4.35 4.35 0 0 0-1.38 3.7 5.13 5.13 0 0 0-3.27.57c-.92.66-1.16 2.29-.17 2.84a1.41 1.41 0 0 0-1 1.59 5 5 0 0 0-3.51.17c-1 .59-1.45 2.31-.43 3a3 3 0 0 0-2 2.93 5.88 5.88 0 0 0 1.33 3.45c3 4 8.2 5.58 11.63 9.16a26.56 26.56 0 0 1 3 4l9.95 15.14c3.16 4.81 6.41 9.71 10.92 13.29a9.88 9.88 0 0 0 4.06 2.16 4.49 4.49 0 0 0 4.27-1.18c1-1.13 1.15-2.76 1.25-4.26.24-2.55-.2-5.2-.03-7.77z",fill:"#a1616a"})),y||(y=bt.createElement("path",{d:"M901.48 641.89a8.65 8.65 0 0 0-1.06 1.29 4.51 4.51 0 0 0-.45 3.69 5 5 0 0 0 2.41 2.85 4.71 4.71 0 0 1 .76.44 4.51 4.51 0 0 0 .47.4 1.82 1.82 0 0 0 1 .19 36.41 36.41 0 0 0 7.87-1.34 6.31 6.31 0 0 0 3.25-1.53 6.47 6.47 0 0 0 1.11-2.15l.93-2.6a30.54 30.54 0 0 0 1.44-4.84 10.08 10.08 0 0 0-.26-5 1.63 1.63 0 0 0-.35 1 11.07 11.07 0 0 1-2 4.85 4.94 4.94 0 0 1-.78 1 5.09 5.09 0 0 1-2.34 1 28.76 28.76 0 0 1-5 .64 1.56 1.56 0 0 1-.68-.08 1.19 1.19 0 0 1-.57-.71 3 3 0 0 1 0-2c.45-1.26 1.69-2.09 2.29-3.3.44-.89-.17-1.87-1.08-1.12a27.74 27.74 0 0 0-2.29 2.43z",fill:"#3f3d56"})),u||(u=bt.createElement("path",{d:"M910.1 623.89c.27 4.19.45 8.71-1.84 12.22-.82 1.27-1.93 2.33-2.87 3.52a4.13 4.13 0 0 0-1 2.12c-.14 1.53 1.3 2.85 2.82 3.13a9.33 9.33 0 0 0 4.53-.65 10.91 10.91 0 0 0 3.85-1.81c2-1.69 2.52-4.5 2.92-7.08l.93-6a18.91 18.91 0 0 0 .34-4.37 19.46 19.46 0 0 0-1.17-4.71l-1.54-4.5a2.12 2.12 0 0 0-.68-1.12 2 2 0 0 0-1.17-.21c-1.47.07-5.18.61-5.89 2.16-.65 1.4.67 5.72.77 7.3z",fill:"#ee8e9e"})),E||(E=bt.createElement("path",{d:"M910.1 623.89c.27 4.19.45 8.71-1.84 12.22-.82 1.27-1.93 2.33-2.87 3.52a4.13 4.13 0 0 0-1 2.12c-.14 1.53 1.3 2.85 2.82 3.13a9.33 9.33 0 0 0 4.53-.65 10.91 10.91 0 0 0 3.85-1.81c2-1.69 2.52-4.5 2.92-7.08l.93-6a18.91 18.91 0 0 0 .34-4.37 19.46 19.46 0 0 0-1.17-4.71l-1.54-4.5a2.12 2.12 0 0 0-.68-1.12 2 2 0 0 0-1.17-.21c-1.47.07-5.18.61-5.89 2.16-.65 1.4.67 5.72.77 7.3z",opacity:.05})),x||(x=bt.createElement("path",{d:"M877.15 499.74a.37.37 0 0 0 0 .11 5 5 0 0 0 .56 1.7 24.58 24.58 0 0 1 2.16 8.75 7.41 7.41 0 0 0 .29 2.21 11.81 11.81 0 0 0 1.13 1.94c1.33 2.17 1.64 4.78 2.09 7.29a57.61 57.61 0 0 0 2.55 9.56c1.53 4.23 3.59 8.57 2.89 13a13 13 0 0 0-.4 3.2 9.24 9.24 0 0 0 1.25 3.37c.52 1 1 2.06 1.41 3.12s.85 2.31 1.19 3.48c.41 1.44.69 3.14-.26 4.29a4.88 4.88 0 0 0-.77.94 2.5 2.5 0 0 0 0 1.62q.81 3.42 1.74 6.83c.48 1.78 1 3.55 1.51 5.32 3.86 12.94 8.22 25.75 10.81 39 .37 1.91 2.81 3.28 4.71 3.69a6.14 6.14 0 0 0 5.41-1.45 3.32 3.32 0 0 0 .38-.37c2-2.14 2.27-5.42 2.13-8.38-.67-13.64-7.54-26.12-10.81-39.38a75.84 75.84 0 0 1-2.12-14.61c-.77-16.47-1.07-33.87 3.58-49.68 1-3.29 2.11-7 .37-10-1.1-1.86-3.13-3-5.14-3.76a33.1 33.1 0 0 0-25.69.66 8 8 0 0 0 0 1 10.13 10.13 0 0 1-.52 4.54 5.57 5.57 0 0 0-.45 2.01zm56.37 128.39.87 3.17a35.43 35.43 0 0 0 1.85 5.58 24.31 24.31 0 0 1 1.65 3.78 12.22 12.22 0 0 1 .28 3.25 9.93 9.93 0 0 1-.45 3.07 7.67 7.67 0 0 1-4.49 4.26 21.21 21.21 0 0 1-6.23 1.17 5 5 0 0 1-1.64 0 4.57 4.57 0 0 1-1.59-.83c-2.89-2.12-4.38-6-4.64-9.61a11.82 11.82 0 0 1 .49-2.45c.22-.3 2.41.93 1.47 2-1.38 1.53 2.67.74 4.73.61a19 19 0 0 0 2.68-.44l3.33-.71c1.09-.24 2.35-.61 2.73-1.66s-.46-2.29-1.11-3.3c-1.75-2.69-2.19-6-2.6-9.17-.08-.63-.86-4.68.75-3.42a4.5 4.5 0 0 1 1.12 2.11c.31.8.55 1.69.8 2.59z",fill:"#3f3d56"})),z||(z=bt.createElement("path",{d:"M892.02 561.77c1-1.15.67-2.85.26-4.28-.16-.54-.32-1.07-.5-1.6l13.09-4.42c0 1.17.1 2.34.15 3.51a76.05 76.05 0 0 0 2.12 14.62c3.27 13.25 10.14 25.73 10.81 39.36.15 3.14-.18 6.65-2.5 8.77a6.19 6.19 0 0 1-5.42 1.44c-1.89-.41-4.34-1.78-4.71-3.69-2.59-13.25-7-26.06-10.81-39q-1.8-6-3.25-12.16a2.54 2.54 0 0 1 0-1.61 4.88 4.88 0 0 1 .76-.94z",opacity:.05})),v||(v=bt.createElement("path",{d:"M928.2 613.76c1 1.78 2.61 3.36 2.85 5.4a30.92 30.92 0 0 1-.23 3.71 11.64 11.64 0 0 0 .55 3q1.9 6.9 4.4 13.62a3.73 3.73 0 0 1 .35 1.85 3.26 3.26 0 0 1-2.17 2.16c-3.11 1.33-6.63 1.24-10 1.1a5.23 5.23 0 0 1-2.82-.66c-1.21-.83-1.51-2.47-1.59-3.93-.23-4.25.49-8.52 0-12.75-.16-1.54-.49-3.06-.73-4.58a13.43 13.43 0 0 1 .2-6.4 14.65 14.65 0 0 1 2.39-4 12.52 12.52 0 0 1 3.33-3.32c.4-.24 1.53-1 1.93-.51.21.23.12.85.15 1.14a11.37 11.37 0 0 0 .23 1.32 10.85 10.85 0 0 0 1.16 2.85z",fill:"#ee8e9e"})),M||(M=bt.createElement("path",{d:"M903.03 505.05a3.62 3.62 0 0 1 .25 3c-.44 1.81-1.16 3.54-1.75 5.31a73.87 73.87 0 0 0-2.26 9.65c-.55 2.95-1.71 6.23-1.23 9.2a65.55 65.55 0 0 0-7 21.81c-.27 1.95 4.07 4.48 4 6.45-.16 3.92-3.29 4.23-1 7.36.11.16-.87 3.66-.74 3.81.94 1.13 2.13 2 3.14 3.09a23.63 23.63 0 0 1 3.31 4.85c6 10.78 14.59 23 11.93 35a2.14 2.14 0 0 0 1.14 2.16 5.89 5.89 0 0 0 2.52.58h.42c2-2.14 2.27-5.42 2.13-8.38-.67-13.64-7.54-26.12-10.81-39.38a75.84 75.84 0 0 1-2.12-14.61c-.77-16.47-1.07-33.87 3.58-49.68 1-3.29 2.11-7 .37-10-1.1-1.86-3.13-3-5.14-3.76a33.1 33.1 0 0 0-25.69.66 8 8 0 0 0 0 1 10.13 10.13 0 0 1-.52 4.54 5.57 5.57 0 0 0-.51 2s-.24-2.65-.24-2.61c5.35.77 10.93 4.26 16.28 5a37.18 37.18 0 0 1 8.16 1.8 3.54 3.54 0 0 1 1.78 1.15z",opacity:.05})),g||(g=bt.createElement("path",{d:"M940.05 475.89c.72 2.29 1.36 4.6 1.9 6.93a5.66 5.66 0 0 1 .19 2.48 21.78 21.78 0 0 0-.74 2.29c-.12 1.23.73 2.31 1.21 3.46 1.21 2.92-.08 6.21-1.35 9.1l-3.79 8.57-3.1 7c-.92 2.09-1.84 4.18-2.73 6.29a204.49 204.49 0 0 0-9.88 29.61 3.63 3.63 0 0 1-.51 1.29c-.53.7-1.48.9-2.25 1.33a4.19 4.19 0 0 0-.46 6.69c-.44 5.15 3.42 10.12 5.41 14.89 4.57 11 3.74 23.32 5.32 35.1l-1.78-1c-1.71.78-1.65 3.2-2.56 4.83-1.38 2.46-4.75 2.81-7.56 2.62a5.9 5.9 0 0 1-2.53-.58 2.13 2.13 0 0 1-1.13-2.16c2.65-12-6-24.25-11.94-35a23.3 23.3 0 0 0-3.31-4.84c-1-1.07-2.19-2-3.14-3.1-2.63-3.16-3-7.62-2.79-11.73a65.72 65.72 0 0 1 7.47-27.7c-.47-3 .69-6.25 1.24-9.2a72.26 72.26 0 0 1 2.25-9.65c.59-1.77 1.31-3.5 1.75-5.31a3.62 3.62 0 0 0-.24-3 3.52 3.52 0 0 0-1.69-1.09 37.63 37.63 0 0 0-8.16-1.8l-18.38-2.64c-.59-3.78-1.19-8-.78-11.78a18.11 18.11 0 0 1 13-15.16 2.73 2.73 0 0 1 2.39.15 95.83 95.83 0 0 1 48.67 3.11z",fill:"#3f3d56"})),k||(k=bt.createElement("path",{d:"M923.35 376.5a9 9 0 0 0 .8 5.26 8.22 8.22 0 0 0 2.09 2.31 15.49 15.49 0 0 0 6.06 3c1.3.33 2.76.55 3.62 1.59 1.29 1.56.43 3.91-.67 5.61-1.9 3-4.55 5.65-7.94 6.57-2.71.74-5.61.29-8.38.77-2 .35-3.9 1.18-5.88 1.65a17.35 17.35 0 0 1-16-4.45c2.94-2.26 6-4.67 7.53-8.06a11.46 11.46 0 0 0 .57-7.7c-.71-2.51-2.3-5-1.8-7.52s3-4.32 5.51-5.19a35.34 35.34 0 0 1 6.93-1.4c1.29-.18 9.52-2 10-1.1.29.51-1.42 3.51-1.63 4.17a16.05 16.05 0 0 0-.81 4.49z",fill:"#a1616a"})),b||(b=bt.createElement("path",{d:"M923.35 376.5a9 9 0 0 0 .8 5.26 8.22 8.22 0 0 0 2.09 2.31 15.49 15.49 0 0 0 6.06 3c1.3.33 2.76.55 3.62 1.59 1.29 1.56.43 3.91-.67 5.61-1.9 3-4.55 5.65-7.94 6.57-2.71.74-5.61.29-8.38.77-2 .35-3.9 1.18-5.88 1.65a17.35 17.35 0 0 1-16-4.45c2.94-2.26 6-4.67 7.53-8.06a11.46 11.46 0 0 0 .57-7.7c-.71-2.51-2.3-5-1.8-7.52s3-4.32 5.51-5.19a35.34 35.34 0 0 1 6.93-1.4c1.29-.18 9.52-2 10-1.1.29.51-1.42 3.51-1.63 4.17a16.05 16.05 0 0 0-.81 4.49z",opacity:.05})),w||(w=bt.createElement("circle",{cx:913,cy:365.81,r:16.69,fill:"#a1616a"})),H||(H=bt.createElement("path",{d:"m921.81 393.4-11.31 1.9a42.37 42.37 0 0 1-8.46.85 24.2 24.2 0 0 0-4.66 0c-1.07.18-2.09.59-3.17.72-1.32.17-2.66-.08-4 .09-2.46.31-4.48 2-6.35 3.64-2.19 1.9-4.54 4.13-4.7 7a2 2 0 0 0 .13 1 2.93 2.93 0 0 0 .84.88c2.08 1.7 3.25 4.25 4.73 6.5a25.11 25.11 0 0 0 5.62 6.06c.5-.32 1.44.52 1.22 1.06s-.75.93-.93 1.49c-.4 1.28 1.18 2.22 1.83 3.4s.33 2.66.4 4 .67 2.93.87 4.43c.45 3.47-1.26 7.13 0 10.42a3.27 3.27 0 0 0-3.25 2.53 9.55 9.55 0 0 0 .13 4.44 6.11 6.11 0 0 0-3 5.58 1 1 0 0 1-.72 1.33 5.63 5.63 0 0 0-3.47 5.23 2.57 2.57 0 0 1-.1 1.11 2.44 2.44 0 0 1-.82.84 6.52 6.52 0 0 0-2.43 5.1 3.74 3.74 0 0 0 1.72 3.34 31.12 31.12 0 0 0 7.6 2.26 68.3 68.3 0 0 0 7.36 1.3 66 66 0 0 0 6.89.21l15.14-.06c4.25 0 8.51 0 12.76-.32 4-.26 8-.76 11.85.28.48-.81-.29-1.75-.76-2.57a8.61 8.61 0 0 1-.87-3.56l-.95-10.09a17.73 17.73 0 0 1-.08-4.18c.21-1.49.77-2.9 1.06-4.37.55-2.83 0-5.75.18-8.63a38.51 38.51 0 0 1 1.32-7.51l3-12.35a47.67 47.67 0 0 1 1.48-6.19q3.45-8.9 7.25-17.64a1.82 1.82 0 0 0-.13-1.56l-2.5-4.49a28.66 28.66 0 0 0-2.29-3.65 14.45 14.45 0 0 0-8.45-5.19 14.94 14.94 0 0 0-9.82 1.46c-1.17.62-2.25 1.39-3.44 2-2.01 1-4.46 2.06-6.72 1.91z",fill:"#f86d70"})),O||(O=bt.createElement("path",{d:"m881.65 404.39-3.94 5.26a6.7 6.7 0 0 0-.92 1.45c-.6 1.38-.27 3-.59 4.46a9.3 9.3 0 0 1-1.15 2.67 61.58 61.58 0 0 1-5 7.46 13.37 13.37 0 0 1-3.11 3.08 5.16 5.16 0 0 1-4.2.74 2.63 2.63 0 0 1 1.38 1.25 15.26 15.26 0 0 1 1 9.76 10 10 0 0 1-1.1 3.2 4.8 4.8 0 0 1-2.51 2.17 3.7 3.7 0 0 0 4.36 3.13 7.29 7.29 0 0 0 2.16-1.08l6.33-4.1a16.82 16.82 0 0 0 2.95-2.21c1.18-1.18 2-2.67 3.16-3.89 2-2.07 4.84-3.31 6.23-5.81.87-1.56 1-3.41 1.55-5.12.35-1.11.87-2.17 1.2-3.29a14.7 14.7 0 0 0-1.3-10.54c-1.63-3.25-4.16-5.83-6.5-8.59z",fill:"#f86d70"})),G||(G=bt.createElement("path",{d:"M896.51 356.3a21.88 21.88 0 0 1 5.87-6.11c3.11-2.33 6.7-4.26 10.59-4.48a11.26 11.26 0 0 1 4.76.78c.08-4.72 1.25-7.85 4.19-7.38 5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87c-3.59-2.58 1.7-22.12.3-26.31-2.09.45-5.93-9.63-8.12-19.88a10.35 10.35 0 0 1-4.75.48 5.72 5.72 0 0 0-1.7-.12 4.52 4.52 0 0 0-1.48.6 36.51 36.51 0 0 1-5.05 2.6c-3.62 1.35-7.61 1.17-11.46 1a11.36 11.36 0 0 1 1.62-8.19z",fill:"#3a3768"})),T||(T=bt.createElement("path",{d:"M896.51 356.3a21.88 21.88 0 0 1 5.87-6.11c3.11-2.33 6.7-4.26 10.59-4.48a11.26 11.26 0 0 1 4.76.78c.08-4.72 1.25-7.85 4.19-7.38 5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87c-3.59-2.58 1.7-22.12.3-26.31-2.09.45-5.93-9.63-8.12-19.88a10.35 10.35 0 0 1-4.75.48 5.72 5.72 0 0 0-1.7-.12 4.52 4.52 0 0 0-1.48.6 36.51 36.51 0 0 1-5.05 2.6c-3.62 1.35-7.61 1.17-11.46 1a11.36 11.36 0 0 1 1.62-8.19z",fill:"#3f3d56"})),L||(L=bt.createElement("path",{d:"M954.04 432.09a75.88 75.88 0 0 1-7.16-31.64c0-5.35.15-11.56-4-15-1.1-.91-2.59-1.81-2.53-3.24a5.11 5.11 0 0 1 .7-1.84 8.56 8.56 0 0 0-.28-7 24.24 24.24 0 0 0-4.18-5.85 11.63 11.63 0 0 1-2.91-4.55 9.94 9.94 0 0 1-.12-3.31c.41-4.18 1.64-8.55 0-12.44-2-5-7.81-7.12-13.16-8.05a3 3 0 0 1 1.44-.09c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.35 9.35 0 0 1-5.3 1 9.05 9.05 0 0 0 3.34-1zm-8.35 5.67a35.78 35.78 0 0 1-2.46-7.08 9.13 9.13 0 0 0 2.37 1.57 37.2 37.2 0 0 0 2 5.51 5.24 5.24 0 0 1-3.23.41 5.08 5.08 0 0 0 1.32-.41zm-29.92-91.27a11.52 11.52 0 0 0-3.18-.75h.38a11.18 11.18 0 0 1 2.82.21c-.01.16-.02.34-.02.54zm-11.36 17a36.62 36.62 0 0 0 5.06-2.6 4.44 4.44 0 0 1 1.48-.6 5.46 5.46 0 0 1 1.56.09 6.26 6.26 0 0 0-1.08.51 36.51 36.51 0 0 1-5.05 2.6 22.78 22.78 0 0 1-8.47 1.1 20.07 20.07 0 0 0 6.5-1.1zm12.99-3.6.09.45a9.8 9.8 0 0 1-2.48.07 11 11 0 0 0 2.39-.52z",opacity:.1})),C||(C=bt.createElement("path",{d:"M952.14 437.32a6.1 6.1 0 0 0 1.64 4.88 10.87 10.87 0 0 0 2.32 1.71 6.3 6.3 0 0 0 2.76 1 5.21 5.21 0 0 0 3.53-1.54c2.91-2.55 4.36-6.33 5.7-9.95a74.65 74.65 0 0 0 4.31-14.71c.82-5.43.47-11.06 2-16.33-1.38-2.76-2.26-5.8-3.83-8.46a39.86 39.86 0 0 1-2.64-4.95 17.1 17.1 0 0 1-.47-11.42 1.54 1.54 0 0 0-1.82.09 3.83 3.83 0 0 0-1.1 1.6 14.17 14.17 0 0 0-1.09 6.71 2.67 2.67 0 0 1-.19 1.64 2.06 2.06 0 0 1-1.78.75 15.8 15.8 0 0 1-4.12-.74 38.19 38.19 0 0 0-12.69-1.05 6 6 0 0 0-2.48.6 2.3 2.3 0 0 0-1.27 2.07l10.14 1.49a4.19 4.19 0 0 1 2.14.73 1.45 1.45 0 0 1 .29 2 4 4 0 0 1-.7.46 2.09 2.09 0 0 0 .08 3.34 2.14 2.14 0 0 1 .69.48c.42.56-.13 1.29-.31 2a2.48 2.48 0 0 0 1.22 2.53 8.92 8.92 0 0 0 2.83.95 29.82 29.82 0 0 1 5.8 2 3.18 3.18 0 0 1 1.51 1.13 3.39 3.39 0 0 1-.18 2.84l-2.64 7.12c-.42 1.12-.83 2.23-1.35 3.31-.67 1.39-1.5 2.7-2.19 4.09a40.83 40.83 0 0 0-1.65 4c-1.35 3.61-4 5.78-4.46 9.63z",fill:"#a1616a"})),I||(I=bt.createElement("path",{d:"M515.43 162.06v335.41a111.1 111.1 0 0 0-34.63-5.34c-49.87 0-90.37 35.29-90.37 85.16s40.5 84.77 90.37 84.77 90.62-36.72 90.62-90V339.14h263v158.33a111.05 111.05 0 0 0-34.63-5.34c-49.87 0-90.37 35.29-90.37 85.16s40.5 84.77 90.37 84.77 90.62-36.72 90.62-90v-410zm319 125h-263v-69h263zm-585-162v225.1a85.15 85.15 0 1 0 42.6 73.6v-213.4h85.4v-85.3zM226.6 652.62a54.34 54.34 0 0 0-15.65-5.54 71.57 71.57 0 0 0 11.71-2.63c10.17-3.22 15.3-7.54 11.45-9.65s-15.22-1.22-25.39 2a39.2 39.2 0 0 0-9.75 4.33c-1.05-2.23-3.91-4.82-8.37-7.27-9-5-21.18-7.47-27.12-5.59s-3.43 7.42 5.61 12.39a54.13 54.13 0 0 0 14 5.21 82.33 82.33 0 0 0-9.65 1.71c-11.07 2.66-17.47 6.67-14.3 9s14.73 2 25.8-.64a48.22 48.22 0 0 0 11.6-4.1c.91 2.3 3.82 5 8.52 7.61 9 5 21.18 7.47 27.12 5.59s3.42-7.46-5.58-12.42zm63.71-73.08a26.5 26.5 0 0 0-7.59-2.69 35.72 35.72 0 0 0 5.68-1.27c4.94-1.57 7.43-3.66 5.56-4.69s-7.39-.59-12.33 1a19.68 19.68 0 0 0-4.73 2.1c-.51-1.08-1.9-2.34-4.06-3.53-4.39-2.41-10.29-3.62-13.17-2.71s-1.66 3.61 2.72 6a26.21 26.21 0 0 0 6.82 2.52 41 41 0 0 0-4.69.84c-5.37 1.28-8.48 3.23-6.94 4.35s7.15 1 12.52-.31a23.78 23.78 0 0 0 5.64-2c.44 1.11 1.85 2.44 4.13 3.69 4.39 2.41 10.28 3.63 13.17 2.72s1.66-3.61-2.73-6.02zm-171.39-74.09a16.63 16.63 0 0 0-4.78-1.68 20.82 20.82 0 0 0 3.58-.8c3.09-1 4.65-2.29 3.48-2.93s-4.62-.37-7.71.61a12.28 12.28 0 0 0-3 1.31 5.85 5.85 0 0 0-2.54-2.2c-2.74-1.51-6.43-2.27-8.24-1.7s-1 2.25 1.71 3.76a16.29 16.29 0 0 0 4.27 1.58 24.63 24.63 0 0 0-2.94.53c-3.36.8-5.31 2-4.35 2.72s4.48.61 7.84-.19a14.94 14.94 0 0 0 3.53-1.25 5.57 5.57 0 0 0 2.58 2.31c2.75 1.51 6.44 2.27 8.24 1.7s1.07-2.26-1.67-3.77z",fill:"#a4a4a4"})),P||(P=bt.createElement("path",{d:"M364.43 125.06v71.3h-85.4v213.4a85.27 85.27 0 0 1-138.19 66.89 85.28 85.28 0 0 0 152.19-52.89v-213.4h85.4v-85.3z",opacity:.1})),j||(j=bt.createElement("path",{d:"m123.47 143.58.29 2.18 9.45 1.34s.77-.58 2-1.37c2.24-1.47 6-3.66 9.2-4.28 4.95-1 20.69-8.05 15.62-8.51s-4.55.59-4.55.59-5.59-5.49-11.36-.47c-4.38 3.81-14 7.91-18.39 9.66-1.4.55-2.26.86-2.26.86z",fill:"#efb7b9"})),Z||(Z=bt.createElement("path",{d:"M161.22 118.52a16 16 0 0 1 4.53-1.16 5.51 5.51 0 0 1 4.31 1.44c.61.63 1 1.44 1.6 2.08 2.88 3.08 8.47.78 11.94 3.17 2.13 1.48 2.79 4.27 3.55 6.76s2.14 5.22 4.68 5.75a13.88 13.88 0 0 0 3.69-.14 3.63 3.63 0 0 1 3.32 1.22c1.18 1.79-.45 4.78 1.26 6.06 1.53 1.13 4.3-.45 5.37 1.12a2.34 2.34 0 0 1-.37 2.6 18.07 18.07 0 0 0-1.74 2.18 3.3 3.3 0 0 0 3.25 4.82c1.08-.11 2.23-.72 3.17-.19a2.24 2.24 0 0 1 1 1.77 4.65 4.65 0 0 1-4.18 4.89c-1.84.12-3.53-.88-5.17-1.72s-3.57-1.55-5.27-.85a8.14 8.14 0 0 0-2.12 1.49 23.21 23.21 0 0 1-6.52 3.86c-2.08.82-4.5 1.31-6.5.29-2.25-1.15-3.41-3.95-5.79-4.8s-5.1.74-7.38 2.09-5.33 2.48-7.39.82c-2.22-1.79-1.54-5.38-2.89-7.89a7.75 7.75 0 0 0-2.17-2.39c-1.52-1.17-3.25-2.05-4.78-3.2a8 8 0 0 1-3.26-4.58c-.45-2.27.63-4.54 1.86-6.5s2.66-3.88 3.06-6.15c.3-1.7 0-3.47.39-5.15a6.35 6.35 0 0 1 4.12-4.35c1.12-.38 1.32-.28 1.89-1.27a4 4 0 0 1 2.54-2.07z",fill:"#3f3d56"})),F||(F=bt.createElement("path",{d:"M199.11 138.33a8.51 8.51 0 0 1 .18 3 8.11 8.11 0 0 1-.18-3zm4.28 11.45a3.27 3.27 0 0 0-.34 1.1 3.38 3.38 0 0 1 .12-2.8 17.79 17.79 0 0 1 1.74-2.17 3.69 3.69 0 0 0 .5-1l.08.09a2.34 2.34 0 0 1-.36 2.59 17.88 17.88 0 0 0-1.74 2.19zm-52.97-2.68c1.53 1.16 3.25 2 4.77 3.21a7.62 7.62 0 0 1 2.17 2.39c1.35 2.51.67 6.1 2.89 7.89 2.06 1.66 5.12.54 7.4-.82s4.88-3 7.37-2.09 3.54 3.65 5.8 4.8c2 1 4.41.52 6.5-.29a23.3 23.3 0 0 0 6.51-3.86 8.6 8.6 0 0 1 2.12-1.5c1.71-.69 3.64 0 5.28.86s3.33 1.84 5.16 1.72a4.7 4.7 0 0 0 4.15-4.11 3 3 0 0 1 .22.88 4.64 4.64 0 0 1-4.15 4.92c-1.83.12-3.53-.88-5.16-1.71s-3.57-1.55-5.28-.86a8.83 8.83 0 0 0-2.12 1.49 23.33 23.33 0 0 1-6.51 3.87c-2.08.81-4.51 1.3-6.5.29-2.26-1.15-3.41-3.95-5.8-4.8s-5.1.73-7.37 2.09-5.34 2.48-7.4.81c-2.22-1.79-1.54-5.37-2.89-7.89a7.7 7.7 0 0 0-2.17-2.38c-1.51-1.17-3.24-2.05-4.77-3.21a8 8 0 0 1-3.27-4.58 5.41 5.41 0 0 1-.1-1.2 8.36 8.36 0 0 0 3.15 4.08z",opacity:.1})),S||(S=bt.createElement("path",{d:"m154.47 199.04-3.43.73s3.38 5.56 8.59 1.91-5.16-2.64-5.16-2.64z",fill:"#4c4981"})),V||(V=bt.createElement("path",{d:"m154.47 199.04-3.43.73s3.38 5.56 8.59 1.91-5.16-2.64-5.16-2.64z",opacity:.1})),A||(A=bt.createElement("path",{d:"M228.92 250.79s4.76 2.46 9.19 5.31c3.18 2 6.19 4.27 7.17 5.94 2.36 4 13.83 8.34 13.83 8.34l11.38 8.66c2.68.89 5.29 4.15 6.36 5.61.32.44.51.72.51.72l4.56-.59 2.4-3.12s.61-6.88-4.13-6.8a6.52 6.52 0 0 1-2.67-.69c-5.1-2.25-12.23-9.35-12.23-9.35s-12.12-15.14-15.75-15.64a6 6 0 0 1-1.14-.29c-3.69-1.29-9-6.05-9-6.05zm-47.01 43.77c1.21 7.27 6.72 21.17 8.49 24.07 2.2 3.59 3.35 10.78 3.35 10.78l.65 5a5.8 5.8 0 0 0 .72 1.94 10.57 10.57 0 0 0 .64 1l9.13-2.81s-.53-2.1-1.33-4.51-2-5.44-3.14-6.56c-2.23-2.19-2.56-9.92-2.56-9.92s-1.86-14.86-2.43-16.73a25.8 25.8 0 0 1-1-5.48c-.09-1-.15-2.14-.16-3.43a70.09 70.09 0 0 0-1.44-11l-10.65 1.93-.28 11.91a7.94 7.94 0 0 0 .01 3.81z",fill:"#efb7b9"})),q||(q=bt.createElement("path",{d:"M276.85 284.65c.32.44.51.72.51.72l4.56-.59 2.4-3.12s.61-6.88-4.13-6.8a6.52 6.52 0 0 1-2.67-.69c-.39 2.06 1.92 3.77 1.92 3.77s1 .7.73 3.93c-.15 2.2-2.1 2.67-3.32 2.78z",opacity:.1})),D||(D=bt.createElement("path",{d:"M276.35 285.07c.3 1.11 3.18 2.74 5.18 3.76 1 .5 1.75.85 1.9.93.46.23 2.88-2.46 3.21-4.63s6.1-8.92 6.1-8.92a24.2 24.2 0 0 0 2.14-8.45c.22-2.95-1-3.19-2.45-2.52a9.69 9.69 0 0 0-2.74 2.15 7.32 7.32 0 0 1-3.55 1.84 17.37 17.37 0 0 0-5.11 2.18c-1.4.9-2.76 2-3 3-.53 2.13 1.89 3.93 1.89 3.93s1 .7.73 3.93-4.33 2.7-4.3 2.8z",fill:"#444053"})),N||(N=bt.createElement("path",{d:"M281.53 288.83c1 .5 1.75.85 1.9.93.46.23 2.88-2.46 3.21-4.63s6.1-8.92 6.1-8.92a24.2 24.2 0 0 0 2.14-8.45c.22-2.95-1-3.19-2.45-2.52-.24 2.34-.83 6.89-2 9.26-1.46 2.82-7.31 11.88-8.9 14.33zm-86.32 47.34-.09.17a10.57 10.57 0 0 0 .64 1l9.13-2.81s-.53-2.1-1.33-4.51c-3.61-1-8.79 5.31-8.79 5.31z",opacity:.1})),_||(_=bt.createElement("path",{d:"M194.6 342.97s7.62 2.67 11 2.26c2.61-.31 2.72-1.52 2.54-4-.06-.8-.14-1.72-.19-2.78-.17-4.4-1.94-5.29-1.94-5.29-2.9-7.6-11.25 2.6-11.25 2.6l.43.84a9.2 9.2 0 0 0-.85 4.15 12.12 12.12 0 0 0 .26 2.22z",fill:"#444053"})),U||(U=bt.createElement("path",{d:"M194.6 342.97s7.62 2.67 11 2.26c2.61-.31 2.72-1.52 2.54-4a8.07 8.07 0 0 1-6.21 1.78 24.43 24.43 0 0 1-7.59-2.26 12.12 12.12 0 0 0 .26 2.22z",opacity:.1})),B||(B=bt.createElement("path",{d:"m156.83 158.15 3 13 .61 2.68 5.51.7 5.68.72 6.18-2.24s1.72-5.88.3-10.29a6.52 6.52 0 0 0-2.86-3.77 6.35 6.35 0 0 1-1.19-.92 5.22 5.22 0 0 1-1-1.43 5.91 5.91 0 0 1-.53-2.07c-.31-3.51 1.91-7.35 1.91-7.35s-13.1-4.47-12.08-1.58c.67 1.87-1.18 5.13-2.56 7.19-.75 1.11-1.36 1.88-1.36 1.88z",fill:"#efb7b9"})),R||(R=bt.createElement("circle",{cx:168.65,cy:141.76,r:11.38,opacity:.1})),W||(W=bt.createElement("circle",{cx:168.6,cy:141.34,r:11.38,fill:"#efb7b9"})),X||(X=bt.createElement("path",{d:"M157.65 201.41c.54 2.51 3 6.46 3 6.46l15.89 3.9 11.35-11.88v-.08c-.35-1.11-4.68-15.12-1.55-18.57 3.28-3.59 2-13.72 2-13.72s-5.67-6.52-6.82-8.1-8.51-2.82-8.51-2.82c.37.5.71 1 1 1.43a14 14 0 0 1 1.81 3.84 5.74 5.74 0 0 1-.15 4.17 4.58 4.58 0 0 0-.39 1.07c-1.24 5.43-6.9 4.67-9.15 4.13-.58-.14-.94-.26-.94-.26l-5.41.17-3.4.11s1.55 26.78 1.18 28.91a3.42 3.42 0 0 0 .09 1.24z",fill:"#f86d70"})),K||(K=bt.createElement("path",{d:"m156.47 172.64 9.85-1.29h-.18c-.58-.14-.93-.26-.93-.26l-5.42.17-3.39.11s.02.44.07 1.27zm11.05 36.94 4.27 1.04 6.73-.88 1.75-1.83-12.75 1.67zm7.11 1.74 1.93.47.79-.83-2.72.36z",fill:"#925978"})),J||(J=bt.createElement("path",{d:"M157.65 201.41c2.54.26 4.88.39 4.88.39l13.09-.49v-13.67a19.39 19.39 0 0 0-5.28-3.48c-2.28-.79-5-3.21-4.46-9.59 0-.37.06-.75.11-1.14a14.68 14.68 0 0 0 .12-2.15 11.5 11.5 0 0 0-3.63-8.42 1.73 1.73 0 0 0-.19-.17l-2.13-9.92a2.12 2.12 0 0 0-.43.06c-.75 1.11-1.36 1.88-1.36 1.88l-1.57 3.44 3 13-3.4.11s1.55 26.78 1.18 28.91a3.42 3.42 0 0 0 .07 1.24z",opacity:.1})),Q||(Q=bt.createElement("path",{d:"m162.1 201.89 13.09-.48v-13.68a19.51 19.51 0 0 0-5.27-3.48c-2.41-.84-5.28-3.48-4.35-10.73a11.87 11.87 0 0 0-3.48-10.63l-.2-.17-2.13-9.92a4.61 4.61 0 0 0-3.37 1.93 8.45 8.45 0 0 1-.79 1.16 2 2 0 0 1-2.63.78c-1.38-.61-7.32-3.12-8.65-.66s-1.58 17.11-1.58 17.11a11.19 11.19 0 0 1 3.85 6.33c.91 4.19 2.43 4.29 2.43 4.29l1.64 12s1.49 2.61.38 4.05",fill:"#444053"})),Y||(Y=bt.createElement("path",{d:"m155.6 155.89 2.23 6.68 4.26.37-.2-.17-2.13-9.92a4.61 4.61 0 0 0-3.37 1.93 8.45 8.45 0 0 1-.79 1.11z",fill:"#444053"})),$||($=bt.createElement("path",{d:"m123.47 143.58.29 2.18 9.45 1.34s.77-.58 2-1.37c-1-.23-5.7-1.25-8.16-2-.91-.28-1.51-.52-1.53-.68s.06-.19.21-.31c-1.4.53-2.26.84-2.26.84z",opacity:.1})),ee||(ee=bt.createElement("path",{d:"M112.39 157.69s10.71 8.13 17.35 9.44c0 0 9.34 2.76 13 6l4-15.42-2.45-1.69s-2.93 1.81-5.45 1.21-5.31-1-5.31-1a41.06 41.06 0 0 0-6.79-1.86c-1.8-.15-1.07-2.49.73-3.73a3.91 3.91 0 0 1 .75-.42 2.32 2.32 0 0 0 3 .68 6.85 6.85 0 0 0 1.76-1.64 22.83 22.83 0 0 0 2-3s-5.59-1.2-8.37-2.06c-.91-.28-1.51-.52-1.53-.68-.08-.64 5-2.66 5-2.66s-4.34-2.1-6.1-.57c0 0 1.14.85.22 1.69s-12 9.37-12 9.37-5.47 2.69.19 6.34z",fill:"#444053"})),te||(te=bt.createElement("path",{d:"m121.6 149.8 5.93.85a3.91 3.91 0 0 1 .75-.42 2.32 2.32 0 0 0 3 .68 6.85 6.85 0 0 0 1.76-1.64 23.44 23.44 0 0 0 1.62-2.53s-5.59-1.2-8.37-2.06z",opacity:.1})),ae||(ae=bt.createElement("path",{d:"m121.94 149.32 6.31.91a2.32 2.32 0 0 0 3 .68c1.81-1 3.76-4.66 3.76-4.66s-5.59-1.2-8.37-2.06z",fill:"#444053"})),le||(le=bt.createElement("path",{d:"m239.43 242.89-10.51 7.95s4.76 2.46 9.19 5.31c3.87-2.62 7.52-5 10.29-7.21-3.69-1.34-8.97-6.05-8.97-6.05zm-57.52 51.67a35.61 35.61 0 0 0 7.7-1.84s1.94-.42 4.82-1.38c-.09-1-.15-2.14-.16-3.43a70.09 70.09 0 0 0-1.44-11l-10.65 1.93-.28 11.91a7.94 7.94 0 0 0 .01 3.81z",opacity:.1})),ce||(ce=bt.createElement("path",{d:"M162.93 246.24c2.14 3.17 8 16.65 8 16.65a57.34 57.34 0 0 0 4.46 6.87c2.33 2.93 3.94 9.52 5.71 14.79s-.52 4.28-.27 7 10.26-.8 10.26-.8 20.45-4.5 26.7-17 31.21-23.82 36.26-30.85-1.43-4.13-1.18-7.94-2.63-7-2.63-7-9.42-2.66-10.95-4.51-9.05-6.48-9.05-6.48-7.09-3.07-8-4.14-9.31-4.39-11.88-5-5.09-4.3-5.09-4.3-1.59.21-3.94-2.07-12.21-4.24-12.21-4.24c-16.83 12.4-28.46 10.67-28.46 10.67l-.27 2.34c-8.95 11.66.4 32.84 2.54 36.01z",fill:"#444053"})),re||(re=bt.createElement("path",{d:"M160.39 210.21s14.55 4.79 28.74-12.93c-16.84 12.34-28.47 10.61-28.47 10.61zm25.04 8.27s19.54 28.21 20.75 29.24-19.72-29.59-20.75-29.24zm-9.03-2.16s13.53 21 13.26 23.84c0 0-13.06-20.19-13.26-23.84zm-7.88 5.77s2.5 11.75-1.26 18.41zm-5.2.68s-.16 10.17-1.3 12.26zm33.14-9.07 17.97 7.04-6.58.86-11.39-7.9zm-35.38-78.67c.9.6 1.65 1.55 2.72 1.69a4.28 4.28 0 0 0 2.21-.54c1.79-.78 3.81-1.38 5.67-.77 2.64.87 4.09 3.91 6.72 4.81a4.79 4.79 0 0 0 2.52.14 4.88 4.88 0 0 0 1.42-.58 4.57 4.57 0 0 0 2-2.84 5.88 5.88 0 0 0-2-5.54 12.27 12.27 0 0 0-5.59-2.54c-5.28-1.17-10.77-.78-16.16-.37a2.35 2.35 0 0 0-1.26.33c-.82.61-2.22 3.68-1.93 4.72.4 1.35 3.53.35 3.68 1.49z",opacity:.1})),ne||(ne=bt.createElement("path",{d:"M161.03 134.61c.9.59 1.64 1.55 2.72 1.69a4.23 4.23 0 0 0 2.2-.55c1.79-.78 3.82-1.38 5.67-.77 2.64.88 4.09 3.92 6.72 4.81a4.7 4.7 0 0 0 2.52.14 4.6 4.6 0 0 0 1.42-.57 4.68 4.68 0 0 0 2.06-2.84 5.91 5.91 0 0 0-2.05-5.55 12.31 12.31 0 0 0-5.59-2.53c-5.28-1.18-10.76-.78-16.16-.38a2.38 2.38 0 0 0-1.26.34c-.81.6-2.22 3.68-1.93 4.72.4 1.39 3.53.33 3.68 1.49z",fill:"#3f3d56"})),ie||(ie=bt.createElement("path",{d:"m230.6 142.98 1.72 6.95 2.23-1.35 12.12-7.31s9.18-.34 9.89-7.72-10.2-.07-10.78.49-1.9 1.55-1.9 1.55l-11.28 6.3z",fill:"#efb7b9"})),se||(se=bt.createElement("path",{d:"m230.6 142.98 1.72 6.95 2.23-1.35c-.49-3.14-1.26-6-2-6.7zm-59.82 45.44 2.47 14.5 14.62-3.03c-.35-1.11-4.68-15.12-1.55-18.57 3.28-3.59 2-13.72 2-13.72s-5.67-6.52-6.82-8.1-8.51-2.82-8.51-2.82a5.91 5.91 0 0 1-.53-2.07 8.32 8.32 0 0 0-.56 1.55c0 2.64 1.07 4.46 3.9 5.79.25.12.51.23.79.34.44.18.93.35 1.45.51l.24.07c4.71 1.4 5.73 4.22 5.73 4.22a10.79 10.79 0 0 1 2.14 7.6c-.46 4.45-15.37 13.73-15.37 13.73z",opacity:.1})),oe||(oe=bt.createElement("path",{d:"m171.6 188.31 2.47 14.49 16.53-3.44s-.5-5.47-1.65-7.69-.92-10.89-.92-10.89c7-7.54 3.32-13.67 3.32-13.67s20.57-3.34 20.92-4 7.21-4.32 7.21-4.32 7.45-1.91 8.46-3a9 9 0 0 1 1.22-1.11 3.21 3.21 0 0 1 .4-.26l.55 4.75h.25a6.77 6.77 0 0 0 3.24-1.28c1.7-1.3-.45-15.55-2.1-16.05a1.9 1.9 0 0 0-.95 0 10.74 10.74 0 0 0-3.55 1.92l-.29.23-.1.09s-9.31 3.65-11.17 5.33-16.34 3.81-16.34 3.81-6.49 1.54-7.33.61-10.75-2.45-11.58-1-3.13 1.19-3.13 1.19c-1.63-1.88-2.76-1.15-3.45-.07a7.55 7.55 0 0 0-.88 2.09c0 2.88 1.27 4.77 4.69 6.13.52.2 1.08.4 1.69.58 4.72 1.4 5.73 4.22 5.73 4.22a10.77 10.77 0 0 1 2.15 7.6c-.45 4.46-15.39 13.74-15.39 13.74z",fill:"#444053"})),me||(me=bt.createElement("path",{d:"M230.6 141.89a1.54 1.54 0 0 1 .53.06c1.65.5 3.79 14.76 2.09 16.06a6.7 6.7 0 0 1-2.89 1.25h-.25l-.55-4.75a3.21 3.21 0 0 0-.4.26v-.2a12.34 12.34 0 0 0-2.35-10.55z",opacity:.1})),de||(de=bt.createElement("path",{d:"m229.52 154.49.55 4.75a6.65 6.65 0 0 0 3.53-1.35c1.7-1.3-.45-15.55-2.1-16.05-1.3-.4-3.59 1.22-4.5 1.91a12.36 12.36 0 0 1 2.52 10.74zm-52.06 7.65 2.37-2.22-6.18-6a7.55 7.55 0 0 0-.88 2.09c.02 2.88 1.27 4.77 4.69 6.13z",fill:"#444053"})),fe||(fe=bt.createElement("path",{d:"M160.92 133.76c.9.59 1.64 1.55 2.72 1.69a4.23 4.23 0 0 0 2.2-.55c1.79-.78 3.82-1.38 5.67-.77 2.64.88 4.09 3.92 6.72 4.81a4.7 4.7 0 0 0 2.52.14 4.57 4.57 0 0 0 3.48-3.41 4.55 4.55 0 0 0 .11-1.27 4.74 4.74 0 0 1 0 2.12 4.64 4.64 0 0 1-2.06 2.84 4.5 4.5 0 0 1-1.42.57 4.66 4.66 0 0 1-2.51-.14c-2.64-.89-4.09-3.93-6.73-4.81-1.85-.61-3.88 0-5.67.77a4.23 4.23 0 0 1-2.2.55c-1.07-.14-1.82-1.1-2.72-1.69-.15-1.16-3.28-.1-3.67-1.49a1.66 1.66 0 0 1 0-.64c.62 1.07 3.41.19 3.56 1.28zm9.68 32.73s-1.31 3.68.36 4.92c0 0-1.83-4.87-2.89-4.76",opacity:.1})),pe||(pe=bt.createElement("path",{d:"M252.05 130.65s-8.45 7.31-2.34 8.49 2.34-8.49 2.34-8.49z",fill:"#efb7b9"})),he||(he=bt.createElement("path",{d:"M821.44 333.14h-263v232.94c0 53.26-40.75 90-90.62 90a100.13 100.13 0 0 1-34.82-6.11 97.54 97.54 0 0 0 47.82 12.11c49.87 0 90.62-36.72 90.62-90V339.14h250zm-263.02-52.09h13v-63.01h250.02v-6H558.42v69.01zm319.01-118.99v404c0 53.26-40.75 90-90.62 90a100.13 100.13 0 0 1-34.82-6.11 97.54 97.54 0 0 0 47.82 12.11c49.87 0 90.62-36.72 90.62-90v-410z",opacity:.1})),ye||(ye=bt.createElement("path",{d:"M579.83 69.89c6.45 13.33 17 28.49 28.93 22.7s20.84-30.35 14.39-43.7-21.39-19.42-33.35-13.63-16.43 21.32-9.97 34.63z",fill:"#a4a4a4"})),ue||(ue=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a3.57 3.57 0 0 0-.28-.49 6.17 6.17 0 0 1-.89-2.48 9 9 0 0 1 .11-3.09l-6.35-.42s2.47 2.1 2.18 3.2a.63.63 0 0 1-.29.38 1 1 0 0 1-.42.18l-.48.14c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",fill:"#a4a4a4"})),Ee||(Ee=bt.createElement("path",{d:"m601.28 95.82 4.48.62a5.58 5.58 0 0 1-.13-.69c-1.14-.05-2.93-.2-4.06-.31a.63.63 0 0 1-.29.38z",fill:"#444053"})),xe||(xe=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a7.2 7.2 0 0 1-2.75.11 6.09 6.09 0 0 1-3.67-2.69c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",fill:"#a4a4a4"})),ze||(ze=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a7.2 7.2 0 0 1-2.75.11 6.09 6.09 0 0 1-3.67-2.69c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",opacity:.1})),ve||(ve=bt.createElement("path",{d:"M601.97 36.66s7.1-.86 9.11 3.87a5.71 5.71 0 0 0-2.55.15 3.62 3.62 0 0 1-1.66.32 9.52 9.52 0 0 0-4.9-4.34z",fill:"#fff",opacity:.1})),Me||(Me=bt.createElement("path",{d:"M609.6 133.04a2.51 2.51 0 0 0 .4-.4 5.41 5.41 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 9.27 9.27 0 0 1 2-.6 8 8 0 0 1 1-.11l-.9-4.3v-.06l-.39-1.87a13.58 13.58 0 0 1-.9 1.57c-.46.7-1 1.37-1.6 1.38a.71.71 0 0 1-.45-.17 1.36 1.36 0 0 1-.28-.36c-.1-.16-.18-.3-.27-.43-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",fill:"#a4a4a4"})),ge||(ge=bt.createElement("path",{d:"M611.6 131.44a5.33 5.33 0 0 1 .63-.32c-.22-.93-.49-2.33-.68-3.43v-.23c0-.08 0-.23-.06-.33a.71.71 0 0 1-.45-.17l.1.67v.27z",fill:"#444053"})),ke||(ke=bt.createElement("path",{d:"M609.6 133.04a7.21 7.21 0 0 1-.84-2.62 5.68 5.68 0 0 1 .19-1.66c.05-.16.09-.32.15-.47a4.87 4.87 0 0 1 1.26-2.12c-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",fill:"#a4a4a4"})),be||(be=bt.createElement("path",{d:"M609.6 133.04a7.21 7.21 0 0 1-.84-2.62 5.68 5.68 0 0 1 .19-1.66c.05-.16.09-.32.15-.47a4.87 4.87 0 0 1 1.26-2.12c-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",opacity:.1})),we||(we=bt.createElement("path",{d:"M566.35 91.89c5.4 3.47 11.63 6.83 17.55 8.61 4.55 1.38 8.91 1.82 12.56.66a11.51 11.51 0 0 0 4.26-2.46 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-2.34-7-6.22-13.2-11.33-16.48-12.46-8-28.38-5.4-35.56 5.79s-2.89 26.73 9.57 34.73z",fill:"#a4a4a4"})),He||(He=bt.createElement("path",{d:"M566.35 91.89c5.4 3.47 11.63 6.83 17.55 8.61 4.55 1.38 8.91 1.82 12.56.66a11.51 11.51 0 0 0 4.26-2.46 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-2.34-7-6.22-13.2-11.33-16.48-12.46-8-28.38-5.4-35.56 5.79s-2.89 26.73 9.57 34.73z",opacity:.1})),Oe||(Oe=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a4.27 4.27 0 0 0-.49-.28 5.58 5.58 0 0 1-1.59-1.13c-.16-.16-.32-.33-.47-.51a9.36 9.36 0 0 1-1.12-1.77 7.42 7.42 0 0 1-.39-.93l-5.64 3a12.79 12.79 0 0 1 1.77.43c.81.26 1.61.64 1.76 1.16a.63.63 0 0 1 0 .48 1.19 1.19 0 0 1-.27.37 4.94 4.94 0 0 0-.33.37c-1.14 1.33-.09 1.68-.09 1.68z",fill:"#a4a4a4"})),Ge||(Ge=bt.createElement("path",{d:"m598.18 102.89 4.13-1.82c-.16-.16-.32-.33-.47-.51-1 .54-2.59 1.35-3.62 1.85a.63.63 0 0 1-.04.48z",fill:"#444053"})),Te||(Te=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a6.91 6.91 0 0 1-2.29 1.52 6.09 6.09 0 0 1-4.52-.37c-1.1 1.37-.05 1.72-.05 1.72z",fill:"#a4a4a4"})),Le||(Le=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a6.91 6.91 0 0 1-2.29 1.52 6.09 6.09 0 0 1-4.52-.37c-1.1 1.37-.05 1.72-.05 1.72z",opacity:.1})),Ce||(Ce=bt.createElement("path",{d:"M567.88 52.01s5.61-4.43 9.79-1.45a5.76 5.76 0 0 0-2.09 1.46 3.63 3.63 0 0 1-1.26 1.14 9.53 9.53 0 0 0-6.44-1.15z",fill:"#fff",opacity:.1})),Ie||(Ie=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"m628.16 98.66-1.3-6.23a12 12 0 0 1-.9 1.57 11.26 11.26 0 0 0 1.2 4.78 7 7 0 0 1 1-.12z"}),bt.createElement("path",{d:"M622.6 101.3a3 3 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.21 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 7 7 0 0 1 1-.12l-1.3-6.23a12 12 0 0 1-.9 1.57c-.46.7-1.05 1.38-1.6 1.39a.73.73 0 0 1-.44-.18 1.23 1.23 0 0 1-.31-.32c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1.03 2.1 2.64.73z"}),bt.createElement("path",{d:"M624.52 99.69a5.33 5.33 0 0 1 .63-.32c-.26-1.09-.58-2.86-.79-4a.73.73 0 0 1-.44-.18zm-1.92 1.61a7.33 7.33 0 0 1-.84-2.63 6.14 6.14 0 0 1 1.61-4.25c-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1 2.14 2.61.77z"}),bt.createElement("path",{d:"M622.6 101.3a7.33 7.33 0 0 1-.84-2.63 6.14 6.14 0 0 1 1.61-4.25c-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1 2.14 2.61.77z",opacity:.1}))),Pe||(Pe=bt.createElement("path",{d:"M621.78 100.06a2.51 2.51 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 7 7 0 0 1 1-.12l-1.3-6.23a12.74 12.74 0 0 1-.9 1.57c-.46.7-1 1.38-1.6 1.38a.66.66 0 0 1-.44-.17 1.38 1.38 0 0 1-.29-.36c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s1.01 2.14 2.62.76z",fill:"#a4a4a4"})),je||(je=bt.createElement("path",{d:"M623.7 98.46a5.33 5.33 0 0 1 .63-.32c-.26-1.09-.58-2.86-.79-4a.66.66 0 0 1-.44-.17z",fill:"#444053"})),Ze||(Ze=bt.createElement("path",{d:"M621.78 100.06a7.21 7.21 0 0 1-.84-2.62 6.14 6.14 0 0 1 1.66-4.25c-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s.95 2.14 2.56.76z",fill:"#a4a4a4"})),Fe||(Fe=bt.createElement("path",{d:"M621.78 100.06a7.21 7.21 0 0 1-.84-2.62 6.14 6.14 0 0 1 1.66-4.25c-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s.95 2.14 2.56.76z",opacity:.1})),Se||(Se=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"M616.6 81.89a11.41 11.41 0 0 0 4.62 1.71 8.39 8.39 0 0 1 .46-.9l-5.88-2.44a12 12 0 0 1 .8 1.63z"}),bt.createElement("path",{d:"M618.6 90.52s2.33.39 2.11-1.72a3.24 3.24 0 0 0-.11-.56 5.53 5.53 0 0 1-.14-1.93 5.36 5.36 0 0 1 .1-.7 9.63 9.63 0 0 1 1.1-2.89l-5.88-2.44a12 12 0 0 1 .82 1.61c.32.78.54 1.65.24 2.1a.69.69 0 0 1-.4.27 1.06 1.06 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.73 2.73 4.48 5.26 4.48 5.26z"}),bt.createElement("path",{d:"m616.4 84.28 4 2a5.36 5.36 0 0 1 .1-.7c-1.06-.41-2.7-1.14-3.74-1.6a.69.69 0 0 1-.36.3zm2.2 6.24s2.33.39 2.11-1.72a7.2 7.2 0 0 1-2.64-.78 6.16 6.16 0 0 1-2.61-3.73c-1.76 0-1.36 1-1.36 1-.71 2.7 4.5 5.23 4.5 5.23z"}),bt.createElement("path",{d:"M618.6 90.52s2.33.39 2.11-1.72a7.2 7.2 0 0 1-2.64-.78 6.16 6.16 0 0 1-2.61-3.73c-1.76 0-1.36 1-1.36 1-.71 2.7 4.5 5.23 4.5 5.23z",opacity:.1}))),Ve||(Ve=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a3.07 3.07 0 0 0-.11-.56 5.59 5.59 0 0 1-.14-1.94 5.21 5.21 0 0 1 .1-.69 8.17 8.17 0 0 1 .64-2 8.39 8.39 0 0 1 .46-.9l-5.88-2.45a12 12 0 0 1 .8 1.63c.32.79.54 1.65.24 2.11a.72.72 0 0 1-.4.26 1.23 1.23 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.69 2.73 4.5 5.25 4.5 5.25z",fill:"#a4a4a4"})),Ae||(Ae=bt.createElement("path",{d:"m615.99 83.66 4 2a5.21 5.21 0 0 1 .1-.69c-1.06-.41-2.7-1.14-3.74-1.6a.72.72 0 0 1-.36.29z",fill:"#444053"})),qe||(qe=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a7.44 7.44 0 0 1-2.64-.79 6.14 6.14 0 0 1-2.61-3.72c-1.76 0-1.36 1-1.36 1-.69 2.7 4.5 5.22 4.5 5.22z",fill:"#a4a4a4"})),De||(De=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a7.44 7.44 0 0 1-2.64-.79 6.14 6.14 0 0 1-2.61-3.72c-1.76 0-1.36 1-1.36 1-.69 2.7 4.5 5.22 4.5 5.22z",opacity:.1})),Ne||(Ne=bt.createElement("path",{d:"M595.09 117.28a12.41 12.41 0 0 1 .91-1.56c.48-.7 1.07-1.37 1.61-1.37a.63.63 0 0 1 .45.18 1.3 1.3 0 0 1 .28.35c.09.17.18.31.26.44 1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a3.68 3.68 0 0 0-.41.39 6.39 6.39 0 0 1-2.16 1.51 9 9 0 0 1-2 .57 6.36 6.36 0 0 1-1 .11z",fill:"#a4a4a4"})),_e||(_e=bt.createElement("path",{d:"M597.6 114.35a.63.63 0 0 1 .45.18l-.56-4.49a5.25 5.25 0 0 1-.63.31c.26 1.1.56 2.87.74 4z",fill:"#444053"})),Ue||(Ue=bt.createElement("path",{d:"M598.6 115.32c1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a7 7 0 0 1 .8 2.63 6.06 6.06 0 0 1-1.64 4.24z",fill:"#a4a4a4"})),Be||(Be=bt.createElement("path",{d:"M598.6 115.32c1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a7 7 0 0 1 .8 2.63 6.06 6.06 0 0 1-1.64 4.24z",opacity:.1})),Re||(Re=bt.createElement("path",{d:"M592.96 125.7a19.55 19.55 0 0 0 3-10c.48-.7 1.07-1.37 1.61-1.37a.63.63 0 0 1 .45.18 1.3 1.3 0 0 1 .28.35c.09.17.18.31.26.44 1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a3.68 3.68 0 0 0-.41.39 6.39 6.39 0 0 1-2.16 1.51 9 9 0 0 1-2 .57 13.44 13.44 0 0 0-1.85-2.78 22.81 22.81 0 0 0-8.9-5.87c1.4 8.87 4.01 18.21 8.88 23.45zm14.03 3.07a17.36 17.36 0 0 0 2.15-.48 18.83 18.83 0 0 0 1.91-.66l.41-.17c.53-.23 1.07-.48 1.61-.76s.81-.42 1.22-.65c7.61-4.39 15-13.22 18.3-22.18a29.11 29.11 0 0 0 1.79-7.62 20.49 20.49 0 0 0-.06-4.15 29.29 29.29 0 0 0-3.72-11.21c-.22-.37-.43-.72-.66-1.06-5-7.72-13.41-12.38-22.35-11.44 1.94 5.61 4.7 10.39 8.59 12.88.32.79.54 1.65.24 2.11a.72.72 0 0 1-.4.26 1.23 1.23 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.69 2.65 4.5 5.18 4.5 5.18s2.33.39 2.11-1.71a3.07 3.07 0 0 0-.11-.56 5.59 5.59 0 0 1-.14-1.94 5.21 5.21 0 0 1 .1-.69 8.17 8.17 0 0 1 .64-2 12.85 12.85 0 0 0 3.34 0 17.74 17.74 0 0 0 4.56-1.24c-.21.33-.4.66-.58 1a19.62 19.62 0 0 0-3 10c-.46.7-1 1.38-1.6 1.38a.66.66 0 0 1-.44-.17 1.38 1.38 0 0 1-.29-.36c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s1 2.14 2.61.76a2.51 2.51 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 12.74 12.74 0 0 0 1.87 2.77l.4.43-.14.13a79 79 0 0 0-8.87 9.44c-.81 1-1.59 2.1-2.28 3.18q-.74 1.13-1.38 2.25a19.67 19.67 0 0 0-2.94 10c-.46.7-1 1.37-1.6 1.38a.71.71 0 0 1-.45-.17 1.36 1.36 0 0 1-.28-.36c-.1-.16-.18-.3-.27-.43-1-1.44-1.63-.54-1.63-.54-1.14.5-1.58 1.86-1.75 3.23z",opacity:.1})),We||(We=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"M618.38 78.75a3.6 3.6 0 0 0 1.68.23 5.83 5.83 0 0 1 2.46.68c-.38-5.12-7.38-6.6-7.38-6.6a9.5 9.5 0 0 1 3.24 5.69zm-34.92 18.64c.13 1 .27 2.09.44 3.15 4.55 1.38 8.91 1.82 12.56.66.81.26 1.61.64 1.76 1.16a.63.63 0 0 1 0 .48 1.19 1.19 0 0 1-.27.37 4.94 4.94 0 0 0-.33.37c-1.12 1.37-.07 1.72-.07 1.72 1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a4.27 4.27 0 0 0-.49-.28 5.58 5.58 0 0 1-1.59-1.13c-.16-.16-.32-.33-.47-.51a9.36 9.36 0 0 1-1.12-1.77 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-13 1.84-22.02 15-20.23 29.5zm12.14 29.07a11.4 11.4 0 0 0 4.61 1.73 7.28 7.28 0 0 1 .47-.9l-5.9-2.4a13.86 13.86 0 0 1 .82 1.57z"}),bt.createElement("path",{d:"M597.6 135.08s2.34.4 2.11-1.71a3 3 0 0 0-.1-.56 5.61 5.61 0 0 1-.14-1.94 5 5 0 0 1 .09-.69 9 9 0 0 1 .64-2 7.28 7.28 0 0 1 .47-.9l-5.89-2.39a13.86 13.86 0 0 1 .8 1.62c.31.79.53 1.66.23 2.11a.66.66 0 0 1-.39.27 1.32 1.32 0 0 1-.46 0 4.53 4.53 0 0 0-.5 0c-1.77 0-1.37 1-1.37 1-.68 2.67 4.51 5.19 4.51 5.19z"}),bt.createElement("path",{d:"m595.42 128.89 4 2q0-.36.09-.69c-1.05-.41-2.7-1.14-3.74-1.6a.67.67 0 0 1-.35.29zm2.18 6.19s2.33.39 2.11-1.72a7.1 7.1 0 0 1-2.64-.78 6.1 6.1 0 0 1-2.61-3.72c-1.77 0-1.37 1-1.37 1-.69 2.7 4.51 5.22 4.51 5.22z"}),bt.createElement("path",{d:"M597.6 135.08s2.33.39 2.11-1.72a7.1 7.1 0 0 1-2.64-.78 6.1 6.1 0 0 1-2.61-3.72c-1.77 0-1.37 1-1.37 1-.69 2.7 4.51 5.22 4.51 5.22zm20.78-56.33a3.6 3.6 0 0 0 1.68.23 5.83 5.83 0 0 1 2.46.68c-.38-5.12-7.38-6.6-7.38-6.6a9.5 9.5 0 0 1 3.24 5.69z",opacity:.1}))),Xe||(Xe=bt.createElement("path",{d:"M584.9 98.21c1.81 14.7 6.88 32.44 20.07 30.81s29.52-22 27.71-36.71-14-25.28-27.18-23.65-22.42 14.86-20.6 29.55z",fill:"#a4a4a4"})),Ke||(Ke=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a4.44 4.44 0 0 0-.1-.56 5.37 5.37 0 0 1-.15-1.94c0-.23.06-.47.1-.69a9 9 0 0 1 1.11-2.89l-5.88-2.45s1.66 2.79 1 3.74a.69.69 0 0 1-.4.27 1.54 1.54 0 0 1-.45 0h-.5c-1.77 0-1.37 1-1.37 1-.66 2.72 4.53 5.23 4.53 5.23z",fill:"#a4a4a4"})),Je||(Je=bt.createElement("path",{d:"m596.85 129.67 4 2c0-.23.06-.47.1-.69-1.06-.41-2.7-1.14-3.74-1.6a.69.69 0 0 1-.36.29z",fill:"#444053"})),Qe||(Qe=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a7 7 0 0 1-2.64-.79 6.06 6.06 0 0 1-2.6-3.72c-1.77 0-1.37 1-1.37 1-.69 2.71 4.5 5.22 4.5 5.22z",fill:"#a4a4a4"})),Ye||(Ye=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a7 7 0 0 1-2.64-.79 6.06 6.06 0 0 1-2.6-3.72c-1.77 0-1.37 1-1.37 1-.69 2.71 4.5 5.22 4.5 5.22z",opacity:.1})),$e||($e=bt.createElement("path",{d:"M616.6 73.89s7 1.48 7.38 6.6a5.74 5.74 0 0 0-2.47-.67 3.64 3.64 0 0 1-1.67-.24 9.57 9.57 0 0 0-3.24-5.69z",fill:"#fff",opacity:.1})),et||(et=bt.createElement("path",{d:"M599.39 130.99a4.26 4.26 0 0 1 3.79 5.24c-.88 2.95-4.5 3.88-6.86 5.85s-3.49 5.12-3.78 8.19a20.08 20.08 0 0 0 5.77 15.88c2.12 2.09 4.68 3.69 6.77 5.81a34.58 34.58 0 0 1 5.85 8.92 20.88 20.88 0 0 1 2.59 7.5c.35 4.21-1.77 8.24-4.3 11.62s-5.56 6.44-7.52 10.18a21.39 21.39 0 0 0-1.23 16.77 2.17 2.17 0 0 0 .71 1.12.79.79 0 0 0 1.16-.25",fill:"none",stroke:"#444053",strokeMiterlimit:10})),tt||(tt=bt.createElement("path",{d:"M611.68 130.25a2 2 0 0 1 .09 2.54 3.09 3.09 0 0 1-2.44 1.13c-1.13 0-2.39-.35-3.32.31a2.87 2.87 0 0 0-1 2.17 11.07 11.07 0 0 1-.25 2.45 4.88 4.88 0 0 1-1.08 1.76 5.41 5.41 0 0 1-2 1.46c-1.67.65-3.6.06-5.31.6-2.25.71-3.46 3.14-4.14 5.4a15.55 15.55 0 0 0-.49 8.38 29 29 0 0 0 2.27 5.14 11.63 11.63 0 0 1 1.48 5.36 4.92 4.92 0 0 1-2.82 4.5m16.19 23.35c-2.69 3.58-3.71 9.3-8.11 10.17-2.27.45-4.52-.72-6.55-1.84-4.73-2.64-9.6-5.3-15-6.17s-11.36.38-14.9 4.49c-2.41 2.82-3.4 6.6-5.52 9.64a19.78 19.78 0 0 1-11.2 7.36 45.83 45.83 0 0 1-13.58 1.16c-1.69-.05-3.53-.18-4.79-1.3a11.66 11.66 0 0 1-2-3.05c-2.17-3.64-6.46-5.64-10.69-5.91s-8.41 1-12.32 2.61c-2 .82-4 1.76-6.14 1.55-3-.3-5.21-2.72-7.06-5.05a100 100 0 0 1-12.13-19.74",fill:"none",stroke:"#444053",strokeMiterlimit:10})),at||(at=bt.createElement("path",{d:"M497.91 603.42c1.07-3.89 1.77-7.31 1.77-7.31a15.3 15.3 0 0 1 2-7.41l.05-1.07.3-7.89a26.56 26.56 0 0 0-1.83-4.21c-1.33-2.53.45-11.57.45-11.57s5.76-12.61 4.79-20.78 12.2-35.68 12.2-35.68a35.38 35.38 0 0 0-.83-8 6.81 6.81 0 0 1-.09-1.68v-.14c.39-5.35 5-15.24 5-15.24l.17-19.16s-2.27-11.4 2.73-26.39c1.74-5.23 2.89-9.42 3.64-12.66.09-.37.17-.72.24-1.06-9-1.74-15.92-3.16-15.92-3.16s6.11-21.83 9.82-25.55 7-15.74 7-15.74 2.45-15.49-.37-20.15-2.9-12.57-2.9-12.57-6.64-5.22-7.41-7.46-2-7.25-1.9-9.87 1-4.93.81-6.31 2.25-6.54 1.2-9.06a7 7 0 0 1-.36-2.41v-.07a33.5 33.5 0 0 1 .85-6.44 18.24 18.24 0 0 1 6.9-3.35l.17-.59.44-1.53c.24-.15.47-.27.69-.38v-.56l.15-2.24-.88-5.07c-1.76-8.82 10-9.68 10-9.68a6.14 6.14 0 0 1 3.42-2.77c2.38-.74-.12 13.17-1.25 14-.85.64-3.57 4.93-4.88 7l-.22.35a4.89 4.89 0 0 1 .52.58l-.56 3-.09.46a12.63 12.63 0 0 1 1.74 3.25s-2.23 2.26-1.9 4.9a15.46 15.46 0 0 1-.94 6c.13-.13 1.7-1.7 3.18-1.25s5.63 1.87 5.63 1.87 3.11.68 2.8 1.35 2 3.8 2 3.8L555 316c.09-.24.19-.47.27-.72a19.67 19.67 0 0 0 .87-3.46 19.17 19.17 0 0 1-2.66-1 5.78 5.78 0 0 1-2.27-1.58 9 9 0 0 1-1.21-3.68c-.58-2.48-1.92-4.71-2.86-7.08a22.69 22.69 0 0 1-1.2-12.57 8.26 8.26 0 0 1 1.44-3.61c1.44-1.84 4-2.51 5.83-3.94s3.13-3.7 5.28-4.75c1.95-.95 4.28-.74 6.41-.3a34.3 34.3 0 0 1 11.76 4.79c1.2.77 2.51 1.67 3.93 1.46a5.29 5.29 0 0 0 3-2v-.11l.09-.11a14.85 14.85 0 0 1 1.07 6.35c0 .33 0 .67-.08 1v.35a1.43 1.43 0 0 0 0 .29 1.73 1.73 0 0 0 0 .45 3.23 3.23 0 0 0 .74 1.17 6 6 0 0 1 .65 1c0-.12-.06-.23-.1-.35a5 5 0 0 1 .77 2.69 2.68 2.68 0 0 1-.7 1.87 8.69 8.69 0 0 1-1.42 1.05 16 16 0 0 1-8.32 16.39c-.1.23-.21.47-.31.71a20.11 20.11 0 0 0-1.88 9.12c0 .22 0 .44.08.67a4.39 4.39 0 0 1 .28.36s13.88.67 17.27-2.17 8 7.56 8 7.56 4.95 1.15 6 .23 6.84.12 6.84.12a12.53 12.53 0 0 1 8.8-2.83 25.71 25.71 0 0 1 6.51-3.3h.16a7.19 7.19 0 0 1 3.14-.28s7.05-5.38 9.16-8.33 12-13.84 12.08-13.88l.05-.55.17-1.63a6.09 6.09 0 0 0 .85.11c.06-.16.13-.35.22-.56a29.77 29.77 0 0 1 2.19-4.55s.08-2.07-.51-2.61.57-8.09.57-8.09 6.7-14.15 11.81-3.2c0 0 10.15 7.36 1.09 15.12 0 0-3.55 1.55-4.1 2.87-.36.86-1.64 3.25-2.49 4.83-.15.26-.28.5-.39.71l.1.09-.18 1.34-.08.52c1.62 1 2.7 2 2.4 2.67a15.36 15.36 0 0 0-1.14 3.68s-12.68 14.68-14.5 21.1c0 0-33.19 18-43.91 19l1.48 9.71s.34 5.81.12 7.87.84 11.49.84 11.49 1.32 13.84 2.81 15.83.89 10.24.89 10.24a69.1 69.1 0 0 0 1.69 11.79c1.36 5.3 0 11.73 0 11.73s4.93 12.61-7.69 3.7c0 0-6.35-.64-13.66-1.17v.74c0 .94 0 2-.08 3-.17 7.11-.51 16.9-1.11 24.29-1.08 13.06-6.06 38.8-6.06 38.8l-.5 13a16.94 16.94 0 0 1 .23 3.73 24.16 24.16 0 0 1-4 12.89l-1.53 8.59s-2.56 5.62-2.74 9a4.28 4.28 0 0 0 .07.83 6.08 6.08 0 0 1 .06 1.34c0 3.94-2.75 13.28-2.75 13.28s-.51 9.5-2 10c-1.23.43 1.42 5.54 2.21 7a2.61 2.61 0 0 0 .06-.27l.17.3a6.73 6.73 0 0 1 .35 2.42 3.46 3.46 0 0 1-1.71 3.28c-2.77 1.54-4.27 2.87-2 3.5.87.25 1.8.34 2.49.63 0-.11.09-.22.13-.32a1.52 1.52 0 0 1 .87 1.71 7 7 0 0 1-1 3.19 34.14 34.14 0 0 1-4.12 6.87l-1.09-.16a5.33 5.33 0 0 0 .59 1.2 4.63 4.63 0 0 0 1.55 1.49 5 5 0 0 0 1.92.74 5.49 5.49 0 0 1 4 2.12c1.34 1.88 2.14 4.42-.75 6.51L564 612.44s-17.6 1.6-16.52-2.29 1.78-7.31 1.78-7.31A15.54 15.54 0 0 1 551 596a7.2 7.2 0 0 1 .66-1l-.62-.1s-.94-8.72-2.59-10.44c-.38-.4-.46-.7-.35-.92-.16-.48.29-.74.87-.87 0 .11.08.23.11.34a9.1 9.1 0 0 1 1.71-.12s.75-4.52-1-6.25a1.75 1.75 0 0 1-.31-1.36 7.42 7.42 0 0 1 .27-1.85l.06.11c1.09-4.09 4.49-10.52 4.49-10.52s.31-4.13-.77-5.82 1-22.45 1-22.45 0-10.07 1.42-14.71-1.18-10.25-1.18-10.25v-.3a.22.22 0 0 0 0-.07l.23-1.58v.1c.39-2.65 1.12-7.45 1.6-9.67.69-3.14.57-18.32.57-18.32l-2.32-6.58-5 11-5.38 14.63s-2.52 3.05-2.7 6.23v.47a8.26 8.26 0 0 1 0 1 8.84 8.84 0 0 1-1.68 5.25s-1.55 7-3.61 8.69-2.19 5.15-2.19 5.15-2.82 10.1-4 11.85c-1 1.47-1.23 5.62-1.27 6.89v.37s-.48 3.63-.58 6.7v1.09-.08a11.11 11.11 0 0 0 .2 2.49v.14-.51a25.88 25.88 0 0 1 .49 6.38c-.08 3.66-.8 8-3.12 10.44-4 4.26-6.41 3.62-6.41 3.62s1.64 5.58 3.87 6.77a1 1 0 0 1 .24.16c0-.1 0-.21.07-.32a2.69 2.69 0 0 1 .59 2.08c.07 2.43-1.61 6.31-3.14 8.06a4.51 4.51 0 0 1-2 1.05l.35.24c.28.16.53.29.77.4a3.66 3.66 0 0 0 1.15.34 5.43 5.43 0 0 1 4 2.12c1.35 1.88 2.15 4.42-.74 6.51l-10.32 3.12s-17.61 1.61-16.53-2.28z",transform:"translate(-50.4 -87.11)",fill:"url(#b)"})),lt||(lt=bt.createElement("path",{d:"m514.12 525.39 10-3.13c2.8-2.1 2-4.63.73-6.52a5.22 5.22 0 0 0-3.82-2.11 4.73 4.73 0 0 1-1.86-.74 4.45 4.45 0 0 1-1.5-1.49 7.27 7.27 0 0 1-1-3.85s-10.7-3.58-13.78-.53a8.15 8.15 0 0 0-1.38 1.87 16 16 0 0 0-1.65 6.92s-.68 3.41-1.72 7.31 15.98 2.27 15.98 2.27zm-48.03-6.71 10-3.13c2.8-2.1 2-4.63.73-6.51a5.18 5.18 0 0 0-3.83-2.11 3.91 3.91 0 0 1-1.11-.35 5 5 0 0 1-.74-.4c-2.71-1.62-2.54-5.29-2.54-5.29s-10.69-3.58-13.77-.53a7.9 7.9 0 0 0-1.09 1.37 15.63 15.63 0 0 0-1.94 7.42s-.69 3.42-1.73 7.31 16.02 2.22 16.02 2.22z",fill:"#2d293d"})),ct||(ct=bt.createElement("path",{d:"M502.89 507.02a8.15 8.15 0 0 0-1.38 1.87l16.14 2.5a7.27 7.27 0 0 1-1-3.85s-10.68-3.57-13.76-.52zm-49.11-5.34-.12 3c2.36 4.26 14.59 3.82 18.21 1.87a5 5 0 0 1-.74-.4c-2.7-1.59-2.53-5.26-2.53-5.26s-10.69-3.58-13.77-.53a7.9 7.9 0 0 0-1.05 1.32z",opacity:.1})),rt||(rt=bt.createElement("path",{d:"M452.35 488.52a26.62 26.62 0 0 1 1.77 4.21l-.42 10.88c2.58 4.65 17 3.69 19 1.28s4.34-8.8 2.18-10-3.74-6.77-3.74-6.77 2.32.64 6.21-3.62 3.16-14.09 2.56-16.46.4-10.19.4-10.19.07-5.52 1.24-7.26 3.91-11.86 3.91-11.86.13-3.44 2.13-5.16 3.5-8.69 3.5-8.69a9 9 0 0 0 1.61-5.87c-.28-3.46 2.62-7.07 2.62-7.07l5.25-14.7 4.84-11 2.19 6.65s.1 15.18-.57 18.33-1.82 11.52-1.82 11.52 2.54 5.61 1.12 10.25-1.39 14.7-1.39 14.7-2 20.76-1 22.45.74 5.82.74 5.82-6.12 11.91-4.39 13.63 1 6.25 1 6.25-3.85-.15-2.26 1.57 2.57 10.39 2.57 10.39l16.58 2.57a34.8 34.8 0 0 0 4-6.88c2.4-5-.23-4.57-2.43-5.2s-.74-2 1.94-3.51 1.31-5.33 1.31-5.33-3.74-6.91-2.34-7.41 1.91-10 1.91-10 3.18-11.19 2.61-14.25 2.6-10.25 2.6-10.25l1.3-8.64a23.85 23.85 0 0 0 3.66-16.27l.52-13.36s4.85-25.75 5.91-38.82c.67-8.36 1-19.81 1.17-26.95.09-4 .12-6.66.12-6.66l-59.27-8.49a48.54 48.54 0 0 1-1.42 8.8c-.73 3.25-1.85 7.44-3.54 12.67-4.86 15-2.67 26.39-2.67 26.39l-.19 19.16s-5.73 12.61-4.8 17.06a36.37 36.37 0 0 1 .8 8s-12.79 27.51-11.86 35.68-4.66 20.79-4.66 20.79-1.78 9.09-.5 11.62z",fill:"#3f3d56"})),nt||(nt=bt.createElement("path",{d:"m489.14 418.07-18-3.11s9.84 10.86 18 3.11z",opacity:.05})),it||(it=bt.createElement("path",{d:"M474.42 397.36s-.87 6.38 3 8.94c-.04 0-7.02-1.41-3-8.94zm1.89-20.35s14.67 13.05 20.21 12.23-20.21-12.23-20.21-12.23zm35.06 47.77s11.4 3.06 11.56 7.69-11.56-7.69-11.56-7.69z",opacity:.1})),st||(st=bt.createElement("path",{d:"M506.6 482.13s16.13 3.65 11.44 5.54a78.41 78.41 0 0 1-12.3 3.22s-5.25.11.86-8.76zm14.63 8.95a3.2 3.2 0 0 0 1.57-2.3l.16.3s1.37 3.77-1.31 5.32l-.87.53c-.48-.11-1-.2-1.49-.34-2.2-.64-.69-1.96 1.94-3.51zm-20.9-1.91c-.43-.43-.37-1.49-.05-2.84a7.65 7.65 0 0 1 .77 4 3.25 3.25 0 0 0-.72-1.16zm5.14-68.43a18.48 18.48 0 0 1 .9 5.1 20.71 20.71 0 0 0-1.12-3.53s.08-.61.22-1.57zm-36.94-8.67a6.45 6.45 0 0 1-.09-1.51c.16 1 .27 2 .34 2.84-.07-.44-.18-.88-.25-1.33zm35.45 57.65a8.89 8.89 0 0 1-.3-3.08 10.35 10.35 0 0 1 .65 3.9 3.89 3.89 0 0 0-.35-.82zm-4.38 25.85a53.63 53.63 0 0 1 1.58 8.53l16.58 2.57a34.8 34.8 0 0 0 4-6.88c.21-.44.38-.84.52-1.2 1 .5 1.33 1.55-.1 4.52a34.74 34.74 0 0 1-4 6.89l-16.58-2.57s-.91-8.73-2.5-10.45c-.82-.84-.28-1.23.5-1.41zm22.92-23.89s-.5 9.5-1.9 10c-.63-1.6-1-3.11-.41-3.33 1.4-.5 1.9-10 1.9-10s3.19-11.19 2.62-14.25 2.6-10.24 2.6-10.24l1.3-8.64a23.88 23.88 0 0 0 3.66-16.28l.51-13.36s4.86-25.75 5.91-38.81c.68-8.37 1-19.81 1.18-26.95 0-1.29.05-2.44.06-3.41l.48.07s0 2.66-.12 6.66c-.16 7.14-.5 18.59-1.17 26.95-1.06 13.07-5.91 38.82-5.91 38.82l-.52 13.36a23.85 23.85 0 0 1-3.66 16.27l-1.3 8.64s-3.17 7.19-2.6 10.25-2.63 14.25-2.63 14.25zm-50.24 29.52a16.17 16.17 0 0 0 2.89-6.45c1.64 1.6-.55 7.49-2.47 9.77s-16.41 3.37-19-1.28l.1-2.62c3.6 3.83 16.56 2.85 18.48.58zm-20.34-16.38a27.89 27.89 0 0 1 1.77 4.21l-.08 1.93c-.28-.71-.69-1.67-1.27-2.81a8.23 8.23 0 0 1-.47-3.43zm20.01 2.95a26.05 26.05 0 0 1-1.23-3.33s2.32.64 6.2-3.62c2.84-3.1 3.22-9.15 3-13.13.6 2.37 1.33 12.19-2.56 16.46-2.56 2.79-4.42 3.47-5.41 3.62zm8.36-30.27a72.28 72.28 0 0 0-.59 8.15c-.08-.53-.16-1-.24-1.29-.6-2.36.4-10.19.4-10.19s.08-5.51 1.25-7.26 3.9-11.85 3.9-11.85.13-3.45 2.13-5.16 3.51-8.7 3.51-8.7a9.07 9.07 0 0 0 1.6-5.87c-.28-3.46 2.62-7.07 2.62-7.07l5.26-14.7 4.83-11 2.23 6.57v2.1l-1.8-5.34-4.81 11-5.25 14.7s-2.9 3.61-2.62 7.07a9 9 0 0 1-1.61 5.87s-1.51 7-3.5 8.69-2.13 5.16-2.13 5.16-2.74 10.11-3.91 11.85-1.27 7.27-1.27 7.27z",opacity:.05})),ot||(ot=bt.createElement("path",{d:"m478.49 203.62.84 5.07-.14 2.24-.11 1.65 5.72.81.69-1.17c1.28-2.11 3.91-6.4 4.74-7 1.1-.86 3.53-14.77 1.22-14a6 6 0 0 0-3.31 2.78s-11.35.8-9.65 9.62z",fill:"#ffcdd3"})),mt||(mt=bt.createElement("path",{d:"m479.08 212.58 5.72.81.69-1.17a5.05 5.05 0 0 0-6.3-1.29z",opacity:.1})),dt||(dt=bt.createElement("path",{d:"m477.52 215.24 7.51 2 .21-1.12.54-3a5.22 5.22 0 0 0-7.3-1.29l-.43 1.54z",fill:"#dce6f2"})),ft||(ft=bt.createElement("path",{d:"m600.72 208.89 7.93 4.65.79-1.5c.83-1.58 2.07-4 2.42-4.83.53-1.32 4-2.88 4-2.88 8.78-7.77-1-15.11-1-15.11-4.93-10.95-11.44 3.21-11.44 3.21s-1.11 7.55-.55 8.09.49 2.6.49 2.6a30.15 30.15 0 0 0-2.13 4.56c-.36.73-.51 1.21-.51 1.21z",fill:"#ffcdd3"})),pt||(pt=bt.createElement("path",{d:"m600.72 208.89 7.93 4.65.79-1.5c-1.11-1-5-4.44-6.36-4.34a9.49 9.49 0 0 1-1.92 0c-.29.71-.44 1.19-.44 1.19z",opacity:.1})),ht||(ht=bt.createElement("path",{d:"m599.8 211.29 8.92 4.83.26-2 .18-1.34s-5.1-4.72-6.66-4.61a8.21 8.21 0 0 1-2.37-.1l-.17 1.64z",fill:"#dce6f2"})),yt||(yt=bt.createElement("path",{d:"M499.25 237.89s39.47 6 32.15 3.3c-5.09-1.88-7-5.23-7.31-8.89a20.73 20.73 0 0 1 1.83-9.11 39.25 39.25 0 0 1 3.82-7s-29.66-17.84-24.18-2.45a24.36 24.36 0 0 1 1.44 7.25 20.27 20.27 0 0 1-1.06 7.23 21.73 21.73 0 0 1-6.69 9.67z",fill:"#ffcdd3"})),ut||(ut=bt.createElement("path",{d:"M505.6 213.7a24.36 24.36 0 0 1 1.44 7.25c2.76 2.5 5.9 2.47 9.91 2.62 3.1.12 6.49 1 9-.39a39.25 39.25 0 0 1 3.82-7s-29.69-17.87-24.17-2.48z",opacity:.1})),Et||(Et=bt.createElement("circle",{cx:518.04,cy:208.24,r:16.4,fill:"#ffcdd3"})),xt||(xt=bt.createElement("path",{d:"M499.25 237.89s39.47 6 32.15 3.3c-5.09-1.88-7-5.23-7.31-8.89-1.89-2.21-5.8-3.91-8.31-4.83a11.91 11.91 0 0 0-7.18-.39 10.12 10.12 0 0 0-2.66 1.11 21.73 21.73 0 0 1-6.69 9.7zm-21.73-22.65 7.51 2 .21-1.12a6.7 6.7 0 0 0-7.19-2.77zm122.28-3.95 8.92 4.83.26-2a67.15 67.15 0 0 0-9-4.41zM479.72 337.16c15.26 3 37 7 40.49 6.09 2.91-.77 12.1-.32 20.08.26.09-4 .12-6.66.12-6.66l-59.27-8.49a48.54 48.54 0 0 1-1.42 8.8z",opacity:.1})),zt||(zt=bt.createElement("path",{d:"M464.6 332.97s50.22 10.62 55.71 9.18 33.27 1.42 33.27 1.42c12.21 8.88 7.46-3.72 7.46-3.72s1.35-6.43 0-11.72a71.88 71.88 0 0 1-1.61-11.79s.59-8.25-.85-10.24-2.7-15.83-2.7-15.83-1-9.42-.8-11.48-.11-7.87-.11-7.87l-1.42-9.71c10.38-1 42.53-19.06 42.53-19.06 1.77-6.41 14.06-21.12 14.06-21.12a15.61 15.61 0 0 1 1.1-3.68c.92-2.17-11.31-7-11.31-7s-9.67 10.94-11.71 13.89-8.88 8.35-8.88 8.35a6.75 6.75 0 0 0-3 .28h-.16a24.55 24.55 0 0 0-6.31 3.31 12 12 0 0 0-8.52 2.84s-5.62-1-6.62-.12-5.78-.22-5.78-.22-4.43-10.38-7.71-7.54-16.73 2.19-16.73 2.19c-1.69-2.45-6-4.33-8.68-5.31a11.91 11.91 0 0 0-7.18-.4 9.16 9.16 0 0 0-2.89 1.27l-8.46 7.67s-2.23-3.12-1.93-3.8-2.7-1.35-2.7-1.35-4-1.39-5.45-1.86-2.95 1.11-3.08 1.25a16.08 16.08 0 0 0 .92-6c-.31-2.63 1.84-4.89 1.84-4.89-4.36-12-15.63-2.54-15.63-2.54s-1.49 6.43-.48 8.95-1.4 7.67-1.18 9.06-.69 3.7-.79 6.32 1.09 7.63 1.83 9.86 7.16 7.45 7.16 7.45.11 7.87 2.83 12.53.33 20.15.33 20.15-3.22 12-6.82 15.74-9.55 25.54-9.55 25.54z",fill:"#3f3d56"})),vt||(vt=bt.createElement("path",{d:"M541.73 245.17s1.69-4.49 3.08-4.85a31.9 31.9 0 0 0 4.07-1.64l-.82-1.73s-5.23 1.22-6.12 2.71-.21 5.51-.21 5.51zm28.07-8.99c.23 1.38 12.44 3.1 12.44 3.1l-6-6.46h-.15a24.55 24.55 0 0 0-6.29 3.36zm-29.58 46.31c.14-.15-32.42 37.86-55.66 14.28.04 0 37.89 6.63 55.66-14.28z",opacity:.1})),Mt||(Mt=bt.createElement("path",{d:"M548.69 262.83a59.93 59.93 0 0 1-7.68 12.06 48.44 48.44 0 0 1-11.71 10.46s18.98-19.98 19.39-22.52zm6.91-21.36s-3.62 13.26-11.78 17.5zm4.7 1.54c.09-.25 2.35 10.69-10.94 16.18 0 0 5.62-1.67 10.94-16.18zm-80.79-12.12c.21 0-6.61 4-8.49 5.88 0 .02 4.58-6.29 8.49-5.88z",opacity:.1})),gt||(gt=bt.createElement("path",{d:"M521.9 223.28a3.43 3.43 0 0 1-1.36 2.16 3.32 3.32 0 0 1-1.56.29c-5 .12-10.22.14-14.77-2a5.58 5.58 0 0 1-2.19-1.58 9.16 9.16 0 0 1-1.17-3.67c-.56-2.48-1.86-4.71-2.76-7.08a23.4 23.4 0 0 1-1.14-12.51 8.47 8.47 0 0 1 1.39-3.62c1.4-1.84 3.84-2.51 5.65-3.95s3-3.7 5.12-4.75c1.89-1 4.14-.75 6.2-.31a32.39 32.39 0 0 1 11.38 4.78c1.16.77 2.43 1.66 3.81 1.46a5.3 5.3 0 0 0 2.91-2.07 15.07 15.07 0 0 1 1 7.19 3.26 3.26 0 0 0 0 1.08 3.36 3.36 0 0 0 .72 1.16c1.18 1.48 1.86 3.78.59 5.17-.55.62-1.38.93-1.92 1.55-1 1.11-.73 2.78-.76 4.26a2.19 2.19 0 0 1-.42 1.44 2.13 2.13 0 0 1-2 .4 5.68 5.68 0 0 0-2.15-.29 3.65 3.65 0 0 0-1.93 1.37c-2.51 2.83-3.53 6.02-4.64 9.52z",fill:"#3f3d56"})),kt||(kt=bt.createElement("path",{d:"M501.51 220.89a5.55 5.55 0 0 0 2.2 1.58c4.55 2.1 9.76 2.08 14.77 2a3.58 3.58 0 0 0 1.56-.29 3.43 3.43 0 0 0 1.36-2.17c1.11-3.49 2.13-6.68 4.55-9.53a3.61 3.61 0 0 1 1.93-1.37 5.68 5.68 0 0 1 2.15.29 2.11 2.11 0 0 0 2-.41 2.19 2.19 0 0 0 .42-1.44c0-1.47-.21-3.14.75-4.25.54-.63 1.37-.94 1.93-1.55a3.21 3.21 0 0 0 .44-3.27c.82 1.42 1.14 3.22.07 4.39-.56.61-1.39.93-1.93 1.55-1 1.11-.72 2.78-.75 4.26a2.19 2.19 0 0 1-.42 1.44 2.13 2.13 0 0 1-2 .4 5.73 5.73 0 0 0-2.15-.29 3.61 3.61 0 0 0-1.93 1.37c-2.42 2.85-3.45 6-4.55 9.54a3.43 3.43 0 0 1-1.36 2.16 3.32 3.32 0 0 1-1.56.29c-5 .12-10.22.14-14.77-2a5.55 5.55 0 0 1-2.2-1.58 4.46 4.46 0 0 1-.66-1.35zm32.82-22.65a2.37 2.37 0 0 1-.47-.85 3 3 0 0 1 0-1.07 15.25 15.25 0 0 0-.54-6l.09-.1a15.19 15.19 0 0 1 .95 7.19 5.29 5.29 0 0 0-.03.83zm-9.88 35.09s-20.59 1.92-22.31-1.23m-17.18-8.78s-11.38-.42-14 3.75",opacity:.1})))}},7632:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,P,j,Z,F,S,V,A,q,D,N,_,U,B,R,W,X,K,J,Q,Y,$,ee,te,ae,le,ce,re,ne,ie,se,oe,me,de,fe,pe,he,ye,ue,Ee,xe,ze,ve,Me,ge,ke,be,we,He,Oe,Ge,Te,Le,Ce,Ie,Pe,je,Ze,Fe,Se,Ve,Ae,qe,De,Ne,_e,Ue,Be,Re,We,Xe,Ke,Je,Qe,Ye,$e,et,tt,at,lt,ct,rt,nt,it,st,ot,mt,dt,ft,pt,ht,yt,ut,Et,xt,zt,vt,Mt,gt,kt,bt,wt,Ht,Ot,Gt,Tt,Lt,Ct,It,Pt,jt,Zt,Ft,St,Vt,At,qt,Dt,Nt,_t,Ut,Bt,Rt,Wt,Xt,Kt,Jt,Qt,Yt,$t,ea,ta,aa,la,ca,ra,na,ia,sa,oa,ma,da,fa,pa,ha,ya,ua,Ea,xa,za,va,Ma,ga,ka,ba,wa,Ha,Oa,Ga,Ta,La,Ca,Ia,Pa,ja,Za,Fa,Sa,Va,Aa,qa,Da,Na,_a,Ua,Ba,Ra,Wa,Xa,Ka,Ja,Qa,Ya,$a,el,tl,al,ll,cl,rl,nl,il,sl,ol,ml,dl,fl,pl,hl,yl,ul,El,xl,zl,vl,Ml,gl,kl,bl,wl,Hl,Ol,Gl,Tl,Ll,Cl,Il,Pl,jl,Zl,Fl,Sl,Vl,Al,ql,Dl,Nl,_l,Ul,Bl,Rl,Wl,Xl,Kl,Jl,Ql,Yl,$l,ec,tc,ac,lc,cc,rc,nc,ic,sc=a(7294),oc=["title","titleId"];function mc(){return mc=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,fc=dc(e,oc);return sc.createElement("svg",mc({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:1157.72,height:825.98,viewBox:"0 0 1157.72 825.98","aria-labelledby":a},fc),l||(l=sc.createElement("defs",null,sc.createElement("linearGradient",{id:"a",x1:418.19,y1:540.35,x2:418.19,y2:8.65,gradientUnits:"userSpaceOnUse"},sc.createElement("stop",{offset:0,stopColor:"gray",stopOpacity:.25}),sc.createElement("stop",{offset:.54,stopColor:"gray",stopOpacity:.12}),sc.createElement("stop",{offset:1,stopColor:"gray",stopOpacity:.1})),sc.createElement("linearGradient",{id:"b",x1:561.46,y1:451.84,x2:561.46,y2:451.78,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"c",x1:566.83,y1:511.15,x2:566.83,y2:451.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"d",x1:566.42,y1:505.23,x2:566.42,y2:500.93,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"e",x1:573.33,y1:463.86,x2:573.33,y2:457.49,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"f",x1:574.03,y1:466.6,x2:574.03,y2:461.87,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"g",x1:571,y1:471.64,x2:571,y2:465.77,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"h",x1:569.74,y1:476.81,x2:569.74,y2:472.34,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"i",x1:567.96,y1:482.09,x2:567.96,y2:474.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"j",x1:566.96,y1:483.74,x2:566.96,y2:478.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"k",x1:569.17,y1:486.56,x2:569.17,y2:482.56,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"l",x1:564.99,y1:495.8,x2:564.99,y2:488.04,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"m",x1:567.74,y1:493.71,x2:567.74,y2:490.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"n",x1:563.91,y1:502.03,x2:563.91,y2:492.66,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"o",x1:564.17,y1:508.32,x2:564.17,y2:497.03,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"p",x1:589.65,y1:508.24,x2:589.65,y2:461.7,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"q",x1:637.22,y1:511.4,x2:637.22,y2:460.75,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"r",x1:593.95,y1:510.51,x2:593.95,y2:460.75,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"s",x1:556.38,y1:511.14,x2:556.38,y2:451.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"t",x1:777.04,y1:810.07,x2:777.04,y2:679.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"u",x1:858.15,y1:793.9,x2:858.15,y2:586.42,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"v",x1:777.01,y1:463,x2:777.01,y2:384.85,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"w",x1:693.32,y1:655.8,x2:693.32,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"x",x1:784.01,y1:593.15,x2:784.01,y2:445.4,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"y",x1:789.52,y1:479.23,x2:789.52,y2:445.4,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"z",x1:769.72,y1:440.22,x2:769.72,y2:359.14,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"A",x1:784.01,y1:593.15,x2:784.01,y2:487.36,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"B",x1:782.08,y1:693.69,x2:782.08,y2:490.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"C",x1:782.08,y1:691.68,x2:782.08,y2:488.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"D",x1:693.32,y1:590.64,x2:693.32,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"E",x1:694.66,y1:588.64,x2:694.66,y2:521.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"F",x1:674.74,y1:658.97,x2:674.74,y2:490.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"G",x1:825.97,y1:775.45,x2:825.97,y2:736.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"H",x1:816.79,y1:771.83,x2:816.79,y2:736.81,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"I",x1:689.2,y1:658.97,x2:689.2,y2:646.08,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"J",x1:750.14,y1:810.91,x2:750.14,y2:648.09,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"K",x1:737.1,y1:796.17,x2:737.1,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"L",x1:735.05,y1:798.18,x2:735.05,y2:662.65,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"M",x1:735.05,y1:796.17,x2:735.05,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"N",x1:689.04,y1:772.24,x2:689.04,y2:735.53,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"O",x1:794.31,y1:747.43,x2:794.31,y2:707.65,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"P",x1:812.48,y1:784.44,x2:812.48,y2:758.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Q",x1:805.2,y1:833.36,x2:805.2,y2:759.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"R",x1:805.2,y1:833.36,x2:805.2,y2:804.2,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"S",x1:777.31,y1:739.49,x2:777.31,y2:736.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"T",x1:780.05,y1:750.13,x2:780.05,y2:747.43,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"U",x1:779.31,y1:746.18,x2:779.31,y2:743.48,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"V",x1:780.05,y1:755.44,x2:780.05,y2:752.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"W",x1:773.46,y1:760.94,x2:773.46,y2:758.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"X",x1:862.64,y1:812.46,x2:862.64,y2:774.6,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Y",x1:907.2,y1:814.39,x2:907.2,y2:760.44,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Z",x1:907.2,y1:798.12,x2:907.2,y2:761.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aa",x1:868.85,y1:763.68,x2:868.85,y2:611.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ab",x1:871.92,y1:789.8,x2:871.92,y2:611.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ac",x1:816.9,y1:761.86,x2:816.9,y2:744.66,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ad",x1:870.9,y1:789.8,x2:870.9,y2:602.69,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ae",x1:769.35,y1:651.44,x2:769.35,y2:638.6,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"af",x1:764.04,y1:663.34,x2:764.04,y2:657.71,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ag",x1:726.47,y1:530.38,x2:726.47,y2:504.12,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ah",x1:708.03,y1:538.2,x2:708.03,y2:512.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ai",x1:748.85,y1:773.83,x2:748.85,y2:726.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aj",x1:896.31,y1:743.48,x2:896.31,y2:740.78,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ak",x1:901.77,y1:771.66,x2:901.77,y2:768.96,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"al",x1:890.68,y1:721.79,x2:890.68,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"am",x1:885.78,y1:675.79,x2:885.78,y2:637.37,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"an",x1:848.29,y1:754.42,x2:848.29,y2:740.55,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ao",x1:864.81,y1:750.13,x2:864.81,y2:747.43,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ap",x1:846.19,y1:747.53,x2:846.19,y2:744.83,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aq",x1:881.19,y1:749.6,x2:881.19,y2:746.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ar",x1:886.06,y1:770.31,x2:886.06,y2:767.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"as",x1:889.38,y1:746.9,x2:889.38,y2:744.2,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"at",x1:893.72,y1:770.31,x2:893.72,y2:767.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"au",x1:872.64,y1:750.95,x2:872.64,y2:748.25,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"av",x1:876.21,y1:771.66,x2:876.21,y2:768.96,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aw",x1:856.52,y1:749.6,x2:856.52,y2:746.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ax",x1:806.51,y1:727.79,x2:806.51,y2:668.88,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ay",x1:814.59,y1:726.79,x2:814.59,y2:588.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"az",x1:850.17,y1:603.03,x2:850.17,y2:588.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aA",x1:852.9,y1:601.03,x2:852.9,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aB",x1:749.15,y1:577.5,x2:749.15,y2:490.97,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aC",x1:848.06,y1:581.05,x2:848.06,y2:488.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aD",x1:803.57,y1:585.21,x2:803.57,y2:369.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aE",x1:866,y1:427.4,x2:866,y2:413.47,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aF",x1:767.18,y1:450.76,x2:767.18,y2:418.27,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aG",x1:721.08,y1:477.69,x2:721.08,y2:430.35,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aH",x1:762.7,y1:532.98,x2:762.7,y2:519.25,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aI",x1:759.55,y1:491.42,x2:759.55,y2:466.23,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aJ",x1:850.33,y1:585.21,x2:850.33,y2:548.89,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aK",x1:885.57,y1:560.24,x2:885.57,y2:486.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aL",x1:811.63,y1:524.13,x2:811.63,y2:497.28,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aM",x1:749.16,y1:575.49,x2:749.16,y2:509.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aN",x1:798.41,y1:458.74,x2:798.41,y2:399.27,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aO",x1:778.83,y1:639.38,x2:778.83,y2:581.08,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aP",x1:777.81,y1:637.37,x2:777.81,y2:579.07,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aQ",x1:704.23,y1:625.68,x2:704.23,y2:592.01,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aR",x1:783.34,y1:573,x2:783.34,y2:552.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aS",x1:812.36,y1:782.25,x2:812.36,y2:768.97,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aT",x1:875.12,y1:811.72,x2:875.12,y2:787.42,xlinkHref:"#a"}))),void 0===t?sc.createElement("title",{id:a},"creativity"):t?sc.createElement("title",{id:a},t):null,c||(c=sc.createElement("ellipse",{cx:788.82,cy:768.45,rx:195.65,ry:26.54,fill:"#a4a4a4",opacity:.1})),r||(r=sc.createElement("ellipse",{cx:1029.06,cy:710.91,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),n||(n=sc.createElement("ellipse",{cx:1053.29,cy:821.13,rx:35.78,ry:4.85,fill:"#a4a4a4",opacity:.1})),i||(i=sc.createElement("ellipse",{cx:428.53,cy:755.65,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),s||(s=sc.createElement("ellipse",{cx:285.37,cy:705.99,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),o||(o=sc.createElement("path",{d:"M713 88.33c-49.68 31.15-114.14 29.13-170.58 12.93S434.09 56.2 379.07 35.7A580.66 580.66 0 0 0 235.56 2.19C165.45-5.01 87.15 3.76 38.29 54.11c-54.43 56.07-50.22 157.2 8.62 208.68 29.93 26.18 69.12 39 103.3 59.47s65.82 54.39 62.91 93.85c-2.7 36.52-34 64.55-66.44 82.14-25.06 13.59-55.93 28.43-58.95 56.58-2.92 27.24 23 48.59 47.81 60.72 80.84 39.6 180.43 39.22 261-1 28.73-14.35 55.14-33.43 85.27-44.62 79.11-29.36 166.28.2 250.05 11a556.31 556.31 0 0 0 212.63-13.84c41.48-11 83.12-27.75 112.26-59 21-22.53 34.11-51.05 46.4-79.21q19.67-45 37.8-90.73c7.25-18.28 14.4-36.92 16.27-56.48 3.4-35.44-10.91-70.48-30.4-100.39-46.26-71-124.17-121-208.51-133.65s-173.69 12.09-239.13 66.36",fill:"#a4a4a4",opacity:.1})),m||(m=sc.createElement("path",{fill:"url(#a)",d:"M109.49 8.65v531.7h617.4V8.65h-617.4z"})),d||(d=sc.createElement("path",{fill:"#f6f7f9",d:"M113.94 13.31h608.5v20.27h-608.5z"})),f||(f=sc.createElement("path",{fill:"#534d72",d:"M113.94 13.31h608.5v20.27h-608.5z"})),p||(p=sc.createElement("path",{fill:"#f6f7f9",d:"M113.94 33.58h608.5v502.1h-608.5z"})),h||(h=sc.createElement("ellipse",{cx:127.06,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),y||(y=sc.createElement("ellipse",{cx:139.42,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),u||(u=sc.createElement("ellipse",{cx:151.77,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),E||(E=sc.createElement("path",{fill:"#a4a4a4",d:"M257.92 64.54h320.55V74H257.92z",opacity:.2})),x||(x=sc.createElement("path",{fill:"#a4a4a4",d:"M535.88 64.54h42.59V74h-42.59z"})),z||(z=sc.createElement("path",{d:"M561.48 451.84s-.02-.06 0 0z",transform:"translate(-21.14 -37.01)",fill:"url(#b)"})),v||(v=sc.createElement("path",{d:"m545.41 505.14-4.68 3.16c0-2.21 8.23-11 8.23-11-2.13-1.2-9.67 4.68-9.67 4.68.89-3.85 7.55-8.51 7.55-8.51-.58-.3-5.72 2.3-5.72 2.3 1.68-3.55 8.61-8.69 8.61-8.69-.86-.55-5.93 1.64-6.17 1.74.27-.19 8.71-6.11 8-6.29s-7.14 1.15-7.14 1.15c-.5-2.26 10-12.91 10-12.91s1.31-1.85.84-1.36-5.34 2.18-5.34 2.18c.07-3.33 10.22-8.49 10.22-8.49l-4.62-.18 3-3.27c-.14.11-4.9 3.76-5 2.69s4.48-5.37 5.46-6 4-.12 4-.12-1.32-3.81-1.57-4.36c.73.6 11.09 5 11.09 5l.9.18c2.42.47 9 1.8 10 2.5s6 1.65 8.88 2.21l2 .38-7.28 46.11h-2c-1.19 0-2.37-.1-3.55-.2q-2.79-.25-5.55-.76c-3.7-.69-8.56-1.61-12.31-2.34-2.32-.45-4.21-.84-5.14-1.05-3.71-.87-8.34 2-9.4 2s-7.44 5.31-7.44 5.31c.05-1.05 3.8-6.06 3.8-6.06z",transform:"translate(-21.14 -37.01)",fill:"url(#c)"})),M||(M=sc.createElement("path",{d:"M545.37 505.06c.08 0 7.28-2.95 9.68-3.89s31.19 1.13 32.41 1.22v.18c-.3 0-29.94-2.16-32.33-1.22s-9.6 3.85-9.67 3.88z",transform:"translate(-21.14 -37.01)",fill:"url(#d)",opacity:.1})),g||(g=sc.createElement("path",{d:"M561.48 451.84s-.02-.06 0 0z",transform:"translate(-21.14 -37.01)",fill:"url(#b)"})),k||(k=sc.createElement("path",{d:"M553.5 462.27a55.92 55.92 0 0 1 6.12-4.32c1.64-.91 4.85-.26 7.19.21a16.15 16.15 0 0 0 2.08.34c1.43 0 9.26 2.22 9.59 2.32.08 0 8.56 2 9.63 1.94a32.35 32.35 0 0 1 5 .91v.19a32.82 32.82 0 0 0-5-.92c-1.1.07-9.34-1.86-9.69-1.94-.08 0-8.13-2.31-9.54-2.32a13.82 13.82 0 0 1-2.11-.34c-2.19-.44-5.49-1.1-7.07-.23a59.1 59.1 0 0 0-6.1 4.3z",transform:"translate(-21.14 -37.01)",fill:"url(#e)",opacity:.1})),b||(b=sc.createElement("path",{d:"M555.19 462.79c.73-.81 9.23-1.1 10-.8s10.51 1.25 11 1.23c.16 0 12.8 2.44 16.67 3.2v.18c-5.62-1.1-16.34-3.17-16.63-3.19-.05 0-10.19-.9-11.09-1.25s-9.22.14-9.78.75z",transform:"translate(-21.14 -37.01)",fill:"url(#f)",opacity:.1})),w||(w=sc.createElement("path",{d:"M549.8 471.54c2.61-4.44 17.34-5.76 17.48-5.77 1.57-.13 24 4.12 24.92 4.3v.18c-.23 0-23.32-4.43-24.86-4.29-4.1.35-15.21 2.05-17.33 5.68z",transform:"translate(-21.14 -37.01)",fill:"url(#g)",opacity:.1})),H||(H=sc.createElement("path",{d:"M548.8 476.69c4.16-4.67 17.36-4.35 17.49-4.34 1 0 23.44 3.36 24.39 3.5v.18c-.23 0-23.39-3.45-24.37-3.49-.13 0-13.23-.33-17.33 4.27z",transform:"translate(-21.14 -37.01)",fill:"url(#h)",opacity:.1})),O||(O=sc.createElement("path",{d:"M544.87 481.86c1.56-2.91 5.94-5 13-6.19a72.7 72.7 0 0 1 10.37-.93l22.86 2.61v.19l-22.84-2.61c-.19 0-19.79.15-23.29 7.16l-.17-.08z",transform:"translate(-21.14 -37.01)",fill:"url(#i)",opacity:.1})),G||(G=sc.createElement("path",{d:"M544.31 483.62c2.19-2.4 10.76-4.3 14.86-4.79 3.85-.46 29.36 3.57 30.45 3.74v.18c-.27 0-26.57-4.19-30.4-3.74s-12.61 2.4-14.74 4.73z",transform:"translate(-21.14 -37.01)",fill:"url(#j)",opacity:.1})),T||(T=sc.createElement("path",{d:"m549.32 484.51 9.67-1.6a25.82 25.82 0 0 1 7.5-.14l10.72 1.38 11.79 2.23v.18l-11.8-2.23-10.73-1.33a25.83 25.83 0 0 0-7.45.13l-9.67 1.61z",transform:"translate(-21.14 -37.01)",fill:"url(#k)",opacity:.1})),L||(L=sc.createElement("path",{d:"M541.23 495.29c2-3.72 10.9-5.57 15.78-6.59 1-.21 1.85-.38 2.33-.52 2.76-.77 28.52 1.82 29.61 1.93v.19c-.27 0-26.82-2.7-29.54-1.94-.49.14-1.31.31-2.34.52-4.67 1-14.4 3-15.84 6.92l-.18-.06a3 3 0 0 1 .18-.45z",transform:"translate(-21.14 -37.01)",fill:"url(#l)",opacity:.1})),C||(C=sc.createElement("path",{d:"M546.61 493.53s4.92-1.55 6-2.06 13.85-.83 14.39-.85l21.87 1.38v.19L567 490.81c-.12 0-13.21.32-14.31.82s-5.86 2-6.06 2.08z",transform:"translate(-21.14 -37.01)",fill:"url(#m)",opacity:.1})),I||(I=sc.createElement("path",{d:"M539.21 501.93c4.81-6.76 23.13-9.38 24.77-9.26l24.63 1.58v.18c-.23 0-23-1.46-24.62-1.58s-19.84 2.49-24.6 9.18z",transform:"translate(-21.14 -37.01)",fill:"url(#n)",opacity:.1})),P||(P=sc.createElement("path",{d:"M541.21 506.88c4.34-8.1 23-9.92 24.71-9.85l21.78 1v.18l-21.78-1c-1.81-.08-22.3 1.93-25.09 11.1l-.18-.05a8 8 0 0 1 .56-1.38z",transform:"translate(-21.14 -37.01)",fill:"url(#o)",opacity:.1})),j||(j=sc.createElement("path",{d:"m585 508.22 7.37-46.52 2 .38-7.37 46.16c-.69 0-1.37 0-2-.02z",transform:"translate(-21.14 -37.01)",fill:"url(#p)",opacity:.1})),Z||(Z=sc.createElement("path",{d:"m585.39 509.23 7.69-48.48 9.43 3 6.9 2.2s4.82-1 6.36 2.51-3.37 13.76-1 16 22.4 4 22.4 4 29.1 7.75 32.14 8.21S689 506.84 689 506.84c.91 2.29-10.27 2.39-12.77 3.07s-26.36-3.81-27.91-5.18-23.75-7.36-23.75-7.36c-7.15-3.7-11.74-2.15-11.74-2.15a55.09 55.09 0 0 1-3.45 14 3.8 3.8 0 0 1-4 2.17l-10.78-.85z",transform:"translate(-21.14 -37.01)",fill:"url(#q)"})),F||(F=sc.createElement("path",{d:"m585.39 509.23 7.69-48.48 9.43 3C601 468.44 592 498 594.6 510.51z",transform:"translate(-21.14 -37.01)",fill:"url(#r)",opacity:.1})),S||(S=sc.createElement("path",{d:"m545.41 505.14-4.68 3.16c0-2.21 8.23-11 8.23-11-2.13-1.2-9.67 4.68-9.67 4.68.89-3.85 7.55-8.51 7.55-8.51-.58-.3-5.72 2.3-5.72 2.3 1.68-3.55 8.61-8.69 8.61-8.69-.86-.55-5.93 1.64-6.17 1.74.27-.19 8.71-6.11 8-6.29s-7.14 1.15-7.14 1.15c-.5-2.26 10-12.91 10-12.91s1.31-1.85.84-1.36-5.34 2.18-5.34 2.18c.07-3.33 10.22-8.49 10.22-8.49l-4.62-.18 3-3.27c-.14.11-4.9 3.76-5 2.69s4.48-5.37 5.46-6 4-.12 4-.12-1.32-3.81-1.57-4.36c.73.6 11.09 5 11.09 5l.9.17c-1 .76-1.92 1.45-2.53 2a7.37 7.37 0 0 0-2.21 2.7 5.48 5.48 0 0 0 .69 4.5c.77 1.37 1.83 2.56 2.59 3.94a2.66 2.66 0 0 1 .42 1.94 3.34 3.34 0 0 1-1.31 1.51 25.37 25.37 0 0 0-8.32 11.5 3.1 3.1 0 0 0-.25 1.4 4.67 4.67 0 0 0 .82 1.75 6.31 6.31 0 0 1-.81 7.27c-.82.9-2 1.69-2.06 2.9a3.9 3.9 0 0 0 .6 1.92q1.23 2.29 2.44 4.61c-2.32-.45-4.21-.84-5.14-1.05-3.71-.87-8.34 2-9.4 2s-7.44 5.3-7.44 5.3c.17-1.07 3.92-6.08 3.92-6.08z",transform:"translate(-21.14 -37.01)",fill:"url(#s)"})),V||(V=sc.createElement("path",{d:"m702.23 777.41 4.43 17.75s99.48 32.16 131.73 2-3.55-88.78-3.55-88.78L813 685.94l-57.61-6.7H735z",transform:"translate(-21.14 -37.01)",fill:"url(#t)"})),A||(A=sc.createElement("path",{d:"m702.23 777.41 4.43 17.75s99.48 32.16 131.73 2-3.55-88.78-3.55-88.78L813 685.94l-57.61-6.7H735z",transform:"translate(-21.14 -37.01)",fill:"url(#t)",opacity:.03})),q||(q=sc.createElement("path",{d:"M943.93 648.08 934.37 659l-33.06 59.14-11.25 20.77s-8.5 10.58-7.66 15 3.23 37.27-25.4 39.94-90.69-64.33-90.69-64.33l2.53-1.7 55.43-37.49 19.9-21.42 5.32-5.72s25.92-34.84 25.23-40.2 25.91-37.52 41.25-36.52 26.93 1 32.38 20.44-4.42 41.17-4.42 41.17z",transform:"translate(-21.14 -37.01)",fill:"url(#u)"})),D||(D=sc.createElement("path",{fill:"url(#v)",d:"M724.47 384.85h105.08v78.14H724.47z"})),N||(N=sc.createElement("path",{fill:"url(#v)",d:"M724.47 384.85h105.08v78.14H724.47z",opacity:.1})),_||(_=sc.createElement("path",{d:"M716.89 584.62c0 1.43-.13 3.39-.34 5.6-.79 8.6-2.73 21-2.73 21s-4.09 21.83-3.07 23.61-1 16.33-2.39 19.53-9.54 0-9.54 0l-27-71.22-1.49-3.93-.59-1.55.62-2.38 2.19-8.63s44.34 11.03 44.34 17.97z",transform:"translate(-21.14 -37.01)",fill:"url(#w)"})),U||(U=sc.createElement("path",{d:"M840.29 514.19v11.26l-8.19 39.33-17.72 23.36-39.2 5-37.5-14.47s-24.88-39.46 4.09-61.67a54.69 54.69 0 0 0 16.6-20.75 66.44 66.44 0 0 0 5.74-26.67 61 61 0 0 0-.86-11.8s61.36-27.8 51.47 0a31 31 0 0 0-1.39 14.95 46.05 46.05 0 0 0 4.91 14.66c7.92 15.39 22.05 26.8 22.05 26.8z",transform:"translate(-21.14 -37.01)",fill:"url(#x)"})),B||(B=sc.createElement("path",{d:"M814.72 457.75a31 31 0 0 0-1.39 14.95 41.86 41.86 0 0 1-49.22-3.15 61 61 0 0 0-.86-11.8s61.36-27.75 51.47 0z",transform:"translate(-21.14 -37.01)",fill:"url(#y)",opacity:.1})),R||(R=sc.createElement("ellipse",{cx:769.72,cy:399.68,rx:41.25,ry:40.54,fill:"url(#z)"})),W||(W=sc.createElement("path",{d:"M840.29 514.19v11.26l-8.19 39.33-17.72 23.36-39.2 5-37.5-14.47s-24.88-39.46 4.09-61.67a54.69 54.69 0 0 0 16.6-20.75C735.71 581.49 784 577.07 784 577.07c44.18 0 35.29-81 34.22-89.71 7.94 15.42 22.07 26.83 22.07 26.83z",transform:"translate(-21.14 -37.01)",fill:"url(#A)",opacity:.1})),X||(X=sc.createElement("path",{d:"M877.79 552.27c-1.71 5.7-5.8 26.46-5.8 26.46s-1.15.45-3 1.28c-7 3.19-24.31 12-25.59 23a4.1 4.1 0 0 0-.06.49c-1 14.07-13.63 43.89-20.1 57.29s3.07 27.81 3.07 27.81l-13 3s-18.02 2.4-33.31-1.3-13.3 6-22.84 2.68-40.91-5.7-46-8.71-9.54-29.81-6.82-33.17 11.25-74 11.25-74-34.43-31.5-33.75-51.94 25.57-21.43 25.57-21.43 9.57-3.3 17.68-6.73c1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06 1.6.2 2.58.34 2.58.34-.88 3-1.67 5.94-2.39 8.75-13.91 54.89 2.42 71.3 14.87 76.14a28 28 0 0 0 11.37 1.92c15.66 0 24.65-10.19 29.69-23.72 10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.23 30.48 7.52 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#B)",opacity:.1})),K||(K=sc.createElement("path",{d:"M877.79 550.26c-1.71 5.7-5.8 26.46-5.8 26.46s-1.15.45-3 1.28c-7 3.19-24.31 12-25.59 23a4.1 4.1 0 0 0-.06.49c-1 14.07-13.63 43.89-20.1 57.29s3.07 27.81 3.07 27.81l-13 3s-18.02 2.41-33.31-1.3-13.3 6-22.84 2.68-40.91-5.7-46-8.71-9.54-29.81-6.82-33.17 11.25-74 11.25-74-34.43-31.5-33.75-51.94 25.57-21.43 25.57-21.43 9.57-3.3 17.68-6.73c1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06 1.6.2 2.58.34 2.58.34-.88 3-1.67 5.94-2.39 8.75-13.91 54.89 2.42 71.3 14.87 76.14a28 28 0 0 0 11.37 1.92c15.66 0 24.65-10.19 29.69-23.72 10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.23 30.48 7.52 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#C)"})),J||(J=sc.createElement("path",{d:"M716.89 584.62v6l-.34-.42c-14.39-17.92-37.7-10-44.72-7.06-1.33.56-2.08.94-2.08.94s.4-2.3.59-4.87a27.27 27.27 0 0 0 0-3.93l2.19-8.63s44.36 11.03 44.36 17.97z",transform:"translate(-21.14 -37.01)",fill:"url(#D)",opacity:.1})),Q||(Q=sc.createElement("path",{d:"m692.34 521.11-8.88 11.4s-15 35.84-13.62 38.52-.09 11.06-.09 11.06 30.09-15.38 47.13 6.55V577.4s1.71-4.69 2.39-6 0-11.73 0-11.73z",transform:"translate(-21.14 -37.01)",fill:"url(#E)"})),Y||(Y=sc.createElement("path",{d:"M708.36 654.46a5.34 5.34 0 0 1-.35 1.11c-4.35 9.71-36.91-4.47-36.91-4.47s-.27-1.34-.7-3.51c-1.72-8.73-5.81-31.06-3.62-35.35 2.72-5.36 3-22.11 3-22.11 9.12-16.08 4.52-48.58 4.52-48.58 4.09-7-2.38-13.4-2.38-13.4s-56.6-32.84-17.73-37.19 46.37 41.86 43.3 46.91 2.38 45.82 2.38 45.82l5.45 31.57s5.39 27.35 3.04 39.2z",transform:"translate(-21.14 -37.01)",fill:"url(#F)"})),$||($=sc.createElement("path",{fill:"url(#G)",d:"m851.15 775.46-10.12-.5-39.35-1.9-.05-1.23-.84-19.99 29.88-15.03.04-.02.38.27.77.53.83.58 17.07 11.97 1.39 25.32z"})),ee||(ee=sc.createElement("path",{fill:"url(#H)",d:"m832.79 738.06-.1.11-31.06 33.66-.84-19.99 29.88-15.03.42.25 1.7 1z",opacity:.1})),te||(te=sc.createElement("path",{d:"M708 655.57c-4.35 9.71-36.91-4.47-36.91-4.47s-.27-1.34-.7-3.51c4.34-1.79 9.87-2.16 17.17-.17 9.44 2.58 16 5.52 20.44 8.15z",transform:"translate(-21.14 -37.01)",fill:"url(#I)",opacity:.1})),ae||(ae=sc.createElement("path",{d:"M706.66 795.16s-19.09-9.38-20.11-14.4-6.48-20.78-8.87-24.13-17-26.13-20.45-35.84-13.64-37.19-6.14-47.58 11.93-30.48 36.48-23.78 29.31 15.74 29.31 15.74l2.69 5.7s59.36 54.21 60.38 55.92 32.73 25.15 32.73 25.15l39.2 23.12-33.07 35.85s-41.93-16.08-43.29-22.78-12.88-12.73-12.88-12.73l-15.76-6z",transform:"translate(-21.14 -37.01)",fill:"url(#J)"})),le||(le=sc.createElement("path",{d:"M666.77 715.09s7.16 7 7.16 9.72 9.88 7.37 9.88 7.37 78.41 47.87 87.62 47.72l16.39 16.27 23.09-47L782 726.79l-60.38-53.24s-11.21-7.37-17.35-8.38-37.5-15.07-40.22 12.06 2.72 37.86 2.72 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#K)",opacity:.1})),ce||(ce=sc.createElement("path",{d:"M664.73 717.1s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 728.8l-60.38-53.24s-11.21-7.37-17.34-8.38-37.5-15.07-40.23 12.06 2.68 37.86 2.68 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#L)",opacity:.1})),re||(re=sc.createElement("path",{d:"M664.73 715.09s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 726.79l-60.38-53.24s-11.21-7.37-17.34-8.38-37.55-15.07-40.28 12.06 2.73 37.86 2.73 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#M)"})),ne||(ne=sc.createElement("path",{d:"M664.73 715.09s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 726.79l-60.38-53.24s-11.21-7.37-17.34-8.38-37.55-15.07-40.28 12.06 2.73 37.86 2.73 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#M)"})),ie||(ie=sc.createElement("path",{d:"M672.23 735.53s20.6 33.56 31.77 36.54-31.77-36.54-31.77-36.54z",transform:"translate(-21.14 -37.01)",fill:"url(#N)",opacity:.1})),se||(se=sc.createElement("path",{fill:"url(#O)",d:"m811.31 707.65-3.1 17.2-2.84 15.79-1.22 6.79-26.84-8.37 2.74-14.72.15-.82 1.79-9.59 29.32-6.28z"})),oe||(oe=sc.createElement("path",{d:"m826.51 777.65-1.22 6.79-26.84-8.37 2.74-14.73c3.93-5 14.26-1 14.26-1 14.35-1.68 9.5 14.74 9.5 14.74a5.49 5.49 0 0 1 1.56 2.57z",transform:"translate(-21.14 -37.01)",fill:"url(#P)",opacity:.1})),me||(me=sc.createElement("path",{d:"M829.38 833.36c-7.15-6.36-33.07-9.36-41.59-9.36s-5.11-2.67-5.11-2.67l-5.64-4c-3.85-2.75-2.08-9.24-.58-13.08.71-1.79 1.35-3 1.35-3s2.14-15.75 4.27-20.45 17.69-11.8 17.69-11.8c-1.32-14.12 15.68-7.65 15.68-7.65 14.35-1.67 9.5 14.75 9.5 14.75 2.73 2 3.41 12.72 2.73 16.41s2.38 15.41 2.38 15.41 2.87 10.6 4.61 16.79c.34 1.19.63 2.23.85 3 1.36 4.64-6.14 5.65-6.14 5.65z",transform:"translate(-21.14 -37.01)",fill:"url(#Q)"})),de||(de=sc.createElement("path",{d:"M829.38 833.36c-7.15-6.36-33.07-9.36-41.59-9.36s-5.11-2.67-5.11-2.67l-5.64-4c-3.85-2.75-2.08-9.24-.58-13.08l7.63 6.7s-2.18 1.68 0 1.68H793s28.64 6 41.64 12.1c.34 1.19.63 2.23.85 3 1.39 4.62-6.11 5.63-6.11 5.63z",transform:"translate(-21.14 -37.01)",fill:"url(#R)",opacity:.1})),fe||(fe=sc.createElement("ellipse",{cx:777.31,cy:738.14,rx:1.37,ry:1.35,fill:"url(#S)",opacity:.1})),pe||(pe=sc.createElement("ellipse",{cx:780.05,cy:748.78,rx:1.37,ry:1.35,fill:"url(#T)",opacity:.1})),he||(he=sc.createElement("ellipse",{cx:779.31,cy:744.83,rx:1.37,ry:1.35,fill:"url(#U)",opacity:.1})),ye||(ye=sc.createElement("ellipse",{cx:780.05,cy:754.09,rx:1.37,ry:1.35,fill:"url(#V)",opacity:.1})),ue||(ue=sc.createElement("ellipse",{cx:773.46,cy:759.59,rx:1.37,ry:1.35,fill:"url(#W)",opacity:.1})),Ee||(Ee=sc.createElement("path",{d:"m872.29 812.46-10.12-.46a3.5 3.5 0 0 1 0-1.9s7.42-7-4.86-20.32c0 0 .71-3.13 3.55-2.33 0 0-6.74-11.14-7.76-12.28a.89.89 0 0 1-.12-.54l.83.57 17.07 12z",transform:"translate(-21.14 -37.01)",fill:"url(#X)",opacity:.1})),xe||(xe=sc.createElement("path",{d:"M959.35 787.15a21.28 21.28 0 0 1-2.63 11 21.93 21.93 0 0 1-4.79 6.08h-.09a75.3 75.3 0 0 1-31.51 5.59c-13.94-.53-31.6-.48-37.55 2.63 0 0-20.59 5.65-18.54-2.39 0 0 7.41-7-4.86-20.32 0 0 .71-3.13 3.55-2.33 0 0-6.74-11.14-7.76-12.28-.57-.62 1-5 2.44-8.82.43-1.12.86-2.19 1.24-3.11.67-1.63 1.16-2.77 1.16-2.77.23.13 1.43.84 3.19 1.77 3.31 1.72 8.62 4.16 13.44 4.89 7.41 1.14 13.81 3.52 25.57 0s16.87-8.37 32.85-2.55 23.94 11.86 24.29 22.61z",transform:"translate(-21.14 -37.01)",fill:"url(#Y)"})),ze||(ze=sc.createElement("path",{d:"M959.35 787.15a21.28 21.28 0 0 1-2.63 11c-2.86-11.84-6.53-19.11-18.85-28.25-13.55-10-34.51.88-34.51.88s-17 .75-29.41.75a27.33 27.33 0 0 1-16.34-5.18 17.87 17.87 0 0 1-2.57-2.23l3.81-.88 4.35-1c3.31 1.72 8.62 4.16 13.44 4.89 7.41 1.14 13.81 3.52 25.57 0s16.87-8.37 32.85-2.55 23.94 11.82 24.29 22.57z",transform:"translate(-21.14 -37.01)",fill:"url(#Z)",opacity:.1})),ve||(ve=sc.createElement("path",{d:"M886.31 611.9s-9.2 13.74-8.86 17.76-7.5 12.06-7.5 12.06-8.52 9-8.52 12.73-15.69 35.71-15.69 35.71-20.74 19.24-25.22 22.25-15.34 23.45-19.77 26.13-4.35 22-4.35 22l31.28-32.12s34.77 34.6 36.81 35.27 8.18-28.14 8.18-28.14 19.1-18 24.55-22.91 26.52-38.29 26.52-38.29S942.9 639 941.2 628.66s-17.9-4.19-54.89-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#aa)",opacity:.1})),Me||(Me=sc.createElement("path",{d:"M889.38 611.9s-9.21 13.74-8.86 17.76-7.5 12.06-7.5 12.06-8.53 9-8.53 12.73-15.68 35.71-15.68 35.71-20.81 19.24-25.22 22.25-15.34 23.45-19.78 26.13-4.34 22-4.34 22 35.93-23 49.34 29.28l12.27-17.56s4.44-9.24 6.48-8.57 8.18-28.14 8.18-28.14 19.09-18 24.55-22.91 26.52-38.29 26.52-38.29S946 639 944.26 628.66s-21.64-7.66-54.88-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#ab)",opacity:.1})),ge||(ge=sc.createElement("path",{d:"m832.45 744.66-3.1 17.2c-10.56-7.19-22.13-3.89-28-1.33l1.79-9.59z",transform:"translate(-21.14 -37.01)",fill:"url(#ac)",opacity:.1})),ke||(ke=sc.createElement("path",{d:"M888.36 611.9s-9.21 13.74-8.87 17.76-7.5 12.06-7.5 12.06-8.52 9-8.52 12.73-15.68 35.71-15.68 35.71-20.79 19.24-25.23 22.25-15.34 23.45-19.77 26.13-4.34 22-4.34 22 35.93-23 49.34 29.28l12.27-17.56s4.43-9.24 6.48-8.57 8.18-28.14 8.18-28.14 19.09-18 24.54-22.91 26.53-38.29 26.53-38.29S945 639 943.24 628.66s-17.39-41.21-54.88-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#ad)"})),be||(be=sc.createElement("path",{d:"M729.84 645.41s50.56-18.78 79 6z",transform:"translate(-21.14 -37.01)",fill:"url(#ae)",opacity:.1})),we||(we=sc.createElement("path",{d:"M735.05 657.71s40.47 6.79 55.81 5.45-55.81-5.45-55.81-5.45z",transform:"translate(-21.14 -37.01)",fill:"url(#af)",opacity:.1})),He||(He=sc.createElement("path",{d:"M723.36 504.12s-3.18 20.68 4.38 25.7-4.38-25.7-4.38-25.7z",transform:"translate(-21.14 -37.01)",fill:"url(#ag)",opacity:.1})),Oe||(Oe=sc.createElement("path",{d:"M702.23 512.74s10.58 16.75 11.6 25.46",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#ah)"})),Ge||(Ge=sc.createElement("path",{d:"M731.2 726.79S769.38 755 766.31 768s-2.27 0-2.27 0z",transform:"translate(-21.14 -37.01)",fill:"url(#ai)",opacity:.1})),Te||(Te=sc.createElement("ellipse",{cx:896.31,cy:742.13,rx:1.37,ry:1.35,fill:"url(#aj)",opacity:.1})),Le||(Le=sc.createElement("ellipse",{cx:901.77,cy:770.31,rx:1.37,ry:1.35,fill:"url(#ak)",opacity:.1})),Ce||(Ce=sc.createElement("path",{d:"M903.71 660.64s-24.79 23.63-24.68 35-1.37 26.13-1.37 26.13l8.29-30.1z",transform:"translate(-21.14 -37.01)",fill:"url(#al)",opacity:.1})),Ie||(Ie=sc.createElement("path",{d:"M905.83 637.37s-43.53 34.5-39.83 38.19 39.83-38.19 39.83-38.19z",transform:"translate(-21.14 -37.01)",fill:"url(#am)",opacity:.1})),Pe||(Pe=sc.createElement("path",{d:"M838.39 740.55s20.93 9.57 19.77 13.33-19.77-13.33-19.77-13.33z",transform:"translate(-21.14 -37.01)",fill:"url(#an)",opacity:.1})),je||(je=sc.createElement("ellipse",{cx:864.81,cy:748.78,rx:1.37,ry:1.35,fill:"url(#ao)",opacity:.1})),Ze||(Ze=sc.createElement("ellipse",{cx:846.19,cy:746.18,rx:1.37,ry:1.35,fill:"url(#ap)",opacity:.1})),Fe||(Fe=sc.createElement("ellipse",{cx:881.19,cy:748.25,rx:1.37,ry:1.35,fill:"url(#aq)",opacity:.1})),Se||(Se=sc.createElement("ellipse",{cx:886.06,cy:768.96,rx:1.37,ry:1.35,fill:"url(#ar)",opacity:.1})),Ve||(Ve=sc.createElement("ellipse",{cx:889.38,cy:745.55,rx:1.37,ry:1.35,fill:"url(#as)",opacity:.1})),Ae||(Ae=sc.createElement("ellipse",{cx:893.72,cy:768.96,rx:1.37,ry:1.35,fill:"url(#at)",opacity:.1})),qe||(qe=sc.createElement("ellipse",{cx:872.64,cy:749.6,rx:1.37,ry:1.35,fill:"url(#au)",opacity:.1})),De||(De=sc.createElement("ellipse",{cx:876.21,cy:770.31,rx:1.37,ry:1.35,fill:"url(#av)",opacity:.1})),Ne||(Ne=sc.createElement("ellipse",{cx:856.52,cy:748.25,rx:1.37,ry:1.35,fill:"url(#aw)",opacity:.1})),_e||(_e=sc.createElement("path",{d:"M844.17 668.88c-.34 1.84-.47 3-.47 3s-19.09 29.82-32.39 33.84c0 0-30.14 21.83-42.47 22.08l55.43-37.49z",transform:"translate(-21.14 -37.01)",fill:"url(#ax)",opacity:.1})),Ue||(Ue=sc.createElement("path",{d:"m866.54 588.63-2.12 10.22s-.12.68-.36 1.88c-1.59 8.28-8.19 41.29-13.55 48-6.13 7.71-7.83 22.11-7.83 22.11s-19.09 29.82-32.39 33.84c0 0-51.82 37.52-47.38 14.73s34.42-31.82 34.42-31.82 4.09-7.71 4.09-9.38 8.87-12.06 8.87-12.06 7.84-14.08 8.18-17.09 14-58.3 14-58.3l8.07-.51z",transform:"translate(-21.14 -37.01)",fill:"url(#ay)"})),Be||(Be=sc.createElement("path",{d:"m866.54 588.63-2.12 10.22s-.12.68-.36 1.88c-10.4 1.86-27.61 4.19-30-.22-1.1-2 1.88-5.86 6.48-10.23z",transform:"translate(-21.14 -37.01)",fill:"url(#az)",opacity:.1})),Re||(Re=sc.createElement("path",{d:"M872 597.17S854.74 601 843.41 601h-1.65c-3.88-.15-6.82-.86-7.72-2.5-1.12-2 2-6 6.71-10.44 6.27-5.91 15.42-12.7 21.47-17 3.74-2.66 6.29-4.38 6.29-4.38l3.49 10.04s-.38 1.79-.79 4.33c-.89 5.5-1.87 14.51.79 16.12z",transform:"translate(-21.14 -37.01)",fill:"url(#aA)"})),We||(We=sc.createElement("path",{d:"M765.8 551.93q5.06 12 10.37 23.92a14.78 14.78 0 0 1-3.66 1.29c-6.28 1.32-13.29-1.25-19.44-3.85-9.2-3.88-19.19-8.5-23.35-17.45-3.07-6.61-2.27-14.26-3.45-21.43-1-6.19-3.57-12.12-4-18.37-.55-7.1 1.58-14.06 2.8-21.08 1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06a24.36 24.36 0 0 0-.35 4.36 25 25 0 0 0 .54 4.73c1.52 7.62 5.8 14.85 5.82 22.67 0 4.85-1.64 9.61-1.51 14.47s1.89 9.37 3.75 13.8z",transform:"translate(-21.14 -37.01)",fill:"url(#aB)",opacity:.1})),Xe||(Xe=sc.createElement("path",{d:"M877.79 550.26c-1.71 5.7-5.8 26.46-5.8 26.46s-.38 1.79-.79 4.33c-.75-1-1.47-2-2.2-3-.47-.67-1-1.35-1.45-2a19.18 19.18 0 0 0-5.33-5 9.39 9.39 0 0 0-5-1.4c-2.86.08-5.43 1.65-8 2.89-10.33 5.05-24.68 4.57-31.46-4.61a22.41 22.41 0 0 1-4-12.57c10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.16 30.48 7.45 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#aC)",opacity:.1})),Ke||(Ke=sc.createElement("path",{d:"M774.16 410.87c-1.27 3.85 0 8-.37 12.07-.9 9.49-10.58 16.11-12.77 25.39-1.69 7.11 1.29 14.48 1 21.77-.38 8.22-5 15.92-4.87 24.16.12 9.41 6.33 18 6.36 27.39 0 4.86-1.65 9.62-1.51 14.48s2 9.36 3.85 13.79q5.06 12 10.38 23.92c-7.12 3.64-15.73.55-23.11-2.56-9.21-3.89-19.19-8.49-23.35-17.45-3.06-6.62-2.26-14.26-3.45-21.43-1-6.19-3.57-12.12-4-18.38-.56-7.27 1.69-14.42 2.89-21.62a75 75 0 0 0-2.34-34.26c-2-6.43-4.85-12.63-6.12-19.24s-.71-14 3.54-19.24c4.62-5.72 12.46-7.77 18.27-12.32 6.17-4.84 9.7-12.23 11.94-19.67 1.9-6.33 3.6-13.67 9.49-16.83a15.58 15.58 0 0 1 7.77-1.6c9 .21 17.37 5.26 26.4 5.81 5.15.32 10.26-.85 15.38-1.43 12.69-1.46 26 .77 36.81 7.48s18.75 18.14 19.9 30.64c.68 7.5-1 15.07-.28 22.56a35.83 35.83 0 0 0 10 21.47c3.56 3.64 7.94 6.58 10.69 10.85a28.56 28.56 0 0 1 3.78 11.51c4.41 30.65-12.89 61-10 91.86.46 4.93 2 10.56 6.63 12.54-2.3 3.5-7.85 3.32-11.33 1s-5.58-6.18-8.12-9.5-6.13-6.47-10.36-6.35c-2.86.08-5.43 1.64-8 2.9-10.33 5-24.68 4.55-31.47-4.62-5.12-6.92-4.44-16.36-3.08-24.81s3.13-17.47-.38-25.31c-2.62-5.87-8.15-11.13-7.21-17.47.71-4.85 5-8.27 8.15-12.07 6-7.26 8.23-17 8-26.32s-2.63-18.5-5-27.54c-2-7.35-4-14.94-8.93-20.81a19.68 19.68 0 0 0-19.3-6.93c-3 .53-5.84-.76-9 .11a9.88 9.88 0 0 0-6.88 6.06z",transform:"translate(-21.14 -37.01)",fill:"url(#aD)"})),Je||(Je=sc.createElement("g",{opacity:.1},sc.createElement("path",{d:"M865.76 427.4c.19-4.64.7-9.3.49-13.93-.19 4.64-.71 9.3-.49 13.93z",transform:"translate(-21.14 -37.01)",fill:"url(#aE)"}),sc.createElement("path",{d:"M760.62 450.76a18.65 18.65 0 0 1 .4-2.43c2.2-9.28 11.87-15.9 12.77-25.39a28 28 0 0 0-.06-4.67c-1.1 9.3-10.54 15.87-12.71 25a23.89 23.89 0 0 0-.4 7.49z",transform:"translate(-21.14 -37.01)",fill:"url(#aF)"}),sc.createElement("path",{d:"M726.06 477.69a75 75 0 0 0-3.29-24.58c-2-6.43-4.85-12.62-6.12-19.23a34.43 34.43 0 0 1-.48-3.53 31 31 0 0 0 .48 8.55c1.27 6.61 4.14 12.81 6.12 19.24a75.08 75.08 0 0 1 3.29 19.55z",transform:"translate(-21.14 -37.01)",fill:"url(#aG)"}),sc.createElement("path",{d:"M762.09 533c.38-3.78 1.38-7.52 1.37-11.33a21.48 21.48 0 0 0-.15-2.4c-.39 4-1.47 7.87-1.36 11.85.05.61.05 1.24.14 1.88z",transform:"translate(-21.14 -37.01)",fill:"url(#aH)"}),sc.createElement("path",{d:"M757.25 491.42c.76-7.18 4.38-14.05 4.72-21.32a29.42 29.42 0 0 0-.09-3.87c-.72 7.8-4.88 15.15-4.78 23 .01.77.07 1.47.15 2.19z",transform:"translate(-21.14 -37.01)",fill:"url(#aI)"}),sc.createElement("path",{d:"M883.62 579.88a10 10 0 0 1-8-1.42c-3.48-2.36-5.58-6.17-8.12-9.5s-6.13-6.46-10.36-6.34c-2.86.08-5.43 1.64-8 2.89-10.34 5-24.69 4.56-31.48-4.61a22.18 22.18 0 0 1-4-12c-.34 6.11.4 12.19 4 17 6.79 9.17 21.14 9.66 31.48 4.62 2.56-1.26 5.13-2.82 8-2.9 4.23-.12 7.82 3 10.36 6.35s4.64 7.14 8.12 9.5 9 2.54 11.33-1a8.52 8.52 0 0 1-3.33-2.59z",transform:"translate(-21.14 -37.01)",fill:"url(#aJ)"}),sc.createElement("path",{d:"M880.09 560.24c.74-24.83 11.73-49.42 11-74.13-.76 24.69-11.75 49.28-11 74.13z",transform:"translate(-21.14 -37.01)",fill:"url(#aK)"}),sc.createElement("path",{d:"M816.23 524.13a28.1 28.1 0 0 0-2-13.36c-2.06-4.59-5.88-8.82-7-13.49a8.88 8.88 0 0 0-.22 1.05c-.93 6.34 4.59 11.6 7.22 17.47a24.37 24.37 0 0 1 2 8.33z",transform:"translate(-21.14 -37.01)",fill:"url(#aL)"}),sc.createElement("path",{d:"M753.07 566.25c-9.2-3.88-19.19-8.49-23.35-17.45-3.06-6.61-2.26-14.25-3.45-21.43-1-6.15-3.53-12-4-18.26a33.53 33.53 0 0 0 0 4.91c.48 6.26 3 12.19 4 18.38 1.19 7.17.39 14.81 3.45 21.43 4.16 9 14.15 13.56 23.35 17.45 7.38 3.11 16 6.2 23.11 2.56q-.95-2.13-1.87-4.25c-6.73 2.32-14.5-.49-21.24-3.34z",transform:"translate(-21.14 -37.01)",fill:"url(#aM)"}),sc.createElement("path",{d:"M809.27 411.59c4.9 5.87 7 13.46 8.93 20.81 2.3 8.66 4.6 17.41 5 26.34.06-1.28.09-2.55.06-3.82-.2-9.35-2.62-18.5-5-27.55-2-7.34-4-14.93-8.93-20.8a19.69 19.69 0 0 0-19.3-6.94c-3 .54-5.84-.75-9 .12a9.88 9.88 0 0 0-6.84 6.1 18.37 18.37 0 0 0-.45 7.06 11.29 11.29 0 0 1 .45-2 9.9 9.9 0 0 1 6.84-6.1c3.13-.87 6 .42 9-.11a19.68 19.68 0 0 1 19.24 6.89z",transform:"translate(-21.14 -37.01)",fill:"url(#aN)"}))),Qe||(Qe=sc.createElement("path",{d:"M839.41 581.08s15.88 41.55-20.94 58.3c0 0-66-7.33-86.24-2s-20.88-39.54-11.63-42.22 118.81-14.08 118.81-14.08z",transform:"translate(-21.14 -37.01)",fill:"url(#aO)",opacity:.1})),Ye||(Ye=sc.createElement("path",{d:"M838.39 579.07s15.88 41.55-20.94 58.3c0 0-66-7.33-86.25-2s-20.87-39.54-11.63-42.22 118.82-14.08 118.82-14.08z",transform:"translate(-21.14 -37.01)",fill:"url(#aP)"})),$e||($e=sc.createElement("path",{d:"m701.28 592 5.78 33.67s1.45-25.41-5.78-33.67z",transform:"translate(-21.14 -37.01)",fill:"url(#aQ)",opacity:.1})),et||(et=sc.createElement("path",{d:"M784 552.61s-1.31 15.07-1.93 19.76 4.3-18.37 1.93-19.76z",transform:"translate(-21.14 -37.01)",fill:"url(#aR)",opacity:.1})),tt||(tt=sc.createElement("path",{d:"M799.77 769s14 24.36 25.18 7.1",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#aS)"})),at||(at=sc.createElement("path",{d:"M862.93 787.42s34.07 17.41 21.65 24.3",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#aT)"})),lt||(lt=sc.createElement("path",{d:"M545.43 416.76s-.02-.06 0 0z",fill:"#9d9cb5"})),ct||(ct=sc.createElement("path",{d:"m529.72 469.79-4.58 3.14c0-2.2 8.05-10.94 8.05-10.94-2.09-1.2-9.46 4.65-9.46 4.65.87-3.83 7.39-8.46 7.39-8.46-.58-.3-5.6 2.28-5.6 2.28 1.65-3.52 8.42-8.65 8.42-8.65-.84-.54-5.8 1.64-6 1.74.26-.19 8.51-6.08 7.78-6.26s-7 1.14-7 1.14c-.49-2.24 9.79-12.84 9.79-12.84s1.28-1.84.82-1.36-5.23 2.18-5.23 2.18c.07-3.32 10-8.46 10-8.46l-4.52-.17 3-3.25c-.14.1-4.8 3.73-4.86 2.67s4.38-5.34 5.34-6 3.94-.13 3.94-.13-1.28-3.79-1.53-4.33c.71.59 10.84 4.94 10.84 4.94l.88.17c2.37.48 8.76 1.8 9.76 2.49s5.83 1.65 8.68 2.21l2 .38-7.2 45.92h-2c-1.16 0-2.32-.1-3.48-.2-1.81-.16-3.62-.42-5.42-.76-3.62-.69-8.37-1.6-12-2.32-2.27-.45-4.12-.84-5-1.05-3.63-.86-8.16 2-9.2 2s-7.27 5.28-7.27 5.28c-.01-1.03 3.66-6.01 3.66-6.01z",fill:"#e4e3f9"})),rt||(rt=sc.createElement("path",{d:"M529.68 469.7c.07 0 7.11-2.93 9.47-3.86s30.49 1.12 31.69 1.2v.19c-.29 0-29.27-2.15-31.6-1.22s-9.4 3.84-9.47 3.86z",opacity:.1})),nt||(nt=sc.createElement("path",{d:"M545.43 416.76s-.02-.06 0 0z",fill:"none"})),it||(it=sc.createElement("path",{d:"M537.62 427.13a58.51 58.51 0 0 1 6-4.3c1.61-.9 4.74-.26 7 .21a15.38 15.38 0 0 0 2 .34c1.41 0 9.06 2.21 9.38 2.31.08 0 8.37 2 9.42 1.93a31.23 31.23 0 0 1 4.94.91v.18a31.86 31.86 0 0 0-4.89-.91c-1.08.06-9.13-1.85-9.47-1.93-.09 0-8-2.3-9.34-2.31a13.43 13.43 0 0 1-2.06-.34c-2.14-.43-5.36-1.09-6.91-.23a58.6 58.6 0 0 0-6 4.28z",opacity:.1})),st||(st=sc.createElement("path",{d:"M539.28 427.65c.71-.8 9-1.09 9.77-.8s10.27 1.24 10.77 1.23c.16 0 12.52 2.43 16.3 3.18v.18c-5.51-1.09-16-3.16-16.27-3.17-.05 0-10-.9-10.84-1.25s-9 .14-9.56.75zm-5.27 8.71c2.56-4.43 17-5.73 17.1-5.74 1.53-.14 23.42 4.09 24.36 4.27v.18c-.23 0-22.8-4.4-24.31-4.27-4 .35-14.87 2.05-17 5.65zm-.97 5.12c4.06-4.65 17-4.32 17.09-4.32 1 0 22.92 3.34 23.86 3.48v.18c-.23 0-22.88-3.43-23.83-3.47-.13 0-12.94-.33-16.95 4.25z",opacity:.1})),ot||(ot=sc.createElement("path",{d:"M529.19 446.63c1.53-2.9 5.81-5 12.74-6.16a69.62 69.62 0 0 1 10.14-.93l22.35 2.6v.18l-22.34-2.59c-.18 0-19.35.15-22.77 7.12l-.17-.08s.03-.1.05-.14z",opacity:.1})),mt||(mt=sc.createElement("path",{d:"M528.64 448.37c2.14-2.38 10.52-4.28 14.53-4.76 3.77-.46 28.71 3.55 29.77 3.72v.18c-.25 0-26-4.17-29.72-3.72s-12.33 2.39-14.41 4.7z",opacity:.1})),dt||(dt=sc.createElement("path",{d:"m533.54 449.26 9.45-1.59a24.74 24.74 0 0 1 7.34-.14l10.53 1.37 11.54 2.22v.18l-11.53-2.22-10.48-1.36a24.4 24.4 0 0 0-7.29.13l-9.45 1.59zm-7.91 10.73c2-3.7 10.66-5.54 15.43-6.55 1-.21 1.81-.38 2.28-.52 2.69-.77 27.88 1.81 28.95 1.92v.19c-.26 0-26.22-2.69-28.88-1.93-.48.14-1.28.31-2.29.52-4.57 1-14.08 3-15.49 6.89l-.18-.07a4.43 4.43 0 0 1 .18-.45z",opacity:.1})),ft||(ft=sc.createElement("path",{d:"M530.86 458.23c.05 0 4.81-1.54 5.9-2.05s13.55-.82 14.08-.84l21.34 1.33v.19l-21.32-1.33c-.12 0-12.92.32-14 .82s-5.73 2-5.93 2.06z",opacity:.1})),pt||(pt=sc.createElement("path",{d:"M523.66 466.59c4.69-6.72 22.61-9.33 24.22-9.22s23.85 1.56 24.07 1.58v.18l-24.09-1.57c-1.59-.12-19.39 2.47-24 9.13z",opacity:.1})),ht||(ht=sc.createElement("path",{d:"M525.61 471.52c4.24-8.06 22.47-9.88 24.16-9.8l21.3 1v.18l-21.3-1c-1.77-.09-21.8 1.91-24.53 11h-.18a7.53 7.53 0 0 1 .55-1.38z",opacity:.1})),yt||(yt=sc.createElement("path",{d:"m568.38 472.85 7.21-46.28 2 .38-7.2 45.92c-.68 0-1.35 0-2.01-.02z",opacity:.1})),ut||(ut=sc.createElement("path",{d:"m568.86 473.86 7.52-48.24 9.22 3 6.74 2.19s4.72-1 6.22 2.5-3.29 13.69-1 15.89 21.9 4 21.9 4 28.4 7.7 31.4 8.15 19.23 10.12 19.23 10.12c.89 2.28-10 2.39-12.49 3.06s-25.77-3.79-27.29-5.15-23.22-7.33-23.22-7.33c-7-3.68-11.48-2.13-11.48-2.13a55.25 55.25 0 0 1-3.37 13.89 3.71 3.71 0 0 1-3.91 2.17l-10.47-.86z",fill:"#535461"})),Et||(Et=sc.createElement("path",{d:"m568.86 473.86 7.52-48.24 9.22 3c-1.44 4.65-10.32 34-7.73 46.5z",opacity:.1})),xt||(xt=sc.createElement("path",{d:"m529.72 469.79-4.58 3.14c0-2.2 8.05-10.94 8.05-10.94-2.08-1.2-9.46 4.65-9.46 4.65.87-3.83 7.39-8.46 7.39-8.46-.58-.31-5.6 2.28-5.6 2.28 1.65-3.53 8.42-8.65 8.42-8.65-.84-.54-5.8 1.64-6 1.74.26-.19 8.51-6.08 7.78-6.26s-7 1.14-7 1.14c-.49-2.25 9.79-12.85 9.79-12.85s1.28-1.83.82-1.35-5.23 2.17-5.23 2.17c.07-3.31 10-8.45 10-8.45l-4.51-.17 3-3.25c-.14.1-4.8 3.73-4.86 2.67s4.38-5.34 5.34-6 3.94-.13 3.94-.13-1.28-3.79-1.53-4.33c.71.59 10.84 4.94 10.84 4.94l.88.17c-.93.76-1.87 1.44-2.47 2a7.38 7.38 0 0 0-2.16 2.69 5.54 5.54 0 0 0 .67 4.48c.76 1.36 1.79 2.55 2.54 3.92a2.68 2.68 0 0 1 .41 1.93 3.3 3.3 0 0 1-1.29 1.51 25.19 25.19 0 0 0-8.13 11.44 3.2 3.2 0 0 0-.25 1.39 4.76 4.76 0 0 0 .81 1.74 6.39 6.39 0 0 1-.79 7.24c-.81.89-1.94 1.68-2 2.87a3.71 3.71 0 0 0 .58 1.92c.8 1.52 1.59 3.05 2.39 4.59-2.27-.46-4.12-.84-5-1.05-3.63-.86-8.16 2-9.19 2s-7.28 5.28-7.28 5.28c.01-1.03 3.68-6.01 3.68-6.01z",fill:"#a4a4a4"})),zt||(zt=sc.createElement("path",{d:"m683.05 740.68 4.34 17.66s97.27 32 128.8 2-3.47-88.35-3.47-88.35l-21.33-22.33-56.34-6.67h-20z",fill:"#5e52ad"})),vt||(vt=sc.createElement("path",{d:"m683.05 740.68 4.34 17.66s97.27 32 128.8 2-3.47-88.35-3.47-88.35l-21.33-22.33-56.34-6.67h-20z",opacity:.03})),Mt||(Mt=sc.createElement("path",{d:"m919.39 611.99-9.34 10.83-32.33 58.84-11 20.67s-8.31 10.52-7.49 14.92 3.16 37.08-24.84 39.74-88.67-64-88.67-64l2.47-1.7 54.2-37.3 19.47-21.29 5.2-5.69s25.34-34.66 24.67-40 25.33-37.33 40.33-36.33 26.34 1 31.67 20.33-4.34 40.98-4.34 40.98z",fill:"#5e52ad"})),gt||(gt=sc.createElement("path",{fill:"#784d55",d:"M725.47 386.93h102.75v77.75H725.47z"})),kt||(kt=sc.createElement("path",{opacity:.1,d:"M725.47 386.93h102.75v77.75H725.47z"})),bt||(bt=sc.createElement("path",{d:"M697.39 548.87c0 1.42-.13 3.37-.33 5.57-.77 8.55-2.67 20.91-2.67 20.91s-4 21.72-3 23.49-1 16.25-2.34 19.43-9.33 0-9.33 0l-26.39-70.86-1.47-3.91-.57-1.54.6-2.37 2.15-8.58s43.35 10.98 43.35 17.86zm120.66-70.08v11.2l-8 39.14-17.33 23.24-38.33 5-36.67-14.38s-24.33-39.27 4-61.4a54.2 54.2 0 0 0 16.23-20.65 67 67 0 0 0 5.61-26.53 61.53 61.53 0 0 0-.84-11.74s60-27.66 50.33 0a31.43 31.43 0 0 0-1.36 14.87 46.8 46.8 0 0 0 4.8 14.59c7.75 15.31 21.56 26.66 21.56 26.66z",fill:"#f8bdc5"})),wt||(wt=sc.createElement("path",{d:"M793.05 422.64a31.43 31.43 0 0 0-1.36 14.87 40.36 40.36 0 0 1-48.13-3.13 61.53 61.53 0 0 0-.84-11.74s60-27.65 50.33 0z",opacity:.1})),Ht||(Ht=sc.createElement("circle",{cx:769.72,cy:401.68,r:40.33,fill:"#f8bdc5"})),Ot||(Ot=sc.createElement("path",{d:"M818.05 478.79v11.2l-8 39.14-17.33 23.24-38.33 5-36.67-14.38s-24.33-39.27 4-61.4a54.2 54.2 0 0 0 16.23-20.65c-22.16 84.84 25.08 80.44 25.08 80.44 43.2 0 34.51-80.63 33.46-89.25 7.75 15.31 21.56 26.66 21.56 26.66z",opacity:.1})),Gt||(Gt=sc.createElement("path",{d:"M854.72 516.68c-1.67 5.67-5.67 26.33-5.67 26.33s-1.12.44-2.92 1.27c-6.9 3.17-23.77 12-25 22.91v.49c-1 14-13.33 43.67-19.66 57s3 27.67 3 27.67l-12.67 3s-17.67 2.33-32.67-1.34-13 6-22.33 2.67-40-5.67-45-8.67-9.33-29.66-6.67-33 11-73.66 11-73.66-33.66-31.34-33-51.67 25-21.33 25-21.33 9.36-3.28 17.29-6.69c1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06 1.57.2 2.52.34 2.52.34-.86 3-1.63 5.91-2.33 8.71-13.6 54.61 2.36 70.94 14.54 75.75a26.93 26.93 0 0 0 11.25 1.93c15.31 0 24.11-10.13 29-23.6 9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 8.95 30.33 7.28 36.02z",opacity:.1})),Tt||(Tt=sc.createElement("path",{d:"M854.72 514.68c-1.67 5.67-5.67 26.33-5.67 26.33s-1.12.44-2.92 1.27c-6.9 3.17-23.77 12-25 22.91v.49c-1 14-13.33 43.67-19.66 57s3 27.67 3 27.67l-12.67 3s-17.67 2.33-32.67-1.34-13 6-22.33 2.67-40-5.67-45-8.67-9.33-29.66-6.67-33 11-73.66 11-73.66-33.66-31.34-33-51.67 25-21.33 25-21.33 9.36-3.28 17.29-6.69c1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06 1.57.2 2.52.34 2.52.34-.86 3-1.63 5.91-2.33 8.71-13.6 54.61 2.36 70.94 14.54 75.75a26.93 26.93 0 0 0 11.25 1.93c15.31 0 24.11-10.13 29-23.6 9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 8.95 30.33 7.28 36.02z",fill:"#eb6475"})),Lt||(Lt=sc.createElement("path",{d:"M697.39 548.87v6l-.33-.42c-14.07-17.83-36.86-10-43.73-7-1.3.56-2 .94-2 .94s.39-2.29.57-4.85a27 27 0 0 0 0-3.91l2.15-8.58s43.34 10.94 43.34 17.82z",opacity:.1})),Ct||(Ct=sc.createElement("path",{d:"m673.39 485.68-8.69 11.31s-14.65 35.66-13.31 38.32-.09 11-.09 11 29.42-15.29 46.09 6.52v-11.15s1.66-4.67 2.33-6 0-11.67 0-11.67z",fill:"#eb6475"})),It||(It=sc.createElement("path",{d:"M689.05 618.35a5.33 5.33 0 0 1-.34 1.11c-4.25 9.66-36.09-4.45-36.09-4.45s-.27-1.33-.69-3.49c-1.68-8.69-5.68-30.9-3.54-35.17 2.66-5.34 2.91-22 2.91-22 8.92-16 4.42-48.34 4.42-48.34 4-7-2.33-13.33-2.33-13.33s-55.34-32.67-17.34-37 45.34 41.65 42.34 46.67 2.33 45.64 2.33 45.64l5.33 31.41s5.3 27.16 3 38.95zm160.29 157.21-9.89-.49-38.48-1.89-.05-1.23-.82-19.89 29.22-14.95.04-.02.37.27.75.53.81.57 16.69 11.91 1.36 25.19z",fill:"#f8bdc5"})),Pt||(Pt=sc.createElement("path",{opacity:.1,d:"m831.39 738.35-.1.11-30.37 33.49-.82-19.89 29.22-14.95.41.25 1.66.99zM688.71 619.46c-4.25 9.66-36.09-4.45-36.09-4.45s-.27-1.33-.69-3.49c4.25-1.78 9.65-2.15 16.79-.17 9.26 2.57 15.64 5.49 19.99 8.11z"})),jt||(jt=sc.createElement("path",{d:"M687.39 758.34s-18.67-9.35-19.67-14.35-6.33-20.67-8.67-24-16.66-26-20-35.67-13.33-37-6-47.33 11.67-30.33 35.67-23.67 28.67 15.67 28.67 15.67l2.63 5.67s58 53.94 59 55.63 32 25 32 25l38.34 23-32.31 35.7s-41-16-42.33-22.67-12.6-12.66-12.6-12.66l-15.4-6z",fill:"#5e52ad"})),Zt||(Zt=sc.createElement("path",{d:"M648.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",opacity:.1})),Ft||(Ft=sc.createElement("path",{d:"M646.39 680.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",opacity:.1})),St||(St=sc.createElement("path",{d:"M646.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",fill:"#5e52ad"})),Vt||(Vt=sc.createElement("path",{d:"M646.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",fill:"#5e52ad"})),At||(At=sc.createElement("path",{d:"M653.72 698.99s20.14 33.39 31.07 36.36-31.07-36.36-31.07-36.36z",opacity:.1})),qt||(qt=sc.createElement("path",{fill:"#f8bdc5",d:"m810.39 708.1-3.03 17.11-2.78 15.71-1.19 6.76-26.25-8.33 2.68-14.65.15-.81 1.75-9.54 28.67-6.25z"})),Dt||(Dt=sc.createElement("path",{d:"m804.58 740.92-1.19 6.76-26.25-8.33 2.72-14.65c3.84-4.93 13.94-1 13.94-1 14-1.67 9.29 14.67 9.29 14.67a5.4 5.4 0 0 1 1.49 2.55z",opacity:.1})),Nt||(Nt=sc.createElement("path",{d:"M807.39 796.35c-7-6.34-32.34-9.34-40.67-9.34s-5-2.66-5-2.66l-5.51-4c-3.77-2.73-2-9.19-.57-13 .69-1.78 1.32-3 1.32-3s2.09-15.67 4.18-20.34 17.29-11.72 17.29-11.72c-1.29-14 15.33-7.61 15.33-7.61 14-1.67 9.29 14.67 9.29 14.67 2.67 2 3.34 12.66 2.67 16.33s2.33 15.31 2.33 15.31 2.81 10.55 4.51 16.71c.33 1.18.61 2.21.83 3 1.33 4.65-6 5.65-6 5.65z",fill:"#ffc075"})),_t||(_t=sc.createElement("path",{d:"M807.39 796.35c-7-6.34-32.34-9.34-40.67-9.34s-5-2.66-5-2.66l-5.51-4c-3.77-2.73-2-9.19-.57-13l7.46 6.67s-2.13 1.67 0 1.67h8.76s28 5.93 40.72 12c.33 1.18.61 2.21.83 3 1.31 4.66-6.02 5.66-6.02 5.66z",opacity:.1})),Ut||(Ut=sc.createElement("circle",{cx:777.14,cy:738.43,r:1.34,opacity:.1})),Bt||(Bt=sc.createElement("circle",{cx:779.82,cy:749.02,r:1.34,opacity:.1})),Rt||(Rt=sc.createElement("circle",{cx:779.1,cy:745.09,r:1.34,opacity:.1})),Wt||(Wt=sc.createElement("circle",{cx:779.82,cy:754.31,r:1.34,opacity:.1})),Xt||(Xt=sc.createElement("circle",{cx:773.38,cy:759.78,r:1.34,opacity:.1})),Kt||(Kt=sc.createElement("path",{d:"m849.34 775.56-9.89-.49a3.46 3.46 0 0 1 0-1.89s7.25-6.94-4.75-20.22c0 0 .69-3.11 3.47-2.32 0 0-6.59-11.08-7.59-12.21a.89.89 0 0 1-.12-.54l.81.57 16.69 11.91z",opacity:.1})),Jt||(Jt=sc.createElement("path",{d:"M934.47 750.37a21.43 21.43 0 0 1-2.61 10.92 21.73 21.73 0 0 1-4.68 6.05h-.09a72.61 72.61 0 0 1-30.81 5.55c-13.63-.51-30.9-.47-36.72 2.63 0 0-20.13 5.62-18.13-2.38 0 0 7.25-6.94-4.75-20.22 0 0 .69-3.11 3.47-2.32 0 0-6.59-11.08-7.59-12.21-.55-.62.94-5 2.39-8.78.42-1.11.84-2.18 1.21-3.09.66-1.63 1.14-2.76 1.14-2.76.22.13 1.39.84 3.12 1.76 3.23 1.71 8.42 4.14 13.14 4.87 7.24 1.13 13.5 3.5 25 0s16.5-8.33 32.12-2.54 23.42 11.83 23.79 22.52z",fill:"#ffc075"})),Qt||(Qt=sc.createElement("path",{d:"M934.47 750.37a21.43 21.43 0 0 1-2.61 10.92c-2.8-11.78-6.38-19-18.43-28.11-13.25-10-33.75.88-33.75.88s-16.62.74-28.75.74a26.41 26.41 0 0 1-16-5.15 17.27 17.27 0 0 1-2.51-2.22l3.72-.87 4.26-1c3.23 1.71 8.42 4.14 13.14 4.87 7.24 1.13 13.5 3.5 25 0s16.5-8.33 32.12-2.54 23.44 11.79 23.81 22.48z",opacity:.1})),Yt||(Yt=sc.createElement("path",{d:"M863.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87l30.58-32s34 34.42 36 35.09 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-17.5-4.11-53.67-16.63z",opacity:.1})),$t||($t=sc.createElement("path",{d:"M866.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87 35.13-22.87 48.25 29.13l12-17.48s4.33-9.19 6.33-8.52 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-21.17-7.67-53.67-16.67z",opacity:.1})),ea||(ea=sc.createElement("path",{d:"m810.39 708.1-3 17.11c-10.33-7.15-21.64-3.87-27.39-1.32l1.75-9.54z",opacity:.1})),ta||(ta=sc.createElement("path",{d:"M865.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87 35.13-22.87 48.25 29.13l12-17.48s4.33-9.19 6.33-8.52 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-17-40.98-53.67-16.67z",fill:"#5e52ad"})),aa||(aa=sc.createElement("path",{d:"M710.05 609.34s49.44-18.68 77.28 6zm5.1 12.25s39.57 6.75 54.57 5.42-54.57-5.42-54.57-5.42zm-11.43-152.82s-3.11 20.57 4.28 25.57-4.28-25.57-4.28-25.57zm-20.67 8.57s10.36 16.67 11.35 25.34m16.99 187.63s37.33 28 34.33 41-2.22 0-2.22 0z",opacity:.1})),la||(la=sc.createElement("circle",{cx:893.5,cy:742.4,r:1.34,opacity:.1})),ca||(ca=sc.createElement("circle",{cx:898.85,cy:770.44,r:1.34,opacity:.1})),ra||(ra=sc.createElement("path",{d:"M880.06 624.5s-24.2 23.49-24.12 34.84-1.34 26-1.34 26l8.1-30zm2.08-23.16s-42.56 34.34-39 38 39-38 39-38zm-65.95 102.65s20.47 9.52 19.33 13.26-19.33-13.26-19.33-13.26z",opacity:.1})),na||(na=sc.createElement("circle",{cx:862.71,cy:749.02,r:1.34,opacity:.1})),ia||(ia=sc.createElement("circle",{cx:844.49,cy:746.43,r:1.34,opacity:.1})),sa||(sa=sc.createElement("circle",{cx:878.72,cy:748.49,r:1.34,opacity:.1})),oa||(oa=sc.createElement("circle",{cx:883.48,cy:769.1,r:1.34,opacity:.1})),ma||(ma=sc.createElement("circle",{cx:886.72,cy:745.81,r:1.34,opacity:.1})),da||(da=sc.createElement("circle",{cx:890.97,cy:769.1,r:1.34,opacity:.1})),fa||(fa=sc.createElement("circle",{cx:870.35,cy:749.83,r:1.34,opacity:.1})),pa||(pa=sc.createElement("circle",{cx:873.85,cy:770.44,r:1.34,opacity:.1})),ha||(ha=sc.createElement("circle",{cx:854.6,cy:748.49,r:1.34,opacity:.1})),ya||(ya=sc.createElement("path",{d:"M821.86 632.7c-.33 1.83-.46 3-.46 3s-18.67 29.67-31.67 33.67c0 0-29.47 21.72-41.53 22l54.2-37.3z",opacity:.1})),ua||(ua=sc.createElement("path",{d:"m843.72 552.86-2.07 10.13s-.12.68-.35 1.88c-1.56 8.23-8 41.08-13.25 47.78-6 7.67-7.66 22-7.66 22s-18.67 29.67-31.67 33.67c0 0-50.67 37.33-46.33 14.66s33.66-31.66 33.66-31.66 4-7.67 4-9.34 8.67-12 8.67-12 7.67-14 8-17 13.67-58 13.67-58l7.89-.51z",fill:"#f8bdc5"})),Ea||(Ea=sc.createElement("path",{d:"m843.72 552.86-2.07 10.13s-.12.68-.35 1.88c-10.17 1.85-27 4.16-29.36-.22-1.07-2 1.84-5.83 6.34-10.18z",opacity:.1})),xa||(xa=sc.createElement("path",{d:"M849.05 561.35s-16.87 3.84-28 3.84h-1.61c-3.79-.15-6.67-.85-7.55-2.48-1.09-2 1.93-6 6.56-10.39 6.13-5.88 15.08-12.64 21-16.93 3.65-2.64 6.15-4.35 6.15-4.35l3.4 10s-.37 1.78-.77 4.3c-.81 5.45-1.77 14.41.82 16.01z",fill:"#eb6475"})),za||(za=sc.createElement("path",{d:"M745.22 516.34q4.93 12 10.14 23.8a14 14 0 0 1-3.58 1.28c-6.14 1.32-13-1.24-19-3.83-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.22-14.19-3.38-21.32-1-6.16-3.49-12.06-4-18.28-.53-7.06 1.55-14 2.74-21 1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06a25.16 25.16 0 0 0-.34 4.34 24.8 24.8 0 0 0 .53 4.71c1.48 7.58 5.67 14.77 5.69 22.55 0 4.83-1.61 9.57-1.48 14.4s1.98 9.36 3.8 13.77zm109.5-1.66c-1.67 5.67-5.67 26.33-5.67 26.33s-.37 1.78-.77 4.3c-.74-1-1.44-2-2.15-3a66.3 66.3 0 0 0-1.42-2 19.08 19.08 0 0 0-5.21-4.93 9.12 9.12 0 0 0-4.92-1.39c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59a22.6 22.6 0 0 1-3.93-12.51c9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 9 30.29 7.33 35.98z",opacity:.1})),va||(va=sc.createElement("path",{d:"M753.39 375.99c-1.24 3.83 0 8-.36 12-.88 9.44-10.34 16-12.49 25.26-1.65 7.07 1.26 14.41.93 21.66-.37 8.19-4.86 15.84-4.76 24 .12 9.36 6.19 17.89 6.22 27.25 0 4.84-1.61 9.58-1.48 14.41s1.95 9.31 3.77 13.72q4.93 12 10.14 23.8c-7 3.62-15.38.54-22.59-2.55-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.21-14.19-3.38-21.32-1-6.16-3.49-12.06-4-18.28-.54-7.24 1.66-14.36 2.83-21.52a75.92 75.92 0 0 0-2.25-34.07c-1.94-6.4-4.74-12.56-6-19.14s-.7-13.9 3.46-19.14c4.51-5.69 12.18-7.74 17.87-12.27 6-4.8 9.48-12.16 11.67-19.56 1.86-6.3 3.52-13.6 9.28-16.75a15 15 0 0 1 7.59-1.59c8.85.21 17 5.23 25.82 5.78 5 .32 10-.84 15-1.43 12.41-1.45 25.43.77 36 7.45s18.34 18.05 19.46 30.49c.67 7.46-1 15-.28 22.44a36 36 0 0 0 9.85 21.4c3.48 3.62 7.77 6.54 10.45 10.79a28.64 28.64 0 0 1 3.7 11.46c4.32 30.48-12.6 60.72-9.78 91.38.45 4.91 2 10.51 6.48 12.49-2.24 3.47-7.67 3.3-11.07 1s-5.46-6.15-7.94-9.46-6-6.43-10.13-6.31c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59-5-6.89-4.35-16.28-3-24.69s3.06-17.38-.36-25.18c-2.57-5.84-8-11.08-7.06-17.38.7-4.83 4.89-8.23 8-12 5.87-7.22 8.05-16.88 7.85-26.18s-2.56-18.41-4.92-27.41c-1.91-7.31-3.94-14.86-8.73-20.7a19.07 19.07 0 0 0-18.87-6.9c-2.94.53-5.71-.75-8.77.11a9.75 9.75 0 0 0-6.73 6.01z",fill:"#784d55"})),Ma||(Ma=sc.createElement("path",{d:"M842.96 392.44c.18-4.62.68-9.25.47-13.86-.18 4.62-.69 9.25-.47 13.86zm-102.81 23.24a18.46 18.46 0 0 1 .39-2.42c2.15-9.24 11.61-15.82 12.49-25.26a30.11 30.11 0 0 0 0-4.65c-1.09 9.26-10.32 15.79-12.44 24.91a24 24 0 0 0-.44 7.42zm-33.8 26.79a75.77 75.77 0 0 0-3.2-24.45c-1.95-6.4-4.75-12.56-6-19.14a33.67 33.67 0 0 1-.47-3.51 31.5 31.5 0 0 0 .47 8.51c1.24 6.58 4 12.74 6 19.14a76 76 0 0 1 3.2 19.45zm35.24 55.01c.37-3.75 1.35-7.48 1.34-11.27a21 21 0 0 0-.15-2.38c-.38 3.93-1.44 7.83-1.33 11.79.02.62.07 1.25.14 1.86zm-4.73-41.34c.75-7.15 4.29-14 4.62-21.22a30.93 30.93 0 0 0-.08-3.85c-.71 7.76-4.77 15.08-4.68 22.89 0 .73.06 1.46.14 2.18zm123.57 88.01a9.67 9.67 0 0 1-7.78-1.41c-3.41-2.35-5.46-6.15-7.94-9.46s-6-6.43-10.13-6.31c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59a22.21 22.21 0 0 1-3.89-11.94c-.34 6.07.38 12.12 3.89 16.94 6.63 9.13 20.67 9.61 30.77 4.59 2.51-1.24 5-2.8 7.82-2.88 4.14-.12 7.64 3 10.13 6.31s4.53 7.11 7.94 9.46 8.83 2.52 11.08-1a8.33 8.33 0 0 1-3.3-2.59zm-3.46-19.55c.72-24.69 11.47-49.16 10.71-73.75-.7 24.57-11.44 49.03-10.71 73.75zm-62.44-35.92a28.4 28.4 0 0 0-1.92-13.29c-2-4.57-5.75-8.78-6.84-13.42-.09.34-.16.68-.22 1-.91 6.3 4.49 11.54 7.06 17.38a24.8 24.8 0 0 1 1.92 8.33zm-61.76 41.91c-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.21-14.19-3.38-21.32-1-6.13-3.45-12-3.94-18.17a33.25 33.25 0 0 0 0 4.89c.47 6.22 3 12.12 4 18.28 1.17 7.13.39 14.74 3.38 21.32 4.06 8.91 13.83 13.5 22.83 17.36 7.22 3.09 15.63 6.17 22.59 2.55-.61-1.41-1.21-2.82-1.83-4.23-6.63 2.3-14.23-.49-20.82-3.32zm54.95-153.88c4.79 5.84 6.82 13.39 8.73 20.7 2.26 8.61 4.5 17.32 4.86 26.21.07-1.27.09-2.54.06-3.8-.19-9.31-2.56-18.41-4.92-27.41-1.91-7.31-3.94-14.86-8.73-20.7a19.06 19.06 0 0 0-18.87-6.9c-2.94.53-5.71-.75-8.77.12a9.72 9.72 0 0 0-6.69 6.06 18.82 18.82 0 0 0-.44 7 12.07 12.07 0 0 1 .44-2 9.72 9.72 0 0 1 6.69-6.06c3.06-.87 5.83.41 8.77-.12a19.06 19.06 0 0 1 18.87 6.9zm29.47 168.63s15.53 41.34-20.47 58c0 0-64.48-7.29-84.33-2s-20.41-39.33-11.37-42 116.17-14 116.17-14z",opacity:.1})),ga||(ga=sc.createElement("path",{d:"M816.19 543.34s15.53 41.34-20.47 58c0 0-64.48-7.29-84.33-2s-20.41-39.33-11.37-42 116.17-14 116.17-14z",fill:"#eb6475"})),ka||(ka=sc.createElement("path",{d:"m682.13 556.22 5.65 33.5s1.42-25.29-5.65-33.5zm80.9-39.23s-1.29 15-1.89 19.67 4.19-18.32 1.89-19.67z",opacity:.1})),ba||(ba=sc.createElement("path",{d:"M778.43 732.29s13.7 24.23 24.62 7.06m37.14 11.29s33.31 17.35 21.17 24.18",fill:"none",stroke:"#000",strokeMiterlimit:10,opacity:.1})),wa||(wa=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-10.25 3.64-32.64 4.06-32.64 4.06l-42.23-1-20.9-3a87.51 87.51 0 0 1-9.92-3.47c-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.6 6.76 53.62 13.69z",fill:"#534d72"})),Ha||(Ha=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-10.25 3.64-32.64 4.06-32.64 4.06l-42.23-1-20.9-3a87.51 87.51 0 0 1-9.92-3.47c-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.6 6.76 53.62 13.69z",opacity:.1})),Oa||(Oa=sc.createElement("path",{d:"m485.96 633.14-1.25 26.38-.56 11.82-1.85 39-.5 10.7-1.36 28.57c-32.47 16.11-102.29 0-102.29 0l-1.08-28.57-.53-14-1.35-35.73-.55-14.58-.94-25.11c39.26 12.98 112.26 1.52 112.26 1.52z",fill:"#534d72"})),Ga||(Ga=sc.createElement("path",{d:"m484.71 659.52-.56 11.82h-109l-.55-14.58c14.07 4.4 72.97 21.01 110.11 2.76zm-2.41 50.84-.5 10.7H377.07l-.53-14c16.45 4.98 70.06 19.05 105.76 3.3z",opacity:.1})),Ta||(Ta=sc.createElement("ellipse",{cx:429.83,cy:667.8,rx:26.28,ry:11.12,opacity:.1})),La||(La=sc.createElement("ellipse",{cx:429.83,cy:667.16,rx:26.28,ry:11.12,fill:"#a4a4a4"})),Ca||(Ca=sc.createElement("ellipse",{cx:432.69,cy:633.25,rx:39.47,ry:4.99,opacity:.1})),Ia||(Ia=sc.createElement("ellipse",{cx:432.91,cy:633.67,rx:39.47,ry:4.99,fill:"#a4a4a4"})),Pa||(Pa=sc.createElement("path",{d:"M486.6 630.42c-.41 1.43-2.26 2.6-4.93 3.55-6.93-18.28-51.81-13.35-51.81-13.35-32.35-2-49.22 7-53.85 10-2.49-1.09-4.58-2.31-5-3.42 0 0 29.71-12.84 62-10.4s55.57 6.68 53.59 13.62z",opacity:.1})),ja||(ja=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-6.93-18.28-51.81-13.35-51.81-13.35-32.35-2-49.22 7-53.85 10-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.57 6.7 53.59 13.63z",fill:"#534d72"})),Za||(Za=sc.createElement("path",{d:"M377.95 743.81s-6.91 3.19-.43 8.49 49.44 8.69 60.27 6.69c0 0 39.37-2.12 44.51-7.75 0 0 .12-3.8-1.77-3.92 0 0-15.21 6.73-48.79 6.15s-55.48-2.88-53.79-9.66z",opacity:.1})),Fa||(Fa=sc.createElement("path",{d:"M377.95 744.23s-6.91 3.19-.43 8.5 49.44 8.7 60.27 6.68c0 0 39.37-2.12 44.51-7.74 0 0 .12-3.81-1.77-3.92 0 0-15.21 6.72-48.79 6.14s-55.48-2.9-53.79-9.66zm-1.26-33.91c-4.16-1.17-20.29-7.58-12.21-35 0 0 8.7-29.4 14-36.4 0 0-.92-1.64-2.22 0s-5.2 11.36-5.2 11.36-16.88 31.93-8.39 50.29c2.93 6.34 8.21 10 13.87 12",fill:"#534d72"})),Sa||(Sa=sc.createElement("path",{d:"M370.94 627.2s-.53 4.68 2.81 6.37 97.57 13.79 112.21 3c0 0 2.12-6.58 0-6.37s-84.46 14.4-115.02-3z",opacity:.1})),Va||(Va=sc.createElement("path",{d:"M370.94 626.77s-.53 4.68 2.81 6.38 97.57 13.78 112.21 3c0 0 2.12-6.58 0-6.37s-84.46 14.4-115.02-3.01z",fill:"#534d72"})),Aa||(Aa=sc.createElement("circle",{cx:378.42,cy:639.66,r:4.83,opacity:.1})),qa||(qa=sc.createElement("circle",{cx:377.74,cy:638.92,r:4.83,fill:"#534d72"})),Da||(Da=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 6.2 2.2 19.74 2.45 19.74 2.45l25.55-.57 12.64-1.8a53.57 53.57 0 0 0 6-2.1c1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.04-32.5 8.24z",fill:"#534d72"})),Na||(Na=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 6.2 2.2 19.74 2.45 19.74 2.45l25.55-.57 12.64-1.8a53.57 53.57 0 0 0 6-2.1c1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.04-32.5 8.24z",opacity:.1})),_a||(_a=sc.createElement("path",{d:"m253.28 631.31.75 15.95.34 7.15 1.12 23.6.31 6.48.81 17.28c19.64 9.74 61.88 0 61.88 0l.65-17.28.32-8.46.82-21.61.33-8.81.57-15.19c-23.75 7.82-67.9.89-67.9.89z",fill:"#534d72"})),Ua||(Ua=sc.createElement("path",{d:"m254.03 647.26.34 7.15h65.91l.33-8.81c-8.49 2.66-44.11 12.71-66.58 1.66zm1.46 30.73.31 6.48h63.34l.32-8.46c-9.95 2.98-42.37 11.54-63.97 1.98z",opacity:.1})),Ba||(Ba=sc.createElement("ellipse",{cx:287.23,cy:652.27,rx:15.9,ry:6.72,opacity:.1})),Ra||(Ra=sc.createElement("ellipse",{cx:287.23,cy:651.89,rx:15.9,ry:6.72,fill:"#a4a4a4"})),Wa||(Wa=sc.createElement("ellipse",{cx:287.23,cy:651.89,rx:15.9,ry:6.72,fill:"#fff",opacity:.5})),Xa||(Xa=sc.createElement("ellipse",{cx:285.5,cy:631.37,rx:23.88,ry:3.02,opacity:.1})),Ka||(Ka=sc.createElement("ellipse",{cx:285.37,cy:631.63,rx:23.88,ry:3.02,fill:"#a4a4a4"})),Ja||(Ja=sc.createElement("ellipse",{cx:285.5,cy:631.66,rx:23.88,ry:3.02,fill:"#fff",opacity:.5})),Qa||(Qa=sc.createElement("path",{d:"M252.86 629.66c.25.87 1.37 1.58 3 2.15 4.2-11.06 31.36-8.07 31.36-8.07 19.57-1.19 29.77 4.25 32.57 6 1.5-.67 2.77-1.4 3.05-2.08 0 0-18-7.76-37.48-6.29s-33.67 4.1-32.5 8.29z",opacity:.1})),Ya||(Ya=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 4.2-11.06 31.36-8.07 31.36-8.07 19.57-1.18 29.77 4.25 32.57 6 1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.09-32.5 8.29z",fill:"#534d72"})),$a||($a=sc.createElement("path",{d:"M318.61 698.25s4.18 1.93.26 5.14-29.91 5.26-36.45 4c0 0-23.82-1.28-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.2 4.07 29.51 3.72s33.56-1.7 32.54-5.8z",opacity:.1})),el||(el=sc.createElement("path",{d:"M318.61 698.5s4.18 1.93.26 5.14-29.91 5.27-36.45 4.05c0 0-23.82-1.29-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.2 4.07 29.51 3.72s33.56-1.74 32.54-5.85zm.76-20.51c2.52-.71 12.27-4.58 7.39-21.17 0 0-5.27-17.78-8.47-22 0 0 .56-1 1.34 0s3.15 6.86 3.15 6.86 10.2 19.31 5.08 30.42a14.06 14.06 0 0 1-8.39 7.26",fill:"#534d72"})),tl||(tl=sc.createElement("path",{d:"M322.86 627.71s.32 2.84-1.7 3.86-59 8.34-67.87 1.79c0 0-1.29-4 0-3.85s51.08 8.73 69.57-1.8z",opacity:.1})),al||(al=sc.createElement("path",{d:"M322.86 627.46s.32 2.83-1.7 3.85-59 8.34-67.87 1.8c0 0-1.29-4 0-3.85s51.08 8.73 69.57-1.8z",fill:"#534d72"})),ll||(ll=sc.createElement("circle",{cx:318.32,cy:635.25,r:2.92,opacity:.1})),cl||(cl=sc.createElement("circle",{cx:318.74,cy:634.81,r:2.92,fill:"#534d72"})),rl||(rl=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 6.2 2.19 19.74 2.45 19.74 2.45l25.54-.58 12.64-1.8a52.83 52.83 0 0 0 6-2.1c1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.08-32.44 8.24z",fill:"#534d72"})),nl||(nl=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 6.2 2.19 19.74 2.45 19.74 2.45l25.54-.58 12.64-1.8a52.83 52.83 0 0 0 6-2.1c1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.08-32.44 8.24z",opacity:.1})),il||(il=sc.createElement("path",{d:"m983.72 635.05.76 16 .34 7.15 1.11 23.6.31 6.47.82 17.28c19.64 9.75 61.87 0 61.87 0l.65-17.28.32-8.46.82-21.61.33-8.82.58-15.19c-23.77 7.8-67.91.86-67.91.86z",fill:"#534d72"})),sl||(sl=sc.createElement("path",{d:"m984.48 650.99.34 7.15h65.9l.33-8.82c-8.48 2.67-44.11 12.73-66.57 1.67zm1.45 30.77.31 6.47h63.34l.32-8.46c-9.94 3.01-42.37 11.52-63.97 1.99z",opacity:.1})),ol||(ol=sc.createElement("ellipse",{cx:1017.67,cy:656.02,rx:15.9,ry:6.72,opacity:.1})),ml||(ml=sc.createElement("ellipse",{cx:1017.67,cy:655.63,rx:15.9,ry:6.72,fill:"#a4a4a4"})),dl||(dl=sc.createElement("ellipse",{cx:1017.67,cy:655.63,rx:15.9,ry:6.72,opacity:.2})),fl||(fl=sc.createElement("ellipse",{cx:1015.94,cy:635.12,rx:23.88,ry:3.02,opacity:.1})),pl||(pl=sc.createElement("ellipse",{cx:1015.81,cy:635.37,rx:23.88,ry:3.02,fill:"#a4a4a4"})),hl||(hl=sc.createElement("ellipse",{cx:1016.84,cy:635.12,rx:23.88,ry:3.02,opacity:.2})),yl||(yl=sc.createElement("path",{d:"M983.33 633.41c.25.86 1.37 1.57 3 2.14 4.19-11.06 31.35-8.07 31.35-8.07 19.57-1.18 29.77 4.25 32.57 6 1.51-.66 2.77-1.4 3-2.07 0 0-18-7.77-37.48-6.29s-33.63 4.09-32.44 8.29z",opacity:.1})),ul||(ul=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 4.19-11.06 31.35-8.08 31.35-8.08 19.57-1.18 29.77 4.25 32.57 6 1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.13-32.44 8.29z",fill:"#534d72"})),El||(El=sc.createElement("path",{d:"M1007.29 629.99s-.04 0 0 0z",fill:"#9d9cb5"})),xl||(xl=sc.createElement("path",{d:"m1027.57 646.13.55 2.54c-1-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7a11.67 11.67 0 0 0 0 2.84c-1.25-1.34-2.28-5.18-2.28-5.18-.38.27-.31 2.81-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.57-.88-.44-.59a18.22 18.22 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.86 1.93-.9-1.86c0 .08.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.87-.1-2.15-.09c.38-.21 4-3.84 4-3.84s.08-.14.23-.36a28.11 28.11 0 0 1 2.79-3.79 23.22 23.22 0 0 0 2.48-3.39c.31-.47.51-.8.51-.8l18.77 11.17-.36.86c-.22.5-.45 1-.7 1.48-.39.76-.82 1.5-1.28 2.22-.93 1.45-2.16 3.35-3.12 4.82-.59.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.69 17.69 0 0 1-1.91-2.66z",fill:"#e4e3f9"})),zl||(zl=sc.createElement("path",{d:"M1027.52 646.13v-4.79c0-1.19 5.84-13.05 6.09-13.55h.08c-.07.13-6.07 12.34-6.08 13.52s0 4.75 0 4.79z",opacity:.1})),vl||(vl=sc.createElement("path",{d:"M1007.29 629.99s-.04 0 0 0z",fill:"none"})),Ml||(Ml=sc.createElement("path",{d:"M1010.42 635.21a27.07 27.07 0 0 1-.82-3.35c-.1-.86.73-2.11 1.33-3a6.16 6.16 0 0 0 .5-.83 44.25 44.25 0 0 1 2.65-3.67s2.33-3.28 2.49-3.75a15.58 15.58 0 0 1 1.26-2h.07a14.59 14.59 0 0 0-1.25 2c-.16.48-2.4 3.64-2.5 3.78s-2.39 3.05-2.64 3.65a5.17 5.17 0 0 1-.51.83c-.56.85-1.41 2.14-1.31 3a29.7 29.7 0 0 0 .81 3.33z",opacity:.1})),gl||(gl=sc.createElement("path",{d:"M1010.94 634.58c-.22-.45 1.11-4.11 1.37-4.38s2.34-4.25 2.42-4.46 3.25-5 4.24-6.53h.07c-1.44 2.2-4.17 6.39-4.23 6.51s-2.14 4.16-2.44 4.49a14.76 14.76 0 0 0-1.35 4.28zm2.86 3.82c-1.48-1.89.48-8.37.5-8.44.21-.68 5.89-9.45 6.13-9.83l.07.05c-.05.09-5.91 9.13-6.12 9.81-.55 1.8-1.72 6.82-.51 8.35zm2.06 1.32c-1.31-2.58 1.1-8.13 1.12-8.18.19-.42 5.48-9.37 5.7-9.75h.08c-.06.09-5.51 9.33-5.7 9.74 0 .06-2.41 5.56-1.12 8.11z",opacity:.1})),kl||(kl=sc.createElement("path",{d:"M1017.41 642.29c-1-1.17-1.14-3.39-.44-6.61a32.55 32.55 0 0 1 1.38-4.57l5-9.25h.07l-5 9.25c0 .08-3.33 8.43-.9 11.14l-.07.06z",opacity:.1})),bl||(bl=sc.createElement("path",{d:"M1018.07 642.84c-.66-1.35 0-5.32.48-7.15s6.58-11.85 6.84-12.28l.08.05c-.07.1-6.37 10.55-6.83 12.25s-1.13 5.78-.49 7.09z",opacity:.1})),wl||(wl=sc.createElement("path",{d:"m1019.32 640.87 1-4.39a11.45 11.45 0 0 1 1.22-3.21l2.44-4.32 3-4.62h.07l-3 4.62-2.43 4.31a11.76 11.76 0 0 0-1.22 3.19l-1 4.39zm3.27 5.31c-1.27-1.49-.54-5.6-.14-7.85.08-.47.15-.85.17-1.08.14-1.3 5.68-11.79 5.92-12.24h.07c0 .11-5.76 10.92-5.9 12.21 0 .23-.09.61-.18 1.09-.38 2.15-1.17 6.63.28 7.93l-.06.07a1.29 1.29 0 0 1-.16-.13z",opacity:.1})),Hl||(Hl=sc.createElement("path",{d:"M1022.75 643.59s.17-2.36.15-2.92a64.54 64.54 0 0 1 2.1-6.26l4.32-9h.08l-4.32 9s-2.13 5.67-2.1 6.22-.13 2.84-.14 2.94z",opacity:.1})),Ol||(Ol=sc.createElement("path",{d:"M1025.11 648.2c-2.09-3.22-.08-11.46.25-12.14s4.86-10.09 4.91-10.18h.07c0 .09-4.57 9.51-4.9 10.18s-2.33 8.86-.26 12z",opacity:.1})),Gl||(Gl=sc.createElement("path",{d:"M1027.6 648.22c-2.76-3.26-.35-11.5 0-12.22l4.17-9.07h.08l-4.17 9.08c-.35.75-3 9.81.49 12.59v.07a3.25 3.25 0 0 1-.57-.45z",opacity:.1})),Tl||(Tl=sc.createElement("path",{d:"m1035.68 629.87-18.82-11.25c.31-.47.51-.8.51-.8l18.67 11.17z",opacity:.1})),Ll||(Ll=sc.createElement("path",{d:"m1036.19 629.86-19.63-11.73 2.92-3.48 2.13-2.54s.39-2.23 2.18-2.27 5.37 3.84 6.73 3.21 5.58-8.81 5.58-8.81 8.34-11 9.06-12.22 7.77-6.58 7.77-6.58c1.15 0-.73 4.78-.87 6s-6.16 10.53-7 11-7.26 8.8-7.26 8.8c-2.82 2.39-2.94 4.61-2.94 4.61a26.26 26.26 0 0 1 5.45 3.91 1.74 1.74 0 0 1 .25 2.07l-2.22 4.43z",fill:"#535461"})),Cl||(Cl=sc.createElement("path",{d:"m1036.19 629.86-19.63-11.73 2.92-3.48c1.76 1.44 13 10.46 18.84 11.52z",opacity:.1})),Il||(Il=sc.createElement("path",{d:"m1027.57 646.13.55 2.54c-1-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7-.24.2 0 2.84 0 2.84-1.25-1.34-2.28-5.18-2.28-5.18-.39.27-.31 2.8-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.57-.88-.44-.59a18.22 18.22 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.86 1.93-.9-1.86c0 .07.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.87-.1-2.15-.09c.38-.21 4-3.84 4-3.84l.23-.36c.17.54.3 1.07.43 1.43a3.4 3.4 0 0 0 .79 1.4 2.55 2.55 0 0 0 2.06.5c.73-.09 1.43-.33 2.15-.41a1.19 1.19 0 0 1 .91.16 1.52 1.52 0 0 1 .43.82 11.8 11.8 0 0 0 3.54 5.54 1.47 1.47 0 0 0 .57.35 2.24 2.24 0 0 0 .89 0 3 3 0 0 1 3 1.61c.24.5.39 1.13.89 1.38a1.86 1.86 0 0 0 .94.08l2.41-.23c-.59.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.69 17.69 0 0 1-1.83-2.72z",fill:"#a4a4a4"})),Pl||(Pl=sc.createElement("path",{d:"m1027.67 646.13.56 2.54c-.95-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7-.24.2 0 2.84 0 2.84-1.25-1.34-2.28-5.18-2.28-5.18-.39.27-.31 2.8-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.58-.88-.45-.59a18.37 18.37 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.87 1.93-.89-1.86c0 .07.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.88-.1-2.15-.09c.37-.21 4-3.84 4-3.84l.23-.36c.17.54.3 1.07.43 1.43a3.4 3.4 0 0 0 .79 1.4 2.55 2.55 0 0 0 2.06.5c.73-.09 1.42-.33 2.15-.41a1.2 1.2 0 0 1 .91.16 1.52 1.52 0 0 1 .43.82 11.8 11.8 0 0 0 3.54 5.54 1.51 1.51 0 0 0 .56.35 2.29 2.29 0 0 0 .9 0 3 3 0 0 1 3 1.61c.24.5.39 1.13.89 1.38a1.86 1.86 0 0 0 .94.08l2.41-.23c-.6.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.16 17.16 0 0 1-1.83-2.72z",opacity:.2})),jl||(jl=sc.createElement("path",{d:"M1049.05 701.99s4.18 1.93.26 5.14-29.9 5.26-36.45 4c0 0-23.82-1.28-26.93-4.68 0 0-.07-2.3 1.07-2.37 0 0 9.21 4.06 29.52 3.71s33.56-1.7 32.53-5.8z",opacity:.1})),Zl||(Zl=sc.createElement("path",{fill:"#534d72",d:"M1002.97 637.31h32.5v11.39h-32.5zm46.08 64.94s4.18 1.93.26 5.14-29.9 5.26-36.45 4c0 0-23.82-1.28-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.21 4.07 29.52 3.72s33.56-1.7 32.53-5.8zm.81-20.52c2.52-.71 12.28-4.58 7.39-21.17 0 0-5.26-17.78-8.47-22 0 0 .56-1 1.35 0s3.14 6.87 3.14 6.87 10.21 19.32 5.07 30.42a14 14 0 0 1-8.39 7.26"})),Fl||(Fl=sc.createElement("path",{d:"M1053.29 631.46s.32 2.83-1.7 3.85-59 8.34-67.87 1.8c0 0-1.28-4 0-3.86s51.14 8.74 69.57-1.79z",opacity:.1})),Sl||(Sl=sc.createElement("path",{d:"M1053.29 631.2s.32 2.83-1.7 3.86-59 8.34-67.87 1.79c0 0-1.28-4 0-3.85s51.14 8.73 69.57-1.8z",fill:"#534d72"})),Vl||(Vl=sc.createElement("circle",{cx:1048.77,cy:639,r:2.92,opacity:.1})),Al||(Al=sc.createElement("circle",{cx:1049.18,cy:638.55,r:2.92,fill:"#534d72"})),ql||(ql=sc.createElement("ellipse",{cx:116.42,cy:773.8,rx:26.93,ry:4.55,fill:"#a4a4a4",opacity:.1})),Dl||(Dl=sc.createElement("path",{d:"M1076.36 814.87a11.66 11.66 0 0 0 3.83-5.78c.5-2.3-.48-5.06-2.67-5.9-2.46-.94-5.09.77-7.09 2.49s-4.27 3.69-6.88 3.32a10.47 10.47 0 0 0 3.24-9.81 4.12 4.12 0 0 0-.9-2c-1.37-1.46-3.84-.83-5.48.32-5.2 3.65-6.65 10.72-6.68 17.07-.52-2.29-.08-4.68-.09-7s-.66-5-2.64-6.22a8 8 0 0 0-4-1c-2.34-.09-4.94.15-6.54 1.86-2 2.12-1.47 5.69.26 8s4.35 3.81 6.76 5.42a15 15 0 0 1 4.84 4.62 5.19 5.19 0 0 1 .36.82h14.65a40.77 40.77 0 0 0 9.03-6.21z",fill:"#a4a4a4"})),Nl||(Nl=sc.createElement("path",{d:"M98.34 752.64s15.36-.47 20-3.77 23.62-7.23 24.77-1.94 23.08 26.29 5.74 26.43-40.29-2.7-44.91-5.52-5.6-15.2-5.6-15.2z",fill:"#a8a8a8"})),_l||(_l=sc.createElement("path",{d:"M149.15 771.52c-17.34.14-40.29-2.7-44.91-5.52-3.52-2.14-4.92-9.83-5.39-13.38h-.51s1 12.39 5.59 15.2 27.57 5.66 44.91 5.52c5 0 6.74-1.82 6.64-4.46-.69 1.61-2.62 2.61-6.33 2.64z",opacity:.2})),Ul||(Ul=sc.createElement("path",{d:"M247.46 385.54s4 11 2.46 20.5.53 2.83 1.78 6.95 1.26 18.24 1.26 18.24v-9.68s-.46-14.75 0-19.13-5.5-16.88-5.5-16.88zm36.51-16.39s4 11 2.46 20.5.53 2.83 1.78 6.94 1.26 18.25 1.26 18.25v-9.69s-.46-14.75 0-19.12-5.5-16.88-5.5-16.88z",fill:"#a4a4a4",opacity:.5})),Bl||(Bl=sc.createElement("path",{d:"M267.41 259.33s7.92 11 4.92 20.5-5 14.77-2.5 18.89 8.58 6.3 8.58 6.3v-9.68s-.92-14.75 0-19.13-11-16.88-11-16.88zm186.19-10.25s-1.41 13.46-10 18.57-13.53 7.73-14.41 12.46 2.19 10.38 2.19 10.38l6.43-7.23s9.12-11.63 12.72-14.29 3.07-19.89 3.07-19.89z",fill:"#fff",opacity:.5})),Rl||(Rl=sc.createElement("path",{d:"M530.27 491.13a29.43 29.43 0 0 0-1.14 4.21 4.2 4.2 0 0 0 1.4 3.92 1.42 1.42 0 0 0 1.1.3c.8-.17 1-1.2 1-2 0-1.61 0-3.22-.1-4.84a12.57 12.57 0 0 0-.41-3.24 3.76 3.76 0 0 0-1.64-2.31c-.37.82.1 2.76-.21 3.96zm17.71 9.86a30.11 30.11 0 0 0-1.13 4.21 4.16 4.16 0 0 0 1.4 3.92 1.41 1.41 0 0 0 1.09.31c.81-.17 1-1.2 1-2 0-1.61 0-3.22-.09-4.83a13.17 13.17 0 0 0-.42-3.25 3.73 3.73 0 0 0-1.63-2.3c-.34.83.1 2.75-.22 3.94zm-8.44-12.9a12.06 12.06 0 0 0 .48-1.76 1.76 1.76 0 0 0-.59-1.64.56.56 0 0 0-.46-.13c-.34.07-.43.5-.44.85v2a5.18 5.18 0 0 0 .18 1.36 1.52 1.52 0 0 0 .68 1c.21-.37.02-1.17.15-1.68zm95.51-191a12.19 12.19 0 0 0 .48-1.77 1.75 1.75 0 0 0-.59-1.64.64.64 0 0 0-.46-.13c-.34.07-.43.51-.43.85v2a4.83 4.83 0 0 0 .17 1.36 1.61 1.61 0 0 0 .68 1c.22-.37.02-1.17.15-1.67z",fill:"#a4a4a4"})),Wl||(Wl=sc.createElement("ellipse",{cx:548.62,cy:732.82,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Xl||(Xl=sc.createElement("ellipse",{cx:554.91,cy:733.54,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Kl||(Kl=sc.createElement("ellipse",{cx:557.53,cy:730.53,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Jl||(Jl=sc.createElement("ellipse",{cx:562.44,cy:734.05,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Ql||(Ql=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m300.02 251.23 1.03 5.48 1.96-7.68-2.99 2.2zm-7.58-65.15 11.36 59.83 4.89-19.14h-.59l8.31-46.18q-8.42 1.62-16.54 3.59l1.75 15.94-4.09-15.37q-2.57.67-5.09 1.33z"})),Yl||(Yl=sc.createElement("path",{d:"m616.61 258.53-1.41 8.09 1.41 8.09c1.94-2.66 3.73-5.36 5.4-8.09-1.67-2.74-3.46-5.43-5.4-8.09z",fill:"#a4a4a4",opacity:.8})),$l||($l=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m286.73 266.62.16 5.75 8.56 6.28 3.07-12.03-3.07-12.03-8.56 6.28-.16 5.75zm14.32 9.91-1.03 5.48 2.99 2.2-1.96-7.68zm-98.19 8.97-4.73-13.84-6.91 25.52c2 1.75 12.93 3.47 15.07 5.16 1.57-5.73-5.43-11.63-3.43-16.84zm67 5.91 5.43-24.79 7.46-50.7c-5 1.74-14.21-6.69-19-4.75l-5.3 14.92-8.31-25.68c-4 1.68-18.17 23.21-21.94 25l6.38 41.2 10 43.05c3.77 1.81 1.65 21.48 5.61 23.16l8.31-25.68-4.41 27.29c4.77 1.95 10.77-44.76 15.77-43.02zm46.55 61.2-8.31-46.18h.59l-4.89-19.15-11.36 59.83q2.52.68 5.09 1.3l4.09-15.37-1.76 15.95c5.43 1.33 10.94 2.54 16.55 3.62zM197.39 230.9q-3.19 2.54-6.21 5.16l6.91 25.51 4.77-13.84c-2-5.21-3.85-11.1-5.47-16.83zm-11.08 9.58-3.51 51.44c.27.27 4.07 1.36 4.35 1.62l9.21-26.92-9.21-26.93c-.29.3-.57.52-.84.79z"})),ec||(ec=sc.createElement("path",{d:"m236 309.67-18.4-117.5q-6.12 3.3-11.85 6.81c2.49 17.22 16 64.25 8.48 65.06-3.45.38-7.06-5.5-10.38-13.68l-4.4 16.26 4.4 16.26c3.32-8.18 6.93-14.06 10.38-13.69 7.55.81-3.24 10.51-5.73 27.73 3.81 2.35 23.41 10.56 27.5 12.75z",fill:"#a4a4a4",opacity:.8})),tc||(tc=sc.createElement("path",{d:"M320.16 353.31q10.86 2 22.14 3.39l-5.13-40.95-.75 14.24-.9-27.4-.51-4-2.15 19.75-4.85-7.76 5.8-21.8-1.37-10.79-2.58-1.92 1.18-9.45-1.18-9.45 2.61-1.92 1.35-10.8-5.8-21.8 4.85-7.75 2.17 19.8.51-4 .9-27.41.75 14.24 9.08-6.59c-5.59 4.48 19.84 38.67-26.09-31l-2 46.17-7.72.55-7.55 40 7.55 40 7.72.55zm235.4-150.32c-2.14-1-4.31-1.91-6.5-2.83l-6.43 14.21 14.89 2.62zm-35.04 74.28c-2.17-.87 2.22-54.91 0-55.75l8.24-7.35-3.06 47.4z",fill:"#a4a4a4",opacity:.5})),ac||(ac=sc.createElement("path",{d:"m180.25 270.19 2.55-3.57-1.84-20.81a122.16 122.16 0 0 0-16.1 20.81c4.39 7.22 9.07-3.05 15.39 3.57z",fill:"#a4a4a4",opacity:.95})),lc||(lc=sc.createElement("path",{d:"M546.5 314.86c2.76-1.48 17.7 4.47 20.34 2.92l8.47-51.16-3.56-38.11c-2.64-1.56-13.34-1.18-16.1-2.66l-5.89 28.49-4.6-32.82-7.58 45.1-5.28 35.8 17.46-23.53zm-35.02 27.32-21.19-73.87-5.31 15.13 4.88-16.82-4.83-16.82 5.31 15.13 21.19-73.87c-3.86-1.24-7.77-2.42-11.76-3.54v39.29l-11.72-24.14c-6.36-1.66-8.79-.51-15.43-1.85l-4.29 15.39q-6.69-1.22-13.47-2.22l2.43-13.8-6 13.27c-2.28-.32-4.56-.63-6.86-.91l13.43 51.56 2.32-10-1.93 12.55 1.93 12.55-2.32-28-13.47 87.59q3.45 26.56 6.86-.91l6-22.73-2.39 22.12c4.53 17.32 9-1.43 13.44-2.25l4.29-2.61 1.62 1.45c6.64-1.35 13.15 15.15 19.51 13.49l6-40.93v39.29c3.99-1.12 7.9-2.31 11.76-3.54z",fill:"#a4a4a4",opacity:.5})),cc||(cc=sc.createElement("path",{d:"m490.86 295.81-8.19-28.54-2 5.85 1.86-6.5-1.86-6.5 2 5.84 8.19-28.53c-1.49-.48-3-.94-4.54-1.37v15.18l-2.33-15.82q-3.69-1-7.54-1.74l-.59 7.51-1.66-8c-1.71-.32-3.45-.6-5.2-.87l.94 8.58-2.33-8.78-2.65-.35 5.2 33.84.9-3.88-.75 4.85.75 4.85-.9-3.88-5.2 33.84 2.65-.35 2.33-8.78-.94 8.57c1.75-.26 3.49-.55 5.2-.87l1.66-8 .62 7.52q3.86-.78 7.54-1.75l2.33-15.74v15.18c1.51-.42 3.05-.88 4.51-1.36zM577 234.17l-1.54 31.53.29-1.73-.21 2.65.21 2.65-.29-1.74-.15 37.14c5.55-3.46 19.27-12.72 24.19-16.5l-19.09 15.82 3.52-37.38 8.07-16.95-4.66-20.43c-4.92-3.76-4.8 8.41-10.34 4.94z",fill:"#a4a4a4",opacity:.5})),rc||(rc=sc.createElement("path",{d:"M365.5 344.42c1.11-.23 34.11 15.15 35.22 14.92l3.05-92.72-10.55-53.35c-4.69-1-15-7.14-19.72-8.12l3.24 14.29 1.57 14.35-3-11.33-8.45 17.65 1.73 15.79-3.32-12.47-9 18.87-.53 4.32.53 4.32 9 18.86 3.32-12.46-1.73 15.78 8.41 17.66 3-11.33-1.57 14.35z",fill:"#a4a4a4",opacity:.6})),nc||(nc=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m281.27 268.23.08-1.61-.08-1.61-2.2 1.61 2.2 1.61zm233.85-1.61-4.15-55.63 8.18 1.45 1.37-18.35c-1.24-.44-2.48-.87-3.73-1.29l-25.93 73.82 25.9 73.8 3.73-1.3-1.37-18.35-8.18 1.46zm-81.82 75.7 13.95-75.7-16.77-47c-3.41-.44-6.86-.81-10.33-1.12l1.84-22.9-4.52 22.69q-3.87-.3-7.79-.5l-2.06 48.85 1.64 73.8c2.61-.13 5.63 18.74 8.21 18.54l4.52-21.3 10 19c3.48-.29-2.13-13.92 1.31-14.36z"})),ic||(ic=sc.createElement("path",{fill:"#a4a4a4",d:"m236 231.81 11.46 36.5 14.4-19.23 5.55-9.38-9.49 35.01-6.22 15.79-15.7-35.91v-22.78z"})))}},4489:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v=a(7294),M=["title","titleId"];function g(){return g=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,b=k(e,M);return v.createElement("svg",g({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:980,height:489.48,viewBox:"0 0 980 489.48","aria-labelledby":a},b),t?v.createElement("title",{id:a},t):null,l||(l=v.createElement("path",{d:"M207.06 0a205.979 205.979 0 0 0-77.685 15.067c-.993.407-1.99.816-2.988 1.235A206.78 206.78 0 0 0 0 207.06V433a9.01 9.01 0 0 0 9 9l.179.016c173.467 31.502 342.106 47.465 501.372 47.465q3.581 0 7.156-.011c156.555-.477 308.994-16.44 453.083-47.447L971 442a9.01 9.01 0 0 0 9-9V9a9.01 9.01 0 0 0-9-9z",fill:"#a4a4a4"})),c||(c=v.createElement("path",{"data-name":"Path 40",d:"M745.8 180.193a5.947 5.947 0 0 0 0 11.892h149.085a5.947 5.947 0 1 0 .195-11.892q-.097-.002-.195 0z",fill:"#3f3d56"})),r||(r=v.createElement("path",{d:"M928.694 178.537a1.17 1.17 0 0 0 0 1.655l5.023 5.023h-12.386a1.17 1.17 0 1 0 0 2.34h12.386l-5.023 5.023a1.17 1.17 0 1 0 1.655 1.654l7.02-7.02a1.17 1.17 0 0 0 0-1.655l-7.02-7.02a1.17 1.17 0 0 0-1.655 0zm-216.767 0a1.17 1.17 0 0 1 0 1.655l-5.022 5.023h12.385a1.17 1.17 0 1 1 0 2.34h-12.385l5.022 5.023a1.17 1.17 0 0 1-1.654 1.654l-7.02-7.02a1.17 1.17 0 0 1 0-1.655l7.02-7.02a1.17 1.17 0 0 1 1.654 0z",fill:"#fff"})),n||(n=v.createElement("g",{opacity:.4,fill:"#fff"},v.createElement("circle",{cx:751.82,cy:50.39,r:6.39}),v.createElement("circle",{cx:778.445,cy:50.39,r:6.39}),v.createElement("circle",{cx:805.069,cy:50.39,r:6.39}),v.createElement("circle",{cx:831.694,cy:50.39,r:6.39}),v.createElement("circle",{cx:858.318,cy:50.39,r:6.39}),v.createElement("circle",{cx:884.943,cy:50.39,r:6.39}),v.createElement("circle",{cx:911.567,cy:50.39,r:6.39}),v.createElement("circle",{cx:751.82,cy:70.625,r:6.39}),v.createElement("circle",{cx:778.445,cy:70.625,r:6.39}),v.createElement("circle",{cx:805.069,cy:70.625,r:6.39}),v.createElement("circle",{cx:831.694,cy:70.625,r:6.39}),v.createElement("circle",{cx:858.318,cy:70.625,r:6.39}),v.createElement("circle",{cx:884.943,cy:70.625,r:6.39}),v.createElement("circle",{cx:911.567,cy:70.625,r:6.39}),v.createElement("circle",{cx:751.82,cy:90.859,r:6.39}),v.createElement("circle",{cx:778.445,cy:90.859,r:6.39}),v.createElement("circle",{cx:805.069,cy:90.859,r:6.39}),v.createElement("circle",{cx:831.694,cy:90.859,r:6.39}),v.createElement("circle",{cx:858.318,cy:90.859,r:6.39}),v.createElement("circle",{cx:884.943,cy:90.859,r:6.39}),v.createElement("circle",{cx:911.567,cy:90.859,r:6.39}),v.createElement("circle",{cx:751.82,cy:111.094,r:6.39}),v.createElement("circle",{cx:778.445,cy:111.094,r:6.39}),v.createElement("circle",{cx:751.82,cy:131.329,r:6.39}),v.createElement("circle",{cx:778.445,cy:131.329,r:6.39}),v.createElement("circle",{cx:805.069,cy:131.329,r:6.39}),v.createElement("circle",{cx:805.069,cy:111.094,r:6.39}),v.createElement("circle",{cx:831.694,cy:111.094,r:6.39}),v.createElement("circle",{cx:858.318,cy:111.094,r:6.39}),v.createElement("circle",{cx:884.943,cy:111.094,r:6.39}),v.createElement("circle",{cx:911.567,cy:111.094,r:6.39}))),i||(i=v.createElement("path",{d:"M660.157 375.459a35.272 35.272 0 1 1 35.273-35.272 35.313 35.313 0 0 1-35.273 35.272zm0-68.545a33.272 33.272 0 1 0 33.273 33.273 33.31 33.31 0 0 0-33.273-33.273z",fill:"#3f3d56"})),s||(s=v.createElement("path",{d:"M673.68 336.806h-10.142v-10.143a3.38 3.38 0 0 0-6.761 0v10.143h-10.143a3.38 3.38 0 0 0 0 6.761h10.143v10.143a3.38 3.38 0 0 0 6.761 0v-10.143h10.143a3.38 3.38 0 1 0 0-6.761z",fill:"#fff"})),o||(o=v.createElement("g",{opacity:.4,fill:"#fff"},v.createElement("circle",{cx:54.024,cy:374.766,r:5.024}),v.createElement("circle",{cx:54.024,cy:353.833,r:5.024}),v.createElement("circle",{cx:54.024,cy:332.9,r:5.024}),v.createElement("circle",{cx:54.024,cy:311.967,r:5.024}),v.createElement("circle",{cx:54.024,cy:291.034,r:5.024}),v.createElement("circle",{cx:54.024,cy:270.101,r:5.024}),v.createElement("circle",{cx:54.024,cy:249.168,r:5.024}),v.createElement("circle",{cx:69.933,cy:374.766,r:5.024}),v.createElement("circle",{cx:69.933,cy:353.833,r:5.024}),v.createElement("circle",{cx:69.933,cy:332.9,r:5.024}),v.createElement("circle",{cx:69.933,cy:311.967,r:5.024}),v.createElement("circle",{cx:69.933,cy:291.034,r:5.024}),v.createElement("circle",{cx:69.933,cy:270.101,r:5.024}),v.createElement("circle",{cx:69.933,cy:249.168,r:5.024}),v.createElement("circle",{cx:85.842,cy:374.766,r:5.024}),v.createElement("circle",{cx:85.842,cy:353.833,r:5.024}),v.createElement("circle",{cx:85.842,cy:332.9,r:5.024}),v.createElement("circle",{cx:85.842,cy:311.967,r:5.024}),v.createElement("circle",{cx:85.842,cy:291.034,r:5.024}),v.createElement("circle",{cx:85.842,cy:270.101,r:5.024}),v.createElement("circle",{cx:85.842,cy:249.168,r:5.024}),v.createElement("circle",{cx:101.751,cy:374.766,r:5.024}),v.createElement("circle",{cx:101.751,cy:353.833,r:5.024}),v.createElement("circle",{cx:117.66,cy:374.766,r:5.024}),v.createElement("circle",{cx:117.66,cy:353.833,r:5.024}),v.createElement("circle",{cx:117.66,cy:332.9,r:5.024}),v.createElement("circle",{cx:101.751,cy:332.9,r:5.024}),v.createElement("circle",{cx:101.751,cy:311.967,r:5.024}),v.createElement("circle",{cx:101.751,cy:291.034,r:5.024}),v.createElement("circle",{cx:101.751,cy:270.101,r:5.024}),v.createElement("circle",{cx:101.751,cy:249.168,r:5.024}))),m||(m=v.createElement("path",{d:"M497.408 33.002H163.666a6.189 6.189 0 0 0-6.182 6.183v285.383a6.189 6.189 0 0 0 6.182 6.182h333.742a6.189 6.189 0 0 0 6.183-6.182V39.185a6.189 6.189 0 0 0-6.183-6.183zm3.705 291.566a3.718 3.718 0 0 1-3.705 3.716H163.666a3.71 3.71 0 0 1-3.704-3.716V39.185a3.71 3.71 0 0 1 3.704-3.717h333.742a3.718 3.718 0 0 1 3.705 3.717z",fill:"#3f3d56"})),d||(d=v.createElement("path",{d:"M240.702 280.006c0 .44-.011.88-.034 1.309a25.175 25.175 0 0 1-50.281 0 24.33 24.33 0 0 1-.035-1.309 25.175 25.175 0 1 1 50.35 0z",fill:"#fff"})),f||(f=v.createElement("path",{d:"M471.475 263.22H273.663a4.197 4.197 0 0 0 0 8.393h197.812a4.197 4.197 0 0 0 0-8.394z",fill:"#3f3d56"})),p||(p=v.createElement("path",{d:"M358.78 288.4h-85.117a4.191 4.191 0 0 0 0 8.382h85.117a4.191 4.191 0 1 0 0-8.382zm217.918-54.819h-333.74a8.559 8.559 0 0 1-8.549-8.55V78.57a8.559 8.559 0 0 1 8.549-8.549h333.74a8.559 8.559 0 0 1 8.55 8.55V225.03a8.559 8.559 0 0 1-8.55 8.55zM242.958 73.02a5.555 5.555 0 0 0-5.549 5.55v146.46a5.556 5.556 0 0 0 5.549 5.55h333.74a5.556 5.556 0 0 0 5.55-5.55V78.57a5.555 5.555 0 0 0-5.55-5.549z",fill:"#fff"})),h||(h=v.createElement("path",{d:"M310.924 123.44a4.196 4.196 0 1 0 0 8.391h197.808a4.196 4.196 0 1 0 0-8.392zm0 24.312a4.196 4.196 0 0 0 0 8.392h197.808a4.196 4.196 0 0 0 0-8.392zm0 24.018a4.196 4.196 0 0 0 0 8.392h85.117a4.196 4.196 0 0 0 0-8.392zm320.8 123.863-33.52-47.307 10.85 2.26a1.501 1.501 0 1 0 .613-2.939l-16.17-3.366-2.183 16.37a1.501 1.501 0 1 0 2.976.397l1.463-10.993 33.523 47.312a1.5 1.5 0 1 0 2.448-1.734z",fill:"#fff"})),y||(y=v.createElement("path",{d:"M449.666 433.32H211.409a4.417 4.417 0 0 1-4.412-4.412v-59.101a4.417 4.417 0 0 1 4.412-4.412h238.257a4.417 4.417 0 0 1 4.412 4.412v59.101a4.417 4.417 0 0 1-4.412 4.413zm-238.257-66.16a2.65 2.65 0 0 0-2.647 2.647v59.101a2.65 2.65 0 0 0 2.647 2.648h238.257a2.65 2.65 0 0 0 2.647-2.648v-59.101a2.65 2.65 0 0 0-2.647-2.647z",fill:"#3f3d56"})),u||(u=v.createElement("circle",{cx:248.429,cy:397.09,r:17.973,fill:"#fff"})),E||(E=v.createElement("path",{d:"M289.938 385.108a2.995 2.995 0 1 0 0 5.991h141.215a2.995 2.995 0 1 0 0-5.99zm0 17.972a2.995 2.995 0 1 0 0 5.992h60.765a2.995 2.995 0 1 0 0-5.991z",fill:"#fff"})),x||(x=v.createElement("path",{d:"M764.024 222.756h105.893a4.417 4.417 0 0 1 4.412 4.412V337.45a4.417 4.417 0 0 1-4.412 4.413H764.024a4.417 4.417 0 0 1-4.412-4.413V227.168a4.417 4.417 0 0 1 4.413-4.412zm105.893 117.342a2.65 2.65 0 0 0 2.647-2.648V227.168a2.65 2.65 0 0 0-2.647-2.647H764.024a2.65 2.65 0 0 0-2.647 2.647V337.45a2.65 2.65 0 0 0 2.648 2.648z",fill:"#3f3d56"})),z||(z=v.createElement("path",{d:"M847.353 319.12a2.995 2.995 0 0 0 0-5.99h-60.765a2.995 2.995 0 0 0 0 5.99zm0-17.648a2.995 2.995 0 1 0 0-5.991h-60.765a2.995 2.995 0 1 0 0 5.99zm-30.383-55.974a18.855 18.855 0 1 1-18.855 18.855 18.876 18.876 0 0 1 18.855-18.855z",fill:"#fff"})))}},7627:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k=a(7294),b=["title","titleId"];function w(){return w=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,O=H(e,b);return k.createElement("svg",w({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1094,height:768.5,viewBox:"0 0 1094 768.5","aria-labelledby":a},O),void 0===t?k.createElement("title",{id:a},"image_focus"):t?k.createElement("title",{id:a},t):null,l||(l=k.createElement("path",{fill:"#3f3d56",d:"M530 707.5h564v2H530zM495.53 94.016l-17.664-18.938 18.938-17.663 17.664 18.937zm-14.848-18.84 14.946 16.025 16.024-14.947-14.946-16.024zm229.767 288.929h-25.897v-25.897h25.897zm-23.905-1.992h21.913V340.2h-21.913z"})),c||(c=k.createElement("path",{fill:"#5cb85c",d:"M0 222h663v478H0z"})),r||(r=k.createElement("path",{fill:"#3f3d56",d:"M352 264 0 306.35v-36.27L352 264zm311 338.46v38.53L289 596l374 6.46zM539 489 0 558.9v-38.03L539 489zm124-127.83v39.59L102 328l561 33.17zM225 373 0 400.07v-23.18L225 373z"})),n||(n=k.createElement("path",{d:"M750 565H280V173h470zm-468-2h466V175H282z",fill:"#3f3d56"})),i||(i=k.createElement("path",{d:"M777 174c0 .69-.02 1.37-.08 2.04a27.997 27.997 0 1 1-52.68-15.11 25.74 25.74 0 0 1 2.06-3.31 27.989 27.989 0 0 1 50.6 14.1c.07.75.1 1.51.1 2.28z",fill:"#5cb85c"})),s||(s=k.createElement("path",{d:"M777 174c0 .69-.02 1.37-.08 2.04L735 171l41.9.72c.07.75.1 1.51.1 2.28zm-10 14.11-38.78 4.67a28.058 28.058 0 0 1-2.96-3.95zm-11-31-31.76 3.82a25.74 25.74 0 0 1 2.06-3.31z",fill:"#3f3d56"})),o||(o=k.createElement("path",{d:"M611.91 700h-592s-9.89-145.1 41.44-173.3c.3-.17.61-.34.92-.49A38.144 38.144 0 0 1 78.91 522c71-2 63 78 152-32 55.35-68.41 118.05-91.95 160.91-84.34.79.14 1.57.29 2.35.45 24.84 5.16 42.61 21.06 47.74 44.89 14 65-27 117 48 101 35.11-7.49 77.45-2.27 106.3 17.92l.84.6c32.2 23.06 47.03 65.15 14.86 129.48z",fill:"#2f2e41"})),m||(m=k.createElement("path",{d:"M394.17 406.11c-4.94 4.98-22.19 23.99-40.05 62.47-19.43 41.87-43.55 116-48.2 231.42v.04l-1-.04-1-.04c4.66-115.88 28.93-190.33 48.46-232.38 16.95-36.46 33.4-55.6 39.44-61.92.79.14 1.57.29 2.35.45zm126.006 294.17-1.92-.56c23.119-79.353 77.561-129.454 78.11-129.951l1.343 1.48c-.543.493-54.578 50.24-77.533 129.03zm-407.024-.142-1.982-.276c7.844-56.57-6.324-100.46-19.592-127.318-14.366-29.08-30.757-44.963-30.92-45.12l1.383-1.443c.166.159 16.81 16.286 31.33 45.677 13.392 27.11 27.694 71.405 19.78 128.48z",fill:"#f2f2f2"})),d||(d=k.createElement("path",{fill:"#5cb85c",d:"M252 147h56v56h-56z"})),f||(f=k.createElement("path",{fill:"#3f3d56",d:"m257 162 51 3.02v3.59L257 162zm0 30 51 3.02v3.59L257 192zm-5-9.32 38-4.57-38 .66v3.91z"})),p||(p=k.createElement("path",{fill:"#5cb85c",d:"m789.6 563.39-39.6 39.6-39.6-39.6 39.6-39.6 27.76 27.76 11.84 11.84z"})),h||(h=k.createElement("path",{fill:"#3f3d56",d:"m774.77 548.56 2.99 2.99-39.76-5.16 36.77 2.17zM729 566.39l54.38 3.22-3.39 3.39-50.99-6.61zm33 19.11-26.32 3.17-2.67-2.67 28.99-.5zM87.53 459.016l-17.664-18.938 18.938-17.663 17.664 18.937zm-14.849-18.84 14.947 16.025 16.024-14.947-14.946-16.024z"})),y||(y=k.createElement("path",{d:"M726.356 286.368s-54.276 53.19-31.48 59.703 48.848-48.848 48.848-48.848zm54.276 179.11-6.513 30.395 48.848 2.171-7.599-32.566h-34.736zm154.144 187.795-6.513 30.395 48.848 2.171-7.599-32.566h-34.736z",fill:"#a0616a"})),u||(u=k.createElement("path",{d:"m849.02 262.486 4.342 17.368s-120.493-23.881-113.98 36.908S774.12 436.17 774.12 436.17s-2.171 19.54 2.17 22.796 0 14.112 0 14.112 40.165 5.428 41.25-4.342a68.083 68.083 0 0 0-1.085-19.54s2.17 0 0-10.855S805.514 339.94 799 328c0 0 57.618 44.124 88.013 38.696 0 0-4.342 43.42 13.026 100.953s17.368 64.046 17.368 64.046 20.625 109.638 15.198 122.664l-1.086 5.427h40.164s-3.256-57.532 0-65.13 3.257-72.73-15.197-105.296C943.418 466.298 945.852 399.43 953 373c6.003-22.195 7.519-39.278 4-62-3.763-24.299-15-37-28.737-48.514z",fill:"#2f2e41"})),E||(E=k.createElement("circle",{cx:881.042,cy:60.037,r:39.079,fill:"#a0616a"})),x||(x=k.createElement("path",{d:"M870.73 87.717s11.94 34.737 10.855 41.25 34.737-13.026 34.737-13.026-14.112-34.737-9.77-44.506z",fill:"#a0616a"})),z||(z=k.createElement("path",{d:"m914.15 104-37.992 15.198 2.17 13.026s-3.256 4.342-2.17 6.513-14.112 10.855-11.941 14.112-13.026 16.282-11.94 19.539-34.738 22.796-15.198 60.79c0 0 10.13 13.169 8.861 28.743q-.067.821-.177 1.65c-2.171 16.283 82.5-2.17 82.5-2.17v-18.454s7.598-3.257 6.513-17.369-7.599-7.598 0-15.197 7.598-6.513 6.513-13.026c-.434-2.6-.521-11.953-.47-22.25a98.776 98.776 0 0 0-20.155-60.25z",fill:"#d0cde1"})),v||(v=k.createElement("path",{d:"m893.526 132.224-70.559 73.815-103.124 81.414 22.796 18.454L932.605 178.9s16.282-69.473-39.08-46.677z",fill:"#d0cde1"})),M||(M=k.createElement("path",{d:"M783.888 481.761s-7.598-13.026-13.026-8.684l-37.993 30.395s-67.302 19.539-2.171 34.736c0 0 35.822 5.428 43.42 0s19.54-4.342 22.797-2.17 44.506-1.086 44.506-9.77-22.75-46.638-22.75-46.638-13.072 15.157-34.783 2.131zm154.144 187.795s-7.598-13.026-13.026-8.684l-37.993 30.394s-67.302 19.54-2.171 34.737c0 0 35.822 5.428 43.42 0s19.54-4.342 22.796-2.17 44.507-1.086 44.507-9.77-22.75-46.639-22.75-46.639-13.072 15.158-34.783 2.132zM834.21 44.539s6.607-58.083 63.119-41.591c0 0 39.979-8.132 54.099 41.8l14.332 52.349-6.56-3.41-2.9 6.675-10.47 2.867-4.674-8.85-1.97 10.894-72.304 14.618s24.453-27.939 24.28-68.859l-7.202 7.91z",fill:"#2f2e41"})),g||(g=k.createElement("path",{fill:"#3f3d56",d:"M762 733.5h272v2H762zm-132 33h437v2H630z"})))}},7905:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,P,j,Z,F,S,V,A=a(7294),q=["title","titleId"];function D(){return D=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,_=N(e,q);return A.createElement("svg",D({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:973.461,height:587.025,viewBox:"0 0 973.461 587.025","aria-labelledby":a},_),t?A.createElement("title",{id:a},t):null,l||(l=A.createElement("g",{"data-name":"Group 100",fill:"#e4e4e4"},A.createElement("path",{"data-name":"Path 1465",d:"M561.877 471.613a11.49 11.49 0 1 0 11.49 11.49 11.49 11.49 0 0 0-11.49-11.49zm0 18.561a7.071 7.071 0 1 1 7.071-7.071 7.071 7.071 0 0 1-7.07 7.071z"}),A.createElement("path",{"data-name":"Path 1467",d:"M517.684 462.774h44.193v43.739a5.757 5.757 0 0 1-5.757 5.757h-32.679a5.757 5.757 0 0 1-5.757-5.757v-43.739z"}))),c||(c=A.createElement("path",{"data-name":"Path 944",d:"M665.133 513.271H.896a1.006 1.006 0 0 1 0-2h664.237a1.006 1.006 0 0 1 0 2z",fill:"#cacaca"})),r||(r=A.createElement("path",{fill:"#ffb6b6",d:"m89.41 494.381-4.108 20.313 76.393 25.514 6.064-29.98-78.349-15.847z"})),n||(n=A.createElement("path",{d:"M97.09 490.542 89 530.544l-.001.002a26.01 26.01 0 0 1-30.65 20.336l-.828-.168 13.247-65.496z",fill:"#2f2e41"})),i||(i=A.createElement("circle",{"data-name":"Ellipse 276",cx:175.979,cy:162.713,r:51.871,fill:"#feb8b8"})),s||(s=A.createElement("path",{"data-name":"Path 1461",d:"M224.427 117.963a59.907 59.907 0 0 0-34.08-26.052l-6.369 4.647v-6.034a55.143 55.143 0 0 0-10.3-.6l-5.494 4.971v-4.558a59.335 59.335 0 0 0-40.932 24.347c-11.93 17.2-13.945 41.129-2.21 58.467 3.221-9.9 7.131-19.189 10.353-29.088a29.3 29.3 0 0 0 7.633.037l3.92-9.145 1.094 8.758c12.148-1.058 30.166-3.382 41.682-5.511l-1.12-6.719 6.7 5.583c3.528-.812 5.623-1.549 5.45-2.112 8.565 13.808 19.047 22.627 27.611 36.435 3.253-19.47 6.997-35.659-3.938-53.426z",fill:"#2f2e41"})),o||(o=A.createElement("ellipse",{"data-name":"Ellipse 260",cx:192.856,cy:464.787,rx:133.56,ry:37.359,fill:"#2f2e41"})),m||(m=A.createElement("path",{d:"M287.54 296.101c-1.784-10.731-3.624-21.668-8.612-31.335-3.277-6.332-8.48-12.366-15.495-13.618a14.99 14.99 0 0 1-4.034-.934c-2.056-.99-29.674-16.756-34.063-19.502-3.77-2.357-9.72-6.722-12.72-6.722-3.017-.067-14.59 2.627-59.76-.904a163.141 163.141 0 0 0-22.01 10.822c-.145-.096-46.882 25.001-48.637 24.935-3.326-.14-6.416 1.989-8.323 4.67-1.905 2.681-2.8 6-3.735 9.21 10.208 22.732 19.547 45.494 29.756 68.227a5.821 5.821 0 0 1 .739 2.8 6.834 6.834 0 0 1-1.27 2.8c-5.007 8.042-4.848 18.157-4.3 27.61.547 9.451 1.223 19.435-3 27.907-1.15 2.326-2.644 4.455-3.736 6.781-2.56 5.268-3.484 22.117-1.99 27.777l187.267 5.365c-4.027-11.068 13.922-145.89 13.922-145.89z",fill:"#a4a4a4"})),d||(d=A.createElement("path",{"data-name":"Path 1421",d:"M53.963 341.958a33.063 33.063 0 0 0-.112 8.154l2.684 38.546c.252 3.633.5 7.257.841 10.881.644 7.033 1.606 14.01 2.8 20.977a3.736 3.736 0 0 0 3.83 3.633c11.814 2.5 24.021 2.4 36.08 1.719 18.4-1.027 65.473-2.97 68.35-6.706s1.2-9.779-2.55-12.8-65.872-10.386-65.872-10.386c.607-4.81 2.438-9.34 4.175-13.907 3.12-8.1 6.034-16.466 6.09-25.143s-3.213-17.8-10.32-22.771c-5.848-4.081-13.376-4.838-20.5-4.67-5.185.149-14.142-1.093-18.877.934-3.747 1.65-5.919 7.87-6.619 11.539z",fill:"#fbbebe"})),f||(f=A.createElement("path",{"data-name":"Path 1423",d:"M287.871 429.091c3.11-1.186 6.538-.757 9.872-.308 10.732 1.466 21.622 2.97 31.57 7.257 4.67 2 9.115 4.67 12.272 8.6 2.8 3.54 4.436 7.874 5.987 12.142l3.587 9.826a47.3 47.3 0 0 1 3.13 11.516c1.12 11.759-6.922 22.845-17.037 28.954s-22.023 8.284-33.624 10.563-23.247 4.8-34.8 7.472a140.086 140.086 0 0 1-16.373 3.222c-12.366 1.4-25.292-.663-37.042 3.428-4.67 1.635-9.256 4.063-14.1 5.193a87.745 87.745 0 0 1-9.75 1.485l-22.239 2.54a121.313 121.313 0 0 1-13.636 1.046c-9.713 0-19.268-2.3-28.7-4.6a7.258 7.258 0 0 1-2.8-1.13c-1.494-1.177-1.82-3.26-2.036-5.146q-1.429-12.525-2.5-25.077c-.224-2.718-.392-5.66 1.093-7.948 1.868-2.8 5.511-3.68 8.836-4.222a230.58 230.58 0 0 1 42.665-2.961c5.426-5.426 14.374-5.454 21.482-8.406a63.897 63.897 0 0 0 7.575-4.119 99 99 0 0 1 41.59-13.141 38.714 38.714 0 0 0 8.51-1.214c5.5-1.709 10.516-6.361 16.166-5.221.7-1.933 1.186-4.521 2.8-5.847.8-.682 1.793-1.139 2.531-1.868 1.56-1.578 1.7-4.063 1.466-6.267s-.757-4.464-.187-6.613a9.14 9.14 0 0 1 1.037-2.307c2.792-4.832 7.023-7.316 12.655-6.849z",fill:"#2f2e41"})),p||(p=A.createElement("path",{"data-name":"Path 1430",d:"M69.61 273.414a9.667 9.667 0 0 0-2.073 3.316 156.78 156.78 0 0 0-13.169 53.816 5.38 5.38 0 0 1-.607 2.606 11.403 11.403 0 0 1-1.373 1.485 5.156 5.156 0 0 0 .617 7.266q.127.107.261.206c1.541-2.9 5.23-3.848 8.51-4.1 15.7-1.242 31.035 6.062 46.782 5.511-1.11-3.839-2.709-7.528-3.615-11.413-4.007-17.251 5.987-36.033-.14-52.649-1.224-3.325-3.269-6.594-6.49-8.051a17.29 17.29 0 0 0-4.157-1.1c-3.979-.719-11.9-3.792-15.747-2.559-1.42.458-1.98 1.793-3.157 2.6-1.788 1.142-4.16 1.562-5.642 3.066z",fill:"#a4a4a4"})),h||(h=A.createElement("path",{"data-name":"Path 1421",d:"M287.651 330.419c-4.735-2.027-13.692-.785-18.876-.934-7.125-.168-14.653.589-20.5 4.67-7.108 4.971-10.377 14.094-10.32 22.771s2.97 17.043 6.09 25.143c1.736 4.567 3.567 9.097 4.174 13.907 0 0-62.12 7.365-65.87 10.386s-5.427 9.064-2.55 12.8 92.614 7.487 104.43 4.987a3.736 3.736 0 0 0 3.828-3.633c1.194-6.967 2.156-13.944 2.8-20.977.341-3.624.59-7.248.841-10.881l2.684-38.546a33.064 33.064 0 0 0-.112-8.154c-.7-3.669-2.872-9.889-6.619-11.539z",fill:"#fbbebe"})),y||(y=A.createElement("path",{"data-name":"Path 1430",d:"M272.981 270.348c-1.177-.807-1.737-2.142-3.157-2.6-3.847-1.233-11.768 1.84-15.747 2.559a17.29 17.29 0 0 0-4.156 1.1c-3.222 1.457-5.267 4.726-6.49 8.051-6.128 16.616 3.866 35.398-.14 52.649-.907 3.885-2.505 7.574-3.616 11.413 15.747.551 31.083-6.753 46.783-5.511 3.28.252 6.968 1.2 8.51 4.1q.133-.099.26-.206a5.156 5.156 0 0 0 .617-7.266 11.401 11.401 0 0 1-1.373-1.485 5.38 5.38 0 0 1-.607-2.606 156.78 156.78 0 0 0-13.169-53.816 9.667 9.667 0 0 0-2.073-3.316c-1.482-1.504-3.854-1.924-5.642-3.066z",fill:"#a4a4a4"})),u||(u=A.createElement("path",{fill:"#ffb6b6",d:"m299.243 523.378-2.73 20.543-80.538-.755 4.03-30.32 79.238 10.532z"})),E||(E=A.createElement("path",{d:"m319.853 520.785-8.804 66.24-.838-.111a26.01 26.01 0 0 1-22.356-29.209v-.001l5.377-40.457z",fill:"#2f2e41"})),x||(x=A.createElement("path",{"data-name":"Path 1427",d:"M109.77 439.487c0 .934-1.467 0-1.6-1-1.028-7.556-7.025-13.786-14.01-16.812s-14.945-3.185-22.51-2.466c-11.44 1.083-24.284 5.464-28.468 16.158-.99 2.5-10.264 24.76-9.359 29.766 2.438 13.356 11.572 24.779 22.64 32.69s24 12.637 36.9 16.9a639.95 639.95 0 0 0 104.607 24.984c5.753.869 11.563 1.672 17.073 3.521 4.931 1.653 9.545 4.128 14.365 6.071 11.208 4.5 23.266 6.108 35.211 7.687 2.036.262 4.371.448 5.875-.934 1.943-1.8 1.3-4.941.747-7.528a40.488 40.488 0 0 1 4.773-28.729c2-3.362 4.6-6.809 4.222-10.7-.448-4.539-4.969-7.752-9.47-8.481s-9.079.346-13.6.934a7.285 7.285 0 0 1-4.624-.458 9.235 9.235 0 0 1-1.812-1.606 20.482 20.482 0 0 0-23.854-3.334c-1.672.934-4.2-1.149-5.94-1.933l-19.642-8.892c-22.565-10.208-45.242-20.464-69.115-26.927a14.514 14.514 0 0 1-5.324-2.214c-1.186-.934-2.036-2.2-3.129-3.241-2.382-2.251-5.7-3.148-8.555-4.745s-6.056-5.508-5.402-8.711z",fill:"#2f2e41"})),z||(z=A.createElement("circle",{cx:160.617,cy:411.99,r:14,fill:"#fbbebe"})),v||(v=A.createElement("circle",{cx:191.617,cy:411.99,r:14,fill:"#fbbebe"})),M||(M=A.createElement("path",{d:"M278.035 443.537H85.697a8.48 8.48 0 0 1-8.47-8.47V318.381a8.48 8.48 0 0 1 8.47-8.47h192.338a8.48 8.48 0 0 1 8.47 8.47v116.686a8.48 8.48 0 0 1-8.47 8.47z",fill:"#3f3d56"})),g||(g=A.createElement("circle",{"data-name":"Ellipse 263",cx:181.399,cy:376.724,r:5.604,fill:"#fff"})),k||(k=A.createElement("path",{d:"M868.03 210.452H618.136a5.006 5.006 0 0 1-5-5v-47.1h2v47.1a3.003 3.003 0 0 0 3 3h249.892a3.003 3.003 0 0 0 3-3v-47.429h2v47.43a5.006 5.006 0 0 1-5 5z",fill:"#3f3d56"})),b||(b=A.createElement("path",{fill:"#3f3d56",d:"M371.397 157.352h587.22v2h-587.22z"})),w||(w=A.createElement("circle",{"data-name":"Ellipse 264",cx:371.439,cy:158.196,r:17.202,fill:"#a4a4a4"})),H||(H=A.createElement("circle",{"data-name":"Ellipse 266",cx:546.244,cy:158.196,r:17.202,fill:"#a4a4a4"})),O||(O=A.createElement("circle",{"data-name":"Ellipse 268",cx:664.876,cy:208.757,r:17.202,fill:"#3f3d56"})),G||(G=A.createElement("circle",{"data-name":"Ellipse 269",cx:755.063,cy:208.757,r:17.202,fill:"#ccc"})),T||(T=A.createElement("circle",{"data-name":"Ellipse 270",cx:711.36,cy:158.196,r:17.202,fill:"#a4a4a4"})),L||(L=A.createElement("circle",{"data-name":"Ellipse 271",cx:956.259,cy:158.196,r:17.202,fill:"#a4a4a4"})),C||(C=A.createElement("circle",{"data-name":"Ellipse 272",cx:872.029,cy:158.196,r:17.202,fill:"#a4a4a4"})),I||(I=A.createElement("path",{"data-name":"Rectangle 207",fill:"#3f3d56",d:"M648.539 0h31.906v21.99h-31.906z"})),P||(P=A.createElement("path",{"data-name":"Rectangle 208",fill:"#a4a4a4",d:"M355.612 0h31.906v21.99h-31.906z"})),j||(j=A.createElement("path",{"data-name":"Rectangle 209",fill:"#ccc",d:"M463.685 0h31.906v21.99h-31.906z"})),Z||(Z=A.createElement("path",{d:"M424.782 159.352a1 1 0 0 1-1-1V108.99a5.006 5.006 0 0 1 5-5h48.675a1 1 0 0 1 0 2h-48.675a3.003 3.003 0 0 0-3 3v49.362a1 1 0 0 1-1 1z",fill:"#3f3d56"})),F||(F=A.createElement("circle",{"data-name":"Ellipse 265",cx:479.744,cy:104.616,r:17.202,fill:"#e6e6e6"})),S||(S=A.createElement("path",{d:"M809.782 158.352h-2V108.99a5.006 5.006 0 0 1 5-5h48.675v2h-48.675a3.003 3.003 0 0 0-3 3z",fill:"#3f3d56"})),V||(V=A.createElement("circle",{"data-name":"Ellipse 265",cx:863.744,cy:104.616,r:17.202,fill:"#e6e6e6"})))}},5878:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O=a(7294),G=["title","titleId"];function T(){return T=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,C=L(e,G);return O.createElement("svg",T({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1008.92,height:607.45,viewBox:"0 0 1008.92 607.45","aria-labelledby":a},C),t?O.createElement("title",{id:a},t):null,l||(l=O.createElement("path",{d:"M1008.92 474.03a15.34 15.34 0 0 1-15.26 15.42h-671.4A15.34 15.34 0 0 1 307 474.03V15.42A15.34 15.34 0 0 1 322.26 0h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),c||(c=O.createElement("path",{d:"M1001 466.52a14.91 14.91 0 0 1-14.91 14.91h-655.8a14.91 14.91 0 0 1-14.91-14.91V23.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 1001 23.14z",fill:"#fff"})),r||(r=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M350.43 27.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H350.43a8.85 8.85 0 0 1-8.85-8.85V36.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),n||(n=O.createElement("path",{d:"M358.23 37.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H358.23a8.85 8.85 0 0 1-8.85-8.85V46.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),i||(i=O.createElement("path",{d:"M781.836 310.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#3f3d56"})),s||(s=O.createElement("path",{d:"M684.255 318.762H562.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#3f3d56"})),o||(o=O.createElement("circle",{cx:900.879,cy:386.814,r:36.167,fill:"#e6e6e6"})),m||(m=O.createElement("path",{d:"m919.665 386.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})),d||(d=O.createElement("path",{d:"M853.92 529.03a15.34 15.34 0 0 1-15.26 15.42h-671.4A15.34 15.34 0 0 1 152 529.03V70.42A15.34 15.34 0 0 1 167.26 55h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),f||(f=O.createElement("path",{d:"M846 521.52a14.91 14.91 0 0 1-14.91 14.91h-655.8a14.91 14.91 0 0 1-14.91-14.91V78.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 846 78.14z",fill:"#fff"})),p||(p=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M195.43 82.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H195.43a8.85 8.85 0 0 1-8.85-8.85V91.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),h||(h=O.createElement("path",{d:"M203.23 92.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H203.23a8.85 8.85 0 0 1-8.85-8.85V101.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),y||(y=O.createElement("path",{d:"M626.836 365.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#3f3d56"})),u||(u=O.createElement("path",{d:"M529.255 373.762H407.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#3f3d56"})),E||(E=O.createElement("circle",{cx:745.879,cy:441.814,r:36.167,fill:"#e6e6e6"})),x||(x=O.createElement("path",{d:"m764.665 441.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})),z||(z=O.createElement("path",{d:"M701.92 592.03a15.34 15.34 0 0 1-15.26 15.42H15.26A15.34 15.34 0 0 1 0 592.03V133.42A15.34 15.34 0 0 1 15.26 118h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),v||(v=O.createElement("path",{d:"M694 584.52a14.91 14.91 0 0 1-14.91 14.91H23.29a14.91 14.91 0 0 1-14.91-14.91V141.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 694 141.14z",fill:"#fff"})),M||(M=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M43.43 145.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H43.43a8.85 8.85 0 0 1-8.85-8.85V154.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),g||(g=O.createElement("path",{d:"M51.23 155.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H51.23a8.85 8.85 0 0 1-8.85-8.85V164.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),k||(k=O.createElement("path",{d:"M474.836 428.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#5cb85c"})),b||(b=O.createElement("path",{d:"M377.255 436.762H255.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#5cb85c"})),w||(w=O.createElement("circle",{cx:593.879,cy:504.814,r:36.167,fill:"#3f3d56"})),H||(H=O.createElement("path",{d:"m612.665 504.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})))}},8793:function(e,t,a){var l=a(7294),c=a(9960),r=a(1954),n=a(2949);t.Z=function(e){var t=(0,l.useState)(!1),a=t[0],i=t[1];(0,l.useEffect)((function(){i(!0)}),[]);var s,o,m,d=(s=(0,n.I)(),o=s.colorMode,s.setColorMode,"dark"===o?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",l.createElement(c.Z,{key:String(a),className:m,to:e.to},e.icon&&l.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1558:function(e,t,a){a.d(t,{Z:function(){return r}});var l=a(7294),c="featureSvg_UK3L";var r=function(e){var t=e.Svg,a=e.title,r=e.children;return l.createElement("div",null,l.createElement("div",{className:"text--center"},l.createElement(t,{className:c,alt:a})),l.createElement("div",{className:"text--left padding-horiz--md"},l.createElement("h3",{className:"text--center"},a),l.createElement("p",null,r)))}},6937:function(e,t,a){a.d(t,{Z:function(){return x}});var l=a(7294),c=a(6010),r=a(2730),n="navigationWrapper_JWzE",i="arrow_bCLT",s="disabled_AqwA",o="left_UJxi",m="right_iVh6",d="dots_V3wA",f="dot_TDDQ",p="active_Hf3j",h="slideItem_rSD0";function y(e){var t=e.disabled?" ${styles.disabled}":"";return l.createElement("svg",{onClick:e.onClick,className:(0,c.Z)([i,o,t]),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},l.createElement("path",{d:"M16.67 0l2.83 2.829-9.339 9.175 9.339 9.167-2.83 2.829-12.17-11.996z"}))}function u(e){var t=e.disabled?" "+s:"";return l.createElement("svg",{onClick:e.onClick,className:(0,c.Z)([i,m,t]),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},l.createElement("path",{d:"M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z"}))}var E=function(e){var t=new ResizeObserver((function(){e.update()}));e.on("created",(function(){t.observe(e.container)})),e.on("destroyed",(function(){t.unobserve(e.container)}))};var x=function(e){var t=l.useState(0),a=t[0],i=t[1],s=l.useState(!1),o=s[0],m=s[1],x=void 0!==e.spacing?e.spacing:15,z=(0,r.E)({initial:void 0!==e.initial?e.initial:0,loop:void 0===e.loop||e.loop,breakpoints:void 0!==e.breakpoints?e.breakpoints:{"(min-width: 768px)":{slides:{perView:2,spacing:x}},"(min-width: 1440px)":{slides:{perView:3,spacing:x+5}},"(min-width: 1920px)":{slides:{perView:3,spacing:x+15}}},slides:{perView:void 0!==e.slidesPerView?e.slidesPerView:1,origin:void 0!==e.centered?e.centered?"center":"auto":"center",spacing:x},selector:"."+h,created:function(){m(!0)},slideChanged:function(e){i(e.track.details.rel)}},[E]),v=z[0],M=z[1];return l.createElement(l.Fragment,null,l.createElement("div",{className:n},l.createElement("div",{ref:v,className:"keen-slider"},e.children&&l.Children.map(e.children,(function(e){return l.createElement("div",{className:h},e)}))),o&&M.current&&l.createElement(l.Fragment,null,l.createElement(y,{onClick:function(e){var t;return e.stopPropagation()||(null==(t=M.current)?void 0:t.prev())},disabled:!1}),l.createElement(u,{onClick:function(e){var t;return e.stopPropagation()||(null==(t=M.current)?void 0:t.next())},disabled:!1}))),o&&M.current&&l.createElement("div",{className:d},Array.from(Array(M.current.track.details.slides.length).keys()).map((function(e){return l.createElement("button",{key:e,onClick:function(){var t;null==(t=M.current)||t.moveToIdx(e)},className:(0,c.Z)([f,a===e?p:""])})}))))}},7901:function(e,t,a){a.r(t),a.d(t,{assets:function(){return x},contentTitle:function(){return u},default:function(){return M},frontMatter:function(){return y},metadata:function(){return E},toc:function(){return z}});var l=a(3117),c=a(102),r=(a(7294),a(3905)),n=a(9960),i=a(8793),s=a(1558),o=a(6937),m=a(541),d=a(3818),f=a(1320),p=a(9520),h=(a(4212),["components"]),y={id:"introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",slug:"/"},u=void 0,E={unversionedId:"introduction",id:"version-3.1.0/introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",source:"@site/versioned_docs/version-3.1.0/introduction.mdx",sourceDirName:".",slug:"/",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/introduction.mdx",tags:[],version:"3.1.0",frontMatter:{id:"introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",slug:"/"},sidebar:"version-3.1.0/docs",next:{title:"PyPI",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/pypi"}},x={},z=[{value:"Related materials",id:"related-materials",level:2}],v={toc:z};function M(e){var t=e.components,y=(0,c.Z)(e,h);return(0,r.kt)("wrapper",(0,l.Z)({},v,y,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'This project is also named as "',(0,r.kt)("em",{parentName:"p"},"FFmpeg-Encoder-Decoder-for-Python"),'". It is implemented based on ',(0,r.kt)("a",{parentName:"p",href:"https://ffmpeg.org",title:"FFMpeg"},"FFMpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", ",(0,r.kt)("a",{parentName:"p",href:"https://docs.python.org/3/c-api/index.html",title:"Python-C-API"},"Python-C-API",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)("a",{parentName:"p",href:"https://en.cppreference.com/w/",title:"C++ 11"},"C++11",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". It is under ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE"},"GPL v3 License",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", and recommended for researching purposes."),(0,r.kt)("p",null,"With this package, users could:"),(0,r.kt)(o.Z,{mdxType:"KeenSlider"},(0,r.kt)(s.Z,{Svg:a(3503).Z,title:"Make use of all FFMpeg video codec",mdxType:"FeatureCase"},"When decoding a video (or an online stream), like the original FFMpeg (C version), the provided APIs could detect the video format and codec format automatically. When encoding a video, users could control the codec format, bit rate and some other options by setting parameters."),(0,r.kt)(s.Z,{Svg:a(5878).Z,title:"Work with FFMpeg directly",mdxType:"FeatureCase"},"This project invokes the FFMpeg C APIs in the bottom level. Unlike ",(0,r.kt)(n.Z,{href:"https://github.com/kkroening/ffmpeg-python",alt:"ffmpeg-python",mdxType:"Link"},"ffmpeg-python",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"https://github.com/deuteronomy-works/pyffmpeg",alt:"pyffmpeg",mdxType:"Link"},"pyffmpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is ",(0,r.kt)(n.Z,{href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",alt:"np.ndarray",mdxType:"Link"},(0,r.kt)("code",null,"np.ndarray"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". In other words, our project enables users to combine ",(0,r.kt)(n.Z,{href:"https://numpy.org",alt:"Numpy",mdxType:"Link"},(0,r.kt)("code",null,"Numpy"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and FFMpeg directly."),(0,r.kt)(s.Z,{Svg:a(7627).Z,title:"Frame-level APIs",mdxType:"FeatureCase"},"Unlike ",(0,r.kt)(n.Z,{href:"https://github.com/deuteronomy-works/pyffmpeg",alt:"pyffmpeg",mdxType:"Link"},"pyffmpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", this package is not a simple wrapper of FFMpeg. Users could works on the frame-level APIs. For example, when decoding a video, users could get the data frame-by-frame. Each frame is a 3D ",(0,r.kt)(n.Z,{href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",alt:"np.ndarray",mdxType:"Link"},(0,r.kt)("code",null,"np.ndarray"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"."),(0,r.kt)(s.Z,{Svg:a(7353).Z,title:"Pre-compiled package",mdxType:"FeatureCase"},"This package has been pre-compiled by the author. If users download the dependent dynamic libraries (",(0,r.kt)("code",null,".so")," or ",(0,r.kt)("code",null,".dll"),"), they do not need to compile the package by themself.")),(0,r.kt)("p",null,"However, users could not work with this project in such cases:"),(0,r.kt)(o.Z,{mdxType:"KeenSlider"},(0,r.kt)(s.Z,{Svg:a(4489).Z,title:"Platform limited",mdxType:"FeatureCase"},"Currently, we only support Linux and Windows. The Linux release is pre-compiled on Debian. It has been only tested in Ubuntu, Debian and Windows. In other cases, the pre-compiled library may not work. Users may need to compile the package by themselves."),(0,r.kt)(s.Z,{Svg:a(7905).Z,title:"Version limited",mdxType:"FeatureCase"},"Currently, our project only works with FFMpeg ",(0,r.kt)("code",null,"4.4"),". Users need to download the dependent dynamic libraries to make the package work. The legacy versions of this project supports FFMpeg ",(0,r.kt)("code",null,"3.3"),", ",(0,r.kt)("code",null,"3.4.2")," and ",(0,r.kt)("code",null,"4.0"),". However, the legacy built packages are not technically supported now."),(0,r.kt)(s.Z,{Svg:a(3073).Z,title:"Audio not supporte",mdxType:"FeatureCase"},"Although the original FFMpeg supports both video and audio streams, our project only works on video streams. For example, if a video contains audio streams, our package would omit all audio frames in the bottom level. In other words, you ",(0,r.kt)("b",null,"could not")," perform audio analysis now. In the future (",(0,r.kt)("code",null,"v4"),"), we may support the audio frame analysis."),(0,r.kt)(s.Z,{Svg:a(7632).Z,title:"Filters not supported",mdxType:"FeatureCase"},"Although the original FFMpeg supports some video processing tools (",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lavfi.html",alt:"libavfilter",mdxType:"Link"},(0,r.kt)("code",null,"avfilter"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lpp.html",alt:"libpostproc",mdxType:"Link"},(0,r.kt)("code",null,"postproc"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"), our implementation drops these modules. Instead, we suggest that users should process the frames with ",(0,r.kt)(n.Z,{href:"https://pypi.org/project/Pillow",alt:"Pillow",mdxType:"Link"},"pillow",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," or ",(0,r.kt)(n.Z,{href:"https://pypi.org/project/opencv-python",alt:"OpenCV Python",mdxType:"Link"},"openCV",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". On the other hand, our implementation still supports frame scaling and re-sampling (supported by ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__libsws.html",alt:"libswscale",mdxType:"Link"},(0,r.kt)("code",null,"swscale"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lswr.html",alt:"libswresample",mdxType:"Link"},(0,r.kt)("code",null,"swresample"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),").")),(0,r.kt)("p",{className:"right noemph"},"Pictures are provided by ",(0,r.kt)(n.Z,{href:"https://undraw.co",alt:"unDraw",mdxType:"Link"},"unDraw",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"."),(0,r.kt)("h2",{id:"related-materials"},"Related materials"),(0,r.kt)("p",null,"License of this project:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE",icon:d.Z,mdxType:"DarkButton"},"GPL v3 License")),(0,r.kt)("p",null,"Guidelines for the contributions:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md",icon:f.Z,mdxType:"DarkButton"},"Contributions")),(0,r.kt)("p",null,"Contributor covenant code of conduct:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md",icon:p.Z,mdxType:"DarkButton"},"Code of Conduct")))}M.isMDXComponent=!0},2730:function(e,t,a){var l=a(7294);function c(e){return Array.prototype.slice.call(e)}function r(){return Date.now()}function n(e,t,a){if(t="data-keen-slider-"+t,null===a)return e.removeAttribute(t);e.setAttribute(t,a||"")}function i(e,t){return t=t||document,"function"==typeof e&&(e=e(t)),Array.isArray(e)?e:"string"==typeof e?c(t.querySelectorAll(e)):e instanceof HTMLElement?[e]:e instanceof NodeList?c(e):[]}function s(e){e.raw&&(e=e.raw),e.cancelable&&!e.defaultPrevented&&e.preventDefault()}function o(e){e.raw&&(e=e.raw),e.stopPropagation&&e.stopPropagation()}function m(){var e=[];return{add:function(t,a,l,c){t.addListener?t.addListener(l):t.addEventListener(a,l,c),e.push([t,a,l,c])},input:function(e,t,a,l){this.add(e,t,function(e){return function(t){t.nativeEvent&&(t=t.nativeEvent);var a=t.changedTouches||[],l=t.targetTouches||[],c=t.detail&&t.detail.x?t.detail:null;return e({id:c?c.identifier?c.identifier:"i":l[0]?l[0]?l[0].identifier:"e":"d",idChanged:c?c.identifier?c.identifier:"i":a[0]?a[0]?a[0].identifier:"e":"d",raw:t,x:c&&c.x?c.x:l[0]?l[0].screenX:c?c.x:t.pageX,y:c&&c.y?c.y:l[0]?l[0].screenY:c?c.y:t.pageY})}}(a),l)},purge:function(){e.forEach((function(e){e[0].removeListener?e[0].removeListener(e[2]):e[0].removeEventListener(e[1],e[2],e[3])})),e=[]}}}function d(e,t,a){return Math.min(Math.max(e,t),a)}function f(e){return(e>0?1:0)-(e<0?1:0)||+e}function p(e){return e.getBoundingClientRect()}function h(e,t,a,l){var c=e&&e[t];return null==c?a:l&&"function"==typeof c?c():c}function y(e){return Math.round(1e6*e)/1e6}function u(e,t){if(e===t)return!0;var a=typeof e;if(a!==typeof t)return!1;if("object"!==a||null===e||null===t)return"function"===a&&e.toString()===t.toString();if(e.length!==t.length||Object.getOwnPropertyNames(e).length!==Object.getOwnPropertyNames(t).length)return!1;for(var l in e)if(!u(e[l],t[l]))return!1;return!0}function E(e,t){return u(e.current,t)||(e.current=t),e.current}var x=function(){return x=Object.assign||function(e){for(var t,a=1,l=arguments.length;a0?1:-1),{abs:n+t*i*c,origin:r,rel:n}}function G(e,t,a){var l;if(t||!I())return T(e,a);if(!L(e))return null;var c=O(null!=a?a:b),r=c.abs,n=e-c.rel,s=r+n;l=T(s);var o=T(s-i*f(n));return(null!==o&&Math.abs(o)6&&(g=g.slice(-6)),b=Math.round(1e6*t)/1e6;var l=Z().abs;if(l!==k){var c=null!==k;k=l,c&&e.emit("slideChanged")}}function Z(r){var s=r?null:function(){if(i){var e=I(),t=e?(b%a+a)%a:b,r=(e?b%a:b)-n[0][2],s=0-(r<0&&e?a-Math.abs(r):r),o=0,d=O(b),h=d.abs,y=d.rel,z=n[y][2],M=n.map((function(t,l){var r=s+o;(r<0-t[0]||r>1)&&(r+=(Math.abs(r)>a-1&&e?a:0)*f(-r));var n=l-y,m=f(n),d=n+h;e&&(-1===m&&r>z&&(d+=i),1===m&&rE&&(r-=a));var p=r+t[0]+t[1],x=Math.max(r>=0&&p<=1?1:p<0||r>1?0:r<0?Math.min(1,(t[0]+r)/t[0]):(1-r)/t[0],0);return o+=t[0]+t[1],{abs:d,distance:c.rtl?-1*r+1-t[0]:r,portion:x,size:t[0]}}));return h=C(h),y=P(h),{abs:C(h),length:l,max:v,maxIdx:p,min:x,minIdx:m,position:b,progress:e?t/a:b/l,rel:y,slides:M}}}();return t.details=s,e.emit("detailsChanged"),s}return t={absToRel:P,add:w,details:null,distToIdx:H,idxToDist:G,init:function(t){if(function(){if(c=e.options,n=(c.trackConfig||[]).map((function(e){return[h(e,"size",1),h(e,"spacing",0),h(e,"origin",0)]})),i=n.length){a=y(n.reduce((function(e,t){return e+t[0]+t[1]}),0));var t,r=i-1;l=y(a+n[0][2]-n[r][0]-n[r][2]-n[r][1]),(s=n.reduce((function(e,a){if(!e)return[0];var l=n[e.length-1],c=e[e.length-1]+(l[0]+l[2])+l[1];return c-=a[2],e[e.length-1]>c&&(c=e[e.length-1]),c=y(c),e.push(c),(!t||t200||(f(l)!==f(t.distance)&&t.distance&&(t={distance:0,lastTimestamp:0,time:0}),t.time&&(t.distance+=l),t.lastTimestamp&&(t.time+=c-t.lastTimestamp),t.lastTimestamp=c),t}),{distance:0,lastTimestamp:0,time:0});return t.distance/t.time||0}}}function M(e){var t,a,l,c,r,n,i;function s(e){return 2*e}function o(e){return d(e,n,i)}function m(e){return 1-Math.pow(1-e,3)}function p(){u();var t="free-snap"===e.options.mode,a=e.track,n=a.velocity();l=f(n);var i=e.track.details,d=[];if(n||!t){var p=h(n),y=p.dist,E=p.dur;if(E=s(E),y*=l,t){var x=a.idxToDist(a.distToIdx(y),!0);x&&(y=x)}d.push({distance:y,duration:E,easing:m});var z=i.position,v=z+y;if(vr){var M=vr||i=b)return t;if(i0||i>w&&a<0)return t;var o=(ib&&M0||M===w&&a<0)&&o(i),x+=v,!z&&Math.abs(x*c)>5&&(z=!0,n(t,"moves","")),e.track.add(v),E=m,e.emit("dragged")}}function G(t){!p&&e.track.details&&e.track.details.length&&(z=!1,x=0,p=!0,u=!0,y=t.id,L(t),E=C(t),e.emit("dragStarted"))}function T(a){p&&y===a.idChanged&&(n(t,"moves",null),p=!1,e.emit("dragEnded"))}function L(e){var t=I(),a=t?e.y:e.x,l=t?e.x:e.y,c=void 0!==v&&void 0!==M&&Math.abs(M-l)<=Math.abs(v-a);return v=a,M=l,c}function C(e){return I()?e.y:e.x}function I(){return e.options.vertical}function P(){c=e.size,r=I()?window.innerHeight:window.innerWidth;var t=e.track.details;t&&(b=t.min,w=t.max)}function j(){if(H.purge(),e.options.drag&&!e.options.disabled){var a;a=e.options.dragSpeed||1,h="function"==typeof a?a:function(e){return e*a},l=e.options.rtl?-1:1,P(),t=e.container,function(){var e="data-keen-slider-clickable";i("[".concat(e,"]:not([").concat(e,"=false])"),t).map((function(e){H.add(e,"mousedown",o),H.add(e,"touchstart",o)}))}(),H.add(t,"dragstart",(function(e){s(e)})),H.input(t,"ksDragStart",G),H.input(t,"ksDrag",O),H.input(t,"ksDragEnd",T),H.input(t,"mousedown",G),H.input(t,"mousemove",O),H.input(t,"mouseleave",T),H.input(t,"mouseup",T),H.input(t,"touchstart",G,{passive:!0}),H.input(t,"touchmove",O,{passive:!1}),H.input(t,"touchend",T),H.input(t,"touchcancel",T),H.add(window,"wheel",(function(e){p&&s(e)}));var c="data-keen-slider-scrollable";i("[".concat(c,"]:not([").concat(c,"=false])"),e.container).map((function(e){return function(e){var t;H.input(e,"touchstart",(function(e){t=C(e),k=!0,g=!0}),{passive:!0}),H.input(e,"touchmove",(function(a){var l=I(),c=l?e.scrollHeight-e.clientHeight:e.scrollWidth-e.clientWidth,r=t-C(a),n=l?e.scrollTop:e.scrollLeft,i=l&&"scroll"===e.style.overflowY||!l&&"scroll"===e.style.overflowX;if(t=C(a),(r<0&&n>0||r>0&&n=1||(e.origin=1-t-(m>1?0:1-m)),e}))}a.options.trackConfig=r}function w(){O();var e=a.size;a.options.disabled||e===c||(c=e,k())}function H(){w(),setTimeout(w,500),setTimeout(w,2e3)}function O(){var e=p(a.container);a.size=(a.options.vertical?e.height:e.width)||1}function G(){a.slides=i(a.options.selector,a.container)}a.container=(o=i(e,document)).length?o[0]:null,a.destroy=function(){d.purge(),a.emit("destroyed"),f(!0)},a.prev=function(){a.moveToIdx(a.track.details.abs-1,!0)},a.next=function(){a.moveToIdx(a.track.details.abs+1,!0)},a.update=k,v(a.options)}}var w=function(e,t,a){try{return function(e,t){var a,l={};return a={emit:function(e){l[e]&&l[e].forEach((function(e){e(a)}));var t=a.options&&a.options[e];t&&t(a)},moveToIdx:function(e,t,l){var c=a.track.idxToDist(e,t);if(c){var r=a.options.defaultAnimation;a.animator.start([{distance:c,duration:h(l||r,"duration",500),easing:h(l||r,"easing",(function(e){return 1+--e*e*e*e*e}))}])}},on:function(e,t,a){void 0===a&&(a=!1),l[e]||(l[e]=[]);var c=l[e].indexOf(t);c>-1?a&&delete l[e][c]:a||l[e].push(t)},options:e},function(){if(a.track=v(a),a.animator=function(e){var t,a,l,c,r,n;function i(t){n||(n=t),s(!0);var r=t-n;r>l&&(r=l);var d=c[a];if(d[3]'}},1320:function(e,t){t.Z={body:''}},9520:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/17896441.9398dc7e.js b/assets/js/17896441.9398dc7e.js new file mode 100644 index 0000000..e4f9550 --- /dev/null +++ b/assets/js/17896441.9398dc7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7918],{6487:function(e,t,a){a.d(t,{Z:function(){return h}});var n=a(3117),l=a(7294),r=a(3651),s=a(8596),i=a(5281),c={breadcrumbsContainer:"breadcrumbsContainer_Xlws",breadcrumbHomeIcon:"breadcrumbHomeIcon_kU5B"},o=a(6010),d=a(9960),m=a(4996),u=a(5999);function v(e){return l.createElement("svg",(0,n.Z)({viewBox:"0 0 24 24"},e),l.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}function b(e){var t=e.children,a=e.href,n="breadcrumbs__link";return e.isLast?l.createElement("span",{className:n,itemProp:"name"},t):a?l.createElement(d.Z,{className:n,href:a,itemProp:"item"},l.createElement("span",{itemProp:"name"},t)):l.createElement("span",{className:n},t)}function p(e){var t=e.children,a=e.active,r=e.index,s=e.addMicrodata;return l.createElement("li",(0,n.Z)({},s&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,o.Z)("breadcrumbs__item",{"breadcrumbs__item--active":a})}),t,l.createElement("meta",{itemProp:"position",content:String(r+1)}))}function E(){var e=(0,m.Z)("/");return l.createElement("li",{className:"breadcrumbs__item"},l.createElement(d.Z,{"aria-label":(0,u.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,o.Z)("breadcrumbs__link",c.breadcrumbsItemLink),href:e},l.createElement(v,{className:c.breadcrumbHomeIcon})))}function h(){var e=(0,r.s1)(),t=(0,s.Ns)();return e?l.createElement("nav",{className:(0,o.Z)(i.k.docs.docBreadcrumbs,c.breadcrumbsContainer),"aria-label":(0,u.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},l.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&l.createElement(E,null),e.map((function(t,a){var n=a===e.length-1;return l.createElement(p,{key:a,active:n,index:a,addMicrodata:!!t.href},l.createElement(b,{href:t.href,isLast:n},t.label))})))):null}},8614:function(e,t,a){a.r(t),a.d(t,{default:function(){return Y}});var n=a(7294),l=a(6010),r=a(5214),s=a(4474),i=a(7597),c=a(5999),o=a(5281);function d(e){var t=e.lastUpdatedAt,a=e.formattedLastUpdatedAt;return n.createElement(c.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:n.createElement("b",null,n.createElement("time",{dateTime:new Date(1e3*t).toISOString()},a))}}," on {date}")}function m(e){var t=e.lastUpdatedBy;return n.createElement(c.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:n.createElement("b",null,t)}}," by {user}")}function u(e){var t=e.lastUpdatedAt,a=e.formattedLastUpdatedAt,l=e.lastUpdatedBy;return n.createElement("span",{className:o.k.common.lastUpdated},n.createElement(c.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&a?n.createElement(d,{lastUpdatedAt:t,formattedLastUpdatedAt:a}):"",byUser:l?n.createElement(m,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var v=a(3117),b=a(102),p="iconEdit_dcUD",E=["className"];function h(e){var t=e.className,a=(0,b.Z)(e,E);return n.createElement("svg",(0,v.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,l.Z)(p,t),"aria-hidden":"true"},a),n.createElement("g",null,n.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function g(e){var t=e.editUrl;return n.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:o.k.common.editThisPage},n.createElement(h,null),n.createElement(c.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}var f=a(9960),Z="tag_hD8n",N="tagRegular_D6E_",_="tagWithCount_i0QQ";function L(e){var t=e.permalink,a=e.label,r=e.count;return n.createElement(f.Z,{href:t,className:(0,l.Z)(Z,r?_:N)},a,r&&n.createElement("span",null,r))}var k="tags_XVD_",T="tag_JSN8";function U(e){var t=e.tags;return n.createElement(n.Fragment,null,n.createElement("b",null,n.createElement(c.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),n.createElement("ul",{className:(0,l.Z)(k,"padding--none","margin-left--sm")},t.map((function(e){var t=e.label,a=e.permalink;return n.createElement("li",{key:a,className:T},n.createElement(L,{label:t,permalink:a}))}))))}var w="lastUpdated_foO9";function y(e){return n.createElement("div",{className:(0,l.Z)(o.k.docs.docFooterTagsRow,"row margin-bottom--sm")},n.createElement("div",{className:"col"},n.createElement(U,e)))}function C(e){var t=e.editUrl,a=e.lastUpdatedAt,r=e.lastUpdatedBy,s=e.formattedLastUpdatedAt;return n.createElement("div",{className:(0,l.Z)(o.k.docs.docFooterEditMetaRow,"row")},n.createElement("div",{className:"col"},t&&n.createElement(g,{editUrl:t})),n.createElement("div",{className:(0,l.Z)("col",w)},(a||r)&&n.createElement(u,{lastUpdatedAt:a,formattedLastUpdatedAt:s,lastUpdatedBy:r})))}function A(e){var t=e.content.metadata,a=t.editUrl,r=t.lastUpdatedAt,s=t.formattedLastUpdatedAt,i=t.lastUpdatedBy,c=t.tags,d=c.length>0,m=!!(a||r||i);return d||m?n.createElement("footer",{className:(0,l.Z)(o.k.docs.docFooter,"docusaurus-mt-lg")},d&&n.createElement(y,{tags:c}),m&&n.createElement(C,{editUrl:a,lastUpdatedAt:r,lastUpdatedBy:i,formattedLastUpdatedAt:s})):null}var B=a(1575),x=a(6043),I="tocCollapsible_bZGK",M="tocCollapsibleContent_NNA8",D="tocCollapsibleExpanded_IqtF",H=a(721),V="tocCollapsibleButton_l22C",S="tocCollapsibleButtonExpanded_KeTX",P=["collapsed"];function F(e){var t=e.collapsed,a=(0,b.Z)(e,P);return n.createElement("button",(0,v.Z)({type:"button"},a,{className:(0,l.Z)("clean-btn",V,!t&&S,a.className)}),n.createElement(c.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}function R(e){var t=e.toc,a=e.className,r=e.minHeadingLevel,s=e.maxHeadingLevel,i=(0,x.u)({initialState:!0}),c=i.collapsed,o=i.toggleCollapsed;return n.createElement("div",{className:(0,l.Z)(I,!c&&D,a)},n.createElement(F,{collapsed:c,onClick:o}),n.createElement(x.z,{lazy:!0,className:M,collapsed:c},n.createElement(H.Z,{toc:t,minHeadingLevel:r,maxHeadingLevel:s})))}var z=a(9649),O="docItemContainer_vinB",X="docItemCol_DM6M",q="tocMobile_TmEX",J=a(833),G=a(7524),K=a(6487),Q=a(5290);function W(e){var t,a=e.content,l=a.metadata,r=a.frontMatter,s=a.assets,i=r.keywords,c=l.description,o=l.title,d=null!=(t=s.image)?t:r.image;return n.createElement(J.d,{title:o,description:c,keywords:i,image:d})}function j(e){var t=e.content,a=t.metadata,c=t.frontMatter,d=c.hide_title,m=c.hide_table_of_contents,u=c.toc_min_heading_level,v=c.toc_max_heading_level,b=a.title,p=!d&&void 0===t.contentTitle,E=(0,G.i)(),h=!m&&t.toc&&t.toc.length>0,g=h&&("desktop"===E||"ssr"===E);return n.createElement("div",{className:"row"},n.createElement("div",{className:(0,l.Z)("col",!m&&X)},n.createElement(s.Z,null),n.createElement("div",{className:O},n.createElement("article",null,n.createElement(K.Z,null),n.createElement(i.Z,null),h&&n.createElement(R,{toc:t.toc,minHeadingLevel:u,maxHeadingLevel:v,className:(0,l.Z)(o.k.docs.docTocMobile,q)}),n.createElement("div",{className:(0,l.Z)(o.k.docs.docMarkdown,"markdown")},p&&n.createElement("header",null,n.createElement(z.Z,{as:"h1"},b)),n.createElement(Q.Z,null,n.createElement(t,null))),n.createElement(A,e)),n.createElement(r.Z,{previous:a.previous,next:a.next}))),g&&n.createElement("div",{className:"col col--3"},n.createElement(B.Z,{toc:t.toc,minHeadingLevel:u,maxHeadingLevel:v,className:o.k.docs.docTocDesktop})))}function Y(e){var t="docs-doc-id-"+e.content.metadata.unversionedId;return n.createElement(J.FG,{className:t},n.createElement(W,e),n.createElement(j,e))}},5214:function(e,t,a){a.d(t,{Z:function(){return o}});var n=a(3117),l=a(7294),r=a(5999),s=a(6010),i=a(9960);function c(e){var t=e.permalink,a=e.title,n=e.subLabel,r=e.isNext;return l.createElement(i.Z,{className:(0,s.Z)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},n&&l.createElement("div",{className:"pagination-nav__sublabel"},n),l.createElement("div",{className:"pagination-nav__label"},a))}function o(e){var t=e.previous,a=e.next;return l.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&l.createElement(c,(0,n.Z)({},t,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&l.createElement(c,(0,n.Z)({},a,{subLabel:l.createElement(r.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},7597:function(e,t,a){a.d(t,{Z:function(){return c}});var n=a(7294),l=a(5999),r=a(4477),s=a(5281),i=a(6010);function c(e){var t=e.className,a=(0,r.E)();return a.badge?n.createElement("span",{className:(0,i.Z)(t,s.k.docs.docVersionBadge,"badge badge--secondary")},n.createElement(l.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}},4474:function(e,t,a){a.d(t,{Z:function(){return E}});var n=a(7294),l=a(2263),r=a(9960),s=a(5999),i=a(5551),c=a(373),o=a(5281),d=a(4477),m=a(6010);var u={unreleased:function(e){var t=e.siteTitle,a=e.versionMetadata;return n.createElement(s.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){var t=e.siteTitle,a=e.versionMetadata;return n.createElement(s.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function v(e){var t=u[e.versionMetadata.banner];return n.createElement(t,e)}function b(e){var t=e.versionLabel,a=e.to,l=e.onClick;return n.createElement(s.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:n.createElement("b",null,n.createElement(r.Z,{to:a,onClick:l},n.createElement(s.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function p(e){var t,a=e.className,r=e.versionMetadata,s=(0,l.Z)().siteConfig.title,d=(0,i.gA)({failfast:!0}).pluginId,u=(0,c.J)(d).savePreferredVersionName,p=(0,i.Jo)(d),E=p.latestDocSuggestion,h=p.latestVersionSuggestion,g=null!=E?E:(t=h).docs.find((function(e){return e.id===t.mainDocId}));return n.createElement("div",{className:(0,m.Z)(a,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},n.createElement("div",null,n.createElement(v,{siteTitle:s,versionMetadata:r})),n.createElement("div",{className:"margin-top--md"},n.createElement(b,{versionLabel:h.label,to:g.path,onClick:function(){return u(h.name)}})))}function E(e){var t=e.className,a=(0,d.E)();return a.banner?n.createElement(p,{className:t,versionMetadata:a}):null}}}]); \ No newline at end of file diff --git a/assets/js/18b93cb3.888cbf5d.js b/assets/js/18b93cb3.888cbf5d.js new file mode 100644 index 0000000..e7216fb --- /dev/null +++ b/assets/js/18b93cb3.888cbf5d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3042],{3917:function(e,t,n){n.r(t),n.d(t,{default:function(){return u}});var r=n(7294),l=n(2263),a=n(9960),i=n(3746),c=n(5514);var o={body:'',width:24,height:24};var s={body:''},m=n(5551),d=n(5999);var u=function(){var e=(0,l.Z)().siteConfig,t=(0,m.gB)(),n=(0,m.yW)(),u=t.find((function(e){return"current"===e.name})),E=t.filter((function(e){return e!==n&&"current"!==e.name})),v="https://github.com/"+e.organizationName+"/FFmpeg-Encoder-Decoder-for-Python";return r.createElement(i.Z,{title:"Versions",description:"Docusaurus 2 Versions page listing all documented site versions"},r.createElement("main",{className:"container margin-vert--lg"},r.createElement("h1",null,r.createElement(d.Z,{id:"versions.title",description:"Title text in the version page.",values:{title:r.createElement("code",null,e.title)}},"{title} documentation versions")),n&&r.createElement("div",{className:"margin-bottom--lg"},r.createElement("h3",{id:"next"},r.createElement(d.Z,{id:"versions.current.head",description:"Head of the current version."},"Current version (Stable)")),r.createElement("p",null,r.createElement(d.Z,{id:"versions.current.descr",description:"Description of the current version."},"Here you can find the documentation for current released version.")),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.version",description:"Table item: version."},"Version")),r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.docs",description:"Table item: version."},"Documentation")),r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.relwin",description:"Table item: version."},"Release (Win)")),r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.rellinux",description:"Table item: version."},"Release (Linux)")))),r.createElement("tbody",null,r.createElement("tr",null,r.createElement("th",null,n.label),r.createElement("td",{align:"center"},r.createElement(a.Z,{to:n.path},r.createElement(c.Z,{icon:o}))),r.createElement("td",{align:"center"},r.createElement(a.Z,{href:v+"/releases/tag/"+n.name},r.createElement(c.Z,{icon:s}))),r.createElement("td",{align:"center"},r.createElement(a.Z,{href:v+"/releases/tag/"+n.name+"-linux"},r.createElement(c.Z,{icon:s}))))))),E.length>0&&r.createElement("div",{className:"margin-bottom--lg"},r.createElement("h3",{id:"archive"},r.createElement(d.Z,{id:"versions.prev.head",description:"Head of the previous version."},"Past versions (Not maintained anymore)")),r.createElement("p",null,r.createElement(d.Z,{id:"versions.prev.descr",description:"Description of the previous version.",values:{title:r.createElement("code",null,e.title)}},"Here you can find documentation for previous versions of {title}.")),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.version",description:"Table item: version."},"Version")),r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.docs",description:"Table item: version."},"Documentation")),r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.relwin",description:"Table item: version."},"Release (Win)")),r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.rellinux",description:"Table item: version."},"Release (Linux)")))),r.createElement("tbody",null,E.map((function(e){return r.createElement("tr",{key:e.name},r.createElement("th",null,e.label),r.createElement("td",{align:"center"},r.createElement(a.Z,{to:e.path},r.createElement(c.Z,{icon:o}))),r.createElement("td",{align:"center"},r.createElement(a.Z,{href:v+"/releases/tag/"+e.name},r.createElement(c.Z,{icon:s}))),r.createElement("td",{align:"center"},r.createElement(a.Z,{href:v+"/releases/tag/"+e.name+"-linux"},r.createElement(c.Z,{icon:s}))))}))))),u!==n&&r.createElement("div",{className:"margin-bottom--lg"},r.createElement("h3",{id:"latest"},r.createElement(d.Z,{id:"versions.next.head",description:"Head of the next version."},"Next version (Unreleased)")),r.createElement("p",null,r.createElement(d.Z,{id:"versions.next.descr",description:"Description of the next version."},"Here you can find the documentation for work-in-process unreleased version.")),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.version",description:"Table item: version."},"Version")),r.createElement("th",null,r.createElement(d.Z,{id:"versions.table.docs",description:"Table item: version."},"Documentation")))),r.createElement("tbody",null,r.createElement("tr",null,r.createElement("th",null,u.label),r.createElement("td",{align:"center"},r.createElement(a.Z,{to:u.path},r.createElement(c.Z,{icon:o})))))))))}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.4e53eedf.js b/assets/js/1a4e3797.4e53eedf.js new file mode 100644 index 0000000..5043318 --- /dev/null +++ b/assets/js/1a4e3797.4e53eedf.js @@ -0,0 +1,2 @@ +/*! For license information please see 1a4e3797.4e53eedf.js.LICENSE.txt */ +(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7920],{7331:function(e){function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,a,s,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(a=this._events[e]))return!1;if(r(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),a.apply(this,c)}else if(n(a))for(c=Array.prototype.slice.call(arguments,1),s=(o=a.slice()).length,u=0;u0&&this._events[e].length>s&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,a,s,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(s=(i=this._events[e]).length,a=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=s;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){a=c;break}if(a<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},1427:function(e,t,r){"use strict";var n=r(8185),i=r(6479),a=r(2956);function s(e,t,r){return new n(e,t,r)}s.version=r(4392),s.AlgoliaSearchHelper=n,s.SearchParameters=i,s.SearchResults=a,e.exports=s},2213:function(e,t,r){"use strict";var n=r(7331);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(3412)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},5396:function(e,t,r){"use strict";var n=r(8937),i=r(9906),a=r(9613),s={addRefinement:function(e,t,r){if(s.isRefined(e,t,r))return e;var i=""+r,a=e[t]?e[t].concat(i):[i],c={};return c[t]=a,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return s.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return s.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return s.isRefined(e,t,r)?s.removeRefinement(e,t,r):s.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return a(e)?{}:e;if("string"==typeof t)return i(e,[t]);if("function"==typeof t){var n=!1,s=Object.keys(e).reduce((function(i,a){var s=e[a]||[],c=s.filter((function(e){return!t(e,a,r)}));return c.length!==s.length&&(n=!0),i[a]=c,i}),{});return n?s:e}},isRefined:function(e,t,r){var n=!!e[t]&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=s},6479:function(e,t,r){"use strict";var n=r(7952),i=r(8937),a=r(4720),s=r(4458),c=r(2629),u=r(9906),o=r(9613),h=r(56),f=r(5396);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return n({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&o(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):o(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var i=c(r);if(this.isNumericRefined(e,t,i))return this;var a=n({},this.numericRefinements);return a[e]=n({},a[e]),a[e][t]?(a[e][t]=a[e][t].slice(),a[e][t].push(i)):a[e][t]=[i],this.setQueryParameters({numericRefinements:a})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){return void 0!==r?this.isNumericRefined(e,t,r)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(n,i){return i===e&&n.op===t&&l(n.val,c(r))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return o(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var a=r[i],s={};return a=a||{},Object.keys(a).forEach((function(r){var n=a[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),s[r]=c})),n[i]=s,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),n={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?n[e]=[]:n[e]=[t.slice(0,t.lastIndexOf(r))]:n[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},n,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:i({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return!!this.numericRefinements[e];var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var i,a,u=c(r),o=void 0!==(i=this.numericRefinements[e][t],a=u,s(i,(function(e){return l(e,a)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=a(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets())},getRefinedHierarchicalFacets:function(){var e=this;return a(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0})))},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),a=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return s(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},9677:function(e,t,r){"use strict";e.exports=function(e){return function(t,r){var s=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[s.name]&&e.hierarchicalFacetsRefinements[s.name][0]||"",h=e._getHierarchicalFacetSeparator(s),f=e._getHierarchicalRootPath(s),l=e._getHierarchicalShowParentLevel(s),m=a(e._getHierarchicalFacetSortBy(s)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,a,s){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m-1})));if(s){var h=s.attributes.indexOf(t),l=u(e.hierarchicalFacets,(function(e){return e.name===s.name}));o.hierarchicalFacets[l][h]={attribute:t,data:i,exhaustive:a.exhaustiveFacetsCount}}else{var m,d=-1!==e.disjunctiveFacets.indexOf(t),g=-1!==e.facets.indexOf(t);d&&(m=v[t],o.disjunctiveFacets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.disjunctiveFacets[m],a.facets_stats,t)),g&&(m=f[t],o.facets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.facets[m],a.facets_stats,t))}})),this.hierarchicalFacets=s(this.hierarchicalFacets),h.forEach((function(r){var s=t[g],c=s&&s.facets?s.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(c).forEach((function(t){var r,f=c[t];if(h){r=u(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=u(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=n({},o.hierarchicalFacets[r][m].data,f)}else{r=v[t];var d=a.facets&&a.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:s.exhaustiveFacetsCount},p(o.disjunctiveFacets[r],s.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),g++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),a=e._getHierarchicalFacetSeparator(n),s=e.getHierarchicalRefinement(r);if(!(0===s.length||s[0].split(a).length<2)){var c=t[g],h=c&&c.facets?c.facets:{};Object.keys(h).forEach((function(t){var r=h[t],c=u(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=u(o.hierarchicalFacets[c],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(s.length>0){var m=s[0].split(a)[0];l[m]=o.hierarchicalFacets[c][f].data[m]}o.hierarchicalFacets[c][f].data=i(l,r,o.hierarchicalFacets[c][f].data)}})),g++}})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=f[t];o.facets[n]={name:t,data:a.facets[t],exhaustive:a.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=s(this.facets),this.disjunctiveFacets=s(this.disjunctiveFacets),this._state=e}function g(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var a=t.data.map((function(t){return g(e,t,r,n+1)})),s=e(a,r[n]);return i({data:s},t)}function y(e,t){var r=c(e,(function(e){return e.name===t}));return r&&r.stats}function R(e,t,r,n,i){var a=c(i,(function(e){return e.name===r})),s=a&&a.data&&a.data[n]?a.data[n]:0,u=a&&a.exhaustive||!1;return{type:t,attributeName:r,name:n,count:s,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return c(this.facets,t)||c(this.disjunctiveFacets,t)||c(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=function(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=c(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=c(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t))return c(e.hierarchicalFacets,r)}(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),u=this;if(Array.isArray(r))n=[e];else n=u._state.getHierarchicalFacetByName(r.name).attributes;return g((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(u,t);if(Boolean(r))return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var s,c=t.sortRemainingBy;return"hidden"===c?r:(s="alpha"===c?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(a(n,s[0],s[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=o(s.sortBy,v.DEFAULT_SORT);return a(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?y(this.facets,e):this._state.isDisjunctiveFacet(e)?y(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(R(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(R(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(R(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),s=r.split(a),u=c(n,(function(e){return e.name===t})),o=s.reduce((function(e,t){var r=e&&c(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},8185:function(e,t,r){"use strict";var n=r(6479),i=r(2956),a=r(2213),s=r(5187),c=r(7331),u=r(3412),o=r(9613),h=r(9906),f=r(7952),l=r(4392),m=r(7050).escapeFacetValue;function d(e,t,r){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.setClient(e);var i=r||{};i.index=t,this.state=n.make(i),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}u(d,c),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return s._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=s._getQueries(r.index,r),a=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),{content:new i(r,e.results),state:r,_originalResponse:e}}),(function(e){throw a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),t(null,new i(r,e.results),r)})).catch((function(e){a._currentNbQueries--,0===a._currentNbQueries&&a.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=f({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:h(s._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var c=this.client.initIndex(n.index);if("function"!=typeof c.findAnswers)throw new Error(a);return c.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues;if(!i&&"function"!=typeof this.client.initIndex)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var a=this.state.setQueryParameters(n||{}),c=a.isDisjunctiveFacet(e),u=s.getSearchForFacetQuery(e,t,r,a);this._currentNbQueries++;var o=this;return this.emit("searchForFacetValues",{state:a,facet:e,query:t}),(i?this.client.searchForFacetValues([{indexName:a.index,params:u}]):this.client.initIndex(a.index).searchForFacetValues(u)).then((function(t){return o._currentNbQueries--,0===o._currentNbQueries&&o.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=m(t.value),t.isRefined=c?a.isDisjunctiveFacetRefined(e,t.escapedValue):a.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw o._currentNbQueries--,0===o._currentNbQueries&&o.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:n.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new n(e),this},d.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=s._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=s._getQueries(n.index,n);return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),a=Array.prototype.concat.apply(n,i),c=this._queryId++;this._currentNbQueries++;try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,r,c)).catch(this._dispatchAlgoliaError.bind(this,c))}catch(u){this.emit("error",{error:u})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){if(!(t0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new a(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},8959:function(e){"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},8937:function(e){"use strict";e.exports=function(){var e=Array.prototype.slice.call(arguments);return e.reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},7050:function(e){"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},4458:function(e){"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r1||!a?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(a[0]),e[1].push(a[1]),e)}),[[],[]])}},3412:function(e){"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},4720:function(e){"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},7952:function(e){"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i){var a=n[i],s=e[i];void 0!==s&&void 0===a||(t(s)&&t(a)?e[i]=r(s,a):e[i]="object"==typeof(c=a)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n0}},9906:function(e){"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},2262:function(e){"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,a=null===t;if(!a&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?a:"desc"===n[i]?-a:a}return e.index-r.index})),i.map((function(e){return e.value}))}},2629:function(e){"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},5187:function(e,t,r){"use strict";var n=r(7952),i={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:i._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:i._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var a=t.getHierarchicalFacetByName(n),s=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(a);s.length>0&&s[0].split(c).length>1&&r.push({indexName:e,params:i._getDisjunctiveFacetSearchParams(t,n,!0)})})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(i._getHitsHierarchicalFacetsAttributes(e)),r=i._getFacetFilters(e),a=i._getNumericFilters(e),s=i._getTagFilters(e),c={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:s};return r.length>0&&(c.facetFilters=r),a.length>0&&(c.numericFilters=a),n({},e.getQueryParams(),c)},_getDisjunctiveFacetSearchParams:function(e,t,r){var a=i._getFacetFilters(e,t,r),s=i._getNumericFilters(e,t),c={hitsPerPage:1,page:0,attributesToRetrieve:[],attributesToHighlight:[],attributesToSnippet:[],tagFilters:i._getTagFilters(e),analytics:!1,clickAnalytics:!1},u=e.getHierarchicalFacetByName(t);return c.facets=u?i._getDisjunctiveHierarchicalFacetAttribute(e,u,r):t,s.length>0&&(c.numericFilters=s),a.length>0&&(c.facetFilters=a),n({},e.getQueryParams(),c)},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var a=i[e]||[];t!==n&&a.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).forEach((function(e){(i[e]||[]).forEach((function(t){n.push(e+":"+t)}))}));var a=e.facetsExcludes||{};Object.keys(a).forEach((function(e){(a[e]||[]).forEach((function(t){n.push(e+":-"+t)}))}));var s=e.disjunctiveFacetsRefinements||{};Object.keys(s).forEach((function(e){var r=s[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).forEach((function(i){var a=(c[i]||[])[0];if(void 0!==a){var s,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===a.indexOf(h)||!f&&!0===r||f&&f.split(h).length===a.split(h).length)return;f?(u=f.split(h).length-1,a=f):(u=a.split(h).length-2,a=a.slice(0,a.lastIndexOf(h))),s=o.attributes[u]}else u=a.split(h).length-1,s=o.attributes[u];s&&n.push([s+":"+a])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),a=n.split(i).length,s=r.attributes.slice(0,a+1);return t.concat(s)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(n).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,s+1)},getSearchForFacetQuery:function(e,t,r,a){var s=a.isDisjunctiveFacet(e)?a.clearRefinements(e):a,c={facetQuery:t,facetName:e};return"number"==typeof r&&(c.maxFacetHits=r),n({},i._getHitsSearchParams(s),c)}};e.exports=i},56:function(e){"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},4392:function(e){"use strict";e.exports="3.8.2"},5157:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(n=(s=c.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw a}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(e),n=a()[r];return Promise.all([n||t(),void 0!==n])})).then((function(e){var t=i(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=a();return i[JSON.stringify(e)]=t,n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var s=n(),c=i&&i.miss||function(){return Promise.resolve()};return s.then((function(e){return c(e)})).then((function(){return s}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function P(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function j(e,t,n,i){var s=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,a){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(s)};var m={data:c,headers:u,method:o,url:E(h,n.path,f),connectTimeout:a(l,e.timeouts.connect),responseTimeout:a(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return s.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(s))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return P(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function _(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function E(e,t,r){var n=x(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function x(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var N=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,s=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:s,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},A=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:x(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var a=t.params,s=a.facetName,c=a.facetQuery,u=n(a,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:k}}).searchForFacetValues(s,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},k=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,I=2,q=3;function V(e,t,n){var i,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return I>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[s({key:"".concat("4.13.0","-").concat(e)}),u()]}),userAgent:_("4.13.0").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return N(r(r(r({},a),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:A,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:k,findAnswers:Q}})}}}}))}return V.version="4.13.0",V}()},6675:function(e,t,r){"use strict";r.r(t),r.d(t,{default:function(){return B}});var n=r(7294),i=r(5157),a=r.n(i),s=r(1427),c=r.n(s),u=r(6010),o=r(5742),h=r(9960),f=r(412),l=r(2263),m=["zero","one","two","few","many","other"];function d(e){return m.filter((function(t){return e.includes(t)}))}var p={locale:"en",pluralForms:d(["one","other"]),select:function(e){return 1===e?"one":"other"}};function v(){var e=(0,l.Z)().i18n.currentLocale;return(0,n.useMemo)((function(){try{return t=e,r=new Intl.PluralRules(t),{locale:t,pluralForms:d(r.resolvedOptions().pluralCategories),select:function(e){return r.select(e)}}}catch(n){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+n.message+"\n"),p}var t,r}),[e])}function g(){var e=v();return{selectMessage:function(t,r){return function(e,t,r){var n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error("For locale="+r.locale+", a maximum of "+r.pluralForms.length+" plural forms are expected ("+r.pluralForms+"), but the message contains "+n.length+": "+e);var i=r.select(t),a=r.pluralForms.indexOf(i);return n[Math.min(a,n.length-1)]}(r,t,e)}}}var y=r(6177),R=r(8022),F=r(4700),b=r(2128),P=r(833),j=r(5551),_=r(3746),E=r(5999),x="searchQueryInput_u2C7",O="searchVersionInput_m0Ui",w="searchResultsColumn_JPFH",N="algoliaLogo_rT1R",A="algoliaLogoPathFill_WdUC",H="searchResultItem_Tv2o",S="searchResultItemHeading_KbCB",T="searchResultItemPath_lhe1",Q="searchResultItemSummary_AEaO",C="searchQueryColumn_RTkw",k="searchVersionColumn_ypXd",D="searchLogoColumn_rJIA",I="loadingSpinner_XVxU",q="loader_vvXV";function V(e){var t=e.docsSearchVersionsHelpers,r=Object.entries(t.allDocsData).filter((function(e){return e[1].versions.length>1}));return n.createElement("div",{className:(0,u.Z)("col","col--3","padding-left--none",k)},r.map((function(e){var i=e[0],a=e[1],s=r.length>1?i+": ":"";return n.createElement("select",{key:i,onChange:function(e){return t.setSearchVersion(i,e.target.value)},defaultValue:t.searchVersions[i],className:O},a.versions.map((function(e,t){return n.createElement("option",{key:t,label:""+s+e.label,value:e.name})})))})))}function L(){var e,t,r,i,s,m,d=(0,l.Z)(),p=d.siteConfig.themeConfig,v=d.i18n.currentLocale,P=p.algolia,O=P.appId,k=P.apiKey,L=P.indexName,B=P.externalUrlRegex,M=(e=g().selectMessage,function(t){return e(t,(0,E.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}),z=(t=(0,j._r)(),r=(0,n.useState)((function(){return Object.entries(t).reduce((function(e,t){var r,n=t[0],i=t[1];return Object.assign({},e,((r={})[n]=i.versions[0].name,r))}),{})})),i=r[0],s=r[1],m=Object.values(t).some((function(e){return e.versions.length>1})),{allDocsData:t,versioningEnabled:m,searchVersions:i,setSearchVersion:function(e,t){return s((function(r){var n;return Object.assign({},r,((n={})[e]=t,n))}))}}),J=(0,y.O)(),U=J.searchQuery,W=J.setSearchQuery,Z={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},K=(0,n.useReducer)((function(e,t){switch(t.type){case"reset":return Z;case"loading":return Object.assign({},e,{loading:!0});case"update":return U!==t.value.query?e:Object.assign({},t.value,{items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)});case"advance":var r=e.totalPages>e.lastPage+1;return Object.assign({},e,{lastPage:r?e.lastPage+1:e.lastPage,hasMore:r});default:return e}}),Z),X=K[0],G=K[1],$=a()(O,k),Y=c()($,L,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});Y.on("result",(function(e){var t=e.results,r=t.query,n=t.hits,i=t.page,a=t.nbHits,s=t.nbPages;if(""!==r&&Array.isArray(n)){var c=function(e){return e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match")},u=n.map((function(e){var t=e.url,r=e._highlightResult.hierarchy,n=e._snippetResult,i=void 0===n?{}:n,a=new URL(t),s=Object.keys(r).map((function(e){return c(r[e].value)}));return{title:s.pop(),url:(0,R.F)(B,a.href)?a.href:a.pathname+a.hash,summary:i.content?c(i.content.value)+"...":"",breadcrumbs:s}}));G({type:"update",value:{items:u,query:r,totalResults:a,totalPages:s,lastPage:i,hasMore:s>i+1,loading:!1}})}else G({type:"reset"})}));var ee=(0,n.useState)(null),te=ee[0],re=ee[1],ne=(0,n.useRef)(0),ie=(0,n.useRef)(f.Z.canUseDOM&&new IntersectionObserver((function(e){var t=e[0],r=t.isIntersecting,n=t.boundingClientRect.y;r&&ne.current>n&&G({type:"advance"}),ne.current=n}),{threshold:1})),ae=function(){return U?(0,E.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:U}):(0,E.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})},se=(0,F.ed)((function(e){void 0===e&&(e=0),Y.addDisjunctiveFacetRefinement("docusaurus_tag","default"),Y.addDisjunctiveFacetRefinement("language",v),Object.entries(z.searchVersions).forEach((function(e){var t=e[0],r=e[1];Y.addDisjunctiveFacetRefinement("docusaurus_tag","docs-"+t+"-"+r)})),Y.setQuery(U).setPage(e).search()}));return(0,n.useEffect)((function(){if(te){var e=ie.current;return e?(e.observe(te),function(){return e.unobserve(te)}):function(){return!0}}}),[te]),(0,n.useEffect)((function(){G({type:"reset"}),U&&(G({type:"loading"}),setTimeout((function(){se()}),300))}),[U,z.searchVersions,se]),(0,n.useEffect)((function(){X.lastPage&&0!==X.lastPage&&se(X.lastPage)}),[se,X.lastPage]),n.createElement(_.Z,null,n.createElement(o.Z,null,n.createElement("title",null,(0,b.p)(ae())),n.createElement("meta",{property:"robots",content:"noindex, follow"})),n.createElement("div",{className:"container margin-vert--lg"},n.createElement("h1",null,ae()),n.createElement("form",{className:"row",onSubmit:function(e){return e.preventDefault()}},n.createElement("div",{className:(0,u.Z)("col",C,{"col--9":z.versioningEnabled,"col--12":!z.versioningEnabled})},n.createElement("input",{type:"search",name:"q",className:x,placeholder:(0,E.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,E.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:function(e){return W(e.target.value)},value:U,autoComplete:"off",autoFocus:!0})),z.versioningEnabled&&n.createElement(V,{docsSearchVersionsHelpers:z})),n.createElement("div",{className:"row"},n.createElement("div",{className:(0,u.Z)("col","col--8",w)},!!X.totalResults&&M(X.totalResults)),n.createElement("div",{className:(0,u.Z)("col","col--4","text--right",D)},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.algolia.com/","aria-label":(0,E.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"})},n.createElement("svg",{viewBox:"0 0 168 24",className:N},n.createElement("g",{fill:"none"},n.createElement("path",{className:A,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),n.createElement("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),n.createElement("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})))))),X.items.length>0?n.createElement("main",null,X.items.map((function(e,t){var r=e.title,i=e.url,a=e.summary,s=e.breadcrumbs;return n.createElement("article",{key:t,className:H},n.createElement("h2",{className:S},n.createElement(h.Z,{to:i,dangerouslySetInnerHTML:{__html:r}})),s.length>0&&n.createElement("nav",{"aria-label":"breadcrumbs"},n.createElement("ul",{className:(0,u.Z)("breadcrumbs",T)},s.map((function(e,t){return n.createElement("li",{key:t,className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}})})))),a&&n.createElement("p",{className:Q,dangerouslySetInnerHTML:{__html:a}}))}))):[U&&!X.loading&&n.createElement("p",{key:"no-results"},n.createElement(E.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result"},"No results were found")),!!X.loading&&n.createElement("div",{key:"spinner",className:I})],X.hasMore&&n.createElement("div",{className:q,ref:re},n.createElement(E.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results"},"Fetching new results..."))))}function B(){return n.createElement(P.FG,{className:"search-page-wrapper"},n.createElement(L,null))}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.4e53eedf.js.LICENSE.txt b/assets/js/1a4e3797.4e53eedf.js.LICENSE.txt new file mode 100644 index 0000000..52ca2dc --- /dev/null +++ b/assets/js/1a4e3797.4e53eedf.js.LICENSE.txt @@ -0,0 +1 @@ +/*! algoliasearch-lite.umd.js | 4.13.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ diff --git a/assets/js/1be78505.caea7a28.js b/assets/js/1be78505.caea7a28.js new file mode 100644 index 0000000..c0e87b9 --- /dev/null +++ b/assets/js/1be78505.caea7a28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9514,4608],{9068:function(e,t,a){a.r(t),a.d(t,{default:function(){return ye}});var n=a(7294),r=a(4608),l=a(3746),i=a(6010),o=a(5999),c=a(2466),s=a(5936);var d=a(5281),m="backToTopButton_RiI4",u="backToTopButtonShow_ssHd";function b(){var e=function(e){var t=e.threshold,a=(0,n.useState)(!1),r=a[0],l=a[1],i=(0,n.useRef)(!1),o=(0,c.Ct)(),d=o.startScroll,m=o.cancelScroll;return(0,c.RF)((function(e,a){var n=e.scrollY,r=null==a?void 0:a.scrollY;r&&(i.current?i.current=!1:n>=r?(m(),l(!1)):n=3.5, <=3.9"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},">=3.2.0,<=3.2.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},">=3.6, <=3.10"))))),(0,o.kt)("p",null,"To check the details of each pre-compiled version, please view the manual installation guides for ",(0,o.kt)("a",{parentName:"p",href:"./windows"},"Windows")," and ",(0,o.kt)("a",{parentName:"p",href:"./linux"},"Linux"),"."),(0,o.kt)("p",null,"The package installed by this method is shipped with all required dynamic libraries. Users do not need to install any other dependencies in this case. However, if users find that the package could not be imported after the installation, please check the ",(0,o.kt)("a",{parentName:"p",href:"../troubleshooting/installation"},"troubleshooting page")," first."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1e9bcdaa.53a22ae0.js b/assets/js/1e9bcdaa.53a22ae0.js new file mode 100644 index 0000000..b3b1f3c --- /dev/null +++ b/assets/js/1e9bcdaa.53a22ae0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[1844],{5549:function(e,t,a){a.d(t,{A:function(){return d},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",l="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function d(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=l+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=l+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},8768:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return h},default:function(){return f},frontMatter:function(){return c},metadata:function(){return k},toc:function(){return N}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),l=(a(541),a(5514)),d=a(6577),o=a(2895),m=a(7508),p=a(5549),s=["components"],c={id:"MpegClient",title:"MpegClient",sidebar_label:"MpegClient",slug:"/apis/MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly."},h=void 0,k={unversionedId:"apis/MpegClient",id:"version-3.1.0/apis/MpegClient",title:"MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly.",source:"@site/versioned_docs/version-3.1.0/apis/MpegClient.mdx",sourceDirName:"apis",slug:"/apis/MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegClient",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/apis/MpegClient.mdx",tags:[],version:"3.1.0",frontMatter:{id:"MpegClient",title:"MpegClient",sidebar_label:"MpegClient",slug:"/apis/MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly."},sidebar:"version-3.1.0/apis",previous:{title:"MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegEncoder"},next:{title:"MpegServer",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegServer"}},u={},N=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"start",id:"start",level:3},{value:"terminate",id:"terminate",level:3},{value:"ExtractFrame",id:"extractframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Scale the decoded frame",id:"scale-the-decoded-frame",level:3},{value:"Configure the cache size",id:"configure-the-cache-size",level:3},{value:"Use multi-thread decoding",id:"use-multi-thread-decoding",level:3}],g={toc:N};function f(e){var t=e.components,a=(0,r.Z)(e,s);return(0,i.kt)("wrapper",(0,n.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:d.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(p.q,{mdxType:"Splitter"}),(0,i.kt)(p.A,{ver:"3.1.0",url:"MpegStreamer.h#L49",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln = mpegCoder.MpegClient()\n")),(0,i.kt)("p",null,"The frame-level video stream client used for demuxing an online video stream."),(0,i.kt)("p",null,"This client instance is integrated with the features of ",(0,i.kt)("a",{parentName:"p",href:"./MpegDecoder"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegDecoder")),". The connection to the video server is established by ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". When the client is working, it will manage a background sub-thread for fetching the remote frames consecutively. The fetched frames are saved in a circular buffer. The method ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()"))," always return the latest received frames. To learn more details, please review the ",(0,i.kt)("a",{parentName:"p",href:"../examples/client#introduction"},"description of the theory"),"."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegClient")," requires users to initialize the decoding before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the client is destructed. ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegClient")," also supports threading control. When the client is connected to the server, users could use ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()"))," to keep the buffer synchronized with the video stream. Calling ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," will force the buffer updating to stop. In this case, the method ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()"))," will always return the same results."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("p",null,"This class does not has initialization arguments."),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"except")," the default video address. If a video stream is alredy opened, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will release the connection automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file readers. No matter when ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()"))," is called, this method could be used safely without calling ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()")),"."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.resetPath(videoAddress)\n")),(0,i.kt)("p",null,"Reset the default video address to a specific value. Configuring this value will not cause the video stream to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The address of the video to be read.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = cln.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current address of the read video. If the video stream is not opened, will return the default video address.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the read video. This value is determined by the video stream.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the read video. This value is determined by the video stream.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameCount")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of returned frames in the last frame extraction method.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"coderName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the codec used for decoding the video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"duration")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The total seconds of this video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"estFrameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The estimated total frame number (may be not accurate).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"srcFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The average frame rate of the source video stream. The unit is FPS. The actual frame rate may be changed on client side.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters. These parameters could serve as ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict")," for ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegEncoder")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegServer"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.setParameter(widthDst=None, heightDst=None, cacheSize=None, readSize=None, dstFrameRate=None, nthread=None)\n")),(0,i.kt)("p",null,"Set the configurations of the client. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"cacheSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of allocated avaliable frames in the cache. We recommend to configure this value as ",(0,i.kt)("inlineCode",{parentName:"td"},"2*readSize"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"dstFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"tuple")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The destination FPS of the stream. This value should be formatted as a factor defined as ",(0,i.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". Configuing this value will cause the received frames to be resampled.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.FFmpegSetup(videoAddress=None)\n")),(0,i.kt)("p",null,"Open the online video stream, and initialize the decoder. After the client initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video stream connection is established by the client now, this connection will be released first, then the new video stream will be opened."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be read. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"start"},(0,i.kt)("inlineCode",{parentName:"h3"},"start")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.start()\n")),(0,i.kt)("p",null,"Start the demuxing thread. The started sub-thread will keep receiving remote frames to ensure the client buffer is synchronized with the online video stream."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method must be called after ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". Once this method is called, users are not allowed to call it again until ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," is called or the client is restarted by ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"terminate"},(0,i.kt)("inlineCode",{parentName:"h3"},"terminate")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.terminate()\n")),(0,i.kt)("p",null,"Terminate the current demuxing thread. This method is required to be called after ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()")),'. It will stop the frame receiving, and make the played video to be "paused". In this case, the frame receiving could be started again by ',(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()")),"."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method must be called after ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". Calling this method will not cause the current connection aborted. Only ",(0,i.kt)("a",{parentName:"p",href:"#clear"},(0,i.kt)("inlineCode",{parentName:"a"},"clear()"))," could release the connection explicitly."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = cln.ExtractFrame(readSize=0)\n")),(0,i.kt)("p",null,"Read the latest several frames from the circular buffer."),(0,i.kt)("p",null,"This method is merely a reading method, and not decode frames. Instead, the decoding is managed by the sub-thread. ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractFrame()")," always fetch the several frames that are latestly decoded. Even ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," is called, this method could be still used safely."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"readSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of the frames to be read. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0"),", will use the default ",(0,i.kt)("inlineCode",{parentName:"td"},"readSize")," configured by ",(0,i.kt)("a",{parentName:"td",href:"#setparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"setParameter()")),".")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"readSize")," (no matter whether the video reaches its end), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no valid frames are received, this method would return several frames that are totally black.")))),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(cln)\n")),(0,i.kt)("p",null,"Return a brief report of the current client status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the client status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/client"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Client")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"scale-the-decoded-frame"},"Scale the decoded frame"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\ncln.setParameter(widthDst=720, heightDst=486)\n...\n")),(0,i.kt)("h3",{id:"configure-the-cache-size"},"Configure the cache size"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\n# Assume that the source frame rate is 29.997\ncln.setParameter(readSize=30, cacheSize=60)\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-decoding"},"Use multi-thread decoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\ncln.setParameter(nthread=8)\n...\n")))}f.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/1f391b9e.f6428957.js b/assets/js/1f391b9e.f6428957.js new file mode 100644 index 0000000..214fa10 --- /dev/null +++ b/assets/js/1f391b9e.f6428957.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3085],{6416:function(e,t,a){a.r(t),a.d(t,{default:function(){return d}});var n=a(7294),l=a(6010),c=a(3746),r=a(5290),m=a(1575),i=a(833),o=a(5281),s="mdxPageWrapper_zHyg";function d(e){var t=e.content,a=t.metadata,d=a.title,u=a.description,p=a.frontMatter,g=p.wrapperClassName,_=p.hide_table_of_contents;return n.createElement(i.FG,{className:(0,l.Z)(null!=g?g:o.k.wrapper.mdxPages,o.k.page.mdxPage)},n.createElement(i.d,{title:d,description:u}),n.createElement(c.Z,null,n.createElement("main",{className:"container container--fluid margin-vert--lg"},n.createElement("div",{className:(0,l.Z)("row",s)},n.createElement("div",{className:(0,l.Z)("col",!_&&"col--8")},n.createElement(r.Z,null,n.createElement(t,null))),!_&&t.toc&&n.createElement("div",{className:"col col--2"},n.createElement(m.Z,{toc:t.toc,minHeadingLevel:p.toc_min_heading_level,maxHeadingLevel:p.toc_max_heading_level}))))))}}}]); \ No newline at end of file diff --git a/assets/js/1f768be3.e389c3ea.js b/assets/js/1f768be3.e389c3ea.js new file mode 100644 index 0000000..1deb6c5 --- /dev/null +++ b/assets/js/1f768be3.e389c3ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[1250],{9412:function(e,n,o){o.r(n),o.d(n,{assets:function(){return l},contentTitle:function(){return p},default:function(){return u},frontMatter:function(){return c},metadata:function(){return s},toc:function(){return m}});var t=o(3117),d=o(102),i=(o(7294),o(3905)),r=o(541),a=["components"],c={id:"decoding",title:"Decoding a video",sidebar_label:"Decoding",slug:"/examples/decoding",description:"Example codes for decoding a video."},p=void 0,s={unversionedId:"guides/examples/decoding",id:"guides/examples/decoding",title:"Decoding a video",description:"Example codes for decoding a video.",source:"@site/docs/guides/examples/decoding.mdx",sourceDirName:"guides/examples",slug:"/examples/decoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/decoding",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/examples/decoding.mdx",tags:[],version:"current",frontMatter:{id:"decoding",title:"Decoding a video",sidebar_label:"Decoding",slug:"/examples/decoding",description:"Example codes for decoding a video."},sidebar:"docs",previous:{title:"Examples",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/examples"},next:{title:"Transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/transcoding"}},l={},m=[{value:"Decoder rescaling",id:"decoder-rescaling",level:2}],g={toc:m};function u(e){var n=e.components,o=(0,d.Z)(e,a);return(0,i.kt)("wrapper",(0,t.Z)({},g,o,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The following codes will demux, decode and iterate a video file. The video could be in any valid format. The ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegDecoder")," could recognize the video codec automatically."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:'{7,8} title="decoding.py" showLineNumbers',"{7,8}":!0,title:'"decoding.py"',showLineNumbers:!0},"import mpegCoder\n\nd = mpegCoder.MpegDecoder()\nopened = d.FFmpegSetup('test-video.mp4')\nif opened: # If encoder is not loaded successfully, do not continue.\n gop = True\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\nd.clear() # Close the input video.\n")),(0,i.kt)("p",null,"In each while loop, a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of pictures (GOP)",(0,i.kt)(r.Z,{mdxType:"IconExternalLink"}))," would be extracted. The GOP is a collection of video frames, and also the minimal data unit of the video compression algorithm. In ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", the GOP is arranged as a 4D ",(0,i.kt)("a",{parentName:"p",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(r.Z,{mdxType:"IconExternalLink"})),". The shape ",(0,i.kt)("inlineCode",{parentName:"p"},"(N, H, W, C)")," means frame number, height, width, and channel number respectively. Each frame has been converted to RGB (",(0,i.kt)("inlineCode",{parentName:"p"},"uint8"),") space. If the video reaches its end, the returned ",(0,i.kt)("inlineCode",{parentName:"p"},"gop")," would be ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),"."),(0,i.kt)("h2",{id:"decoder-rescaling"},"Decoder rescaling"),(0,i.kt)("p",null,"Users could configure ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and scale the video frames. For example, the following codes would scale the frame to 720x486, no matter which picture size the video file is."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\nd = mpegCoder.MpegDecoder()\nd.setParameter(widthDst=720, heightDst=486)\nopened = d.FFmpegSetup('test-video.mp4')\n...\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2724.2624e66c.js b/assets/js/2724.2624e66c.js new file mode 100644 index 0000000..7160cbc --- /dev/null +++ b/assets/js/2724.2624e66c.js @@ -0,0 +1 @@ +(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[2724],{9649:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(3117),a=n(102),o=n(7294),l=n(6010),c=n(5999),i=n(6668),s="anchorWithStickyNavbar_mojV",u="anchorWithHideOnScrollNavbar_R0VQ",m=["as","id"];function d(e){var t=e.as,n=e.id,d=(0,a.Z)(e,m),p=(0,i.L)().navbar.hideOnScroll;return"h1"!==t&&n?o.createElement(t,(0,r.Z)({},d,{className:(0,l.Z)("anchor",p?u:s),id:n}),d.children,o.createElement("a",{className:"hash-link",href:"#"+n,title:(0,c.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):o.createElement(t,(0,r.Z)({},d,{id:void 0}))}},5290:function(e,t,n){"use strict";n.d(t,{Z:function(){return pe}});var r=n(7294),a=n(3905),o=n(3117),l=n(102),c=n(5742),i=["mdxType","originalType"];var s=n(2389),u=n(6010),m=n(2949),d=n(6668);function p(){var e=(0,d.L)().prism,t=(0,m.I)().colorMode,n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var f=n(8900),v=n(7594),g=n.n(v),h=(0,f.Z)(/title=(["'])(.*?)\1/,{quote:1,title:2}),y=(0,f.Z)(/\{([\d,-]+)\}/,{range:1}),b={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function k(e,t){var n=e.map((function(e){var n=b[e],r=n.start,a=n.end;return"(?:"+r+"\\s*("+t.flatMap((function(e){var t,n;return[e.line,null==(t=e.block)?void 0:t.start,null==(n=e.block)?void 0:n.end].filter(Boolean)})).join("|")+")\\s*"+a+")"})).join("|");return new RegExp("^\\s*(?:"+n+")\\s*$")}function E(e,t){var n=e.replace(/\n$/,""),r=t.language,a=t.magicComments,o=t.metastring;if(o&&y.test(o)){var l=o.match(y).groups.range;if(0===a.length)throw new Error("A highlight range has been given in code block's metastring (``` "+o+"), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.");var c=a[0].className,i=g()(l).filter((function(e){return e>0})).map((function(e){return[e-1,[c]]}));return{lineClassNames:Object.fromEntries(i),code:n}}if(void 0===r)return{lineClassNames:{},code:n};for(var s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return k(["js","jsBlock"],t);case"jsx":case"tsx":return k(["js","jsBlock","jsx"],t);case"html":return k(["js","jsBlock","html"],t);case"python":case"py":case"bash":return k(["bash"],t);case"markdown":case"md":return k(["html","jsx","bash"],t);default:return k(Object.keys(b),t)}}(r,a),u=n.split("\n"),m=Object.fromEntries(a.map((function(e){return[e.className,{start:0,range:""}]}))),d=Object.fromEntries(a.filter((function(e){return e.line})).map((function(e){var t=e.className;return[e.line,t]}))),p=Object.fromEntries(a.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.start,t]}))),f=Object.fromEntries(a.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.end,t]}))),v=0;v0&&e[n-1]===t?e:e.concat(t)},A=function(e,t){var n=e.plain,r=Object.create(null),a=e.styles.reduce((function(e,n){var r=n.languages,a=n.style;return r&&!r.includes(t)||n.types.forEach((function(t){var n=w({},e[t],a);e[t]=n})),e}),r);return a.root=n,a.plain=w({},n,{backgroundColor:null}),a};function I(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}var P=function(e){function t(){for(var t=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];e.apply(this,n),_(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?A(e.theme,e.language):void 0;return t.themeDict=n})),_(this,"getLineProps",(function(e){var n=e.key,r=e.className,a=e.style,o=w({},I(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),l=t.getThemeDict(t.props);return void 0!==l&&(o.style=l.plain),void 0!==a&&(o.style=void 0!==o.style?w({},o.style,a):a),void 0!==n&&(o.key=n),r&&(o.className+=" "+r),o})),_(this,"getStyleForToken",(function(e){var n=e.types,r=e.empty,a=n.length,o=t.getThemeDict(t.props);if(void 0!==o){if(1===a&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===a&&!r)return o[n[0]];var l=r?{display:"inline-block"}:{},c=n.map((function(e){return o[e]}));return Object.assign.apply(Object,[l].concat(c))}})),_(this,"getTokenProps",(function(e){var n=e.key,r=e.className,a=e.style,o=e.token,l=w({},I(e,["key","className","style","token"]),{className:"token "+o.types.join(" "),children:o.content,style:t.getStyleForToken(o),key:void 0});return void 0!==a&&(l.style=void 0!==l.style?w({},l.style,a):a),void 0!==n&&(l.key=n),r&&(l.className+=" "+r),l})),_(this,"tokenize",(function(e,t,n,r){var a={code:t,grammar:n,language:r,tokens:[]};e.hooks.run("before-tokenize",a);var o=a.tokens=e.tokenize(a.code,a.grammar,a.language);return e.hooks.run("after-tokenize",a),o}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,r=e.code,a=e.children,o=this.getThemeDict(this.props),l=t.languages[n];return a({tokens:function(e){for(var t=[[]],n=[e],r=[0],a=[e.length],o=0,l=0,c=[],i=[c];l>-1;){for(;(o=r[l]++)0?u:["plain"],s=m):(u=S(u,m.type),m.alias&&(u=S(u,m.alias)),s=m.content),"string"==typeof s){var d=s.split(H),p=d.length;c.push({types:u,content:d[0]});for(var f=1;f0&&(c=l.getRangeAt(0)),r.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;var i=!1;try{i=document.execCommand("copy")}catch(s){}a.remove(),c&&(l.removeAllRanges(),l.addRange(c)),o&&o.focus()}(t),l(!0),c.current=window.setTimeout((function(){l(!1)}),1e3)}),[t]);return(0,r.useEffect)((function(){return function(){return window.clearTimeout(c.current)}}),[]),r.createElement("button",{type:"button","aria-label":o?(0,V.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,V.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,V.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",n,F.copyButton,o&&F.copyButtonCopied),onClick:i},r.createElement("span",{className:F.copyButtonIcons,"aria-hidden":"true"},r.createElement("svg",{className:F.copyButtonIcon,viewBox:"0 0 24 24"},r.createElement("path",{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})),r.createElement("svg",{className:F.copyButtonSuccessIcon,viewBox:"0 0 24 24"},r.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}var G="wordWrapButtonIcon_azs1",$="wordWrapButtonEnabled_Geot";function U(e){var t=e.className,n=e.onClick,a=e.isEnabled,o=(0,V.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return r.createElement("button",{type:"button",onClick:n,className:(0,u.Z)("clean-btn",t,a&&$),"aria-label":o,title:o},r.createElement("svg",{className:G,viewBox:"0 0 24 24","aria-hidden":"true"},r.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})))}function Y(e){var t,n,a,l,c,i,s,m,f,v,g,y=e.children,b=e.className,k=void 0===b?"":b,N=e.metastring,L=e.title,C=e.showLineNumbers,x=e.language,j=(0,d.L)().prism,_=j.defaultLanguage,w=j.magicComments,H=null!=(t=null!=x?x:null==(n=k.split(" ").find((function(e){return e.startsWith("language-")})))?void 0:n.replace(/language-/,""))?t:_,O=p(),S=(a=(0,r.useState)(!1),l=a[0],c=a[1],i=(0,r.useState)(!1),s=i[0],m=i[1],f=(0,r.useRef)(null),v=(0,r.useCallback)((function(){var e=f.current.querySelector("code");l?e.removeAttribute("style"):e.style.whiteSpace="pre-wrap",c((function(e){return!e}))}),[f,l]),g=(0,r.useCallback)((function(){var e=f.current,t=e.scrollWidth>e.clientWidth||f.current.querySelector("code").hasAttribute("style");m(t)}),[f]),(0,r.useEffect)((function(){g()}),[l,g]),(0,r.useEffect)((function(){return window.addEventListener("resize",g,{passive:!0}),function(){window.removeEventListener("resize",g)}}),[g]),{codeBlockRef:f,isEnabled:l,isCodeScrollable:s,toggle:v}),A=function(e){var t,n;return null!=(t=null==e||null==(n=e.match(h))?void 0:n.groups.title)?t:""}(N)||L,I=E(y,{metastring:N,language:H,magicComments:w}),P=I.lineClassNames,z=I.code,R=C||function(e){return(null==e?void 0:e.includes("showLineNumbers"))||!1}(N);return r.createElement(B,{as:"div",className:(0,u.Z)(k,H&&!k.includes("language-"+H)&&"language-"+H)},A&&r.createElement("div",{className:Z.codeBlockTitle},A),r.createElement("div",{className:Z.codeBlockContent},r.createElement(M,(0,o.Z)({},T,{theme:O,code:z,language:null!=H?H:"text"}),(function(e){var t=e.className,n=e.tokens,a=e.getLineProps,o=e.getTokenProps;return r.createElement("pre",{tabIndex:0,ref:S.codeBlockRef,className:(0,u.Z)(t,Z.codeBlock,"thin-scrollbar")},r.createElement("code",{className:(0,u.Z)(Z.codeBlockLines,R&&Z.codeBlockLinesWithNumbering)},n.map((function(e,t){return r.createElement(W,{key:t,line:e,getLineProps:a,getTokenProps:o,classNames:P[t],showLineNumbers:R})}))))})),r.createElement("div",{className:Z.buttonGroup},(S.isEnabled||S.isCodeScrollable)&&r.createElement(U,{className:Z.codeButton,onClick:function(){return S.toggle()},isEnabled:S.isEnabled}),r.createElement(q,{className:Z.codeButton,code:z}))))}var Q=["children"];function X(e){var t=e.children,n=(0,l.Z)(e,Q),a=(0,s.Z)(),c=function(e){return r.Children.toArray(e).some((function(e){return(0,r.isValidElement)(e)}))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?Y:x;return r.createElement(i,(0,o.Z)({key:String(a)},n),c)}var J=n(9960);var K=n(6043),ee="details_lb9f",te="isBrowser_bmU9",ne="collapsibleContent_i85q",re=["summary","children"];function ae(e){return!!e&&("SUMMARY"===e.tagName||ae(e.parentElement))}function oe(e,t){return!!e&&(e===t||oe(e.parentElement,t))}function le(e){var t=e.summary,n=e.children,a=(0,l.Z)(e,re),o=(0,s.Z)(),c=(0,r.useRef)(null),i=(0,K.u)({initialState:!a.open}),m=i.collapsed,d=i.setCollapsed,p=(0,r.useState)(a.open),f=p[0],v=p[1];return r.createElement("details",Object.assign({},a,{ref:c,open:f,"data-collapsed":m,className:(0,u.Z)(ee,o&&te,a.className),onMouseDown:function(e){ae(e.target)&&e.detail>1&&e.preventDefault()},onClick:function(e){e.stopPropagation();var t=e.target;ae(t)&&oe(t,c.current)&&(e.preventDefault(),m?(d(!1),v(!0)):d(!0))}}),t||r.createElement("summary",null,"Details"),r.createElement(K.z,{lazy:!1,collapsed:m,disableSSRStyle:!0,onCollapseTransitionEnd:function(e){d(e),v(!e)}},r.createElement("div",{className:ne},n)))}var ce="details_BAp3";function ie(e){var t=Object.assign({},e);return r.createElement(le,(0,o.Z)({},t,{className:(0,u.Z)("alert alert--info",ce,t.className)}))}var se=n(9649);function ue(e){return r.createElement(se.Z,e)}var me="img_E7b_";var de={head:function(e){var t=r.Children.map(e.children,(function(e){return function(e){var t,n;if(null!=e&&null!=(t=e.props)&&t.mdxType&&null!=e&&null!=(n=e.props)&&n.originalType){var a=e.props,o=(a.mdxType,a.originalType,(0,l.Z)(a,i));return r.createElement(e.props.originalType,o)}return e}(e)}));return r.createElement(c.Z,e,t)},code:function(e){var t=["a","b","big","i","span","em","strong","sup","sub","small"];return r.Children.toArray(e.children).every((function(e){return"string"==typeof e&&!e.includes("\n")||(0,r.isValidElement)(e)&&t.includes(e.props.mdxType)}))?r.createElement("code",e):r.createElement(X,e)},a:function(e){return r.createElement(J.Z,e)},pre:function(e){var t;return r.createElement(X,(0,r.isValidElement)(e.children)&&"code"===e.children.props.originalType?null==(t=e.children)?void 0:t.props:Object.assign({},e))},details:function(e){var t=r.Children.toArray(e.children),n=t.find((function(e){var t;return"summary"===(null==e||null==(t=e.props)?void 0:t.mdxType)})),a=r.createElement(r.Fragment,null,t.filter((function(e){return e!==n})));return r.createElement(ie,(0,o.Z)({},e,{summary:n}),a)},ul:function(e){return r.createElement("ul",(0,o.Z)({},e,{className:(t=e.className,(0,u.Z)(t,(null==t?void 0:t.includes("contains-task-list"))&&"clean-list"))}));var t},img:function(e){return r.createElement("img",(0,o.Z)({loading:"lazy"},e,{className:(t=e.className,(0,u.Z)(t,me))}));var t},h1:function(e){return r.createElement(ue,(0,o.Z)({as:"h1"},e))},h2:function(e){return r.createElement(ue,(0,o.Z)({as:"h2"},e))},h3:function(e){return r.createElement(ue,(0,o.Z)({as:"h3"},e))},h4:function(e){return r.createElement(ue,(0,o.Z)({as:"h4"},e))},h5:function(e){return r.createElement(ue,(0,o.Z)({as:"h5"},e))},h6:function(e){return r.createElement(ue,(0,o.Z)({as:"h6"},e))}};function pe(e){var t=e.children;return r.createElement(a.Zo,{components:de},t)}},1575:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(3117),a=n(102),o=n(7294),l=n(6010),c=n(721),i="tableOfContents_cNA8",s=["className"];function u(e){var t=e.className,n=(0,a.Z)(e,s);return o.createElement("div",{className:(0,l.Z)(i,"thin-scrollbar",t)},o.createElement(c.Z,(0,r.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},721:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var r=n(3117),a=n(102),o=n(7294);function l(e){var t=e.toc,n=e.className,r=e.linkClassName,a=e.isChild;return t.length?o.createElement("ul",{className:a?void 0:n},t.map((function(e){return o.createElement("li",{key:e.id},o.createElement("a",{href:"#"+e.id,className:null!=r?r:void 0,dangerouslySetInnerHTML:{__html:e.value}}),o.createElement(l,{isChild:!0,toc:e.children,className:n,linkClassName:r}))}))):null}var c=o.memo(l),i=["parentIndex"];function s(e){var t=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),n=Array(7).fill(-1);t.forEach((function(e,t){var r=n.slice(2,e.level);e.parentIndex=Math.max.apply(Math,r),n[e.level]=t}));var r=[];return t.forEach((function(e){var n=e.parentIndex,o=(0,a.Z)(e,i);n>=0?t[n].children.push(o):r.push(o)})),r}function u(e){var t=e.toc,n=e.minHeadingLevel,r=e.maxHeadingLevel;return t.flatMap((function(e){var t=u({toc:e.children,minHeadingLevel:n,maxHeadingLevel:r});return function(e){return e.level>=n&&e.level<=r}(e)?[Object.assign({},e,{children:t})]:t}))}var m=n(6668);function d(e){var t=e.getBoundingClientRect();return t.top===t.bottom?d(e.parentNode):t}function p(e,t){var n,r,a=t.anchorTopOffset,o=e.find((function(e){return d(e).top>=a}));return o?function(e){return e.top>0&&e.bottome.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,a,o]=t;if(r&&o){r=parseInt(r),o=parseInt(o);const e=rclear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"EncodeFrame",id:"encodeframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"FFmpegClose",id:"ffmpegclose",level:3},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Optimize the video encoding",id:"optimize-the-video-encoding",level:3},{value:"Rescale and resample the video",id:"rescale-and-resample-the-video",level:3},{value:"Use the AV1 encoder",id:"use-the-av1-encoder",level:3},{value:"Use multi-thread encoding",id:"use-multi-thread-encoding",level:3}],f={toc:g};function v(e){var t=e.components,a=(0,r.Z)(e,s);return(0,i.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(c.q,{mdxType:"Splitter"}),(0,i.kt)(c.A,{ver:"3.1.0",url:"MpegCoder.h#L82",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc = mpegCoder.MpegEncoder()\n")),(0,i.kt)("p",null,"The frame-level video encoder used for muxing a video file."),(0,i.kt)("p",null,"This encoder instance serves as a video file writer. It supports:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Encode a 3D ",(0,i.kt)("a",{parentName:"li",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," as a video frame."),(0,i.kt)("li",{parentName:"ul"},"Configure the codec type and the video parameters."),(0,i.kt)("li",{parentName:"ul"},"Scaling the encoded video frames to a specific size.")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," requires users to initialize the encoder before writing frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the encoder is destructed. During the distruction, hitting ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," will cause the written video to break."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("p",null,"This class does not has initialization arguments."),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"including")," the default video path. If a video is opened by the encoder, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file writers."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.resetPath(videoPath)\n")),(0,i.kt)("p",null,"Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be written.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = enc.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the written video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"codecName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the written video (Kb/s). This value determines the output video size directly.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the written video. This value is mainly determined by the user configurations.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the written video. This value is mainly determined by the user configurations.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,i.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,i.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the written video. The unit is FPS.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.setParameter(\n decoder=None, configDict=None, videoPath=None, codecName=None,\n nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None,\n GOPSize=None, maxBframe=None, frameRate=None\n)\n")),(0,i.kt)("p",null,"Set the configurations of the encoder. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"decoder")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"./MpegDecoder"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegDecoder"))," or ",(0,i.kt)("a",{parentName:"td",href:"./MpegClient"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegClient"))),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"When configure this argument, the required configurations will be copied from a decoder or a client. If users also provide duplicated arguments in the same call, these copied parameters have a lower preference than those specified by users. This argument is useful when trancoding a video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"configDict")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"dict")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"An alternative of the argument ",(0,i.kt)("inlineCode",{parentName:"td"},"decoder")," when the parameters need to be passed through different processes. Using ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict=decoder.getParameter()")," is equivalent to using ",(0,i.kt)("inlineCode",{parentName:"td"},"decoder=decoder"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the written video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"codecName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the written video (Kb/s). This value determines the output video size directly.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the written video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the written video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,i.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,i.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"tuple")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the written video. This value should be a tuple of two ",(0,i.kt)("inlineCode",{parentName:"td"},"int"),"s: ",(0,i.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". This format is consistent with ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/structAVRational.html",title:"AVRational"},(0,i.kt)("inlineCode",{parentName:"a"},"AVRational"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.FFmpegSetup(videoPath=None)\n")),(0,i.kt)("p",null,"Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the file name and the user configurations set by ",(0,i.kt)("a",{parentName:"p",href:"#setparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"setParameter()")),". If an video is being opened by the encoder now, this video will be closed first, then the new video will be opened with the same configurations."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be written. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"encodeframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"EncodeFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"is_success = enc.EncodeFrame(PyArrayFrame)\n")),(0,i.kt)("p",null,"Encode one frame into the video. Note that in most cases, the frame will not be written to the file instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the file."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"is_success")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bool")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The status of the frame encoding. If the given frame succeeds to be encoded, will return ",(0,i.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,i.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegclose"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegClose")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.FFmpegClose()\n")),(0,i.kt)("p",null,"Close the video file. Calling this method will flush all buffered frames into the file. Then the video tail will be writen to the file. If users does not call this method explicitly, it will be called when ",(0,i.kt)("a",{parentName:"p",href:"#clear"},(0,i.kt)("inlineCode",{parentName:"a"},"clear()"))," is called or when the encoder is destructed."),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(enc)\n")),(0,i.kt)("p",null,"Return a brief report of the current encoder status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the encoder status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/transcoding"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Transcoding")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"optimize-the-video-encoding"},"Optimize the video encoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\n...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(decoder=dec, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16)\n...\n")),(0,i.kt)("h3",{id:"rescale-and-resample-the-video"},"Rescale and resample the video"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(width=1280, height=720, frameRate=(5, 1), codecName='libx265', videoPath='test-video-x265.mp4')\n...\n")),(0,i.kt)("h3",{id:"use-the-av1-encoder"},"Use the AV1 encoder"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(width=1280, height=720, codecName='libsvtav1', videoPath='test-video-av1.mp4')\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-encoding"},"Use multi-thread encoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(nthread=8)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/29ec2692.16fe91f3.js b/assets/js/29ec2692.16fe91f3.js new file mode 100644 index 0000000..f3c3516 --- /dev/null +++ b/assets/js/29ec2692.16fe91f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7617],{8793:function(e,t,n){var o=n(7294),r=n(9960),a=n(1954),i=n(2949);t.Z=function(e){var t=(0,o.useState)(!1),n=t[0],l=t[1];(0,o.useEffect)((function(){l(!0)}),[]);var s,u,p,d=(s=(0,i.I)(),u=s.colorMode,s.setColorMode,"dark"===u?"button--secondary button--outline":"button--secondary");return p=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",o.createElement(r.Z,{key:String(n),className:p,to:e.to},e.icon&&o.createElement(a.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1897:function(e,t,n){n.r(t),n.d(t,{assets:function(){return c},contentTitle:function(){return d},default:function(){return k},frontMatter:function(){return p},metadata:function(){return m},toc:function(){return h}});var o=n(3117),r=n(102),a=(n(7294),n(3905)),i=n(8793),l=n(541),s=n(3807),u=["components"],p={id:"running",title:"Troubleshooting for running",sidebar_label:"Running",slug:"/troubleshooting/running",description:"The troubleshooting for running mpegCoder."},d=void 0,m={unversionedId:"troubleshooting/running",id:"version-3.1.0/troubleshooting/running",title:"Troubleshooting for running",description:"The troubleshooting for running mpegCoder.",source:"@site/versioned_docs/version-3.1.0/troubleshooting/running.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/running",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/troubleshooting/running.mdx",tags:[],version:"3.1.0",frontMatter:{id:"running",title:"Troubleshooting for running",sidebar_label:"Running",slug:"/troubleshooting/running",description:"The troubleshooting for running mpegCoder."},sidebar:"version-3.1.0/docs",previous:{title:"Installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/installation"},next:{title:"Q&A",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/qna"}},c={},h=[{value:"Introduction",id:"introduction",level:2},{value:"Questions and answers",id:"questions-and-answers",level:2},{value:"Fail to decode first frame",id:"fail-to-decode-first-frame",level:3},{value:"Fail to encode frames",id:"fail-to-encode-frames",level:3},{value:"Bad output video",id:"bad-output-video",level:3},{value:"Stuck of the streamer",id:"stuck-of-the-streamer",level:3},{value:"Fail to push the stream",id:"fail-to-push-the-stream",level:3},{value:"Set log level",id:"set-log-level",level:3},{value:"Reuse the instances",id:"reuse-the-instances",level:3}],g={toc:h};function k(e){var t=e.components,n=(0,r.Z)(e,u);return(0,a.kt)("wrapper",(0,o.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"If you could not find your problem in this page, please fire an issue:"),(0,a.kt)("p",null,(0,a.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/new/choose",icon:s.Z,mdxType:"DarkButton"},"Fire an issue")),(0,a.kt)("h2",{id:"questions-and-answers"},"Questions and answers"),(0,a.kt)("h3",{id:"fail-to-decode-first-frame"},"Fail to decode first frame"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Why is the first frame not able to be decoded correctly? The returned frame is totally black.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem often occurs when using ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegClient"),", especially when demuxing the RTSP stream. In some video codec formats, there are I, P, and B frames. The I frame is required for decoding other frames. If the first received frame from the remote stream is not an I frame, you could not decode the frame correctly. This problem should be fixed if you let your client running for a while."))),(0,a.kt)("h3",{id:"fail-to-encode-frames"},"Fail to encode frames"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When encoding frames, why does ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," collapse?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": You may send incorrect data to ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegEncoder.EncodeFrame()"),". The input value should be a 3D ",(0,a.kt)("a",{parentName:"p",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,a.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,a.kt)(l.Z,{mdxType:"IconExternalLink"})),". The size of this array requires to be consistent with the configuration of the encoder."))),(0,a.kt)("h3",{id:"bad-output-video"},"Bad output video"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I am working with ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegEncoder"),". Why is the output video broken?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": There are two typical cases for the bad output video. Please check whether you meet such cases:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"The video tail is not written correctly. This problem is often caused by a sudden termination of the program."),(0,a.kt)("li",{parentName:"ul"},"Some of the input frames are not correctly written.")))),(0,a.kt)("h3",{id:"stuck-of-the-streamer"},"Stuck of the streamer"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When using ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegClient")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer"),", why is the program stucked?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem is often caused by ",(0,a.kt)("inlineCode",{parentName:"p"},"streamer.FFmpegSetup()"),", especially when the remote server program is not launched, or the stream protocol is not accepted by the server. I have to admit that I should add a timeout option in the future."))),(0,a.kt)("h3",{id:"fail-to-push-the-stream"},"Fail to push the stream"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I could connect the server by ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer.FFmpegSetup()")," successfully. Why am I not able to serve the first frame by ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem is often caused by using a wrong codec. Not all codecs are supported for the online streaming. We recommend users to use ",(0,a.kt)("inlineCode",{parentName:"p"},"libx264"),"."))),(0,a.kt)("h3",{id:"set-log-level"},"Set log level"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I do not want the logs shown in the prompt, how to disable them?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": We provide a global configuration method to do that:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=0)\n")),(0,a.kt)("p",{parentName:"li"},"This value could be ",(0,a.kt)("inlineCode",{parentName:"p"},"0")," (only show errors), ",(0,a.kt)("inlineCode",{parentName:"p"},"1")," (show basic logs), ",(0,a.kt)("inlineCode",{parentName:"p"},"2")," (show detailed logs)."))),(0,a.kt)("h3",{id:"reuse-the-instances"},"Reuse the instances"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Can I reuse the same instance of ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", for example, the ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegDecoder"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Of course. Remember to call ",(0,a.kt)("inlineCode",{parentName:"p"},"clear()")," before reusing the instance."))))}k.isMDXComponent=!0},3807:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/3383f9bc.51de84f1.js b/assets/js/3383f9bc.51de84f1.js new file mode 100644 index 0000000..5fb526b --- /dev/null +++ b/assets/js/3383f9bc.51de84f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3233],{4212:function(e,t,a){var l,c,r=a(7294),n=["title","titleId"];function i(){return i=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,o=s(e,n);return r.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{maxWidth:360,height:"auto",maxHeight:360},viewBox:"0 0 360 360","aria-labelledby":a},o),t?r.createElement("title",{id:a},t):null,l||(l=r.createElement("defs",null,r.createElement("linearGradient",{id:"a"},r.createElement("stop",{stopColor:"#ffe052",offset:0}),r.createElement("stop",{stopColor:"#ffc331",offset:1})),r.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",xlinkHref:"#a",id:"d",x1:89.137,y1:111.921,x2:147.777,y2:168.101,gradientUnits:"userSpaceOnUse"}),r.createElement("linearGradient",{id:"b"},r.createElement("stop",{stopColor:"#387eb8",offset:0}),r.createElement("stop",{stopColor:"#366994",offset:1})),r.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",href:"#b",xlinkHref:"#b",id:"c",x1:55.549,y1:77.07,x2:110.149,y2:131.853,gradientUnits:"userSpaceOnUse"}))),c||(c=r.createElement("g",{stroke:"null"},r.createElement("path",{fill:"url(#c)",d:"M223.912 105.999c-72.204 0-67.695 31.312-67.695 31.312l.08 32.438H225.2v9.74h-96.27s-46.203-5.24-46.203 67.614c0 72.855 40.327 70.271 40.327 70.271h24.068v-33.807s-1.298-40.327 39.683-40.327h68.339s38.395.62 38.395-37.108V143.75s5.83-37.75-69.627-37.75zm-37.993 21.813a12.384 12.384 0 0 1 12.396 12.396c0 6.856-5.54 12.396-12.396 12.396a12.384 12.384 0 0 1-12.396-12.396 12.385 12.385 0 0 1 12.396-12.396z",transform:"translate(-44.938 -67.469)"}),r.createElement("path",{fill:"url(#d)",d:"M225.963 388.939c72.204 0 67.695-31.312 67.695-31.312l-.08-32.439h-68.903v-9.74h96.27s46.203 5.24 46.203-67.614-40.327-70.27-40.327-70.27h-24.068v33.807s1.298 40.327-39.683 40.327h-68.339s-38.395-.621-38.395 37.107v62.382s-5.83 37.752 69.627 37.752zm37.993-21.814a12.384 12.384 0 0 1-12.396-12.396c0-6.855 5.54-12.396 12.396-12.396 6.855 0 12.396 5.54 12.396 12.396a12.385 12.385 0 0 1-12.396 12.396z",transform:"translate(-44.938 -67.469)"}))))}},3503:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P=a(7294),F=["title","titleId"];function S(){return S=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,A=V(e,F);return P.createElement("svg",S({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:888,height:476.815,viewBox:"0 0 888 476.815","aria-labelledby":a},A),t?P.createElement("title",{id:a},t):null,l||(l=P.createElement("path",{d:"M552.642 164.076a75.14 75.14 0 0 0-147.426-15.843c-.91-.032-1.82-.069-2.738-.069a75.158 75.158 0 0 0-72.096 53.97 53.104 53.104 0 0 0-63.012 15.673h234.388c28.796 0 52.111-23.851 50.937-52.623q-.023-.553-.053-1.108zM.096 70.892A75.14 75.14 0 0 1 147.522 55.05c.91-.032 1.82-.069 2.738-.069a75.158 75.158 0 0 1 72.095 53.969 53.104 53.104 0 0 1 63.012 15.674H50.979C22.183 124.624-1.13 100.773.042 72q.023-.554.054-1.109z",fill:"#e6e6e6"})),c||(c=P.createElement("path",{fill:"#5cb85c",d:"M336.372 145.025H151.746L59.433 304.916l92.313 159.891h184.626l92.313-159.891-92.313-159.891z"})),r||(r=P.createElement("path",{d:"M167.2 438.04h153.718l76.859-133.124-76.86-133.124H167.2L90.341 304.916z",fill:"#fff"})),n||(n=P.createElement("path",{fill:"#3f3d56",d:"M0 463.686h888v2.241H0z"})),i||(i=P.createElement("path",{fill:"#a0616a",d:"m697.681 58.277 8.023 22.731-13.372 26.743-22.731-38.777 28.08-10.697z"})),s||(s=P.createElement("path",{d:"M765.207 333.06c-4.4 6.165-38.323 41.84-61.014 65.534a20123.845 20123.845 0 0 1-15.417 16.06c-3.236 3.356-5.135 5.321-5.135 5.321l-10.256-21.448-4.453-9.306.067-.08 2.795-3.57 26.65-34.098 27.986-35.795-22.732-45.463 28.08-4.012 18.667 1.097 4.065.24s17.383 56.16 10.697 65.52z",fill:"#2f2e41"})),o||(o=P.createElement("path",{d:"M686.315 442.707c-1.738 1.738-4.76-.481-8.036-4.279-6.78-7.862-14.695-22.464-14.695-22.464l-9.36-20.057c1.002-5.99 10.175-6.753 14.775-6.766 1.565 0 2.608.08 2.608.08l.775 1.15 16.394 24.282s2.888 22.705-2.46 28.054z",fill:"#2f2e41"})),m||(m=P.createElement("path",{d:"M688.776 414.653s2.888 22.705-2.46 28.054c-1.74 1.738-4.761-.481-8.037-4.279l-4.894-39.9-1.003-8.157-.588-4.8 26.65-34.098 5.749 47.121a20201.877 20201.877 0 0 1-15.417 16.06zm18.519-137.244-3.597-7.194 28.08-4.012 18.667 1.097.053.24-43.203 9.869z",opacity:.2})),d||(d=P.createElement("path",{fill:"#2f2e41",d:"M671.607 208.706h-9.361l2.675 88.252 18.72 152.435h30.754l-13.371-109.647 6.686-61.508 46.8-10.698-13.372-61.508-69.531 2.674z"})),f||(f=P.createElement("path",{d:"M686.315 445.381s-2.674 18.72-1.337 20.057 2.674 2.675 2.674 5.349 16.046 9.36 24.069 4.011 2.674-13.371 2.674-13.371l-8.023-16.046z",fill:"#2f2e41"})),p||(p=P.createElement("circle",{cx:680.967,cy:52.26,r:22.732,fill:"#a0616a"})),h||(h=P.createElement("path",{fill:"#e6e6e6",d:"m694.338 88.363-17.489-7.025-10.591 131.379 73.543 5.349-25.406-135.052-11.365-10.671-8.692 16.02z"})),y||(y=P.createElement("path",{d:"M674.522 77.37 660.91 88.363l-25.405 13.371 9.36 84.24 1.337 48.138s-17.383 42.789-4.012 53.486 28.08 6.685 25.406-16.046-8.023-38.777 17.383-62.846 3.157-136.98-10.456-131.336zm27.126-7.854 16.759 10.824 22.731 12.034 17.383 192.55-38.777 12.034S698.26 74.738 701.648 69.516z",fill:"#2f2e41"})),u||(u=P.createElement("path",{d:"M745.15 228.763s-20.058 30.755-5.349 30.755 18.72-25.406 18.72-25.406zm-82.904 0s20.058 30.755 5.35 30.755-18.721-25.406-18.721-25.406z",fill:"#a0616a"})),E||(E=P.createElement("path",{d:"m682.304 18.83-6.686-4.01 1.337 2.674-5.348-1.337 1.337 1.337-6.686-1.337 2.674 2.674s-10.697 0-12.034 10.697l-6.686 1.337 2.674 4.012v4.011l2.675 2.674v4.012l2.674 6.686 2.674-9.36s12.035 2.674 17.383-8.023c0 0 1.337 4.011 8.023 2.674l10.697 18.72s1.337-8.299 6.018-9.498 2.005-11.896 2.005-11.896-4.011-4.012-4.011-6.686-4.012-5.349-6.686-5.349-9.36-5.348-9.36-5.348zM646.2 103.071l-6.224-3.691-4.472 2.354s-5.35 2.674-6.686 12.034-14.709 66.858-14.709 66.858-1.337 9.36 5.349 25.406 32.091 44.126 32.091 44.126l24.069-20.058-36.103-44.126 9.36-36.103zm84.241-10.697h10.697l17.383 65.52 5.349 81.566-25.406-9.36v-58.834l-8.023-78.892z",fill:"#2f2e41"})),x||(x=P.createElement("path",{fill:"#3f3d56",d:"M184.701 171.594h2v82.555h-2z"})),z||(z=P.createElement("circle",{cx:185.701,cy:258.894,r:5.693,fill:"#5cb85c"})),v||(v=P.createElement("path",{fill:"#3f3d56",d:"M227.402 171.594h2v82.555h-2z"})),M||(M=P.createElement("circle",{cx:228.402,cy:258.894,r:5.693,fill:"#3f3d56"})),g||(g=P.createElement("path",{fill:"#3f3d56",d:"M302.366 171.594h2v82.555h-2z"})),k||(k=P.createElement("circle",{cx:303.366,cy:258.894,r:5.693,fill:"#3f3d56"})),b||(b=P.createElement("circle",{cx:272.052,cy:340.5,r:5.693,fill:"#3f3d56"})),w||(w=P.createElement("circle",{cx:156.285,cy:288.31,r:5.693,fill:"#3f3d56"})),H||(H=P.createElement("path",{fill:"#3f3d56",d:"M273.052 335.755h-2v-99.479h-42.65v-2h44.65v101.479z"})),O||(O=P.createElement("circle",{cx:198.986,cy:376.558,r:5.693,fill:"#5cb85c"})),G||(G=P.createElement("path",{fill:"#3f3d56",d:"M199.986 371.814h-2v-99.48h-42.65v-2h44.65v101.48z"})),T||(T=P.createElement("circle",{cx:330.884,cy:331.96,r:5.693,fill:"#5cb85c"})),L||(L=P.createElement("path",{fill:"#3f3d56",d:"M331.884 327.215h-2v-99.479h-27.467v-2h29.467v101.479zm-174.599-44.599h-2v-49.461h30.416v2h-28.416v47.461z"})),C||(C=P.createElement("circle",{cx:228.876,cy:398.858,r:5.693,fill:"#3f3d56"})),I||(I=P.createElement("path",{fill:"#3f3d56",d:"M229.876 393.164h-2v-47.461H199.46v-2h30.416v49.461z"})),j||(j=P.createElement("circle",{cx:301.468,cy:356.631,r:5.693,fill:"#3f3d56"})),Z||(Z=P.createElement("path",{fill:"#3f3d56",d:"M302.468 350.938h-2v-49.461h30.416v2h-28.416v47.461z"})))}},7353:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G=a(7294),T=["title","titleId"];function L(){return L=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,I=C(e,T);return G.createElement("svg",L({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1144,height:751.924,viewBox:"0 0 1144 751.924","aria-labelledby":a},I),void 0===t?G.createElement("title",{id:a},"3333"):t?G.createElement("title",{id:a},t):null,l||(l=G.createElement("path",{fill:"#f2f2f2",d:"M1111.983 428.056 904.837 604.443l-45.323 38.589-126.827-.774-108.238-.658-8.99-.053-21.965-25.799-87.33-102.562-43.838-51.49-13.181-15.476-9.535-11.201-21.249-24.956-34.403-40.401 34.844-29.667 33.277-28.338 23.92-20.366L777.168 34.846l334.815 393.21z"})),c||(c=G.createElement("path",{fill:"#3f3d56",d:"M97 101.924h397v287H97zm482 593h374v2H579z"})),r||(r=G.createElement("path",{d:"M1133.924 641.924H834.57s-6.068-88.998 29.834-90.009 31.857 39.442 76.862-16.181 99.616-52.59 106.695-19.721-13.653 59.163 24.272 51.072 92.536 13.147 61.69 74.839z",fill:"#5cb85c"})),n||(n=G.createElement("path",{d:"m979.194 641.944-1.01-.04c2.356-58.596 14.628-96.243 24.507-117.508 10.727-23.089 21.064-32.435 21.168-32.527l.672.755c-.102.091-10.319 9.345-20.96 32.278-9.825 21.174-22.03 58.668-24.377 117.042zm108.344.121-.971-.283c11.69-40.126 39.22-65.46 39.497-65.712l.68.749c-.275.249-27.599 25.404-39.206 65.246zm-205.818-.072-1.002-.14c3.966-28.605-3.198-50.799-9.907-64.38-7.265-14.704-15.553-22.736-15.636-22.815l.7-.73c.084.08 8.5 8.235 15.842 23.098 6.772 13.708 14.004 36.107 10.003 64.967z",fill:"#f2f2f2"})),i||(i=G.createElement("path",{fill:"#3f3d56",d:"M43 641.924h1101v2H43z"})),s||(s=G.createElement("path",{fill:"#2f2e41",d:"M724.735 39.413h94.695v117.651h-94.695z"})),o||(o=G.createElement("path",{fill:"#ffb8b8",d:"m646.54 588.213-12.913 47.348 21.522 15.782 5.739-4.304 10.043-48.782-24.391-10.044zm162.129-4.304-4.304 57.391h27.261v-53.087l-22.957-4.304zm-86.086-362.997v34.434l53.087 8.609 45.912-18.652-8.608-21.522-90.391-2.869z"})),m||(m=G.createElement("path",{d:"M765.626 249.607 719.714 241l-11.479 93.26-28.695 116.216s-43.043 99-37.304 121.956l2.87 7.174-2.87 12.913 28.695 11.478 11.479-18.652s8.608 12.913 22.956-14.348 74.608-196.564 74.608-196.564l10.043 28.696a59.132 59.132 0 0 0-1.434 27.26c2.87 14.348 5.739 58.826 5.739 58.826s-15.783 77.478 5.739 83.217l4.304 17.217 30.13 2.87 5.74-17.218s28.695-10.043 21.521-60.26-10.043-215.216-10.043-215.216l-28.266-69.693zm-123.39 383.084s-7.174-5.739-10.043-4.304-33 40.174-33 40.174-31.565 24.39-8.609 27.26 86.086-28.695 86.086-35.87-13.265-25.14-13.265-25.14-9.69 7.924-21.17-2.12zm159.26-4.304s25.825-1.604 30.13 2.785 2.87 25.91 2.87 25.91 2.869 38.74-20.088 38.74-17.217-25.827-17.217-25.827z",fill:"#2f2e41"})),d||(d=G.createElement("circle",{cx:775.67,cy:58.783,r:35.869,fill:"#ffb8b8"})),f||(f=G.createElement("path",{d:"M751.996 81.022s20.087 24.39-20.087 43.043 28.696 96.13 28.696 96.13 80.347-30.13 73.173-88.956c0 0-48.782-8.609-37.304-48.783z",fill:"#ffb8b8"})),p||(p=G.createElement("path",{d:"M730.474 122.63s-33-4.304-34.434 22.956 0 93.26 0 93.26-14.348 57.391-7.174 107.608c0 0-8.609 58.826 14.348 55.956s5.739-60.26 5.739-60.26l10.043-93.26-4.304-68.87 18.652-41.607zm94.973 6.339s31.287-.6 32.722 22.356-10.043 93.26-10.043 93.26l-17.218 8.61-15.782-48.783z",fill:"#ffb8b8"})),h||(h=G.createElement("path",{d:"m834.495 246.738-2.87 7.174 8.61 21.521s-34.435 27.26-31.566 33 18.652-7.174 18.652-7.174l22.957 11.478s18.652-20.087 10.043-38.739-11.934-31.04-11.934-31.04-12.457-.525-13.892 3.78z",fill:"#ffb8b8"})),y||(y=G.createElement("path",{d:"m724.018 117.608-4.304 47.348s-20.087 20.087 2.87 47.347l-2.87 21.522s53.086-2.87 63.13 0 41.06-2.31 41.06-2.31l.548-16.342s14.348-20.087 10.043-50.217 0-40.174 0-40.174l-10.043-1.435s-6.457 43.761-50.935 48.065c0 0-55.238 5.022-39.456-53.804z",fill:"#5cb85c"})),u||(u=G.createElement("path",{d:"M779.257.674s-37.304-2.312-45.913 20.885-23.674 35.376-23.674 35.376-23.731 16.496-11.865 45.944c0 0-36.917 24.808-12.526 46.846 0 0-1.435 22.037 12.913 37.115 0 0 11.478 5.8 7.174 9.28s28.695 1.16 25.826-30.157 16.5-53.376 16.5-53.376-18.652-40.603-10.044-54.522c5.227-8.45 7.471-14.752 11.81-18.399a54.432 54.432 0 0 0 6.698-6.537 15.455 15.455 0 0 1 16.644-5.19c12.913 3.48 15.783 13.918 15.783 13.918s9.326 24.937 25.108 36.536-12.196 31.896-12.196 31.896 4.864 23.898 17.497 38.046-3.64 26.48-4.584 28.067c-2.152 3.619-10.747 26.474 24.757 26.575 0 0 8.243-17.297 19.721-27.735s2.87-40.596 2.87-40.596 17.217-10.438-1.435-35.956c0 0 5.74-23.197-10.043-38.275 0 0-22.24-67.86-71.021-59.74z",fill:"#2f2e41"})),E||(E=G.createElement("ellipse",{cx:736.931,cy:58.065,rx:3.587,ry:5.739,fill:"#ffb8b8"})),x||(x=G.createElement("path",{d:"M593 750.924H1s-12-176 59-178 63 78 152-32 197-104 211-39-27 117 48 101 183 26 122 148z",fill:"#5cb85c"})),z||(z=G.createElement("path",{d:"m287.007 750.964-1.998-.08c4.66-115.878 28.928-190.33 48.466-232.381 21.214-45.661 41.656-64.145 41.86-64.327l1.33 1.495c-.202.18-20.406 18.48-41.45 63.832-19.43 41.874-43.566 116.02-48.208 231.46zm214.26.239-1.92-.559c23.119-79.353 77.561-129.455 78.11-129.952l1.343 1.48c-.543.494-54.578 50.24-77.533 129.03zm-407.024-.142-1.982-.275c7.844-56.57-6.324-100.461-19.592-127.319-14.366-29.08-30.757-44.962-30.92-45.12l1.383-1.443c.166.16 16.81 16.286 31.33 45.678 13.392 27.11 27.694 71.405 19.78 128.48z",fill:"#f2f2f2"})),v||(v=G.createElement("path",{fill:"#3f3d56",d:"M0 749.924h837v2H0zm565-360H96v-372h469zm-467-2h465v-368H98z"})),M||(M=G.createElement("circle",{cx:137,cy:170.924,r:17,fill:"#5cb85c"})),g||(g=G.createElement("circle",{cx:185,cy:170.924,r:17,fill:"#d0cde1"})),k||(k=G.createElement("circle",{cx:233,cy:170.924,r:17,fill:"#5cb85c",opacity:.5})),b||(b=G.createElement("circle",{cx:281,cy:170.924,r:17,fill:"#f2f2f2"})),w||(w=G.createElement("path",{fill:"#f2f2f2",d:"M330 162.924h140v16H330z"})),H||(H=G.createElement("circle",{cx:288,cy:283.924,r:46,fill:"#f2f2f2"})),O||(O=G.createElement("path",{d:"m288.191 297.772-23.02-23.02a4 4 0 0 1 5.658-5.657l16.98 16.98 54.184-61.789a4 4 0 1 1 6.014 5.275z",fill:"#5cb85c"})))}},3073:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P,F,S,V,A,q,D,N,_,U,B,R,W,X,K,J,Q,Y,$,ee,te,ae,le,ce,re,ne,ie,se,oe,me,de,fe,pe,he,ye,ue,Ee,xe,ze,ve,Me,ge,ke,be,we,He,Oe,Ge,Te,Le,Ce,Ie,je,Ze,Pe,Fe,Se,Ve,Ae,qe,De,Ne,_e,Ue,Be,Re,We,Xe,Ke,Je,Qe,Ye,$e,et,tt,at,lt,ct,rt,nt,it,st,ot,mt,dt,ft,pt,ht,yt,ut,Et,xt,zt,vt,Mt,gt,kt,bt=a(7294),wt=["title","titleId"];function Ht(){return Ht=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,Gt=Ot(e,wt);return bt.createElement("svg",Ht({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:1099.2,height:725.77,viewBox:"0 0 1099.2 725.77","aria-labelledby":a},Gt),l||(l=bt.createElement("defs",null,bt.createElement("linearGradient",{id:"a",x1:837,y1:580.8,x2:989.66,y2:580.8,gradientTransform:"matrix(-1 0 0 1 1862 0)",gradientUnits:"userSpaceOnUse"},bt.createElement("stop",{offset:0,stopColor:"gray",stopOpacity:.25}),bt.createElement("stop",{offset:.54,stopColor:"gray",stopOpacity:.12}),bt.createElement("stop",{offset:1,stopColor:"gray",stopOpacity:.1})),bt.createElement("linearGradient",{id:"b",x1:-106.89,y1:588.73,x2:-106.89,y2:244.28,gradientTransform:"matrix(-1 -.04 -.04 1 494.48 21.29)",xlinkHref:"#a"}))),void 0===t?bt.createElement("title",{id:a},"compose music"):t?bt.createElement("title",{id:a},t):null,c||(c=bt.createElement("circle",{cx:985.58,cy:371.09,r:21.63,fill:"#a4a4a4",opacity:.1})),r||(r=bt.createElement("circle",{cx:1062.95,cy:274.65,r:36.25,fill:"#a4a4a4",opacity:.1})),n||(n=bt.createElement("circle",{cx:455.32,cy:27.78,r:21.63,fill:"#a4a4a4",opacity:.1})),i||(i=bt.createElement("circle",{cx:703.43,cy:52.64,r:21.63,fill:"#a4a4a4",opacity:.1})),s||(s=bt.createElement("circle",{cx:36.25,cy:326.22,r:36.25,fill:"#a4a4a4",opacity:.1})),o||(o=bt.createElement("path",{d:"M608.11 119.66c-64.72-2.41-126.36-24.85-185.22-49.41S305.72 18.5 242.6 5.49c-40.63-8.37-87.09-9.56-119.83 13.84-31.55 22.56-41.73 61.39-47.17 97.45-4.12 27.14-6.54 55.7 4.74 81.1 7.83 17.64 21.74 32.46 31.36 49.35 33.47 58.78 9.81 131.27-26.46 188.66-17 26.92-36.74 52.6-49.87 81.26s-19.23 61.5-7.77 90.74c11.38 29 38.51 50.74 67.9 66 59.69 31.09 130 40 198.61 45 151.82 11.16 304.46 6.33 456.69 1.49 56.33-1.79 112.92-3.61 168.34-13 30.78-5.2 62.55-13.45 84.89-33.36 28.37-25.27 35.4-68.07 16.39-99.76-31.88-53.16-120-66.37-142.31-123.42-12.26-31.4.33-66.38 18.16-95.5 38.23-62.48 102.33-117.29 105.7-188.71 2.32-49-28.49-98.16-76.13-121.37-49.94-24.33-119.18-21.27-156 19-37.92 41.63-104.59 57.54-161.73 55.4z",fill:"#a4a4a4",opacity:.1})),m||(m=bt.createElement("path",{d:"M872.34 482.75a5.91 5.91 0 0 0 1.33 3.46 19.66 19.66 0 0 0 5.32 4.52v5.42s16 13.37 19.29 18.42c3.17 4.82 6.41 9.73 10.92 13.32a9.85 9.85 0 0 0 4.07 2.16h.27a4.23 4.23 0 0 1-1.56 1 3.7 3.7 0 0 0 4.36 3.13 7.29 7.29 0 0 0 2.16-1.08l6.34-4.1a18.16 18.16 0 0 0 2.95-2.21c1.18-1.19 2-2.68 3.16-3.9 2-2.08 4.84-3.32 6.23-5.82.87-1.56 1-3.41 1.56-5.12.35-1.12.86-2.18 1.2-3.3a11.93 11.93 0 0 0 .41-2.06c.22.19.45.38.69.56.49-.32 1.43.52 1.21 1.06s-.75.93-.93 1.49c-.4 1.28 1.18 2.23 1.84 3.4s.32 2.67.39 4 .68 2.93.87 4.42c.46 3.48-1.26 7.15 0 10.44a3.29 3.29 0 0 0-3.25 2.53 9.58 9.58 0 0 0 .13 4.45 6.12 6.12 0 0 0-3 5.59 1.37 1.37 0 0 1-.14 1 1.42 1.42 0 0 1-.57.33 5.64 5.64 0 0 0-3.48 5.24 2.6 2.6 0 0 1-.1 1.11 2.63 2.63 0 0 1-.82.84 6.52 6.52 0 0 0-2.43 5.1 3.7 3.7 0 0 0 1.72 3.34h.07a18 18 0 0 0-6 11.39 46.76 46.76 0 0 0 .78 11.79h.36v.29a5.25 5.25 0 0 0 .57 1.7 24.36 24.36 0 0 1 2.15 8.76 7.76 7.76 0 0 0 .3 2.21 11.14 11.14 0 0 0 1.13 1.94c1.33 2.17 1.64 4.79 2.09 7.3a57.72 57.72 0 0 0 2.55 9.57c1.53 4.24 3.59 8.58 2.89 13a13 13 0 0 0-.4 3.21 9.39 9.39 0 0 0 1.26 3.37c.51 1 1 2.06 1.4 3.12a2.52 2.52 0 0 0 .62 1.69c.12.33.22.67.32 1s.17.53.25.8a10.32 10.32 0 0 1 .31 1.36l-.06 1.05v1a2.49 2.49 0 0 1-.48.89 3.58 3.58 0 0 1-.26.29l-.24.27a1.8 1.8 0 0 0-.27.39 1.87 1.87 0 0 0-.08 1.15c0 .15.06.3.1.45.25 1.08.52 2.16.79 3.23.08.33.17.65.25 1 .22.84.44 1.69.67 2.53v.11l.15.56.57 2.06c.12.41.24.81.35 1.22l.44 1.49q.51 1.74 1.05 3.48c3.57 11.78 7.4 23.49 9.76 35.57a3.83 3.83 0 0 0 1.43 2.14 8.24 8.24 0 0 0 2.49 1.34c.23 1.77.8 3.93.87 5 .22 3.49.38 7.21-.89 10.39a.84.84 0 0 0-.76.24 31 31 0 0 0-2.29 2.43l-4.69 5a7.75 7.75 0 0 0-1.06 1.29 4.51 4.51 0 0 0-.45 3.69 5 5 0 0 0 2.41 2.86 4 4 0 0 1 .76.43 4.51 4.51 0 0 0 .47.4 1.82 1.82 0 0 0 1 .19 35.71 35.71 0 0 0 7.87-1.34 6.31 6.31 0 0 0 3.25-1.53 6.08 6.08 0 0 0 1.11-2.16l.94-2.6a29.61 29.61 0 0 0 1.43-4.85 10 10 0 0 0-.25-5 1 1 0 0 0-.24.41c.23-1.45.45-2.91.68-4.37.07-.43.13-.87.19-1.32.3 3.89-.27 7.81-.09 11.71a13.65 13.65 0 0 0-.39 2.19c.26 3.58 1.75 7.49 4.64 9.62a4.75 4.75 0 0 0 1.59.83 5.62 5.62 0 0 0 1.64 0 20.9 20.9 0 0 0 6.24-1.18 7.67 7.67 0 0 0 4.49-4.26 10 10 0 0 0 .45-3.08 11.83 11.83 0 0 0-.29-3.25 24.79 24.79 0 0 0-1.64-3.79 36.17 36.17 0 0 1-1.86-5.58l-.87-3.17c-.24-.9-.49-1.8-.8-2.68a4.49 4.49 0 0 0-1.11-2.11c-.36-.28-.6-.3-.76-.14v-.34a35.86 35.86 0 0 0 .23-3.71c-.24-2-1.83-3.63-2.86-5.41a10.56 10.56 0 0 1-1.14-2.86c-.06-.22-.1-.43-.14-.66a2.33 2.33 0 0 1 .57-.37l1.78 1c-1.57-11.8-.74-24.17-5.32-35.15-2-4.78-5.85-9.76-5.42-14.91a4.2 4.2 0 0 1 .47-6.7c.77-.42 1.72-.62 2.25-1.33a3.63 3.63 0 0 0 .51-1.29 204.58 204.58 0 0 1 9.88-29.65c.89-2.11 1.81-4.2 2.74-6.29l3.1-7.05 3.78-8.58c1.28-2.89 2.57-6.19 1.36-9.1-.48-1.15-1.33-2.24-1.21-3.47a21.78 21.78 0 0 1 .74-2.29 5.7 5.7 0 0 0-.19-2.49 89.79 89.79 0 0 0-.82-3.23 18 18 0 0 1 2.41.46c.48-.81-.29-1.75-.76-2.57a8.69 8.69 0 0 1-.87-3.57l-1-10.09a17.9 17.9 0 0 1-.08-4.2c.2-1.48.77-2.89 1.06-4.37.55-2.83 0-5.75.18-8.64a38.74 38.74 0 0 1 1.32-7.52c.09-.37.17-.73.26-1.1a6 6 0 0 0 1.45.25h1.24a4 4 0 0 0 .55-.14h.12a6 6 0 0 0 .59-.23c-.24-.51-.46-1-.67-1.54-.09-.21-.17-.42-.25-.63s-.23-.59-.33-.89-.2-.55-.29-.82-.15-.46-.22-.69-.19-.63-.28-1-.18-.66-.27-1l.15-.31a8.77 8.77 0 0 0 1.65 1.13c2 3.45 3.81 7 5.48 10.58a3.36 3.36 0 0 0 .51-1.29 6.19 6.19 0 0 0 .71.91 10.6 10.6 0 0 0 2.33 1.71 6 6 0 0 0 2.76 1 5.15 5.15 0 0 0 3.53-1.53c2.91-2.55 4.36-6.34 5.71-10a75.29 75.29 0 0 0 4.3-14.73c.82-5.43.47-11.07 2-16.34-1.39-2.76-2.27-5.81-3.83-8.48a37.92 37.92 0 0 1-2.64-4.95 17.1 17.1 0 0 1-.47-11.44 1.57 1.57 0 0 0-1.83.1 3.83 3.83 0 0 0-1.1 1.6 14.19 14.19 0 0 0-1.09 6.72 2.68 2.68 0 0 1-.19 1.64 2.06 2.06 0 0 1-1.78.75 15.34 15.34 0 0 1-4.12-.75 38.28 38.28 0 0 0-11.48-1.12 9.11 9.11 0 0 0-1-1l-.43-.35-.44-.34-.22-.18a5 5 0 0 1-.42-.37 2.77 2.77 0 0 1-1-1.75 2.25 2.25 0 0 1 0-.26 1.94 1.94 0 0 1 0-.24 3.38 3.38 0 0 1 .23-.7 4.71 4.71 0 0 1 .22-.45l.11-.23c0-.07.07-.15.11-.22a6.59 6.59 0 0 0 .32-.84 6.13 6.13 0 0 0 .21-.87 6.54 6.54 0 0 0 .09-.89v-1.35a9.09 9.09 0 0 0-.37-1.78 9.87 9.87 0 0 0-.48-1.28 14.16 14.16 0 0 0-.85-1.58 24.18 24.18 0 0 0-2.14-2.91l-.59-.69-.6-.68a23.75 23.75 0 0 1-1.74-2.13 8.28 8.28 0 0 1-1-1.78 6.84 6.84 0 0 1-.21-.64 6.51 6.51 0 0 1-.18-1.24v-.41a15.44 15.44 0 0 1 .08-1.67c.08-.78.19-1.57.3-2.37.07-.53.15-1.06.22-1.59 0-.26.06-.53.1-.79.06-.53.12-1.06.16-1.59a15.24 15.24 0 0 0-.26-4.63 8.77 8.77 0 0 0-.47-1.48 9.39 9.39 0 0 0-1-1.8 13 13 0 0 0-5.56-4.33 25.6 25.6 0 0 0-5.09-1.63c-.7-.15-1.39-.28-2.08-.39-10.4-1.67-21.44 1.49-28 10-3.42 4.42-6.33 9.38-7.57 14.83s-.68 11.49 2.39 16.17c1.29 2 3 3.68 4.13 5.74.94 1.68 1.5 3.57 2.51 5.21a12.3 12.3 0 0 0 5.55 4.67l-.44.4a13.48 13.48 0 0 0-3.11.06c-1.06.18-2.09.59-3.16.72-1.32.17-2.67-.09-4 .08-2.46.32-4.48 2-6.35 3.65-2.19 1.91-4.54 4.14-4.71 7v.08l-1.47 2a7.89 7.89 0 0 0-.92 1.45c-.59 1.39-.26 3-.58 4.48a9.58 9.58 0 0 1-1.16 2.67 60.07 60.07 0 0 1-5 7.46 12.64 12.64 0 0 1-3.11 3.08 5.6 5.6 0 0 1-3.24.92 20.77 20.77 0 0 1-4.74-3.17 30.57 30.57 0 0 1-4.19-5.21c-2.38-3.43 5 6.83 2.62 3.39l-21.34-35.56a29 29 0 0 1-.84-5.06c0-.65-.27-1.51-.93-1.53a1.13 1.13 0 0 0-.75.36 4.34 4.34 0 0 0-1.39 3.7 5.13 5.13 0 0 0-3.27.58 1.87 1.87 0 0 0-.41 2.66v.27a1.42 1.42 0 0 0-.75 1.5 5.08 5.08 0 0 0-3.51.17c-1.05.59-1.45 2.32-.43 3a3.07 3.07 0 0 0-1.96 2.9zm133.68 5.1a16.52 16.52 0 0 0 1.87.48 29.85 29.85 0 0 1 5.8 2 3.18 3.18 0 0 1 1.51 1.13 3.36 3.36 0 0 1-.18 2.84l-2.64 7.13c-.42 1.12-.83 2.24-1.35 3.31-.2.43-.43.86-.66 1.28q-.12-.36-.24-.69a58.51 58.51 0 0 1-1.9-6.64c-.44-1.94-.81-3.9-1.12-5.86a28.64 28.64 0 0 0-1.11-4.98zm-2.76-5.59.2.14a2.25 2.25 0 0 1 .69.48 1.07 1.07 0 0 1 0 1zm-4.77-6.87 3.16.46a4.15 4.15 0 0 1 2.13.73 1.43 1.43 0 0 1 .29 2 4.76 4.76 0 0 1-.7.47 2 2 0 0 0-.75 2.07 22.41 22.41 0 0 0-1.81-2.81 13.9 13.9 0 0 0-2.11-2.16c-.07-.25-.13-.51-.21-.76zm-30.37 227.33a11.28 11.28 0 0 0 1.17 0 11.23 11.23 0 0 0-.19 2.84z",transform:"translate(-50.4 -87.11)",fill:"url(#a)"})),d||(d=bt.createElement("path",{d:"M921.92 339.11c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87 21.4 21.4 0 0 1-7.75-10.52c-4.27 1-8.62 1.89-13 1.5s-8.79-2.37-11.08-6.09c-1-1.64-1.57-3.53-2.51-5.21-1.15-2.06-2.85-3.75-4.14-5.73-3.06-4.68-3.62-10.69-2.38-16.15s4.14-10.39 7.57-14.81c6.63-8.51 17.67-11.67 28.06-10z",fill:"#3a3768"})),f||(f=bt.createElement("path",{d:"M921.92 339.11c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87 21.4 21.4 0 0 1-7.75-10.52c-4.27 1-8.62 1.89-13 1.5s-8.79-2.37-11.08-6.09c-1-1.64-1.57-3.53-2.51-5.21-1.15-2.06-2.85-3.75-4.14-5.73-3.06-4.68-3.62-10.69-2.38-16.15s4.14-10.39 7.57-14.81c6.63-8.51 17.67-11.67 28.06-10z",fill:"#3f3d56"})),p||(p=bt.createElement("path",{d:"M956.54 407.68c.31 2 .68 3.92 1.13 5.87a56.16 56.16 0 0 0 1.89 6.62 6.36 6.36 0 0 1 .59 3 5.61 5.61 0 0 1-.73 1.82c-2.51 4.45-5.89 8.75-6.18 13.85-.07 1.27 0 2.64-.68 3.69q-2.91-6.24-6.41-12.18c-2.44-4.14-5.15-8.32-5.85-13.08a24.8 24.8 0 0 1 .08-6.72 14.63 14.63 0 0 1 2.42-7.07c1.65-2.16 6.2-5.43 9.14-4.76 3.45.84 4.16 6.17 4.6 8.96z",fill:"#f86d70"})),h||(h=bt.createElement("path",{d:"M868.17 431.67c-3.28-1.34-6.62-2.75-9.23-5.16a30.11 30.11 0 0 1-4.19-5.2l-7.71-11.14c-1.83-2.65-3.71-5.43-4.1-8.62a28.37 28.37 0 0 1-7.71-17.5c0-.66-.26-1.51-.92-1.53a1.16 1.16 0 0 0-.76.36 4.35 4.35 0 0 0-1.38 3.7 5.13 5.13 0 0 0-3.27.57c-.92.66-1.16 2.29-.17 2.84a1.41 1.41 0 0 0-1 1.59 5 5 0 0 0-3.51.17c-1 .59-1.45 2.31-.43 3a3 3 0 0 0-2 2.93 5.88 5.88 0 0 0 1.33 3.45c3 4 8.2 5.58 11.63 9.16a26.56 26.56 0 0 1 3 4l9.95 15.14c3.16 4.81 6.41 9.71 10.92 13.29a9.88 9.88 0 0 0 4.06 2.16 4.49 4.49 0 0 0 4.27-1.18c1-1.13 1.15-2.76 1.25-4.26.24-2.55-.2-5.2-.03-7.77z",fill:"#a1616a"})),y||(y=bt.createElement("path",{d:"M901.48 641.89a8.65 8.65 0 0 0-1.06 1.29 4.51 4.51 0 0 0-.45 3.69 5 5 0 0 0 2.41 2.85 4.71 4.71 0 0 1 .76.44 4.51 4.51 0 0 0 .47.4 1.82 1.82 0 0 0 1 .19 36.41 36.41 0 0 0 7.87-1.34 6.31 6.31 0 0 0 3.25-1.53 6.47 6.47 0 0 0 1.11-2.15l.93-2.6a30.54 30.54 0 0 0 1.44-4.84 10.08 10.08 0 0 0-.26-5 1.63 1.63 0 0 0-.35 1 11.07 11.07 0 0 1-2 4.85 4.94 4.94 0 0 1-.78 1 5.09 5.09 0 0 1-2.34 1 28.76 28.76 0 0 1-5 .64 1.56 1.56 0 0 1-.68-.08 1.19 1.19 0 0 1-.57-.71 3 3 0 0 1 0-2c.45-1.26 1.69-2.09 2.29-3.3.44-.89-.17-1.87-1.08-1.12a27.74 27.74 0 0 0-2.29 2.43z",fill:"#3f3d56"})),u||(u=bt.createElement("path",{d:"M910.1 623.89c.27 4.19.45 8.71-1.84 12.22-.82 1.27-1.93 2.33-2.87 3.52a4.13 4.13 0 0 0-1 2.12c-.14 1.53 1.3 2.85 2.82 3.13a9.33 9.33 0 0 0 4.53-.65 10.91 10.91 0 0 0 3.85-1.81c2-1.69 2.52-4.5 2.92-7.08l.93-6a18.91 18.91 0 0 0 .34-4.37 19.46 19.46 0 0 0-1.17-4.71l-1.54-4.5a2.12 2.12 0 0 0-.68-1.12 2 2 0 0 0-1.17-.21c-1.47.07-5.18.61-5.89 2.16-.65 1.4.67 5.72.77 7.3z",fill:"#ee8e9e"})),E||(E=bt.createElement("path",{d:"M910.1 623.89c.27 4.19.45 8.71-1.84 12.22-.82 1.27-1.93 2.33-2.87 3.52a4.13 4.13 0 0 0-1 2.12c-.14 1.53 1.3 2.85 2.82 3.13a9.33 9.33 0 0 0 4.53-.65 10.91 10.91 0 0 0 3.85-1.81c2-1.69 2.52-4.5 2.92-7.08l.93-6a18.91 18.91 0 0 0 .34-4.37 19.46 19.46 0 0 0-1.17-4.71l-1.54-4.5a2.12 2.12 0 0 0-.68-1.12 2 2 0 0 0-1.17-.21c-1.47.07-5.18.61-5.89 2.16-.65 1.4.67 5.72.77 7.3z",opacity:.05})),x||(x=bt.createElement("path",{d:"M877.15 499.74a.37.37 0 0 0 0 .11 5 5 0 0 0 .56 1.7 24.58 24.58 0 0 1 2.16 8.75 7.41 7.41 0 0 0 .29 2.21 11.81 11.81 0 0 0 1.13 1.94c1.33 2.17 1.64 4.78 2.09 7.29a57.61 57.61 0 0 0 2.55 9.56c1.53 4.23 3.59 8.57 2.89 13a13 13 0 0 0-.4 3.2 9.24 9.24 0 0 0 1.25 3.37c.52 1 1 2.06 1.41 3.12s.85 2.31 1.19 3.48c.41 1.44.69 3.14-.26 4.29a4.88 4.88 0 0 0-.77.94 2.5 2.5 0 0 0 0 1.62q.81 3.42 1.74 6.83c.48 1.78 1 3.55 1.51 5.32 3.86 12.94 8.22 25.75 10.81 39 .37 1.91 2.81 3.28 4.71 3.69a6.14 6.14 0 0 0 5.41-1.45 3.32 3.32 0 0 0 .38-.37c2-2.14 2.27-5.42 2.13-8.38-.67-13.64-7.54-26.12-10.81-39.38a75.84 75.84 0 0 1-2.12-14.61c-.77-16.47-1.07-33.87 3.58-49.68 1-3.29 2.11-7 .37-10-1.1-1.86-3.13-3-5.14-3.76a33.1 33.1 0 0 0-25.69.66 8 8 0 0 0 0 1 10.13 10.13 0 0 1-.52 4.54 5.57 5.57 0 0 0-.45 2.01zm56.37 128.39.87 3.17a35.43 35.43 0 0 0 1.85 5.58 24.31 24.31 0 0 1 1.65 3.78 12.22 12.22 0 0 1 .28 3.25 9.93 9.93 0 0 1-.45 3.07 7.67 7.67 0 0 1-4.49 4.26 21.21 21.21 0 0 1-6.23 1.17 5 5 0 0 1-1.64 0 4.57 4.57 0 0 1-1.59-.83c-2.89-2.12-4.38-6-4.64-9.61a11.82 11.82 0 0 1 .49-2.45c.22-.3 2.41.93 1.47 2-1.38 1.53 2.67.74 4.73.61a19 19 0 0 0 2.68-.44l3.33-.71c1.09-.24 2.35-.61 2.73-1.66s-.46-2.29-1.11-3.3c-1.75-2.69-2.19-6-2.6-9.17-.08-.63-.86-4.68.75-3.42a4.5 4.5 0 0 1 1.12 2.11c.31.8.55 1.69.8 2.59z",fill:"#3f3d56"})),z||(z=bt.createElement("path",{d:"M892.02 561.77c1-1.15.67-2.85.26-4.28-.16-.54-.32-1.07-.5-1.6l13.09-4.42c0 1.17.1 2.34.15 3.51a76.05 76.05 0 0 0 2.12 14.62c3.27 13.25 10.14 25.73 10.81 39.36.15 3.14-.18 6.65-2.5 8.77a6.19 6.19 0 0 1-5.42 1.44c-1.89-.41-4.34-1.78-4.71-3.69-2.59-13.25-7-26.06-10.81-39q-1.8-6-3.25-12.16a2.54 2.54 0 0 1 0-1.61 4.88 4.88 0 0 1 .76-.94z",opacity:.05})),v||(v=bt.createElement("path",{d:"M928.2 613.76c1 1.78 2.61 3.36 2.85 5.4a30.92 30.92 0 0 1-.23 3.71 11.64 11.64 0 0 0 .55 3q1.9 6.9 4.4 13.62a3.73 3.73 0 0 1 .35 1.85 3.26 3.26 0 0 1-2.17 2.16c-3.11 1.33-6.63 1.24-10 1.1a5.23 5.23 0 0 1-2.82-.66c-1.21-.83-1.51-2.47-1.59-3.93-.23-4.25.49-8.52 0-12.75-.16-1.54-.49-3.06-.73-4.58a13.43 13.43 0 0 1 .2-6.4 14.65 14.65 0 0 1 2.39-4 12.52 12.52 0 0 1 3.33-3.32c.4-.24 1.53-1 1.93-.51.21.23.12.85.15 1.14a11.37 11.37 0 0 0 .23 1.32 10.85 10.85 0 0 0 1.16 2.85z",fill:"#ee8e9e"})),M||(M=bt.createElement("path",{d:"M903.03 505.05a3.62 3.62 0 0 1 .25 3c-.44 1.81-1.16 3.54-1.75 5.31a73.87 73.87 0 0 0-2.26 9.65c-.55 2.95-1.71 6.23-1.23 9.2a65.55 65.55 0 0 0-7 21.81c-.27 1.95 4.07 4.48 4 6.45-.16 3.92-3.29 4.23-1 7.36.11.16-.87 3.66-.74 3.81.94 1.13 2.13 2 3.14 3.09a23.63 23.63 0 0 1 3.31 4.85c6 10.78 14.59 23 11.93 35a2.14 2.14 0 0 0 1.14 2.16 5.89 5.89 0 0 0 2.52.58h.42c2-2.14 2.27-5.42 2.13-8.38-.67-13.64-7.54-26.12-10.81-39.38a75.84 75.84 0 0 1-2.12-14.61c-.77-16.47-1.07-33.87 3.58-49.68 1-3.29 2.11-7 .37-10-1.1-1.86-3.13-3-5.14-3.76a33.1 33.1 0 0 0-25.69.66 8 8 0 0 0 0 1 10.13 10.13 0 0 1-.52 4.54 5.57 5.57 0 0 0-.51 2s-.24-2.65-.24-2.61c5.35.77 10.93 4.26 16.28 5a37.18 37.18 0 0 1 8.16 1.8 3.54 3.54 0 0 1 1.78 1.15z",opacity:.05})),g||(g=bt.createElement("path",{d:"M940.05 475.89c.72 2.29 1.36 4.6 1.9 6.93a5.66 5.66 0 0 1 .19 2.48 21.78 21.78 0 0 0-.74 2.29c-.12 1.23.73 2.31 1.21 3.46 1.21 2.92-.08 6.21-1.35 9.1l-3.79 8.57-3.1 7c-.92 2.09-1.84 4.18-2.73 6.29a204.49 204.49 0 0 0-9.88 29.61 3.63 3.63 0 0 1-.51 1.29c-.53.7-1.48.9-2.25 1.33a4.19 4.19 0 0 0-.46 6.69c-.44 5.15 3.42 10.12 5.41 14.89 4.57 11 3.74 23.32 5.32 35.1l-1.78-1c-1.71.78-1.65 3.2-2.56 4.83-1.38 2.46-4.75 2.81-7.56 2.62a5.9 5.9 0 0 1-2.53-.58 2.13 2.13 0 0 1-1.13-2.16c2.65-12-6-24.25-11.94-35a23.3 23.3 0 0 0-3.31-4.84c-1-1.07-2.19-2-3.14-3.1-2.63-3.16-3-7.62-2.79-11.73a65.72 65.72 0 0 1 7.47-27.7c-.47-3 .69-6.25 1.24-9.2a72.26 72.26 0 0 1 2.25-9.65c.59-1.77 1.31-3.5 1.75-5.31a3.62 3.62 0 0 0-.24-3 3.52 3.52 0 0 0-1.69-1.09 37.63 37.63 0 0 0-8.16-1.8l-18.38-2.64c-.59-3.78-1.19-8-.78-11.78a18.11 18.11 0 0 1 13-15.16 2.73 2.73 0 0 1 2.39.15 95.83 95.83 0 0 1 48.67 3.11z",fill:"#3f3d56"})),k||(k=bt.createElement("path",{d:"M923.35 376.5a9 9 0 0 0 .8 5.26 8.22 8.22 0 0 0 2.09 2.31 15.49 15.49 0 0 0 6.06 3c1.3.33 2.76.55 3.62 1.59 1.29 1.56.43 3.91-.67 5.61-1.9 3-4.55 5.65-7.94 6.57-2.71.74-5.61.29-8.38.77-2 .35-3.9 1.18-5.88 1.65a17.35 17.35 0 0 1-16-4.45c2.94-2.26 6-4.67 7.53-8.06a11.46 11.46 0 0 0 .57-7.7c-.71-2.51-2.3-5-1.8-7.52s3-4.32 5.51-5.19a35.34 35.34 0 0 1 6.93-1.4c1.29-.18 9.52-2 10-1.1.29.51-1.42 3.51-1.63 4.17a16.05 16.05 0 0 0-.81 4.49z",fill:"#a1616a"})),b||(b=bt.createElement("path",{d:"M923.35 376.5a9 9 0 0 0 .8 5.26 8.22 8.22 0 0 0 2.09 2.31 15.49 15.49 0 0 0 6.06 3c1.3.33 2.76.55 3.62 1.59 1.29 1.56.43 3.91-.67 5.61-1.9 3-4.55 5.65-7.94 6.57-2.71.74-5.61.29-8.38.77-2 .35-3.9 1.18-5.88 1.65a17.35 17.35 0 0 1-16-4.45c2.94-2.26 6-4.67 7.53-8.06a11.46 11.46 0 0 0 .57-7.7c-.71-2.51-2.3-5-1.8-7.52s3-4.32 5.51-5.19a35.34 35.34 0 0 1 6.93-1.4c1.29-.18 9.52-2 10-1.1.29.51-1.42 3.51-1.63 4.17a16.05 16.05 0 0 0-.81 4.49z",opacity:.05})),w||(w=bt.createElement("circle",{cx:913,cy:365.81,r:16.69,fill:"#a1616a"})),H||(H=bt.createElement("path",{d:"m921.81 393.4-11.31 1.9a42.37 42.37 0 0 1-8.46.85 24.2 24.2 0 0 0-4.66 0c-1.07.18-2.09.59-3.17.72-1.32.17-2.66-.08-4 .09-2.46.31-4.48 2-6.35 3.64-2.19 1.9-4.54 4.13-4.7 7a2 2 0 0 0 .13 1 2.93 2.93 0 0 0 .84.88c2.08 1.7 3.25 4.25 4.73 6.5a25.11 25.11 0 0 0 5.62 6.06c.5-.32 1.44.52 1.22 1.06s-.75.93-.93 1.49c-.4 1.28 1.18 2.22 1.83 3.4s.33 2.66.4 4 .67 2.93.87 4.43c.45 3.47-1.26 7.13 0 10.42a3.27 3.27 0 0 0-3.25 2.53 9.55 9.55 0 0 0 .13 4.44 6.11 6.11 0 0 0-3 5.58 1 1 0 0 1-.72 1.33 5.63 5.63 0 0 0-3.47 5.23 2.57 2.57 0 0 1-.1 1.11 2.44 2.44 0 0 1-.82.84 6.52 6.52 0 0 0-2.43 5.1 3.74 3.74 0 0 0 1.72 3.34 31.12 31.12 0 0 0 7.6 2.26 68.3 68.3 0 0 0 7.36 1.3 66 66 0 0 0 6.89.21l15.14-.06c4.25 0 8.51 0 12.76-.32 4-.26 8-.76 11.85.28.48-.81-.29-1.75-.76-2.57a8.61 8.61 0 0 1-.87-3.56l-.95-10.09a17.73 17.73 0 0 1-.08-4.18c.21-1.49.77-2.9 1.06-4.37.55-2.83 0-5.75.18-8.63a38.51 38.51 0 0 1 1.32-7.51l3-12.35a47.67 47.67 0 0 1 1.48-6.19q3.45-8.9 7.25-17.64a1.82 1.82 0 0 0-.13-1.56l-2.5-4.49a28.66 28.66 0 0 0-2.29-3.65 14.45 14.45 0 0 0-8.45-5.19 14.94 14.94 0 0 0-9.82 1.46c-1.17.62-2.25 1.39-3.44 2-2.01 1-4.46 2.06-6.72 1.91z",fill:"#f86d70"})),O||(O=bt.createElement("path",{d:"m881.65 404.39-3.94 5.26a6.7 6.7 0 0 0-.92 1.45c-.6 1.38-.27 3-.59 4.46a9.3 9.3 0 0 1-1.15 2.67 61.58 61.58 0 0 1-5 7.46 13.37 13.37 0 0 1-3.11 3.08 5.16 5.16 0 0 1-4.2.74 2.63 2.63 0 0 1 1.38 1.25 15.26 15.26 0 0 1 1 9.76 10 10 0 0 1-1.1 3.2 4.8 4.8 0 0 1-2.51 2.17 3.7 3.7 0 0 0 4.36 3.13 7.29 7.29 0 0 0 2.16-1.08l6.33-4.1a16.82 16.82 0 0 0 2.95-2.21c1.18-1.18 2-2.67 3.16-3.89 2-2.07 4.84-3.31 6.23-5.81.87-1.56 1-3.41 1.55-5.12.35-1.11.87-2.17 1.2-3.29a14.7 14.7 0 0 0-1.3-10.54c-1.63-3.25-4.16-5.83-6.5-8.59z",fill:"#f86d70"})),G||(G=bt.createElement("path",{d:"M896.51 356.3a21.88 21.88 0 0 1 5.87-6.11c3.11-2.33 6.7-4.26 10.59-4.48a11.26 11.26 0 0 1 4.76.78c.08-4.72 1.25-7.85 4.19-7.38 5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87c-3.59-2.58 1.7-22.12.3-26.31-2.09.45-5.93-9.63-8.12-19.88a10.35 10.35 0 0 1-4.75.48 5.72 5.72 0 0 0-1.7-.12 4.52 4.52 0 0 0-1.48.6 36.51 36.51 0 0 1-5.05 2.6c-3.62 1.35-7.61 1.17-11.46 1a11.36 11.36 0 0 1 1.62-8.19z",fill:"#3a3768"})),T||(T=bt.createElement("path",{d:"M896.51 356.3a21.88 21.88 0 0 1 5.87-6.11c3.11-2.33 6.7-4.26 10.59-4.48a11.26 11.26 0 0 1 4.76.78c.08-4.72 1.25-7.85 4.19-7.38 5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87c-3.59-2.58 1.7-22.12.3-26.31-2.09.45-5.93-9.63-8.12-19.88a10.35 10.35 0 0 1-4.75.48 5.72 5.72 0 0 0-1.7-.12 4.52 4.52 0 0 0-1.48.6 36.51 36.51 0 0 1-5.05 2.6c-3.62 1.35-7.61 1.17-11.46 1a11.36 11.36 0 0 1 1.62-8.19z",fill:"#3f3d56"})),L||(L=bt.createElement("path",{d:"M954.04 432.09a75.88 75.88 0 0 1-7.16-31.64c0-5.35.15-11.56-4-15-1.1-.91-2.59-1.81-2.53-3.24a5.11 5.11 0 0 1 .7-1.84 8.56 8.56 0 0 0-.28-7 24.24 24.24 0 0 0-4.18-5.85 11.63 11.63 0 0 1-2.91-4.55 9.94 9.94 0 0 1-.12-3.31c.41-4.18 1.64-8.55 0-12.44-2-5-7.81-7.12-13.16-8.05a3 3 0 0 1 1.44-.09c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.35 9.35 0 0 1-5.3 1 9.05 9.05 0 0 0 3.34-1zm-8.35 5.67a35.78 35.78 0 0 1-2.46-7.08 9.13 9.13 0 0 0 2.37 1.57 37.2 37.2 0 0 0 2 5.51 5.24 5.24 0 0 1-3.23.41 5.08 5.08 0 0 0 1.32-.41zm-29.92-91.27a11.52 11.52 0 0 0-3.18-.75h.38a11.18 11.18 0 0 1 2.82.21c-.01.16-.02.34-.02.54zm-11.36 17a36.62 36.62 0 0 0 5.06-2.6 4.44 4.44 0 0 1 1.48-.6 5.46 5.46 0 0 1 1.56.09 6.26 6.26 0 0 0-1.08.51 36.51 36.51 0 0 1-5.05 2.6 22.78 22.78 0 0 1-8.47 1.1 20.07 20.07 0 0 0 6.5-1.1zm12.99-3.6.09.45a9.8 9.8 0 0 1-2.48.07 11 11 0 0 0 2.39-.52z",opacity:.1})),C||(C=bt.createElement("path",{d:"M952.14 437.32a6.1 6.1 0 0 0 1.64 4.88 10.87 10.87 0 0 0 2.32 1.71 6.3 6.3 0 0 0 2.76 1 5.21 5.21 0 0 0 3.53-1.54c2.91-2.55 4.36-6.33 5.7-9.95a74.65 74.65 0 0 0 4.31-14.71c.82-5.43.47-11.06 2-16.33-1.38-2.76-2.26-5.8-3.83-8.46a39.86 39.86 0 0 1-2.64-4.95 17.1 17.1 0 0 1-.47-11.42 1.54 1.54 0 0 0-1.82.09 3.83 3.83 0 0 0-1.1 1.6 14.17 14.17 0 0 0-1.09 6.71 2.67 2.67 0 0 1-.19 1.64 2.06 2.06 0 0 1-1.78.75 15.8 15.8 0 0 1-4.12-.74 38.19 38.19 0 0 0-12.69-1.05 6 6 0 0 0-2.48.6 2.3 2.3 0 0 0-1.27 2.07l10.14 1.49a4.19 4.19 0 0 1 2.14.73 1.45 1.45 0 0 1 .29 2 4 4 0 0 1-.7.46 2.09 2.09 0 0 0 .08 3.34 2.14 2.14 0 0 1 .69.48c.42.56-.13 1.29-.31 2a2.48 2.48 0 0 0 1.22 2.53 8.92 8.92 0 0 0 2.83.95 29.82 29.82 0 0 1 5.8 2 3.18 3.18 0 0 1 1.51 1.13 3.39 3.39 0 0 1-.18 2.84l-2.64 7.12c-.42 1.12-.83 2.23-1.35 3.31-.67 1.39-1.5 2.7-2.19 4.09a40.83 40.83 0 0 0-1.65 4c-1.35 3.61-4 5.78-4.46 9.63z",fill:"#a1616a"})),I||(I=bt.createElement("path",{d:"M515.43 162.06v335.41a111.1 111.1 0 0 0-34.63-5.34c-49.87 0-90.37 35.29-90.37 85.16s40.5 84.77 90.37 84.77 90.62-36.72 90.62-90V339.14h263v158.33a111.05 111.05 0 0 0-34.63-5.34c-49.87 0-90.37 35.29-90.37 85.16s40.5 84.77 90.37 84.77 90.62-36.72 90.62-90v-410zm319 125h-263v-69h263zm-585-162v225.1a85.15 85.15 0 1 0 42.6 73.6v-213.4h85.4v-85.3zM226.6 652.62a54.34 54.34 0 0 0-15.65-5.54 71.57 71.57 0 0 0 11.71-2.63c10.17-3.22 15.3-7.54 11.45-9.65s-15.22-1.22-25.39 2a39.2 39.2 0 0 0-9.75 4.33c-1.05-2.23-3.91-4.82-8.37-7.27-9-5-21.18-7.47-27.12-5.59s-3.43 7.42 5.61 12.39a54.13 54.13 0 0 0 14 5.21 82.33 82.33 0 0 0-9.65 1.71c-11.07 2.66-17.47 6.67-14.3 9s14.73 2 25.8-.64a48.22 48.22 0 0 0 11.6-4.1c.91 2.3 3.82 5 8.52 7.61 9 5 21.18 7.47 27.12 5.59s3.42-7.46-5.58-12.42zm63.71-73.08a26.5 26.5 0 0 0-7.59-2.69 35.72 35.72 0 0 0 5.68-1.27c4.94-1.57 7.43-3.66 5.56-4.69s-7.39-.59-12.33 1a19.68 19.68 0 0 0-4.73 2.1c-.51-1.08-1.9-2.34-4.06-3.53-4.39-2.41-10.29-3.62-13.17-2.71s-1.66 3.61 2.72 6a26.21 26.21 0 0 0 6.82 2.52 41 41 0 0 0-4.69.84c-5.37 1.28-8.48 3.23-6.94 4.35s7.15 1 12.52-.31a23.78 23.78 0 0 0 5.64-2c.44 1.11 1.85 2.44 4.13 3.69 4.39 2.41 10.28 3.63 13.17 2.72s1.66-3.61-2.73-6.02zm-171.39-74.09a16.63 16.63 0 0 0-4.78-1.68 20.82 20.82 0 0 0 3.58-.8c3.09-1 4.65-2.29 3.48-2.93s-4.62-.37-7.71.61a12.28 12.28 0 0 0-3 1.31 5.85 5.85 0 0 0-2.54-2.2c-2.74-1.51-6.43-2.27-8.24-1.7s-1 2.25 1.71 3.76a16.29 16.29 0 0 0 4.27 1.58 24.63 24.63 0 0 0-2.94.53c-3.36.8-5.31 2-4.35 2.72s4.48.61 7.84-.19a14.94 14.94 0 0 0 3.53-1.25 5.57 5.57 0 0 0 2.58 2.31c2.75 1.51 6.44 2.27 8.24 1.7s1.07-2.26-1.67-3.77z",fill:"#a4a4a4"})),j||(j=bt.createElement("path",{d:"M364.43 125.06v71.3h-85.4v213.4a85.27 85.27 0 0 1-138.19 66.89 85.28 85.28 0 0 0 152.19-52.89v-213.4h85.4v-85.3z",opacity:.1})),Z||(Z=bt.createElement("path",{d:"m123.47 143.58.29 2.18 9.45 1.34s.77-.58 2-1.37c2.24-1.47 6-3.66 9.2-4.28 4.95-1 20.69-8.05 15.62-8.51s-4.55.59-4.55.59-5.59-5.49-11.36-.47c-4.38 3.81-14 7.91-18.39 9.66-1.4.55-2.26.86-2.26.86z",fill:"#efb7b9"})),P||(P=bt.createElement("path",{d:"M161.22 118.52a16 16 0 0 1 4.53-1.16 5.51 5.51 0 0 1 4.31 1.44c.61.63 1 1.44 1.6 2.08 2.88 3.08 8.47.78 11.94 3.17 2.13 1.48 2.79 4.27 3.55 6.76s2.14 5.22 4.68 5.75a13.88 13.88 0 0 0 3.69-.14 3.63 3.63 0 0 1 3.32 1.22c1.18 1.79-.45 4.78 1.26 6.06 1.53 1.13 4.3-.45 5.37 1.12a2.34 2.34 0 0 1-.37 2.6 18.07 18.07 0 0 0-1.74 2.18 3.3 3.3 0 0 0 3.25 4.82c1.08-.11 2.23-.72 3.17-.19a2.24 2.24 0 0 1 1 1.77 4.65 4.65 0 0 1-4.18 4.89c-1.84.12-3.53-.88-5.17-1.72s-3.57-1.55-5.27-.85a8.14 8.14 0 0 0-2.12 1.49 23.21 23.21 0 0 1-6.52 3.86c-2.08.82-4.5 1.31-6.5.29-2.25-1.15-3.41-3.95-5.79-4.8s-5.1.74-7.38 2.09-5.33 2.48-7.39.82c-2.22-1.79-1.54-5.38-2.89-7.89a7.75 7.75 0 0 0-2.17-2.39c-1.52-1.17-3.25-2.05-4.78-3.2a8 8 0 0 1-3.26-4.58c-.45-2.27.63-4.54 1.86-6.5s2.66-3.88 3.06-6.15c.3-1.7 0-3.47.39-5.15a6.35 6.35 0 0 1 4.12-4.35c1.12-.38 1.32-.28 1.89-1.27a4 4 0 0 1 2.54-2.07z",fill:"#3f3d56"})),F||(F=bt.createElement("path",{d:"M199.11 138.33a8.51 8.51 0 0 1 .18 3 8.11 8.11 0 0 1-.18-3zm4.28 11.45a3.27 3.27 0 0 0-.34 1.1 3.38 3.38 0 0 1 .12-2.8 17.79 17.79 0 0 1 1.74-2.17 3.69 3.69 0 0 0 .5-1l.08.09a2.34 2.34 0 0 1-.36 2.59 17.88 17.88 0 0 0-1.74 2.19zm-52.97-2.68c1.53 1.16 3.25 2 4.77 3.21a7.62 7.62 0 0 1 2.17 2.39c1.35 2.51.67 6.1 2.89 7.89 2.06 1.66 5.12.54 7.4-.82s4.88-3 7.37-2.09 3.54 3.65 5.8 4.8c2 1 4.41.52 6.5-.29a23.3 23.3 0 0 0 6.51-3.86 8.6 8.6 0 0 1 2.12-1.5c1.71-.69 3.64 0 5.28.86s3.33 1.84 5.16 1.72a4.7 4.7 0 0 0 4.15-4.11 3 3 0 0 1 .22.88 4.64 4.64 0 0 1-4.15 4.92c-1.83.12-3.53-.88-5.16-1.71s-3.57-1.55-5.28-.86a8.83 8.83 0 0 0-2.12 1.49 23.33 23.33 0 0 1-6.51 3.87c-2.08.81-4.51 1.3-6.5.29-2.26-1.15-3.41-3.95-5.8-4.8s-5.1.73-7.37 2.09-5.34 2.48-7.4.81c-2.22-1.79-1.54-5.37-2.89-7.89a7.7 7.7 0 0 0-2.17-2.38c-1.51-1.17-3.24-2.05-4.77-3.21a8 8 0 0 1-3.27-4.58 5.41 5.41 0 0 1-.1-1.2 8.36 8.36 0 0 0 3.15 4.08z",opacity:.1})),S||(S=bt.createElement("path",{d:"m154.47 199.04-3.43.73s3.38 5.56 8.59 1.91-5.16-2.64-5.16-2.64z",fill:"#4c4981"})),V||(V=bt.createElement("path",{d:"m154.47 199.04-3.43.73s3.38 5.56 8.59 1.91-5.16-2.64-5.16-2.64z",opacity:.1})),A||(A=bt.createElement("path",{d:"M228.92 250.79s4.76 2.46 9.19 5.31c3.18 2 6.19 4.27 7.17 5.94 2.36 4 13.83 8.34 13.83 8.34l11.38 8.66c2.68.89 5.29 4.15 6.36 5.61.32.44.51.72.51.72l4.56-.59 2.4-3.12s.61-6.88-4.13-6.8a6.52 6.52 0 0 1-2.67-.69c-5.1-2.25-12.23-9.35-12.23-9.35s-12.12-15.14-15.75-15.64a6 6 0 0 1-1.14-.29c-3.69-1.29-9-6.05-9-6.05zm-47.01 43.77c1.21 7.27 6.72 21.17 8.49 24.07 2.2 3.59 3.35 10.78 3.35 10.78l.65 5a5.8 5.8 0 0 0 .72 1.94 10.57 10.57 0 0 0 .64 1l9.13-2.81s-.53-2.1-1.33-4.51-2-5.44-3.14-6.56c-2.23-2.19-2.56-9.92-2.56-9.92s-1.86-14.86-2.43-16.73a25.8 25.8 0 0 1-1-5.48c-.09-1-.15-2.14-.16-3.43a70.09 70.09 0 0 0-1.44-11l-10.65 1.93-.28 11.91a7.94 7.94 0 0 0 .01 3.81z",fill:"#efb7b9"})),q||(q=bt.createElement("path",{d:"M276.85 284.65c.32.44.51.72.51.72l4.56-.59 2.4-3.12s.61-6.88-4.13-6.8a6.52 6.52 0 0 1-2.67-.69c-.39 2.06 1.92 3.77 1.92 3.77s1 .7.73 3.93c-.15 2.2-2.1 2.67-3.32 2.78z",opacity:.1})),D||(D=bt.createElement("path",{d:"M276.35 285.07c.3 1.11 3.18 2.74 5.18 3.76 1 .5 1.75.85 1.9.93.46.23 2.88-2.46 3.21-4.63s6.1-8.92 6.1-8.92a24.2 24.2 0 0 0 2.14-8.45c.22-2.95-1-3.19-2.45-2.52a9.69 9.69 0 0 0-2.74 2.15 7.32 7.32 0 0 1-3.55 1.84 17.37 17.37 0 0 0-5.11 2.18c-1.4.9-2.76 2-3 3-.53 2.13 1.89 3.93 1.89 3.93s1 .7.73 3.93-4.33 2.7-4.3 2.8z",fill:"#444053"})),N||(N=bt.createElement("path",{d:"M281.53 288.83c1 .5 1.75.85 1.9.93.46.23 2.88-2.46 3.21-4.63s6.1-8.92 6.1-8.92a24.2 24.2 0 0 0 2.14-8.45c.22-2.95-1-3.19-2.45-2.52-.24 2.34-.83 6.89-2 9.26-1.46 2.82-7.31 11.88-8.9 14.33zm-86.32 47.34-.09.17a10.57 10.57 0 0 0 .64 1l9.13-2.81s-.53-2.1-1.33-4.51c-3.61-1-8.79 5.31-8.79 5.31z",opacity:.1})),_||(_=bt.createElement("path",{d:"M194.6 342.97s7.62 2.67 11 2.26c2.61-.31 2.72-1.52 2.54-4-.06-.8-.14-1.72-.19-2.78-.17-4.4-1.94-5.29-1.94-5.29-2.9-7.6-11.25 2.6-11.25 2.6l.43.84a9.2 9.2 0 0 0-.85 4.15 12.12 12.12 0 0 0 .26 2.22z",fill:"#444053"})),U||(U=bt.createElement("path",{d:"M194.6 342.97s7.62 2.67 11 2.26c2.61-.31 2.72-1.52 2.54-4a8.07 8.07 0 0 1-6.21 1.78 24.43 24.43 0 0 1-7.59-2.26 12.12 12.12 0 0 0 .26 2.22z",opacity:.1})),B||(B=bt.createElement("path",{d:"m156.83 158.15 3 13 .61 2.68 5.51.7 5.68.72 6.18-2.24s1.72-5.88.3-10.29a6.52 6.52 0 0 0-2.86-3.77 6.35 6.35 0 0 1-1.19-.92 5.22 5.22 0 0 1-1-1.43 5.91 5.91 0 0 1-.53-2.07c-.31-3.51 1.91-7.35 1.91-7.35s-13.1-4.47-12.08-1.58c.67 1.87-1.18 5.13-2.56 7.19-.75 1.11-1.36 1.88-1.36 1.88z",fill:"#efb7b9"})),R||(R=bt.createElement("circle",{cx:168.65,cy:141.76,r:11.38,opacity:.1})),W||(W=bt.createElement("circle",{cx:168.6,cy:141.34,r:11.38,fill:"#efb7b9"})),X||(X=bt.createElement("path",{d:"M157.65 201.41c.54 2.51 3 6.46 3 6.46l15.89 3.9 11.35-11.88v-.08c-.35-1.11-4.68-15.12-1.55-18.57 3.28-3.59 2-13.72 2-13.72s-5.67-6.52-6.82-8.1-8.51-2.82-8.51-2.82c.37.5.71 1 1 1.43a14 14 0 0 1 1.81 3.84 5.74 5.74 0 0 1-.15 4.17 4.58 4.58 0 0 0-.39 1.07c-1.24 5.43-6.9 4.67-9.15 4.13-.58-.14-.94-.26-.94-.26l-5.41.17-3.4.11s1.55 26.78 1.18 28.91a3.42 3.42 0 0 0 .09 1.24z",fill:"#f86d70"})),K||(K=bt.createElement("path",{d:"m156.47 172.64 9.85-1.29h-.18c-.58-.14-.93-.26-.93-.26l-5.42.17-3.39.11s.02.44.07 1.27zm11.05 36.94 4.27 1.04 6.73-.88 1.75-1.83-12.75 1.67zm7.11 1.74 1.93.47.79-.83-2.72.36z",fill:"#925978"})),J||(J=bt.createElement("path",{d:"M157.65 201.41c2.54.26 4.88.39 4.88.39l13.09-.49v-13.67a19.39 19.39 0 0 0-5.28-3.48c-2.28-.79-5-3.21-4.46-9.59 0-.37.06-.75.11-1.14a14.68 14.68 0 0 0 .12-2.15 11.5 11.5 0 0 0-3.63-8.42 1.73 1.73 0 0 0-.19-.17l-2.13-9.92a2.12 2.12 0 0 0-.43.06c-.75 1.11-1.36 1.88-1.36 1.88l-1.57 3.44 3 13-3.4.11s1.55 26.78 1.18 28.91a3.42 3.42 0 0 0 .07 1.24z",opacity:.1})),Q||(Q=bt.createElement("path",{d:"m162.1 201.89 13.09-.48v-13.68a19.51 19.51 0 0 0-5.27-3.48c-2.41-.84-5.28-3.48-4.35-10.73a11.87 11.87 0 0 0-3.48-10.63l-.2-.17-2.13-9.92a4.61 4.61 0 0 0-3.37 1.93 8.45 8.45 0 0 1-.79 1.16 2 2 0 0 1-2.63.78c-1.38-.61-7.32-3.12-8.65-.66s-1.58 17.11-1.58 17.11a11.19 11.19 0 0 1 3.85 6.33c.91 4.19 2.43 4.29 2.43 4.29l1.64 12s1.49 2.61.38 4.05",fill:"#444053"})),Y||(Y=bt.createElement("path",{d:"m155.6 155.89 2.23 6.68 4.26.37-.2-.17-2.13-9.92a4.61 4.61 0 0 0-3.37 1.93 8.45 8.45 0 0 1-.79 1.11z",fill:"#444053"})),$||($=bt.createElement("path",{d:"m123.47 143.58.29 2.18 9.45 1.34s.77-.58 2-1.37c-1-.23-5.7-1.25-8.16-2-.91-.28-1.51-.52-1.53-.68s.06-.19.21-.31c-1.4.53-2.26.84-2.26.84z",opacity:.1})),ee||(ee=bt.createElement("path",{d:"M112.39 157.69s10.71 8.13 17.35 9.44c0 0 9.34 2.76 13 6l4-15.42-2.45-1.69s-2.93 1.81-5.45 1.21-5.31-1-5.31-1a41.06 41.06 0 0 0-6.79-1.86c-1.8-.15-1.07-2.49.73-3.73a3.91 3.91 0 0 1 .75-.42 2.32 2.32 0 0 0 3 .68 6.85 6.85 0 0 0 1.76-1.64 22.83 22.83 0 0 0 2-3s-5.59-1.2-8.37-2.06c-.91-.28-1.51-.52-1.53-.68-.08-.64 5-2.66 5-2.66s-4.34-2.1-6.1-.57c0 0 1.14.85.22 1.69s-12 9.37-12 9.37-5.47 2.69.19 6.34z",fill:"#444053"})),te||(te=bt.createElement("path",{d:"m121.6 149.8 5.93.85a3.91 3.91 0 0 1 .75-.42 2.32 2.32 0 0 0 3 .68 6.85 6.85 0 0 0 1.76-1.64 23.44 23.44 0 0 0 1.62-2.53s-5.59-1.2-8.37-2.06z",opacity:.1})),ae||(ae=bt.createElement("path",{d:"m121.94 149.32 6.31.91a2.32 2.32 0 0 0 3 .68c1.81-1 3.76-4.66 3.76-4.66s-5.59-1.2-8.37-2.06z",fill:"#444053"})),le||(le=bt.createElement("path",{d:"m239.43 242.89-10.51 7.95s4.76 2.46 9.19 5.31c3.87-2.62 7.52-5 10.29-7.21-3.69-1.34-8.97-6.05-8.97-6.05zm-57.52 51.67a35.61 35.61 0 0 0 7.7-1.84s1.94-.42 4.82-1.38c-.09-1-.15-2.14-.16-3.43a70.09 70.09 0 0 0-1.44-11l-10.65 1.93-.28 11.91a7.94 7.94 0 0 0 .01 3.81z",opacity:.1})),ce||(ce=bt.createElement("path",{d:"M162.93 246.24c2.14 3.17 8 16.65 8 16.65a57.34 57.34 0 0 0 4.46 6.87c2.33 2.93 3.94 9.52 5.71 14.79s-.52 4.28-.27 7 10.26-.8 10.26-.8 20.45-4.5 26.7-17 31.21-23.82 36.26-30.85-1.43-4.13-1.18-7.94-2.63-7-2.63-7-9.42-2.66-10.95-4.51-9.05-6.48-9.05-6.48-7.09-3.07-8-4.14-9.31-4.39-11.88-5-5.09-4.3-5.09-4.3-1.59.21-3.94-2.07-12.21-4.24-12.21-4.24c-16.83 12.4-28.46 10.67-28.46 10.67l-.27 2.34c-8.95 11.66.4 32.84 2.54 36.01z",fill:"#444053"})),re||(re=bt.createElement("path",{d:"M160.39 210.21s14.55 4.79 28.74-12.93c-16.84 12.34-28.47 10.61-28.47 10.61zm25.04 8.27s19.54 28.21 20.75 29.24-19.72-29.59-20.75-29.24zm-9.03-2.16s13.53 21 13.26 23.84c0 0-13.06-20.19-13.26-23.84zm-7.88 5.77s2.5 11.75-1.26 18.41zm-5.2.68s-.16 10.17-1.3 12.26zm33.14-9.07 17.97 7.04-6.58.86-11.39-7.9zm-35.38-78.67c.9.6 1.65 1.55 2.72 1.69a4.28 4.28 0 0 0 2.21-.54c1.79-.78 3.81-1.38 5.67-.77 2.64.87 4.09 3.91 6.72 4.81a4.79 4.79 0 0 0 2.52.14 4.88 4.88 0 0 0 1.42-.58 4.57 4.57 0 0 0 2-2.84 5.88 5.88 0 0 0-2-5.54 12.27 12.27 0 0 0-5.59-2.54c-5.28-1.17-10.77-.78-16.16-.37a2.35 2.35 0 0 0-1.26.33c-.82.61-2.22 3.68-1.93 4.72.4 1.35 3.53.35 3.68 1.49z",opacity:.1})),ne||(ne=bt.createElement("path",{d:"M161.03 134.61c.9.59 1.64 1.55 2.72 1.69a4.23 4.23 0 0 0 2.2-.55c1.79-.78 3.82-1.38 5.67-.77 2.64.88 4.09 3.92 6.72 4.81a4.7 4.7 0 0 0 2.52.14 4.6 4.6 0 0 0 1.42-.57 4.68 4.68 0 0 0 2.06-2.84 5.91 5.91 0 0 0-2.05-5.55 12.31 12.31 0 0 0-5.59-2.53c-5.28-1.18-10.76-.78-16.16-.38a2.38 2.38 0 0 0-1.26.34c-.81.6-2.22 3.68-1.93 4.72.4 1.39 3.53.33 3.68 1.49z",fill:"#3f3d56"})),ie||(ie=bt.createElement("path",{d:"m230.6 142.98 1.72 6.95 2.23-1.35 12.12-7.31s9.18-.34 9.89-7.72-10.2-.07-10.78.49-1.9 1.55-1.9 1.55l-11.28 6.3z",fill:"#efb7b9"})),se||(se=bt.createElement("path",{d:"m230.6 142.98 1.72 6.95 2.23-1.35c-.49-3.14-1.26-6-2-6.7zm-59.82 45.44 2.47 14.5 14.62-3.03c-.35-1.11-4.68-15.12-1.55-18.57 3.28-3.59 2-13.72 2-13.72s-5.67-6.52-6.82-8.1-8.51-2.82-8.51-2.82a5.91 5.91 0 0 1-.53-2.07 8.32 8.32 0 0 0-.56 1.55c0 2.64 1.07 4.46 3.9 5.79.25.12.51.23.79.34.44.18.93.35 1.45.51l.24.07c4.71 1.4 5.73 4.22 5.73 4.22a10.79 10.79 0 0 1 2.14 7.6c-.46 4.45-15.37 13.73-15.37 13.73z",opacity:.1})),oe||(oe=bt.createElement("path",{d:"m171.6 188.31 2.47 14.49 16.53-3.44s-.5-5.47-1.65-7.69-.92-10.89-.92-10.89c7-7.54 3.32-13.67 3.32-13.67s20.57-3.34 20.92-4 7.21-4.32 7.21-4.32 7.45-1.91 8.46-3a9 9 0 0 1 1.22-1.11 3.21 3.21 0 0 1 .4-.26l.55 4.75h.25a6.77 6.77 0 0 0 3.24-1.28c1.7-1.3-.45-15.55-2.1-16.05a1.9 1.9 0 0 0-.95 0 10.74 10.74 0 0 0-3.55 1.92l-.29.23-.1.09s-9.31 3.65-11.17 5.33-16.34 3.81-16.34 3.81-6.49 1.54-7.33.61-10.75-2.45-11.58-1-3.13 1.19-3.13 1.19c-1.63-1.88-2.76-1.15-3.45-.07a7.55 7.55 0 0 0-.88 2.09c0 2.88 1.27 4.77 4.69 6.13.52.2 1.08.4 1.69.58 4.72 1.4 5.73 4.22 5.73 4.22a10.77 10.77 0 0 1 2.15 7.6c-.45 4.46-15.39 13.74-15.39 13.74z",fill:"#444053"})),me||(me=bt.createElement("path",{d:"M230.6 141.89a1.54 1.54 0 0 1 .53.06c1.65.5 3.79 14.76 2.09 16.06a6.7 6.7 0 0 1-2.89 1.25h-.25l-.55-4.75a3.21 3.21 0 0 0-.4.26v-.2a12.34 12.34 0 0 0-2.35-10.55z",opacity:.1})),de||(de=bt.createElement("path",{d:"m229.52 154.49.55 4.75a6.65 6.65 0 0 0 3.53-1.35c1.7-1.3-.45-15.55-2.1-16.05-1.3-.4-3.59 1.22-4.5 1.91a12.36 12.36 0 0 1 2.52 10.74zm-52.06 7.65 2.37-2.22-6.18-6a7.55 7.55 0 0 0-.88 2.09c.02 2.88 1.27 4.77 4.69 6.13z",fill:"#444053"})),fe||(fe=bt.createElement("path",{d:"M160.92 133.76c.9.59 1.64 1.55 2.72 1.69a4.23 4.23 0 0 0 2.2-.55c1.79-.78 3.82-1.38 5.67-.77 2.64.88 4.09 3.92 6.72 4.81a4.7 4.7 0 0 0 2.52.14 4.57 4.57 0 0 0 3.48-3.41 4.55 4.55 0 0 0 .11-1.27 4.74 4.74 0 0 1 0 2.12 4.64 4.64 0 0 1-2.06 2.84 4.5 4.5 0 0 1-1.42.57 4.66 4.66 0 0 1-2.51-.14c-2.64-.89-4.09-3.93-6.73-4.81-1.85-.61-3.88 0-5.67.77a4.23 4.23 0 0 1-2.2.55c-1.07-.14-1.82-1.1-2.72-1.69-.15-1.16-3.28-.1-3.67-1.49a1.66 1.66 0 0 1 0-.64c.62 1.07 3.41.19 3.56 1.28zm9.68 32.73s-1.31 3.68.36 4.92c0 0-1.83-4.87-2.89-4.76",opacity:.1})),pe||(pe=bt.createElement("path",{d:"M252.05 130.65s-8.45 7.31-2.34 8.49 2.34-8.49 2.34-8.49z",fill:"#efb7b9"})),he||(he=bt.createElement("path",{d:"M821.44 333.14h-263v232.94c0 53.26-40.75 90-90.62 90a100.13 100.13 0 0 1-34.82-6.11 97.54 97.54 0 0 0 47.82 12.11c49.87 0 90.62-36.72 90.62-90V339.14h250zm-263.02-52.09h13v-63.01h250.02v-6H558.42v69.01zm319.01-118.99v404c0 53.26-40.75 90-90.62 90a100.13 100.13 0 0 1-34.82-6.11 97.54 97.54 0 0 0 47.82 12.11c49.87 0 90.62-36.72 90.62-90v-410z",opacity:.1})),ye||(ye=bt.createElement("path",{d:"M579.83 69.89c6.45 13.33 17 28.49 28.93 22.7s20.84-30.35 14.39-43.7-21.39-19.42-33.35-13.63-16.43 21.32-9.97 34.63z",fill:"#a4a4a4"})),ue||(ue=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a3.57 3.57 0 0 0-.28-.49 6.17 6.17 0 0 1-.89-2.48 9 9 0 0 1 .11-3.09l-6.35-.42s2.47 2.1 2.18 3.2a.63.63 0 0 1-.29.38 1 1 0 0 1-.42.18l-.48.14c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",fill:"#a4a4a4"})),Ee||(Ee=bt.createElement("path",{d:"m601.28 95.82 4.48.62a5.58 5.58 0 0 1-.13-.69c-1.14-.05-2.93-.2-4.06-.31a.63.63 0 0 1-.29.38z",fill:"#444053"})),xe||(xe=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a7.2 7.2 0 0 1-2.75.11 6.09 6.09 0 0 1-3.67-2.69c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",fill:"#a4a4a4"})),ze||(ze=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a7.2 7.2 0 0 1-2.75.11 6.09 6.09 0 0 1-3.67-2.69c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",opacity:.1})),ve||(ve=bt.createElement("path",{d:"M601.97 36.66s7.1-.86 9.11 3.87a5.71 5.71 0 0 0-2.55.15 3.62 3.62 0 0 1-1.66.32 9.52 9.52 0 0 0-4.9-4.34z",fill:"#fff",opacity:.1})),Me||(Me=bt.createElement("path",{d:"M609.6 133.04a2.51 2.51 0 0 0 .4-.4 5.41 5.41 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 9.27 9.27 0 0 1 2-.6 8 8 0 0 1 1-.11l-.9-4.3v-.06l-.39-1.87a13.58 13.58 0 0 1-.9 1.57c-.46.7-1 1.37-1.6 1.38a.71.71 0 0 1-.45-.17 1.36 1.36 0 0 1-.28-.36c-.1-.16-.18-.3-.27-.43-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",fill:"#a4a4a4"})),ge||(ge=bt.createElement("path",{d:"M611.6 131.44a5.33 5.33 0 0 1 .63-.32c-.22-.93-.49-2.33-.68-3.43v-.23c0-.08 0-.23-.06-.33a.71.71 0 0 1-.45-.17l.1.67v.27z",fill:"#444053"})),ke||(ke=bt.createElement("path",{d:"M609.6 133.04a7.21 7.21 0 0 1-.84-2.62 5.68 5.68 0 0 1 .19-1.66c.05-.16.09-.32.15-.47a4.87 4.87 0 0 1 1.26-2.12c-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",fill:"#a4a4a4"})),be||(be=bt.createElement("path",{d:"M609.6 133.04a7.21 7.21 0 0 1-.84-2.62 5.68 5.68 0 0 1 .19-1.66c.05-.16.09-.32.15-.47a4.87 4.87 0 0 1 1.26-2.12c-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",opacity:.1})),we||(we=bt.createElement("path",{d:"M566.35 91.89c5.4 3.47 11.63 6.83 17.55 8.61 4.55 1.38 8.91 1.82 12.56.66a11.51 11.51 0 0 0 4.26-2.46 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-2.34-7-6.22-13.2-11.33-16.48-12.46-8-28.38-5.4-35.56 5.79s-2.89 26.73 9.57 34.73z",fill:"#a4a4a4"})),He||(He=bt.createElement("path",{d:"M566.35 91.89c5.4 3.47 11.63 6.83 17.55 8.61 4.55 1.38 8.91 1.82 12.56.66a11.51 11.51 0 0 0 4.26-2.46 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-2.34-7-6.22-13.2-11.33-16.48-12.46-8-28.38-5.4-35.56 5.79s-2.89 26.73 9.57 34.73z",opacity:.1})),Oe||(Oe=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a4.27 4.27 0 0 0-.49-.28 5.58 5.58 0 0 1-1.59-1.13c-.16-.16-.32-.33-.47-.51a9.36 9.36 0 0 1-1.12-1.77 7.42 7.42 0 0 1-.39-.93l-5.64 3a12.79 12.79 0 0 1 1.77.43c.81.26 1.61.64 1.76 1.16a.63.63 0 0 1 0 .48 1.19 1.19 0 0 1-.27.37 4.94 4.94 0 0 0-.33.37c-1.14 1.33-.09 1.68-.09 1.68z",fill:"#a4a4a4"})),Ge||(Ge=bt.createElement("path",{d:"m598.18 102.89 4.13-1.82c-.16-.16-.32-.33-.47-.51-1 .54-2.59 1.35-3.62 1.85a.63.63 0 0 1-.04.48z",fill:"#444053"})),Te||(Te=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a6.91 6.91 0 0 1-2.29 1.52 6.09 6.09 0 0 1-4.52-.37c-1.1 1.37-.05 1.72-.05 1.72z",fill:"#a4a4a4"})),Le||(Le=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a6.91 6.91 0 0 1-2.29 1.52 6.09 6.09 0 0 1-4.52-.37c-1.1 1.37-.05 1.72-.05 1.72z",opacity:.1})),Ce||(Ce=bt.createElement("path",{d:"M567.88 52.01s5.61-4.43 9.79-1.45a5.76 5.76 0 0 0-2.09 1.46 3.63 3.63 0 0 1-1.26 1.14 9.53 9.53 0 0 0-6.44-1.15z",fill:"#fff",opacity:.1})),Ie||(Ie=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"m628.16 98.66-1.3-6.23a12 12 0 0 1-.9 1.57 11.26 11.26 0 0 0 1.2 4.78 7 7 0 0 1 1-.12z"}),bt.createElement("path",{d:"M622.6 101.3a3 3 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.21 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 7 7 0 0 1 1-.12l-1.3-6.23a12 12 0 0 1-.9 1.57c-.46.7-1.05 1.38-1.6 1.39a.73.73 0 0 1-.44-.18 1.23 1.23 0 0 1-.31-.32c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1.03 2.1 2.64.73z"}),bt.createElement("path",{d:"M624.52 99.69a5.33 5.33 0 0 1 .63-.32c-.26-1.09-.58-2.86-.79-4a.73.73 0 0 1-.44-.18zm-1.92 1.61a7.33 7.33 0 0 1-.84-2.63 6.14 6.14 0 0 1 1.61-4.25c-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1 2.14 2.61.77z"}),bt.createElement("path",{d:"M622.6 101.3a7.33 7.33 0 0 1-.84-2.63 6.14 6.14 0 0 1 1.61-4.25c-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1 2.14 2.61.77z",opacity:.1}))),je||(je=bt.createElement("path",{d:"M621.78 100.06a2.51 2.51 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 7 7 0 0 1 1-.12l-1.3-6.23a12.74 12.74 0 0 1-.9 1.57c-.46.7-1 1.38-1.6 1.38a.66.66 0 0 1-.44-.17 1.38 1.38 0 0 1-.29-.36c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s1.01 2.14 2.62.76z",fill:"#a4a4a4"})),Ze||(Ze=bt.createElement("path",{d:"M623.7 98.46a5.33 5.33 0 0 1 .63-.32c-.26-1.09-.58-2.86-.79-4a.66.66 0 0 1-.44-.17z",fill:"#444053"})),Pe||(Pe=bt.createElement("path",{d:"M621.78 100.06a7.21 7.21 0 0 1-.84-2.62 6.14 6.14 0 0 1 1.66-4.25c-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s.95 2.14 2.56.76z",fill:"#a4a4a4"})),Fe||(Fe=bt.createElement("path",{d:"M621.78 100.06a7.21 7.21 0 0 1-.84-2.62 6.14 6.14 0 0 1 1.66-4.25c-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s.95 2.14 2.56.76z",opacity:.1})),Se||(Se=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"M616.6 81.89a11.41 11.41 0 0 0 4.62 1.71 8.39 8.39 0 0 1 .46-.9l-5.88-2.44a12 12 0 0 1 .8 1.63z"}),bt.createElement("path",{d:"M618.6 90.52s2.33.39 2.11-1.72a3.24 3.24 0 0 0-.11-.56 5.53 5.53 0 0 1-.14-1.93 5.36 5.36 0 0 1 .1-.7 9.63 9.63 0 0 1 1.1-2.89l-5.88-2.44a12 12 0 0 1 .82 1.61c.32.78.54 1.65.24 2.1a.69.69 0 0 1-.4.27 1.06 1.06 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.73 2.73 4.48 5.26 4.48 5.26z"}),bt.createElement("path",{d:"m616.4 84.28 4 2a5.36 5.36 0 0 1 .1-.7c-1.06-.41-2.7-1.14-3.74-1.6a.69.69 0 0 1-.36.3zm2.2 6.24s2.33.39 2.11-1.72a7.2 7.2 0 0 1-2.64-.78 6.16 6.16 0 0 1-2.61-3.73c-1.76 0-1.36 1-1.36 1-.71 2.7 4.5 5.23 4.5 5.23z"}),bt.createElement("path",{d:"M618.6 90.52s2.33.39 2.11-1.72a7.2 7.2 0 0 1-2.64-.78 6.16 6.16 0 0 1-2.61-3.73c-1.76 0-1.36 1-1.36 1-.71 2.7 4.5 5.23 4.5 5.23z",opacity:.1}))),Ve||(Ve=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a3.07 3.07 0 0 0-.11-.56 5.59 5.59 0 0 1-.14-1.94 5.21 5.21 0 0 1 .1-.69 8.17 8.17 0 0 1 .64-2 8.39 8.39 0 0 1 .46-.9l-5.88-2.45a12 12 0 0 1 .8 1.63c.32.79.54 1.65.24 2.11a.72.72 0 0 1-.4.26 1.23 1.23 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.69 2.73 4.5 5.25 4.5 5.25z",fill:"#a4a4a4"})),Ae||(Ae=bt.createElement("path",{d:"m615.99 83.66 4 2a5.21 5.21 0 0 1 .1-.69c-1.06-.41-2.7-1.14-3.74-1.6a.72.72 0 0 1-.36.29z",fill:"#444053"})),qe||(qe=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a7.44 7.44 0 0 1-2.64-.79 6.14 6.14 0 0 1-2.61-3.72c-1.76 0-1.36 1-1.36 1-.69 2.7 4.5 5.22 4.5 5.22z",fill:"#a4a4a4"})),De||(De=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a7.44 7.44 0 0 1-2.64-.79 6.14 6.14 0 0 1-2.61-3.72c-1.76 0-1.36 1-1.36 1-.69 2.7 4.5 5.22 4.5 5.22z",opacity:.1})),Ne||(Ne=bt.createElement("path",{d:"M595.09 117.28a12.41 12.41 0 0 1 .91-1.56c.48-.7 1.07-1.37 1.61-1.37a.63.63 0 0 1 .45.18 1.3 1.3 0 0 1 .28.35c.09.17.18.31.26.44 1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a3.68 3.68 0 0 0-.41.39 6.39 6.39 0 0 1-2.16 1.51 9 9 0 0 1-2 .57 6.36 6.36 0 0 1-1 .11z",fill:"#a4a4a4"})),_e||(_e=bt.createElement("path",{d:"M597.6 114.35a.63.63 0 0 1 .45.18l-.56-4.49a5.25 5.25 0 0 1-.63.31c.26 1.1.56 2.87.74 4z",fill:"#444053"})),Ue||(Ue=bt.createElement("path",{d:"M598.6 115.32c1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a7 7 0 0 1 .8 2.63 6.06 6.06 0 0 1-1.64 4.24z",fill:"#a4a4a4"})),Be||(Be=bt.createElement("path",{d:"M598.6 115.32c1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a7 7 0 0 1 .8 2.63 6.06 6.06 0 0 1-1.64 4.24z",opacity:.1})),Re||(Re=bt.createElement("path",{d:"M592.96 125.7a19.55 19.55 0 0 0 3-10c.48-.7 1.07-1.37 1.61-1.37a.63.63 0 0 1 .45.18 1.3 1.3 0 0 1 .28.35c.09.17.18.31.26.44 1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a3.68 3.68 0 0 0-.41.39 6.39 6.39 0 0 1-2.16 1.51 9 9 0 0 1-2 .57 13.44 13.44 0 0 0-1.85-2.78 22.81 22.81 0 0 0-8.9-5.87c1.4 8.87 4.01 18.21 8.88 23.45zm14.03 3.07a17.36 17.36 0 0 0 2.15-.48 18.83 18.83 0 0 0 1.91-.66l.41-.17c.53-.23 1.07-.48 1.61-.76s.81-.42 1.22-.65c7.61-4.39 15-13.22 18.3-22.18a29.11 29.11 0 0 0 1.79-7.62 20.49 20.49 0 0 0-.06-4.15 29.29 29.29 0 0 0-3.72-11.21c-.22-.37-.43-.72-.66-1.06-5-7.72-13.41-12.38-22.35-11.44 1.94 5.61 4.7 10.39 8.59 12.88.32.79.54 1.65.24 2.11a.72.72 0 0 1-.4.26 1.23 1.23 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.69 2.65 4.5 5.18 4.5 5.18s2.33.39 2.11-1.71a3.07 3.07 0 0 0-.11-.56 5.59 5.59 0 0 1-.14-1.94 5.21 5.21 0 0 1 .1-.69 8.17 8.17 0 0 1 .64-2 12.85 12.85 0 0 0 3.34 0 17.74 17.74 0 0 0 4.56-1.24c-.21.33-.4.66-.58 1a19.62 19.62 0 0 0-3 10c-.46.7-1 1.38-1.6 1.38a.66.66 0 0 1-.44-.17 1.38 1.38 0 0 1-.29-.36c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s1 2.14 2.61.76a2.51 2.51 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 12.74 12.74 0 0 0 1.87 2.77l.4.43-.14.13a79 79 0 0 0-8.87 9.44c-.81 1-1.59 2.1-2.28 3.18q-.74 1.13-1.38 2.25a19.67 19.67 0 0 0-2.94 10c-.46.7-1 1.37-1.6 1.38a.71.71 0 0 1-.45-.17 1.36 1.36 0 0 1-.28-.36c-.1-.16-.18-.3-.27-.43-1-1.44-1.63-.54-1.63-.54-1.14.5-1.58 1.86-1.75 3.23z",opacity:.1})),We||(We=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"M618.38 78.75a3.6 3.6 0 0 0 1.68.23 5.83 5.83 0 0 1 2.46.68c-.38-5.12-7.38-6.6-7.38-6.6a9.5 9.5 0 0 1 3.24 5.69zm-34.92 18.64c.13 1 .27 2.09.44 3.15 4.55 1.38 8.91 1.82 12.56.66.81.26 1.61.64 1.76 1.16a.63.63 0 0 1 0 .48 1.19 1.19 0 0 1-.27.37 4.94 4.94 0 0 0-.33.37c-1.12 1.37-.07 1.72-.07 1.72 1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a4.27 4.27 0 0 0-.49-.28 5.58 5.58 0 0 1-1.59-1.13c-.16-.16-.32-.33-.47-.51a9.36 9.36 0 0 1-1.12-1.77 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-13 1.84-22.02 15-20.23 29.5zm12.14 29.07a11.4 11.4 0 0 0 4.61 1.73 7.28 7.28 0 0 1 .47-.9l-5.9-2.4a13.86 13.86 0 0 1 .82 1.57z"}),bt.createElement("path",{d:"M597.6 135.08s2.34.4 2.11-1.71a3 3 0 0 0-.1-.56 5.61 5.61 0 0 1-.14-1.94 5 5 0 0 1 .09-.69 9 9 0 0 1 .64-2 7.28 7.28 0 0 1 .47-.9l-5.89-2.39a13.86 13.86 0 0 1 .8 1.62c.31.79.53 1.66.23 2.11a.66.66 0 0 1-.39.27 1.32 1.32 0 0 1-.46 0 4.53 4.53 0 0 0-.5 0c-1.77 0-1.37 1-1.37 1-.68 2.67 4.51 5.19 4.51 5.19z"}),bt.createElement("path",{d:"m595.42 128.89 4 2q0-.36.09-.69c-1.05-.41-2.7-1.14-3.74-1.6a.67.67 0 0 1-.35.29zm2.18 6.19s2.33.39 2.11-1.72a7.1 7.1 0 0 1-2.64-.78 6.1 6.1 0 0 1-2.61-3.72c-1.77 0-1.37 1-1.37 1-.69 2.7 4.51 5.22 4.51 5.22z"}),bt.createElement("path",{d:"M597.6 135.08s2.33.39 2.11-1.72a7.1 7.1 0 0 1-2.64-.78 6.1 6.1 0 0 1-2.61-3.72c-1.77 0-1.37 1-1.37 1-.69 2.7 4.51 5.22 4.51 5.22zm20.78-56.33a3.6 3.6 0 0 0 1.68.23 5.83 5.83 0 0 1 2.46.68c-.38-5.12-7.38-6.6-7.38-6.6a9.5 9.5 0 0 1 3.24 5.69z",opacity:.1}))),Xe||(Xe=bt.createElement("path",{d:"M584.9 98.21c1.81 14.7 6.88 32.44 20.07 30.81s29.52-22 27.71-36.71-14-25.28-27.18-23.65-22.42 14.86-20.6 29.55z",fill:"#a4a4a4"})),Ke||(Ke=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a4.44 4.44 0 0 0-.1-.56 5.37 5.37 0 0 1-.15-1.94c0-.23.06-.47.1-.69a9 9 0 0 1 1.11-2.89l-5.88-2.45s1.66 2.79 1 3.74a.69.69 0 0 1-.4.27 1.54 1.54 0 0 1-.45 0h-.5c-1.77 0-1.37 1-1.37 1-.66 2.72 4.53 5.23 4.53 5.23z",fill:"#a4a4a4"})),Je||(Je=bt.createElement("path",{d:"m596.85 129.67 4 2c0-.23.06-.47.1-.69-1.06-.41-2.7-1.14-3.74-1.6a.69.69 0 0 1-.36.29z",fill:"#444053"})),Qe||(Qe=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a7 7 0 0 1-2.64-.79 6.06 6.06 0 0 1-2.6-3.72c-1.77 0-1.37 1-1.37 1-.69 2.71 4.5 5.22 4.5 5.22z",fill:"#a4a4a4"})),Ye||(Ye=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a7 7 0 0 1-2.64-.79 6.06 6.06 0 0 1-2.6-3.72c-1.77 0-1.37 1-1.37 1-.69 2.71 4.5 5.22 4.5 5.22z",opacity:.1})),$e||($e=bt.createElement("path",{d:"M616.6 73.89s7 1.48 7.38 6.6a5.74 5.74 0 0 0-2.47-.67 3.64 3.64 0 0 1-1.67-.24 9.57 9.57 0 0 0-3.24-5.69z",fill:"#fff",opacity:.1})),et||(et=bt.createElement("path",{d:"M599.39 130.99a4.26 4.26 0 0 1 3.79 5.24c-.88 2.95-4.5 3.88-6.86 5.85s-3.49 5.12-3.78 8.19a20.08 20.08 0 0 0 5.77 15.88c2.12 2.09 4.68 3.69 6.77 5.81a34.58 34.58 0 0 1 5.85 8.92 20.88 20.88 0 0 1 2.59 7.5c.35 4.21-1.77 8.24-4.3 11.62s-5.56 6.44-7.52 10.18a21.39 21.39 0 0 0-1.23 16.77 2.17 2.17 0 0 0 .71 1.12.79.79 0 0 0 1.16-.25",fill:"none",stroke:"#444053",strokeMiterlimit:10})),tt||(tt=bt.createElement("path",{d:"M611.68 130.25a2 2 0 0 1 .09 2.54 3.09 3.09 0 0 1-2.44 1.13c-1.13 0-2.39-.35-3.32.31a2.87 2.87 0 0 0-1 2.17 11.07 11.07 0 0 1-.25 2.45 4.88 4.88 0 0 1-1.08 1.76 5.41 5.41 0 0 1-2 1.46c-1.67.65-3.6.06-5.31.6-2.25.71-3.46 3.14-4.14 5.4a15.55 15.55 0 0 0-.49 8.38 29 29 0 0 0 2.27 5.14 11.63 11.63 0 0 1 1.48 5.36 4.92 4.92 0 0 1-2.82 4.5m16.19 23.35c-2.69 3.58-3.71 9.3-8.11 10.17-2.27.45-4.52-.72-6.55-1.84-4.73-2.64-9.6-5.3-15-6.17s-11.36.38-14.9 4.49c-2.41 2.82-3.4 6.6-5.52 9.64a19.78 19.78 0 0 1-11.2 7.36 45.83 45.83 0 0 1-13.58 1.16c-1.69-.05-3.53-.18-4.79-1.3a11.66 11.66 0 0 1-2-3.05c-2.17-3.64-6.46-5.64-10.69-5.91s-8.41 1-12.32 2.61c-2 .82-4 1.76-6.14 1.55-3-.3-5.21-2.72-7.06-5.05a100 100 0 0 1-12.13-19.74",fill:"none",stroke:"#444053",strokeMiterlimit:10})),at||(at=bt.createElement("path",{d:"M497.91 603.42c1.07-3.89 1.77-7.31 1.77-7.31a15.3 15.3 0 0 1 2-7.41l.05-1.07.3-7.89a26.56 26.56 0 0 0-1.83-4.21c-1.33-2.53.45-11.57.45-11.57s5.76-12.61 4.79-20.78 12.2-35.68 12.2-35.68a35.38 35.38 0 0 0-.83-8 6.81 6.81 0 0 1-.09-1.68v-.14c.39-5.35 5-15.24 5-15.24l.17-19.16s-2.27-11.4 2.73-26.39c1.74-5.23 2.89-9.42 3.64-12.66.09-.37.17-.72.24-1.06-9-1.74-15.92-3.16-15.92-3.16s6.11-21.83 9.82-25.55 7-15.74 7-15.74 2.45-15.49-.37-20.15-2.9-12.57-2.9-12.57-6.64-5.22-7.41-7.46-2-7.25-1.9-9.87 1-4.93.81-6.31 2.25-6.54 1.2-9.06a7 7 0 0 1-.36-2.41v-.07a33.5 33.5 0 0 1 .85-6.44 18.24 18.24 0 0 1 6.9-3.35l.17-.59.44-1.53c.24-.15.47-.27.69-.38v-.56l.15-2.24-.88-5.07c-1.76-8.82 10-9.68 10-9.68a6.14 6.14 0 0 1 3.42-2.77c2.38-.74-.12 13.17-1.25 14-.85.64-3.57 4.93-4.88 7l-.22.35a4.89 4.89 0 0 1 .52.58l-.56 3-.09.46a12.63 12.63 0 0 1 1.74 3.25s-2.23 2.26-1.9 4.9a15.46 15.46 0 0 1-.94 6c.13-.13 1.7-1.7 3.18-1.25s5.63 1.87 5.63 1.87 3.11.68 2.8 1.35 2 3.8 2 3.8L555 316c.09-.24.19-.47.27-.72a19.67 19.67 0 0 0 .87-3.46 19.17 19.17 0 0 1-2.66-1 5.78 5.78 0 0 1-2.27-1.58 9 9 0 0 1-1.21-3.68c-.58-2.48-1.92-4.71-2.86-7.08a22.69 22.69 0 0 1-1.2-12.57 8.26 8.26 0 0 1 1.44-3.61c1.44-1.84 4-2.51 5.83-3.94s3.13-3.7 5.28-4.75c1.95-.95 4.28-.74 6.41-.3a34.3 34.3 0 0 1 11.76 4.79c1.2.77 2.51 1.67 3.93 1.46a5.29 5.29 0 0 0 3-2v-.11l.09-.11a14.85 14.85 0 0 1 1.07 6.35c0 .33 0 .67-.08 1v.35a1.43 1.43 0 0 0 0 .29 1.73 1.73 0 0 0 0 .45 3.23 3.23 0 0 0 .74 1.17 6 6 0 0 1 .65 1c0-.12-.06-.23-.1-.35a5 5 0 0 1 .77 2.69 2.68 2.68 0 0 1-.7 1.87 8.69 8.69 0 0 1-1.42 1.05 16 16 0 0 1-8.32 16.39c-.1.23-.21.47-.31.71a20.11 20.11 0 0 0-1.88 9.12c0 .22 0 .44.08.67a4.39 4.39 0 0 1 .28.36s13.88.67 17.27-2.17 8 7.56 8 7.56 4.95 1.15 6 .23 6.84.12 6.84.12a12.53 12.53 0 0 1 8.8-2.83 25.71 25.71 0 0 1 6.51-3.3h.16a7.19 7.19 0 0 1 3.14-.28s7.05-5.38 9.16-8.33 12-13.84 12.08-13.88l.05-.55.17-1.63a6.09 6.09 0 0 0 .85.11c.06-.16.13-.35.22-.56a29.77 29.77 0 0 1 2.19-4.55s.08-2.07-.51-2.61.57-8.09.57-8.09 6.7-14.15 11.81-3.2c0 0 10.15 7.36 1.09 15.12 0 0-3.55 1.55-4.1 2.87-.36.86-1.64 3.25-2.49 4.83-.15.26-.28.5-.39.71l.1.09-.18 1.34-.08.52c1.62 1 2.7 2 2.4 2.67a15.36 15.36 0 0 0-1.14 3.68s-12.68 14.68-14.5 21.1c0 0-33.19 18-43.91 19l1.48 9.71s.34 5.81.12 7.87.84 11.49.84 11.49 1.32 13.84 2.81 15.83.89 10.24.89 10.24a69.1 69.1 0 0 0 1.69 11.79c1.36 5.3 0 11.73 0 11.73s4.93 12.61-7.69 3.7c0 0-6.35-.64-13.66-1.17v.74c0 .94 0 2-.08 3-.17 7.11-.51 16.9-1.11 24.29-1.08 13.06-6.06 38.8-6.06 38.8l-.5 13a16.94 16.94 0 0 1 .23 3.73 24.16 24.16 0 0 1-4 12.89l-1.53 8.59s-2.56 5.62-2.74 9a4.28 4.28 0 0 0 .07.83 6.08 6.08 0 0 1 .06 1.34c0 3.94-2.75 13.28-2.75 13.28s-.51 9.5-2 10c-1.23.43 1.42 5.54 2.21 7a2.61 2.61 0 0 0 .06-.27l.17.3a6.73 6.73 0 0 1 .35 2.42 3.46 3.46 0 0 1-1.71 3.28c-2.77 1.54-4.27 2.87-2 3.5.87.25 1.8.34 2.49.63 0-.11.09-.22.13-.32a1.52 1.52 0 0 1 .87 1.71 7 7 0 0 1-1 3.19 34.14 34.14 0 0 1-4.12 6.87l-1.09-.16a5.33 5.33 0 0 0 .59 1.2 4.63 4.63 0 0 0 1.55 1.49 5 5 0 0 0 1.92.74 5.49 5.49 0 0 1 4 2.12c1.34 1.88 2.14 4.42-.75 6.51L564 612.44s-17.6 1.6-16.52-2.29 1.78-7.31 1.78-7.31A15.54 15.54 0 0 1 551 596a7.2 7.2 0 0 1 .66-1l-.62-.1s-.94-8.72-2.59-10.44c-.38-.4-.46-.7-.35-.92-.16-.48.29-.74.87-.87 0 .11.08.23.11.34a9.1 9.1 0 0 1 1.71-.12s.75-4.52-1-6.25a1.75 1.75 0 0 1-.31-1.36 7.42 7.42 0 0 1 .27-1.85l.06.11c1.09-4.09 4.49-10.52 4.49-10.52s.31-4.13-.77-5.82 1-22.45 1-22.45 0-10.07 1.42-14.71-1.18-10.25-1.18-10.25v-.3a.22.22 0 0 0 0-.07l.23-1.58v.1c.39-2.65 1.12-7.45 1.6-9.67.69-3.14.57-18.32.57-18.32l-2.32-6.58-5 11-5.38 14.63s-2.52 3.05-2.7 6.23v.47a8.26 8.26 0 0 1 0 1 8.84 8.84 0 0 1-1.68 5.25s-1.55 7-3.61 8.69-2.19 5.15-2.19 5.15-2.82 10.1-4 11.85c-1 1.47-1.23 5.62-1.27 6.89v.37s-.48 3.63-.58 6.7v1.09-.08a11.11 11.11 0 0 0 .2 2.49v.14-.51a25.88 25.88 0 0 1 .49 6.38c-.08 3.66-.8 8-3.12 10.44-4 4.26-6.41 3.62-6.41 3.62s1.64 5.58 3.87 6.77a1 1 0 0 1 .24.16c0-.1 0-.21.07-.32a2.69 2.69 0 0 1 .59 2.08c.07 2.43-1.61 6.31-3.14 8.06a4.51 4.51 0 0 1-2 1.05l.35.24c.28.16.53.29.77.4a3.66 3.66 0 0 0 1.15.34 5.43 5.43 0 0 1 4 2.12c1.35 1.88 2.15 4.42-.74 6.51l-10.32 3.12s-17.61 1.61-16.53-2.28z",transform:"translate(-50.4 -87.11)",fill:"url(#b)"})),lt||(lt=bt.createElement("path",{d:"m514.12 525.39 10-3.13c2.8-2.1 2-4.63.73-6.52a5.22 5.22 0 0 0-3.82-2.11 4.73 4.73 0 0 1-1.86-.74 4.45 4.45 0 0 1-1.5-1.49 7.27 7.27 0 0 1-1-3.85s-10.7-3.58-13.78-.53a8.15 8.15 0 0 0-1.38 1.87 16 16 0 0 0-1.65 6.92s-.68 3.41-1.72 7.31 15.98 2.27 15.98 2.27zm-48.03-6.71 10-3.13c2.8-2.1 2-4.63.73-6.51a5.18 5.18 0 0 0-3.83-2.11 3.91 3.91 0 0 1-1.11-.35 5 5 0 0 1-.74-.4c-2.71-1.62-2.54-5.29-2.54-5.29s-10.69-3.58-13.77-.53a7.9 7.9 0 0 0-1.09 1.37 15.63 15.63 0 0 0-1.94 7.42s-.69 3.42-1.73 7.31 16.02 2.22 16.02 2.22z",fill:"#2d293d"})),ct||(ct=bt.createElement("path",{d:"M502.89 507.02a8.15 8.15 0 0 0-1.38 1.87l16.14 2.5a7.27 7.27 0 0 1-1-3.85s-10.68-3.57-13.76-.52zm-49.11-5.34-.12 3c2.36 4.26 14.59 3.82 18.21 1.87a5 5 0 0 1-.74-.4c-2.7-1.59-2.53-5.26-2.53-5.26s-10.69-3.58-13.77-.53a7.9 7.9 0 0 0-1.05 1.32z",opacity:.1})),rt||(rt=bt.createElement("path",{d:"M452.35 488.52a26.62 26.62 0 0 1 1.77 4.21l-.42 10.88c2.58 4.65 17 3.69 19 1.28s4.34-8.8 2.18-10-3.74-6.77-3.74-6.77 2.32.64 6.21-3.62 3.16-14.09 2.56-16.46.4-10.19.4-10.19.07-5.52 1.24-7.26 3.91-11.86 3.91-11.86.13-3.44 2.13-5.16 3.5-8.69 3.5-8.69a9 9 0 0 0 1.61-5.87c-.28-3.46 2.62-7.07 2.62-7.07l5.25-14.7 4.84-11 2.19 6.65s.1 15.18-.57 18.33-1.82 11.52-1.82 11.52 2.54 5.61 1.12 10.25-1.39 14.7-1.39 14.7-2 20.76-1 22.45.74 5.82.74 5.82-6.12 11.91-4.39 13.63 1 6.25 1 6.25-3.85-.15-2.26 1.57 2.57 10.39 2.57 10.39l16.58 2.57a34.8 34.8 0 0 0 4-6.88c2.4-5-.23-4.57-2.43-5.2s-.74-2 1.94-3.51 1.31-5.33 1.31-5.33-3.74-6.91-2.34-7.41 1.91-10 1.91-10 3.18-11.19 2.61-14.25 2.6-10.25 2.6-10.25l1.3-8.64a23.85 23.85 0 0 0 3.66-16.27l.52-13.36s4.85-25.75 5.91-38.82c.67-8.36 1-19.81 1.17-26.95.09-4 .12-6.66.12-6.66l-59.27-8.49a48.54 48.54 0 0 1-1.42 8.8c-.73 3.25-1.85 7.44-3.54 12.67-4.86 15-2.67 26.39-2.67 26.39l-.19 19.16s-5.73 12.61-4.8 17.06a36.37 36.37 0 0 1 .8 8s-12.79 27.51-11.86 35.68-4.66 20.79-4.66 20.79-1.78 9.09-.5 11.62z",fill:"#3f3d56"})),nt||(nt=bt.createElement("path",{d:"m489.14 418.07-18-3.11s9.84 10.86 18 3.11z",opacity:.05})),it||(it=bt.createElement("path",{d:"M474.42 397.36s-.87 6.38 3 8.94c-.04 0-7.02-1.41-3-8.94zm1.89-20.35s14.67 13.05 20.21 12.23-20.21-12.23-20.21-12.23zm35.06 47.77s11.4 3.06 11.56 7.69-11.56-7.69-11.56-7.69z",opacity:.1})),st||(st=bt.createElement("path",{d:"M506.6 482.13s16.13 3.65 11.44 5.54a78.41 78.41 0 0 1-12.3 3.22s-5.25.11.86-8.76zm14.63 8.95a3.2 3.2 0 0 0 1.57-2.3l.16.3s1.37 3.77-1.31 5.32l-.87.53c-.48-.11-1-.2-1.49-.34-2.2-.64-.69-1.96 1.94-3.51zm-20.9-1.91c-.43-.43-.37-1.49-.05-2.84a7.65 7.65 0 0 1 .77 4 3.25 3.25 0 0 0-.72-1.16zm5.14-68.43a18.48 18.48 0 0 1 .9 5.1 20.71 20.71 0 0 0-1.12-3.53s.08-.61.22-1.57zm-36.94-8.67a6.45 6.45 0 0 1-.09-1.51c.16 1 .27 2 .34 2.84-.07-.44-.18-.88-.25-1.33zm35.45 57.65a8.89 8.89 0 0 1-.3-3.08 10.35 10.35 0 0 1 .65 3.9 3.89 3.89 0 0 0-.35-.82zm-4.38 25.85a53.63 53.63 0 0 1 1.58 8.53l16.58 2.57a34.8 34.8 0 0 0 4-6.88c.21-.44.38-.84.52-1.2 1 .5 1.33 1.55-.1 4.52a34.74 34.74 0 0 1-4 6.89l-16.58-2.57s-.91-8.73-2.5-10.45c-.82-.84-.28-1.23.5-1.41zm22.92-23.89s-.5 9.5-1.9 10c-.63-1.6-1-3.11-.41-3.33 1.4-.5 1.9-10 1.9-10s3.19-11.19 2.62-14.25 2.6-10.24 2.6-10.24l1.3-8.64a23.88 23.88 0 0 0 3.66-16.28l.51-13.36s4.86-25.75 5.91-38.81c.68-8.37 1-19.81 1.18-26.95 0-1.29.05-2.44.06-3.41l.48.07s0 2.66-.12 6.66c-.16 7.14-.5 18.59-1.17 26.95-1.06 13.07-5.91 38.82-5.91 38.82l-.52 13.36a23.85 23.85 0 0 1-3.66 16.27l-1.3 8.64s-3.17 7.19-2.6 10.25-2.63 14.25-2.63 14.25zm-50.24 29.52a16.17 16.17 0 0 0 2.89-6.45c1.64 1.6-.55 7.49-2.47 9.77s-16.41 3.37-19-1.28l.1-2.62c3.6 3.83 16.56 2.85 18.48.58zm-20.34-16.38a27.89 27.89 0 0 1 1.77 4.21l-.08 1.93c-.28-.71-.69-1.67-1.27-2.81a8.23 8.23 0 0 1-.47-3.43zm20.01 2.95a26.05 26.05 0 0 1-1.23-3.33s2.32.64 6.2-3.62c2.84-3.1 3.22-9.15 3-13.13.6 2.37 1.33 12.19-2.56 16.46-2.56 2.79-4.42 3.47-5.41 3.62zm8.36-30.27a72.28 72.28 0 0 0-.59 8.15c-.08-.53-.16-1-.24-1.29-.6-2.36.4-10.19.4-10.19s.08-5.51 1.25-7.26 3.9-11.85 3.9-11.85.13-3.45 2.13-5.16 3.51-8.7 3.51-8.7a9.07 9.07 0 0 0 1.6-5.87c-.28-3.46 2.62-7.07 2.62-7.07l5.26-14.7 4.83-11 2.23 6.57v2.1l-1.8-5.34-4.81 11-5.25 14.7s-2.9 3.61-2.62 7.07a9 9 0 0 1-1.61 5.87s-1.51 7-3.5 8.69-2.13 5.16-2.13 5.16-2.74 10.11-3.91 11.85-1.27 7.27-1.27 7.27z",opacity:.05})),ot||(ot=bt.createElement("path",{d:"m478.49 203.62.84 5.07-.14 2.24-.11 1.65 5.72.81.69-1.17c1.28-2.11 3.91-6.4 4.74-7 1.1-.86 3.53-14.77 1.22-14a6 6 0 0 0-3.31 2.78s-11.35.8-9.65 9.62z",fill:"#ffcdd3"})),mt||(mt=bt.createElement("path",{d:"m479.08 212.58 5.72.81.69-1.17a5.05 5.05 0 0 0-6.3-1.29z",opacity:.1})),dt||(dt=bt.createElement("path",{d:"m477.52 215.24 7.51 2 .21-1.12.54-3a5.22 5.22 0 0 0-7.3-1.29l-.43 1.54z",fill:"#dce6f2"})),ft||(ft=bt.createElement("path",{d:"m600.72 208.89 7.93 4.65.79-1.5c.83-1.58 2.07-4 2.42-4.83.53-1.32 4-2.88 4-2.88 8.78-7.77-1-15.11-1-15.11-4.93-10.95-11.44 3.21-11.44 3.21s-1.11 7.55-.55 8.09.49 2.6.49 2.6a30.15 30.15 0 0 0-2.13 4.56c-.36.73-.51 1.21-.51 1.21z",fill:"#ffcdd3"})),pt||(pt=bt.createElement("path",{d:"m600.72 208.89 7.93 4.65.79-1.5c-1.11-1-5-4.44-6.36-4.34a9.49 9.49 0 0 1-1.92 0c-.29.71-.44 1.19-.44 1.19z",opacity:.1})),ht||(ht=bt.createElement("path",{d:"m599.8 211.29 8.92 4.83.26-2 .18-1.34s-5.1-4.72-6.66-4.61a8.21 8.21 0 0 1-2.37-.1l-.17 1.64z",fill:"#dce6f2"})),yt||(yt=bt.createElement("path",{d:"M499.25 237.89s39.47 6 32.15 3.3c-5.09-1.88-7-5.23-7.31-8.89a20.73 20.73 0 0 1 1.83-9.11 39.25 39.25 0 0 1 3.82-7s-29.66-17.84-24.18-2.45a24.36 24.36 0 0 1 1.44 7.25 20.27 20.27 0 0 1-1.06 7.23 21.73 21.73 0 0 1-6.69 9.67z",fill:"#ffcdd3"})),ut||(ut=bt.createElement("path",{d:"M505.6 213.7a24.36 24.36 0 0 1 1.44 7.25c2.76 2.5 5.9 2.47 9.91 2.62 3.1.12 6.49 1 9-.39a39.25 39.25 0 0 1 3.82-7s-29.69-17.87-24.17-2.48z",opacity:.1})),Et||(Et=bt.createElement("circle",{cx:518.04,cy:208.24,r:16.4,fill:"#ffcdd3"})),xt||(xt=bt.createElement("path",{d:"M499.25 237.89s39.47 6 32.15 3.3c-5.09-1.88-7-5.23-7.31-8.89-1.89-2.21-5.8-3.91-8.31-4.83a11.91 11.91 0 0 0-7.18-.39 10.12 10.12 0 0 0-2.66 1.11 21.73 21.73 0 0 1-6.69 9.7zm-21.73-22.65 7.51 2 .21-1.12a6.7 6.7 0 0 0-7.19-2.77zm122.28-3.95 8.92 4.83.26-2a67.15 67.15 0 0 0-9-4.41zM479.72 337.16c15.26 3 37 7 40.49 6.09 2.91-.77 12.1-.32 20.08.26.09-4 .12-6.66.12-6.66l-59.27-8.49a48.54 48.54 0 0 1-1.42 8.8z",opacity:.1})),zt||(zt=bt.createElement("path",{d:"M464.6 332.97s50.22 10.62 55.71 9.18 33.27 1.42 33.27 1.42c12.21 8.88 7.46-3.72 7.46-3.72s1.35-6.43 0-11.72a71.88 71.88 0 0 1-1.61-11.79s.59-8.25-.85-10.24-2.7-15.83-2.7-15.83-1-9.42-.8-11.48-.11-7.87-.11-7.87l-1.42-9.71c10.38-1 42.53-19.06 42.53-19.06 1.77-6.41 14.06-21.12 14.06-21.12a15.61 15.61 0 0 1 1.1-3.68c.92-2.17-11.31-7-11.31-7s-9.67 10.94-11.71 13.89-8.88 8.35-8.88 8.35a6.75 6.75 0 0 0-3 .28h-.16a24.55 24.55 0 0 0-6.31 3.31 12 12 0 0 0-8.52 2.84s-5.62-1-6.62-.12-5.78-.22-5.78-.22-4.43-10.38-7.71-7.54-16.73 2.19-16.73 2.19c-1.69-2.45-6-4.33-8.68-5.31a11.91 11.91 0 0 0-7.18-.4 9.16 9.16 0 0 0-2.89 1.27l-8.46 7.67s-2.23-3.12-1.93-3.8-2.7-1.35-2.7-1.35-4-1.39-5.45-1.86-2.95 1.11-3.08 1.25a16.08 16.08 0 0 0 .92-6c-.31-2.63 1.84-4.89 1.84-4.89-4.36-12-15.63-2.54-15.63-2.54s-1.49 6.43-.48 8.95-1.4 7.67-1.18 9.06-.69 3.7-.79 6.32 1.09 7.63 1.83 9.86 7.16 7.45 7.16 7.45.11 7.87 2.83 12.53.33 20.15.33 20.15-3.22 12-6.82 15.74-9.55 25.54-9.55 25.54z",fill:"#3f3d56"})),vt||(vt=bt.createElement("path",{d:"M541.73 245.17s1.69-4.49 3.08-4.85a31.9 31.9 0 0 0 4.07-1.64l-.82-1.73s-5.23 1.22-6.12 2.71-.21 5.51-.21 5.51zm28.07-8.99c.23 1.38 12.44 3.1 12.44 3.1l-6-6.46h-.15a24.55 24.55 0 0 0-6.29 3.36zm-29.58 46.31c.14-.15-32.42 37.86-55.66 14.28.04 0 37.89 6.63 55.66-14.28z",opacity:.1})),Mt||(Mt=bt.createElement("path",{d:"M548.69 262.83a59.93 59.93 0 0 1-7.68 12.06 48.44 48.44 0 0 1-11.71 10.46s18.98-19.98 19.39-22.52zm6.91-21.36s-3.62 13.26-11.78 17.5zm4.7 1.54c.09-.25 2.35 10.69-10.94 16.18 0 0 5.62-1.67 10.94-16.18zm-80.79-12.12c.21 0-6.61 4-8.49 5.88 0 .02 4.58-6.29 8.49-5.88z",opacity:.1})),gt||(gt=bt.createElement("path",{d:"M521.9 223.28a3.43 3.43 0 0 1-1.36 2.16 3.32 3.32 0 0 1-1.56.29c-5 .12-10.22.14-14.77-2a5.58 5.58 0 0 1-2.19-1.58 9.16 9.16 0 0 1-1.17-3.67c-.56-2.48-1.86-4.71-2.76-7.08a23.4 23.4 0 0 1-1.14-12.51 8.47 8.47 0 0 1 1.39-3.62c1.4-1.84 3.84-2.51 5.65-3.95s3-3.7 5.12-4.75c1.89-1 4.14-.75 6.2-.31a32.39 32.39 0 0 1 11.38 4.78c1.16.77 2.43 1.66 3.81 1.46a5.3 5.3 0 0 0 2.91-2.07 15.07 15.07 0 0 1 1 7.19 3.26 3.26 0 0 0 0 1.08 3.36 3.36 0 0 0 .72 1.16c1.18 1.48 1.86 3.78.59 5.17-.55.62-1.38.93-1.92 1.55-1 1.11-.73 2.78-.76 4.26a2.19 2.19 0 0 1-.42 1.44 2.13 2.13 0 0 1-2 .4 5.68 5.68 0 0 0-2.15-.29 3.65 3.65 0 0 0-1.93 1.37c-2.51 2.83-3.53 6.02-4.64 9.52z",fill:"#3f3d56"})),kt||(kt=bt.createElement("path",{d:"M501.51 220.89a5.55 5.55 0 0 0 2.2 1.58c4.55 2.1 9.76 2.08 14.77 2a3.58 3.58 0 0 0 1.56-.29 3.43 3.43 0 0 0 1.36-2.17c1.11-3.49 2.13-6.68 4.55-9.53a3.61 3.61 0 0 1 1.93-1.37 5.68 5.68 0 0 1 2.15.29 2.11 2.11 0 0 0 2-.41 2.19 2.19 0 0 0 .42-1.44c0-1.47-.21-3.14.75-4.25.54-.63 1.37-.94 1.93-1.55a3.21 3.21 0 0 0 .44-3.27c.82 1.42 1.14 3.22.07 4.39-.56.61-1.39.93-1.93 1.55-1 1.11-.72 2.78-.75 4.26a2.19 2.19 0 0 1-.42 1.44 2.13 2.13 0 0 1-2 .4 5.73 5.73 0 0 0-2.15-.29 3.61 3.61 0 0 0-1.93 1.37c-2.42 2.85-3.45 6-4.55 9.54a3.43 3.43 0 0 1-1.36 2.16 3.32 3.32 0 0 1-1.56.29c-5 .12-10.22.14-14.77-2a5.55 5.55 0 0 1-2.2-1.58 4.46 4.46 0 0 1-.66-1.35zm32.82-22.65a2.37 2.37 0 0 1-.47-.85 3 3 0 0 1 0-1.07 15.25 15.25 0 0 0-.54-6l.09-.1a15.19 15.19 0 0 1 .95 7.19 5.29 5.29 0 0 0-.03.83zm-9.88 35.09s-20.59 1.92-22.31-1.23m-17.18-8.78s-11.38-.42-14 3.75",opacity:.1})))}},7632:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P,F,S,V,A,q,D,N,_,U,B,R,W,X,K,J,Q,Y,$,ee,te,ae,le,ce,re,ne,ie,se,oe,me,de,fe,pe,he,ye,ue,Ee,xe,ze,ve,Me,ge,ke,be,we,He,Oe,Ge,Te,Le,Ce,Ie,je,Ze,Pe,Fe,Se,Ve,Ae,qe,De,Ne,_e,Ue,Be,Re,We,Xe,Ke,Je,Qe,Ye,$e,et,tt,at,lt,ct,rt,nt,it,st,ot,mt,dt,ft,pt,ht,yt,ut,Et,xt,zt,vt,Mt,gt,kt,bt,wt,Ht,Ot,Gt,Tt,Lt,Ct,It,jt,Zt,Pt,Ft,St,Vt,At,qt,Dt,Nt,_t,Ut,Bt,Rt,Wt,Xt,Kt,Jt,Qt,Yt,$t,ea,ta,aa,la,ca,ra,na,ia,sa,oa,ma,da,fa,pa,ha,ya,ua,Ea,xa,za,va,Ma,ga,ka,ba,wa,Ha,Oa,Ga,Ta,La,Ca,Ia,ja,Za,Pa,Fa,Sa,Va,Aa,qa,Da,Na,_a,Ua,Ba,Ra,Wa,Xa,Ka,Ja,Qa,Ya,$a,el,tl,al,ll,cl,rl,nl,il,sl,ol,ml,dl,fl,pl,hl,yl,ul,El,xl,zl,vl,Ml,gl,kl,bl,wl,Hl,Ol,Gl,Tl,Ll,Cl,Il,jl,Zl,Pl,Fl,Sl,Vl,Al,ql,Dl,Nl,_l,Ul,Bl,Rl,Wl,Xl,Kl,Jl,Ql,Yl,$l,ec,tc,ac,lc,cc,rc,nc,ic,sc=a(7294),oc=["title","titleId"];function mc(){return mc=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,fc=dc(e,oc);return sc.createElement("svg",mc({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:1157.72,height:825.98,viewBox:"0 0 1157.72 825.98","aria-labelledby":a},fc),l||(l=sc.createElement("defs",null,sc.createElement("linearGradient",{id:"a",x1:418.19,y1:540.35,x2:418.19,y2:8.65,gradientUnits:"userSpaceOnUse"},sc.createElement("stop",{offset:0,stopColor:"gray",stopOpacity:.25}),sc.createElement("stop",{offset:.54,stopColor:"gray",stopOpacity:.12}),sc.createElement("stop",{offset:1,stopColor:"gray",stopOpacity:.1})),sc.createElement("linearGradient",{id:"b",x1:561.46,y1:451.84,x2:561.46,y2:451.78,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"c",x1:566.83,y1:511.15,x2:566.83,y2:451.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"d",x1:566.42,y1:505.23,x2:566.42,y2:500.93,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"e",x1:573.33,y1:463.86,x2:573.33,y2:457.49,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"f",x1:574.03,y1:466.6,x2:574.03,y2:461.87,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"g",x1:571,y1:471.64,x2:571,y2:465.77,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"h",x1:569.74,y1:476.81,x2:569.74,y2:472.34,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"i",x1:567.96,y1:482.09,x2:567.96,y2:474.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"j",x1:566.96,y1:483.74,x2:566.96,y2:478.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"k",x1:569.17,y1:486.56,x2:569.17,y2:482.56,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"l",x1:564.99,y1:495.8,x2:564.99,y2:488.04,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"m",x1:567.74,y1:493.71,x2:567.74,y2:490.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"n",x1:563.91,y1:502.03,x2:563.91,y2:492.66,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"o",x1:564.17,y1:508.32,x2:564.17,y2:497.03,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"p",x1:589.65,y1:508.24,x2:589.65,y2:461.7,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"q",x1:637.22,y1:511.4,x2:637.22,y2:460.75,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"r",x1:593.95,y1:510.51,x2:593.95,y2:460.75,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"s",x1:556.38,y1:511.14,x2:556.38,y2:451.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"t",x1:777.04,y1:810.07,x2:777.04,y2:679.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"u",x1:858.15,y1:793.9,x2:858.15,y2:586.42,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"v",x1:777.01,y1:463,x2:777.01,y2:384.85,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"w",x1:693.32,y1:655.8,x2:693.32,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"x",x1:784.01,y1:593.15,x2:784.01,y2:445.4,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"y",x1:789.52,y1:479.23,x2:789.52,y2:445.4,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"z",x1:769.72,y1:440.22,x2:769.72,y2:359.14,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"A",x1:784.01,y1:593.15,x2:784.01,y2:487.36,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"B",x1:782.08,y1:693.69,x2:782.08,y2:490.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"C",x1:782.08,y1:691.68,x2:782.08,y2:488.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"D",x1:693.32,y1:590.64,x2:693.32,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"E",x1:694.66,y1:588.64,x2:694.66,y2:521.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"F",x1:674.74,y1:658.97,x2:674.74,y2:490.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"G",x1:825.97,y1:775.45,x2:825.97,y2:736.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"H",x1:816.79,y1:771.83,x2:816.79,y2:736.81,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"I",x1:689.2,y1:658.97,x2:689.2,y2:646.08,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"J",x1:750.14,y1:810.91,x2:750.14,y2:648.09,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"K",x1:737.1,y1:796.17,x2:737.1,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"L",x1:735.05,y1:798.18,x2:735.05,y2:662.65,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"M",x1:735.05,y1:796.17,x2:735.05,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"N",x1:689.04,y1:772.24,x2:689.04,y2:735.53,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"O",x1:794.31,y1:747.43,x2:794.31,y2:707.65,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"P",x1:812.48,y1:784.44,x2:812.48,y2:758.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Q",x1:805.2,y1:833.36,x2:805.2,y2:759.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"R",x1:805.2,y1:833.36,x2:805.2,y2:804.2,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"S",x1:777.31,y1:739.49,x2:777.31,y2:736.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"T",x1:780.05,y1:750.13,x2:780.05,y2:747.43,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"U",x1:779.31,y1:746.18,x2:779.31,y2:743.48,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"V",x1:780.05,y1:755.44,x2:780.05,y2:752.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"W",x1:773.46,y1:760.94,x2:773.46,y2:758.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"X",x1:862.64,y1:812.46,x2:862.64,y2:774.6,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Y",x1:907.2,y1:814.39,x2:907.2,y2:760.44,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Z",x1:907.2,y1:798.12,x2:907.2,y2:761.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aa",x1:868.85,y1:763.68,x2:868.85,y2:611.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ab",x1:871.92,y1:789.8,x2:871.92,y2:611.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ac",x1:816.9,y1:761.86,x2:816.9,y2:744.66,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ad",x1:870.9,y1:789.8,x2:870.9,y2:602.69,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ae",x1:769.35,y1:651.44,x2:769.35,y2:638.6,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"af",x1:764.04,y1:663.34,x2:764.04,y2:657.71,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ag",x1:726.47,y1:530.38,x2:726.47,y2:504.12,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ah",x1:708.03,y1:538.2,x2:708.03,y2:512.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ai",x1:748.85,y1:773.83,x2:748.85,y2:726.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aj",x1:896.31,y1:743.48,x2:896.31,y2:740.78,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ak",x1:901.77,y1:771.66,x2:901.77,y2:768.96,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"al",x1:890.68,y1:721.79,x2:890.68,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"am",x1:885.78,y1:675.79,x2:885.78,y2:637.37,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"an",x1:848.29,y1:754.42,x2:848.29,y2:740.55,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ao",x1:864.81,y1:750.13,x2:864.81,y2:747.43,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ap",x1:846.19,y1:747.53,x2:846.19,y2:744.83,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aq",x1:881.19,y1:749.6,x2:881.19,y2:746.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ar",x1:886.06,y1:770.31,x2:886.06,y2:767.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"as",x1:889.38,y1:746.9,x2:889.38,y2:744.2,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"at",x1:893.72,y1:770.31,x2:893.72,y2:767.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"au",x1:872.64,y1:750.95,x2:872.64,y2:748.25,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"av",x1:876.21,y1:771.66,x2:876.21,y2:768.96,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aw",x1:856.52,y1:749.6,x2:856.52,y2:746.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ax",x1:806.51,y1:727.79,x2:806.51,y2:668.88,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ay",x1:814.59,y1:726.79,x2:814.59,y2:588.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"az",x1:850.17,y1:603.03,x2:850.17,y2:588.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aA",x1:852.9,y1:601.03,x2:852.9,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aB",x1:749.15,y1:577.5,x2:749.15,y2:490.97,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aC",x1:848.06,y1:581.05,x2:848.06,y2:488.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aD",x1:803.57,y1:585.21,x2:803.57,y2:369.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aE",x1:866,y1:427.4,x2:866,y2:413.47,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aF",x1:767.18,y1:450.76,x2:767.18,y2:418.27,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aG",x1:721.08,y1:477.69,x2:721.08,y2:430.35,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aH",x1:762.7,y1:532.98,x2:762.7,y2:519.25,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aI",x1:759.55,y1:491.42,x2:759.55,y2:466.23,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aJ",x1:850.33,y1:585.21,x2:850.33,y2:548.89,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aK",x1:885.57,y1:560.24,x2:885.57,y2:486.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aL",x1:811.63,y1:524.13,x2:811.63,y2:497.28,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aM",x1:749.16,y1:575.49,x2:749.16,y2:509.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aN",x1:798.41,y1:458.74,x2:798.41,y2:399.27,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aO",x1:778.83,y1:639.38,x2:778.83,y2:581.08,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aP",x1:777.81,y1:637.37,x2:777.81,y2:579.07,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aQ",x1:704.23,y1:625.68,x2:704.23,y2:592.01,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aR",x1:783.34,y1:573,x2:783.34,y2:552.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aS",x1:812.36,y1:782.25,x2:812.36,y2:768.97,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aT",x1:875.12,y1:811.72,x2:875.12,y2:787.42,xlinkHref:"#a"}))),void 0===t?sc.createElement("title",{id:a},"creativity"):t?sc.createElement("title",{id:a},t):null,c||(c=sc.createElement("ellipse",{cx:788.82,cy:768.45,rx:195.65,ry:26.54,fill:"#a4a4a4",opacity:.1})),r||(r=sc.createElement("ellipse",{cx:1029.06,cy:710.91,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),n||(n=sc.createElement("ellipse",{cx:1053.29,cy:821.13,rx:35.78,ry:4.85,fill:"#a4a4a4",opacity:.1})),i||(i=sc.createElement("ellipse",{cx:428.53,cy:755.65,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),s||(s=sc.createElement("ellipse",{cx:285.37,cy:705.99,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),o||(o=sc.createElement("path",{d:"M713 88.33c-49.68 31.15-114.14 29.13-170.58 12.93S434.09 56.2 379.07 35.7A580.66 580.66 0 0 0 235.56 2.19C165.45-5.01 87.15 3.76 38.29 54.11c-54.43 56.07-50.22 157.2 8.62 208.68 29.93 26.18 69.12 39 103.3 59.47s65.82 54.39 62.91 93.85c-2.7 36.52-34 64.55-66.44 82.14-25.06 13.59-55.93 28.43-58.95 56.58-2.92 27.24 23 48.59 47.81 60.72 80.84 39.6 180.43 39.22 261-1 28.73-14.35 55.14-33.43 85.27-44.62 79.11-29.36 166.28.2 250.05 11a556.31 556.31 0 0 0 212.63-13.84c41.48-11 83.12-27.75 112.26-59 21-22.53 34.11-51.05 46.4-79.21q19.67-45 37.8-90.73c7.25-18.28 14.4-36.92 16.27-56.48 3.4-35.44-10.91-70.48-30.4-100.39-46.26-71-124.17-121-208.51-133.65s-173.69 12.09-239.13 66.36",fill:"#a4a4a4",opacity:.1})),m||(m=sc.createElement("path",{fill:"url(#a)",d:"M109.49 8.65v531.7h617.4V8.65h-617.4z"})),d||(d=sc.createElement("path",{fill:"#f6f7f9",d:"M113.94 13.31h608.5v20.27h-608.5z"})),f||(f=sc.createElement("path",{fill:"#534d72",d:"M113.94 13.31h608.5v20.27h-608.5z"})),p||(p=sc.createElement("path",{fill:"#f6f7f9",d:"M113.94 33.58h608.5v502.1h-608.5z"})),h||(h=sc.createElement("ellipse",{cx:127.06,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),y||(y=sc.createElement("ellipse",{cx:139.42,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),u||(u=sc.createElement("ellipse",{cx:151.77,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),E||(E=sc.createElement("path",{fill:"#a4a4a4",d:"M257.92 64.54h320.55V74H257.92z",opacity:.2})),x||(x=sc.createElement("path",{fill:"#a4a4a4",d:"M535.88 64.54h42.59V74h-42.59z"})),z||(z=sc.createElement("path",{d:"M561.48 451.84s-.02-.06 0 0z",transform:"translate(-21.14 -37.01)",fill:"url(#b)"})),v||(v=sc.createElement("path",{d:"m545.41 505.14-4.68 3.16c0-2.21 8.23-11 8.23-11-2.13-1.2-9.67 4.68-9.67 4.68.89-3.85 7.55-8.51 7.55-8.51-.58-.3-5.72 2.3-5.72 2.3 1.68-3.55 8.61-8.69 8.61-8.69-.86-.55-5.93 1.64-6.17 1.74.27-.19 8.71-6.11 8-6.29s-7.14 1.15-7.14 1.15c-.5-2.26 10-12.91 10-12.91s1.31-1.85.84-1.36-5.34 2.18-5.34 2.18c.07-3.33 10.22-8.49 10.22-8.49l-4.62-.18 3-3.27c-.14.11-4.9 3.76-5 2.69s4.48-5.37 5.46-6 4-.12 4-.12-1.32-3.81-1.57-4.36c.73.6 11.09 5 11.09 5l.9.18c2.42.47 9 1.8 10 2.5s6 1.65 8.88 2.21l2 .38-7.28 46.11h-2c-1.19 0-2.37-.1-3.55-.2q-2.79-.25-5.55-.76c-3.7-.69-8.56-1.61-12.31-2.34-2.32-.45-4.21-.84-5.14-1.05-3.71-.87-8.34 2-9.4 2s-7.44 5.31-7.44 5.31c.05-1.05 3.8-6.06 3.8-6.06z",transform:"translate(-21.14 -37.01)",fill:"url(#c)"})),M||(M=sc.createElement("path",{d:"M545.37 505.06c.08 0 7.28-2.95 9.68-3.89s31.19 1.13 32.41 1.22v.18c-.3 0-29.94-2.16-32.33-1.22s-9.6 3.85-9.67 3.88z",transform:"translate(-21.14 -37.01)",fill:"url(#d)",opacity:.1})),g||(g=sc.createElement("path",{d:"M561.48 451.84s-.02-.06 0 0z",transform:"translate(-21.14 -37.01)",fill:"url(#b)"})),k||(k=sc.createElement("path",{d:"M553.5 462.27a55.92 55.92 0 0 1 6.12-4.32c1.64-.91 4.85-.26 7.19.21a16.15 16.15 0 0 0 2.08.34c1.43 0 9.26 2.22 9.59 2.32.08 0 8.56 2 9.63 1.94a32.35 32.35 0 0 1 5 .91v.19a32.82 32.82 0 0 0-5-.92c-1.1.07-9.34-1.86-9.69-1.94-.08 0-8.13-2.31-9.54-2.32a13.82 13.82 0 0 1-2.11-.34c-2.19-.44-5.49-1.1-7.07-.23a59.1 59.1 0 0 0-6.1 4.3z",transform:"translate(-21.14 -37.01)",fill:"url(#e)",opacity:.1})),b||(b=sc.createElement("path",{d:"M555.19 462.79c.73-.81 9.23-1.1 10-.8s10.51 1.25 11 1.23c.16 0 12.8 2.44 16.67 3.2v.18c-5.62-1.1-16.34-3.17-16.63-3.19-.05 0-10.19-.9-11.09-1.25s-9.22.14-9.78.75z",transform:"translate(-21.14 -37.01)",fill:"url(#f)",opacity:.1})),w||(w=sc.createElement("path",{d:"M549.8 471.54c2.61-4.44 17.34-5.76 17.48-5.77 1.57-.13 24 4.12 24.92 4.3v.18c-.23 0-23.32-4.43-24.86-4.29-4.1.35-15.21 2.05-17.33 5.68z",transform:"translate(-21.14 -37.01)",fill:"url(#g)",opacity:.1})),H||(H=sc.createElement("path",{d:"M548.8 476.69c4.16-4.67 17.36-4.35 17.49-4.34 1 0 23.44 3.36 24.39 3.5v.18c-.23 0-23.39-3.45-24.37-3.49-.13 0-13.23-.33-17.33 4.27z",transform:"translate(-21.14 -37.01)",fill:"url(#h)",opacity:.1})),O||(O=sc.createElement("path",{d:"M544.87 481.86c1.56-2.91 5.94-5 13-6.19a72.7 72.7 0 0 1 10.37-.93l22.86 2.61v.19l-22.84-2.61c-.19 0-19.79.15-23.29 7.16l-.17-.08z",transform:"translate(-21.14 -37.01)",fill:"url(#i)",opacity:.1})),G||(G=sc.createElement("path",{d:"M544.31 483.62c2.19-2.4 10.76-4.3 14.86-4.79 3.85-.46 29.36 3.57 30.45 3.74v.18c-.27 0-26.57-4.19-30.4-3.74s-12.61 2.4-14.74 4.73z",transform:"translate(-21.14 -37.01)",fill:"url(#j)",opacity:.1})),T||(T=sc.createElement("path",{d:"m549.32 484.51 9.67-1.6a25.82 25.82 0 0 1 7.5-.14l10.72 1.38 11.79 2.23v.18l-11.8-2.23-10.73-1.33a25.83 25.83 0 0 0-7.45.13l-9.67 1.61z",transform:"translate(-21.14 -37.01)",fill:"url(#k)",opacity:.1})),L||(L=sc.createElement("path",{d:"M541.23 495.29c2-3.72 10.9-5.57 15.78-6.59 1-.21 1.85-.38 2.33-.52 2.76-.77 28.52 1.82 29.61 1.93v.19c-.27 0-26.82-2.7-29.54-1.94-.49.14-1.31.31-2.34.52-4.67 1-14.4 3-15.84 6.92l-.18-.06a3 3 0 0 1 .18-.45z",transform:"translate(-21.14 -37.01)",fill:"url(#l)",opacity:.1})),C||(C=sc.createElement("path",{d:"M546.61 493.53s4.92-1.55 6-2.06 13.85-.83 14.39-.85l21.87 1.38v.19L567 490.81c-.12 0-13.21.32-14.31.82s-5.86 2-6.06 2.08z",transform:"translate(-21.14 -37.01)",fill:"url(#m)",opacity:.1})),I||(I=sc.createElement("path",{d:"M539.21 501.93c4.81-6.76 23.13-9.38 24.77-9.26l24.63 1.58v.18c-.23 0-23-1.46-24.62-1.58s-19.84 2.49-24.6 9.18z",transform:"translate(-21.14 -37.01)",fill:"url(#n)",opacity:.1})),j||(j=sc.createElement("path",{d:"M541.21 506.88c4.34-8.1 23-9.92 24.71-9.85l21.78 1v.18l-21.78-1c-1.81-.08-22.3 1.93-25.09 11.1l-.18-.05a8 8 0 0 1 .56-1.38z",transform:"translate(-21.14 -37.01)",fill:"url(#o)",opacity:.1})),Z||(Z=sc.createElement("path",{d:"m585 508.22 7.37-46.52 2 .38-7.37 46.16c-.69 0-1.37 0-2-.02z",transform:"translate(-21.14 -37.01)",fill:"url(#p)",opacity:.1})),P||(P=sc.createElement("path",{d:"m585.39 509.23 7.69-48.48 9.43 3 6.9 2.2s4.82-1 6.36 2.51-3.37 13.76-1 16 22.4 4 22.4 4 29.1 7.75 32.14 8.21S689 506.84 689 506.84c.91 2.29-10.27 2.39-12.77 3.07s-26.36-3.81-27.91-5.18-23.75-7.36-23.75-7.36c-7.15-3.7-11.74-2.15-11.74-2.15a55.09 55.09 0 0 1-3.45 14 3.8 3.8 0 0 1-4 2.17l-10.78-.85z",transform:"translate(-21.14 -37.01)",fill:"url(#q)"})),F||(F=sc.createElement("path",{d:"m585.39 509.23 7.69-48.48 9.43 3C601 468.44 592 498 594.6 510.51z",transform:"translate(-21.14 -37.01)",fill:"url(#r)",opacity:.1})),S||(S=sc.createElement("path",{d:"m545.41 505.14-4.68 3.16c0-2.21 8.23-11 8.23-11-2.13-1.2-9.67 4.68-9.67 4.68.89-3.85 7.55-8.51 7.55-8.51-.58-.3-5.72 2.3-5.72 2.3 1.68-3.55 8.61-8.69 8.61-8.69-.86-.55-5.93 1.64-6.17 1.74.27-.19 8.71-6.11 8-6.29s-7.14 1.15-7.14 1.15c-.5-2.26 10-12.91 10-12.91s1.31-1.85.84-1.36-5.34 2.18-5.34 2.18c.07-3.33 10.22-8.49 10.22-8.49l-4.62-.18 3-3.27c-.14.11-4.9 3.76-5 2.69s4.48-5.37 5.46-6 4-.12 4-.12-1.32-3.81-1.57-4.36c.73.6 11.09 5 11.09 5l.9.17c-1 .76-1.92 1.45-2.53 2a7.37 7.37 0 0 0-2.21 2.7 5.48 5.48 0 0 0 .69 4.5c.77 1.37 1.83 2.56 2.59 3.94a2.66 2.66 0 0 1 .42 1.94 3.34 3.34 0 0 1-1.31 1.51 25.37 25.37 0 0 0-8.32 11.5 3.1 3.1 0 0 0-.25 1.4 4.67 4.67 0 0 0 .82 1.75 6.31 6.31 0 0 1-.81 7.27c-.82.9-2 1.69-2.06 2.9a3.9 3.9 0 0 0 .6 1.92q1.23 2.29 2.44 4.61c-2.32-.45-4.21-.84-5.14-1.05-3.71-.87-8.34 2-9.4 2s-7.44 5.3-7.44 5.3c.17-1.07 3.92-6.08 3.92-6.08z",transform:"translate(-21.14 -37.01)",fill:"url(#s)"})),V||(V=sc.createElement("path",{d:"m702.23 777.41 4.43 17.75s99.48 32.16 131.73 2-3.55-88.78-3.55-88.78L813 685.94l-57.61-6.7H735z",transform:"translate(-21.14 -37.01)",fill:"url(#t)"})),A||(A=sc.createElement("path",{d:"m702.23 777.41 4.43 17.75s99.48 32.16 131.73 2-3.55-88.78-3.55-88.78L813 685.94l-57.61-6.7H735z",transform:"translate(-21.14 -37.01)",fill:"url(#t)",opacity:.03})),q||(q=sc.createElement("path",{d:"M943.93 648.08 934.37 659l-33.06 59.14-11.25 20.77s-8.5 10.58-7.66 15 3.23 37.27-25.4 39.94-90.69-64.33-90.69-64.33l2.53-1.7 55.43-37.49 19.9-21.42 5.32-5.72s25.92-34.84 25.23-40.2 25.91-37.52 41.25-36.52 26.93 1 32.38 20.44-4.42 41.17-4.42 41.17z",transform:"translate(-21.14 -37.01)",fill:"url(#u)"})),D||(D=sc.createElement("path",{fill:"url(#v)",d:"M724.47 384.85h105.08v78.14H724.47z"})),N||(N=sc.createElement("path",{fill:"url(#v)",d:"M724.47 384.85h105.08v78.14H724.47z",opacity:.1})),_||(_=sc.createElement("path",{d:"M716.89 584.62c0 1.43-.13 3.39-.34 5.6-.79 8.6-2.73 21-2.73 21s-4.09 21.83-3.07 23.61-1 16.33-2.39 19.53-9.54 0-9.54 0l-27-71.22-1.49-3.93-.59-1.55.62-2.38 2.19-8.63s44.34 11.03 44.34 17.97z",transform:"translate(-21.14 -37.01)",fill:"url(#w)"})),U||(U=sc.createElement("path",{d:"M840.29 514.19v11.26l-8.19 39.33-17.72 23.36-39.2 5-37.5-14.47s-24.88-39.46 4.09-61.67a54.69 54.69 0 0 0 16.6-20.75 66.44 66.44 0 0 0 5.74-26.67 61 61 0 0 0-.86-11.8s61.36-27.8 51.47 0a31 31 0 0 0-1.39 14.95 46.05 46.05 0 0 0 4.91 14.66c7.92 15.39 22.05 26.8 22.05 26.8z",transform:"translate(-21.14 -37.01)",fill:"url(#x)"})),B||(B=sc.createElement("path",{d:"M814.72 457.75a31 31 0 0 0-1.39 14.95 41.86 41.86 0 0 1-49.22-3.15 61 61 0 0 0-.86-11.8s61.36-27.75 51.47 0z",transform:"translate(-21.14 -37.01)",fill:"url(#y)",opacity:.1})),R||(R=sc.createElement("ellipse",{cx:769.72,cy:399.68,rx:41.25,ry:40.54,fill:"url(#z)"})),W||(W=sc.createElement("path",{d:"M840.29 514.19v11.26l-8.19 39.33-17.72 23.36-39.2 5-37.5-14.47s-24.88-39.46 4.09-61.67a54.69 54.69 0 0 0 16.6-20.75C735.71 581.49 784 577.07 784 577.07c44.18 0 35.29-81 34.22-89.71 7.94 15.42 22.07 26.83 22.07 26.83z",transform:"translate(-21.14 -37.01)",fill:"url(#A)",opacity:.1})),X||(X=sc.createElement("path",{d:"M877.79 552.27c-1.71 5.7-5.8 26.46-5.8 26.46s-1.15.45-3 1.28c-7 3.19-24.31 12-25.59 23a4.1 4.1 0 0 0-.06.49c-1 14.07-13.63 43.89-20.1 57.29s3.07 27.81 3.07 27.81l-13 3s-18.02 2.4-33.31-1.3-13.3 6-22.84 2.68-40.91-5.7-46-8.71-9.54-29.81-6.82-33.17 11.25-74 11.25-74-34.43-31.5-33.75-51.94 25.57-21.43 25.57-21.43 9.57-3.3 17.68-6.73c1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06 1.6.2 2.58.34 2.58.34-.88 3-1.67 5.94-2.39 8.75-13.91 54.89 2.42 71.3 14.87 76.14a28 28 0 0 0 11.37 1.92c15.66 0 24.65-10.19 29.69-23.72 10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.23 30.48 7.52 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#B)",opacity:.1})),K||(K=sc.createElement("path",{d:"M877.79 550.26c-1.71 5.7-5.8 26.46-5.8 26.46s-1.15.45-3 1.28c-7 3.19-24.31 12-25.59 23a4.1 4.1 0 0 0-.06.49c-1 14.07-13.63 43.89-20.1 57.29s3.07 27.81 3.07 27.81l-13 3s-18.02 2.41-33.31-1.3-13.3 6-22.84 2.68-40.91-5.7-46-8.71-9.54-29.81-6.82-33.17 11.25-74 11.25-74-34.43-31.5-33.75-51.94 25.57-21.43 25.57-21.43 9.57-3.3 17.68-6.73c1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06 1.6.2 2.58.34 2.58.34-.88 3-1.67 5.94-2.39 8.75-13.91 54.89 2.42 71.3 14.87 76.14a28 28 0 0 0 11.37 1.92c15.66 0 24.65-10.19 29.69-23.72 10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.23 30.48 7.52 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#C)"})),J||(J=sc.createElement("path",{d:"M716.89 584.62v6l-.34-.42c-14.39-17.92-37.7-10-44.72-7.06-1.33.56-2.08.94-2.08.94s.4-2.3.59-4.87a27.27 27.27 0 0 0 0-3.93l2.19-8.63s44.36 11.03 44.36 17.97z",transform:"translate(-21.14 -37.01)",fill:"url(#D)",opacity:.1})),Q||(Q=sc.createElement("path",{d:"m692.34 521.11-8.88 11.4s-15 35.84-13.62 38.52-.09 11.06-.09 11.06 30.09-15.38 47.13 6.55V577.4s1.71-4.69 2.39-6 0-11.73 0-11.73z",transform:"translate(-21.14 -37.01)",fill:"url(#E)"})),Y||(Y=sc.createElement("path",{d:"M708.36 654.46a5.34 5.34 0 0 1-.35 1.11c-4.35 9.71-36.91-4.47-36.91-4.47s-.27-1.34-.7-3.51c-1.72-8.73-5.81-31.06-3.62-35.35 2.72-5.36 3-22.11 3-22.11 9.12-16.08 4.52-48.58 4.52-48.58 4.09-7-2.38-13.4-2.38-13.4s-56.6-32.84-17.73-37.19 46.37 41.86 43.3 46.91 2.38 45.82 2.38 45.82l5.45 31.57s5.39 27.35 3.04 39.2z",transform:"translate(-21.14 -37.01)",fill:"url(#F)"})),$||($=sc.createElement("path",{fill:"url(#G)",d:"m851.15 775.46-10.12-.5-39.35-1.9-.05-1.23-.84-19.99 29.88-15.03.04-.02.38.27.77.53.83.58 17.07 11.97 1.39 25.32z"})),ee||(ee=sc.createElement("path",{fill:"url(#H)",d:"m832.79 738.06-.1.11-31.06 33.66-.84-19.99 29.88-15.03.42.25 1.7 1z",opacity:.1})),te||(te=sc.createElement("path",{d:"M708 655.57c-4.35 9.71-36.91-4.47-36.91-4.47s-.27-1.34-.7-3.51c4.34-1.79 9.87-2.16 17.17-.17 9.44 2.58 16 5.52 20.44 8.15z",transform:"translate(-21.14 -37.01)",fill:"url(#I)",opacity:.1})),ae||(ae=sc.createElement("path",{d:"M706.66 795.16s-19.09-9.38-20.11-14.4-6.48-20.78-8.87-24.13-17-26.13-20.45-35.84-13.64-37.19-6.14-47.58 11.93-30.48 36.48-23.78 29.31 15.74 29.31 15.74l2.69 5.7s59.36 54.21 60.38 55.92 32.73 25.15 32.73 25.15l39.2 23.12-33.07 35.85s-41.93-16.08-43.29-22.78-12.88-12.73-12.88-12.73l-15.76-6z",transform:"translate(-21.14 -37.01)",fill:"url(#J)"})),le||(le=sc.createElement("path",{d:"M666.77 715.09s7.16 7 7.16 9.72 9.88 7.37 9.88 7.37 78.41 47.87 87.62 47.72l16.39 16.27 23.09-47L782 726.79l-60.38-53.24s-11.21-7.37-17.35-8.38-37.5-15.07-40.22 12.06 2.72 37.86 2.72 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#K)",opacity:.1})),ce||(ce=sc.createElement("path",{d:"M664.73 717.1s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 728.8l-60.38-53.24s-11.21-7.37-17.34-8.38-37.5-15.07-40.23 12.06 2.68 37.86 2.68 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#L)",opacity:.1})),re||(re=sc.createElement("path",{d:"M664.73 715.09s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 726.79l-60.38-53.24s-11.21-7.37-17.34-8.38-37.55-15.07-40.28 12.06 2.73 37.86 2.73 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#M)"})),ne||(ne=sc.createElement("path",{d:"M664.73 715.09s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 726.79l-60.38-53.24s-11.21-7.37-17.34-8.38-37.55-15.07-40.28 12.06 2.73 37.86 2.73 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#M)"})),ie||(ie=sc.createElement("path",{d:"M672.23 735.53s20.6 33.56 31.77 36.54-31.77-36.54-31.77-36.54z",transform:"translate(-21.14 -37.01)",fill:"url(#N)",opacity:.1})),se||(se=sc.createElement("path",{fill:"url(#O)",d:"m811.31 707.65-3.1 17.2-2.84 15.79-1.22 6.79-26.84-8.37 2.74-14.72.15-.82 1.79-9.59 29.32-6.28z"})),oe||(oe=sc.createElement("path",{d:"m826.51 777.65-1.22 6.79-26.84-8.37 2.74-14.73c3.93-5 14.26-1 14.26-1 14.35-1.68 9.5 14.74 9.5 14.74a5.49 5.49 0 0 1 1.56 2.57z",transform:"translate(-21.14 -37.01)",fill:"url(#P)",opacity:.1})),me||(me=sc.createElement("path",{d:"M829.38 833.36c-7.15-6.36-33.07-9.36-41.59-9.36s-5.11-2.67-5.11-2.67l-5.64-4c-3.85-2.75-2.08-9.24-.58-13.08.71-1.79 1.35-3 1.35-3s2.14-15.75 4.27-20.45 17.69-11.8 17.69-11.8c-1.32-14.12 15.68-7.65 15.68-7.65 14.35-1.67 9.5 14.75 9.5 14.75 2.73 2 3.41 12.72 2.73 16.41s2.38 15.41 2.38 15.41 2.87 10.6 4.61 16.79c.34 1.19.63 2.23.85 3 1.36 4.64-6.14 5.65-6.14 5.65z",transform:"translate(-21.14 -37.01)",fill:"url(#Q)"})),de||(de=sc.createElement("path",{d:"M829.38 833.36c-7.15-6.36-33.07-9.36-41.59-9.36s-5.11-2.67-5.11-2.67l-5.64-4c-3.85-2.75-2.08-9.24-.58-13.08l7.63 6.7s-2.18 1.68 0 1.68H793s28.64 6 41.64 12.1c.34 1.19.63 2.23.85 3 1.39 4.62-6.11 5.63-6.11 5.63z",transform:"translate(-21.14 -37.01)",fill:"url(#R)",opacity:.1})),fe||(fe=sc.createElement("ellipse",{cx:777.31,cy:738.14,rx:1.37,ry:1.35,fill:"url(#S)",opacity:.1})),pe||(pe=sc.createElement("ellipse",{cx:780.05,cy:748.78,rx:1.37,ry:1.35,fill:"url(#T)",opacity:.1})),he||(he=sc.createElement("ellipse",{cx:779.31,cy:744.83,rx:1.37,ry:1.35,fill:"url(#U)",opacity:.1})),ye||(ye=sc.createElement("ellipse",{cx:780.05,cy:754.09,rx:1.37,ry:1.35,fill:"url(#V)",opacity:.1})),ue||(ue=sc.createElement("ellipse",{cx:773.46,cy:759.59,rx:1.37,ry:1.35,fill:"url(#W)",opacity:.1})),Ee||(Ee=sc.createElement("path",{d:"m872.29 812.46-10.12-.46a3.5 3.5 0 0 1 0-1.9s7.42-7-4.86-20.32c0 0 .71-3.13 3.55-2.33 0 0-6.74-11.14-7.76-12.28a.89.89 0 0 1-.12-.54l.83.57 17.07 12z",transform:"translate(-21.14 -37.01)",fill:"url(#X)",opacity:.1})),xe||(xe=sc.createElement("path",{d:"M959.35 787.15a21.28 21.28 0 0 1-2.63 11 21.93 21.93 0 0 1-4.79 6.08h-.09a75.3 75.3 0 0 1-31.51 5.59c-13.94-.53-31.6-.48-37.55 2.63 0 0-20.59 5.65-18.54-2.39 0 0 7.41-7-4.86-20.32 0 0 .71-3.13 3.55-2.33 0 0-6.74-11.14-7.76-12.28-.57-.62 1-5 2.44-8.82.43-1.12.86-2.19 1.24-3.11.67-1.63 1.16-2.77 1.16-2.77.23.13 1.43.84 3.19 1.77 3.31 1.72 8.62 4.16 13.44 4.89 7.41 1.14 13.81 3.52 25.57 0s16.87-8.37 32.85-2.55 23.94 11.86 24.29 22.61z",transform:"translate(-21.14 -37.01)",fill:"url(#Y)"})),ze||(ze=sc.createElement("path",{d:"M959.35 787.15a21.28 21.28 0 0 1-2.63 11c-2.86-11.84-6.53-19.11-18.85-28.25-13.55-10-34.51.88-34.51.88s-17 .75-29.41.75a27.33 27.33 0 0 1-16.34-5.18 17.87 17.87 0 0 1-2.57-2.23l3.81-.88 4.35-1c3.31 1.72 8.62 4.16 13.44 4.89 7.41 1.14 13.81 3.52 25.57 0s16.87-8.37 32.85-2.55 23.94 11.82 24.29 22.57z",transform:"translate(-21.14 -37.01)",fill:"url(#Z)",opacity:.1})),ve||(ve=sc.createElement("path",{d:"M886.31 611.9s-9.2 13.74-8.86 17.76-7.5 12.06-7.5 12.06-8.52 9-8.52 12.73-15.69 35.71-15.69 35.71-20.74 19.24-25.22 22.25-15.34 23.45-19.77 26.13-4.35 22-4.35 22l31.28-32.12s34.77 34.6 36.81 35.27 8.18-28.14 8.18-28.14 19.1-18 24.55-22.91 26.52-38.29 26.52-38.29S942.9 639 941.2 628.66s-17.9-4.19-54.89-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#aa)",opacity:.1})),Me||(Me=sc.createElement("path",{d:"M889.38 611.9s-9.21 13.74-8.86 17.76-7.5 12.06-7.5 12.06-8.53 9-8.53 12.73-15.68 35.71-15.68 35.71-20.81 19.24-25.22 22.25-15.34 23.45-19.78 26.13-4.34 22-4.34 22 35.93-23 49.34 29.28l12.27-17.56s4.44-9.24 6.48-8.57 8.18-28.14 8.18-28.14 19.09-18 24.55-22.91 26.52-38.29 26.52-38.29S946 639 944.26 628.66s-21.64-7.66-54.88-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#ab)",opacity:.1})),ge||(ge=sc.createElement("path",{d:"m832.45 744.66-3.1 17.2c-10.56-7.19-22.13-3.89-28-1.33l1.79-9.59z",transform:"translate(-21.14 -37.01)",fill:"url(#ac)",opacity:.1})),ke||(ke=sc.createElement("path",{d:"M888.36 611.9s-9.21 13.74-8.87 17.76-7.5 12.06-7.5 12.06-8.52 9-8.52 12.73-15.68 35.71-15.68 35.71-20.79 19.24-25.23 22.25-15.34 23.45-19.77 26.13-4.34 22-4.34 22 35.93-23 49.34 29.28l12.27-17.56s4.43-9.24 6.48-8.57 8.18-28.14 8.18-28.14 19.09-18 24.54-22.91 26.53-38.29 26.53-38.29S945 639 943.24 628.66s-17.39-41.21-54.88-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#ad)"})),be||(be=sc.createElement("path",{d:"M729.84 645.41s50.56-18.78 79 6z",transform:"translate(-21.14 -37.01)",fill:"url(#ae)",opacity:.1})),we||(we=sc.createElement("path",{d:"M735.05 657.71s40.47 6.79 55.81 5.45-55.81-5.45-55.81-5.45z",transform:"translate(-21.14 -37.01)",fill:"url(#af)",opacity:.1})),He||(He=sc.createElement("path",{d:"M723.36 504.12s-3.18 20.68 4.38 25.7-4.38-25.7-4.38-25.7z",transform:"translate(-21.14 -37.01)",fill:"url(#ag)",opacity:.1})),Oe||(Oe=sc.createElement("path",{d:"M702.23 512.74s10.58 16.75 11.6 25.46",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#ah)"})),Ge||(Ge=sc.createElement("path",{d:"M731.2 726.79S769.38 755 766.31 768s-2.27 0-2.27 0z",transform:"translate(-21.14 -37.01)",fill:"url(#ai)",opacity:.1})),Te||(Te=sc.createElement("ellipse",{cx:896.31,cy:742.13,rx:1.37,ry:1.35,fill:"url(#aj)",opacity:.1})),Le||(Le=sc.createElement("ellipse",{cx:901.77,cy:770.31,rx:1.37,ry:1.35,fill:"url(#ak)",opacity:.1})),Ce||(Ce=sc.createElement("path",{d:"M903.71 660.64s-24.79 23.63-24.68 35-1.37 26.13-1.37 26.13l8.29-30.1z",transform:"translate(-21.14 -37.01)",fill:"url(#al)",opacity:.1})),Ie||(Ie=sc.createElement("path",{d:"M905.83 637.37s-43.53 34.5-39.83 38.19 39.83-38.19 39.83-38.19z",transform:"translate(-21.14 -37.01)",fill:"url(#am)",opacity:.1})),je||(je=sc.createElement("path",{d:"M838.39 740.55s20.93 9.57 19.77 13.33-19.77-13.33-19.77-13.33z",transform:"translate(-21.14 -37.01)",fill:"url(#an)",opacity:.1})),Ze||(Ze=sc.createElement("ellipse",{cx:864.81,cy:748.78,rx:1.37,ry:1.35,fill:"url(#ao)",opacity:.1})),Pe||(Pe=sc.createElement("ellipse",{cx:846.19,cy:746.18,rx:1.37,ry:1.35,fill:"url(#ap)",opacity:.1})),Fe||(Fe=sc.createElement("ellipse",{cx:881.19,cy:748.25,rx:1.37,ry:1.35,fill:"url(#aq)",opacity:.1})),Se||(Se=sc.createElement("ellipse",{cx:886.06,cy:768.96,rx:1.37,ry:1.35,fill:"url(#ar)",opacity:.1})),Ve||(Ve=sc.createElement("ellipse",{cx:889.38,cy:745.55,rx:1.37,ry:1.35,fill:"url(#as)",opacity:.1})),Ae||(Ae=sc.createElement("ellipse",{cx:893.72,cy:768.96,rx:1.37,ry:1.35,fill:"url(#at)",opacity:.1})),qe||(qe=sc.createElement("ellipse",{cx:872.64,cy:749.6,rx:1.37,ry:1.35,fill:"url(#au)",opacity:.1})),De||(De=sc.createElement("ellipse",{cx:876.21,cy:770.31,rx:1.37,ry:1.35,fill:"url(#av)",opacity:.1})),Ne||(Ne=sc.createElement("ellipse",{cx:856.52,cy:748.25,rx:1.37,ry:1.35,fill:"url(#aw)",opacity:.1})),_e||(_e=sc.createElement("path",{d:"M844.17 668.88c-.34 1.84-.47 3-.47 3s-19.09 29.82-32.39 33.84c0 0-30.14 21.83-42.47 22.08l55.43-37.49z",transform:"translate(-21.14 -37.01)",fill:"url(#ax)",opacity:.1})),Ue||(Ue=sc.createElement("path",{d:"m866.54 588.63-2.12 10.22s-.12.68-.36 1.88c-1.59 8.28-8.19 41.29-13.55 48-6.13 7.71-7.83 22.11-7.83 22.11s-19.09 29.82-32.39 33.84c0 0-51.82 37.52-47.38 14.73s34.42-31.82 34.42-31.82 4.09-7.71 4.09-9.38 8.87-12.06 8.87-12.06 7.84-14.08 8.18-17.09 14-58.3 14-58.3l8.07-.51z",transform:"translate(-21.14 -37.01)",fill:"url(#ay)"})),Be||(Be=sc.createElement("path",{d:"m866.54 588.63-2.12 10.22s-.12.68-.36 1.88c-10.4 1.86-27.61 4.19-30-.22-1.1-2 1.88-5.86 6.48-10.23z",transform:"translate(-21.14 -37.01)",fill:"url(#az)",opacity:.1})),Re||(Re=sc.createElement("path",{d:"M872 597.17S854.74 601 843.41 601h-1.65c-3.88-.15-6.82-.86-7.72-2.5-1.12-2 2-6 6.71-10.44 6.27-5.91 15.42-12.7 21.47-17 3.74-2.66 6.29-4.38 6.29-4.38l3.49 10.04s-.38 1.79-.79 4.33c-.89 5.5-1.87 14.51.79 16.12z",transform:"translate(-21.14 -37.01)",fill:"url(#aA)"})),We||(We=sc.createElement("path",{d:"M765.8 551.93q5.06 12 10.37 23.92a14.78 14.78 0 0 1-3.66 1.29c-6.28 1.32-13.29-1.25-19.44-3.85-9.2-3.88-19.19-8.5-23.35-17.45-3.07-6.61-2.27-14.26-3.45-21.43-1-6.19-3.57-12.12-4-18.37-.55-7.1 1.58-14.06 2.8-21.08 1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06a24.36 24.36 0 0 0-.35 4.36 25 25 0 0 0 .54 4.73c1.52 7.62 5.8 14.85 5.82 22.67 0 4.85-1.64 9.61-1.51 14.47s1.89 9.37 3.75 13.8z",transform:"translate(-21.14 -37.01)",fill:"url(#aB)",opacity:.1})),Xe||(Xe=sc.createElement("path",{d:"M877.79 550.26c-1.71 5.7-5.8 26.46-5.8 26.46s-.38 1.79-.79 4.33c-.75-1-1.47-2-2.2-3-.47-.67-1-1.35-1.45-2a19.18 19.18 0 0 0-5.33-5 9.39 9.39 0 0 0-5-1.4c-2.86.08-5.43 1.65-8 2.89-10.33 5.05-24.68 4.57-31.46-4.61a22.41 22.41 0 0 1-4-12.57c10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.16 30.48 7.45 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#aC)",opacity:.1})),Ke||(Ke=sc.createElement("path",{d:"M774.16 410.87c-1.27 3.85 0 8-.37 12.07-.9 9.49-10.58 16.11-12.77 25.39-1.69 7.11 1.29 14.48 1 21.77-.38 8.22-5 15.92-4.87 24.16.12 9.41 6.33 18 6.36 27.39 0 4.86-1.65 9.62-1.51 14.48s2 9.36 3.85 13.79q5.06 12 10.38 23.92c-7.12 3.64-15.73.55-23.11-2.56-9.21-3.89-19.19-8.49-23.35-17.45-3.06-6.62-2.26-14.26-3.45-21.43-1-6.19-3.57-12.12-4-18.38-.56-7.27 1.69-14.42 2.89-21.62a75 75 0 0 0-2.34-34.26c-2-6.43-4.85-12.63-6.12-19.24s-.71-14 3.54-19.24c4.62-5.72 12.46-7.77 18.27-12.32 6.17-4.84 9.7-12.23 11.94-19.67 1.9-6.33 3.6-13.67 9.49-16.83a15.58 15.58 0 0 1 7.77-1.6c9 .21 17.37 5.26 26.4 5.81 5.15.32 10.26-.85 15.38-1.43 12.69-1.46 26 .77 36.81 7.48s18.75 18.14 19.9 30.64c.68 7.5-1 15.07-.28 22.56a35.83 35.83 0 0 0 10 21.47c3.56 3.64 7.94 6.58 10.69 10.85a28.56 28.56 0 0 1 3.78 11.51c4.41 30.65-12.89 61-10 91.86.46 4.93 2 10.56 6.63 12.54-2.3 3.5-7.85 3.32-11.33 1s-5.58-6.18-8.12-9.5-6.13-6.47-10.36-6.35c-2.86.08-5.43 1.64-8 2.9-10.33 5-24.68 4.55-31.47-4.62-5.12-6.92-4.44-16.36-3.08-24.81s3.13-17.47-.38-25.31c-2.62-5.87-8.15-11.13-7.21-17.47.71-4.85 5-8.27 8.15-12.07 6-7.26 8.23-17 8-26.32s-2.63-18.5-5-27.54c-2-7.35-4-14.94-8.93-20.81a19.68 19.68 0 0 0-19.3-6.93c-3 .53-5.84-.76-9 .11a9.88 9.88 0 0 0-6.88 6.06z",transform:"translate(-21.14 -37.01)",fill:"url(#aD)"})),Je||(Je=sc.createElement("g",{opacity:.1},sc.createElement("path",{d:"M865.76 427.4c.19-4.64.7-9.3.49-13.93-.19 4.64-.71 9.3-.49 13.93z",transform:"translate(-21.14 -37.01)",fill:"url(#aE)"}),sc.createElement("path",{d:"M760.62 450.76a18.65 18.65 0 0 1 .4-2.43c2.2-9.28 11.87-15.9 12.77-25.39a28 28 0 0 0-.06-4.67c-1.1 9.3-10.54 15.87-12.71 25a23.89 23.89 0 0 0-.4 7.49z",transform:"translate(-21.14 -37.01)",fill:"url(#aF)"}),sc.createElement("path",{d:"M726.06 477.69a75 75 0 0 0-3.29-24.58c-2-6.43-4.85-12.62-6.12-19.23a34.43 34.43 0 0 1-.48-3.53 31 31 0 0 0 .48 8.55c1.27 6.61 4.14 12.81 6.12 19.24a75.08 75.08 0 0 1 3.29 19.55z",transform:"translate(-21.14 -37.01)",fill:"url(#aG)"}),sc.createElement("path",{d:"M762.09 533c.38-3.78 1.38-7.52 1.37-11.33a21.48 21.48 0 0 0-.15-2.4c-.39 4-1.47 7.87-1.36 11.85.05.61.05 1.24.14 1.88z",transform:"translate(-21.14 -37.01)",fill:"url(#aH)"}),sc.createElement("path",{d:"M757.25 491.42c.76-7.18 4.38-14.05 4.72-21.32a29.42 29.42 0 0 0-.09-3.87c-.72 7.8-4.88 15.15-4.78 23 .01.77.07 1.47.15 2.19z",transform:"translate(-21.14 -37.01)",fill:"url(#aI)"}),sc.createElement("path",{d:"M883.62 579.88a10 10 0 0 1-8-1.42c-3.48-2.36-5.58-6.17-8.12-9.5s-6.13-6.46-10.36-6.34c-2.86.08-5.43 1.64-8 2.89-10.34 5-24.69 4.56-31.48-4.61a22.18 22.18 0 0 1-4-12c-.34 6.11.4 12.19 4 17 6.79 9.17 21.14 9.66 31.48 4.62 2.56-1.26 5.13-2.82 8-2.9 4.23-.12 7.82 3 10.36 6.35s4.64 7.14 8.12 9.5 9 2.54 11.33-1a8.52 8.52 0 0 1-3.33-2.59z",transform:"translate(-21.14 -37.01)",fill:"url(#aJ)"}),sc.createElement("path",{d:"M880.09 560.24c.74-24.83 11.73-49.42 11-74.13-.76 24.69-11.75 49.28-11 74.13z",transform:"translate(-21.14 -37.01)",fill:"url(#aK)"}),sc.createElement("path",{d:"M816.23 524.13a28.1 28.1 0 0 0-2-13.36c-2.06-4.59-5.88-8.82-7-13.49a8.88 8.88 0 0 0-.22 1.05c-.93 6.34 4.59 11.6 7.22 17.47a24.37 24.37 0 0 1 2 8.33z",transform:"translate(-21.14 -37.01)",fill:"url(#aL)"}),sc.createElement("path",{d:"M753.07 566.25c-9.2-3.88-19.19-8.49-23.35-17.45-3.06-6.61-2.26-14.25-3.45-21.43-1-6.15-3.53-12-4-18.26a33.53 33.53 0 0 0 0 4.91c.48 6.26 3 12.19 4 18.38 1.19 7.17.39 14.81 3.45 21.43 4.16 9 14.15 13.56 23.35 17.45 7.38 3.11 16 6.2 23.11 2.56q-.95-2.13-1.87-4.25c-6.73 2.32-14.5-.49-21.24-3.34z",transform:"translate(-21.14 -37.01)",fill:"url(#aM)"}),sc.createElement("path",{d:"M809.27 411.59c4.9 5.87 7 13.46 8.93 20.81 2.3 8.66 4.6 17.41 5 26.34.06-1.28.09-2.55.06-3.82-.2-9.35-2.62-18.5-5-27.55-2-7.34-4-14.93-8.93-20.8a19.69 19.69 0 0 0-19.3-6.94c-3 .54-5.84-.75-9 .12a9.88 9.88 0 0 0-6.84 6.1 18.37 18.37 0 0 0-.45 7.06 11.29 11.29 0 0 1 .45-2 9.9 9.9 0 0 1 6.84-6.1c3.13-.87 6 .42 9-.11a19.68 19.68 0 0 1 19.24 6.89z",transform:"translate(-21.14 -37.01)",fill:"url(#aN)"}))),Qe||(Qe=sc.createElement("path",{d:"M839.41 581.08s15.88 41.55-20.94 58.3c0 0-66-7.33-86.24-2s-20.88-39.54-11.63-42.22 118.81-14.08 118.81-14.08z",transform:"translate(-21.14 -37.01)",fill:"url(#aO)",opacity:.1})),Ye||(Ye=sc.createElement("path",{d:"M838.39 579.07s15.88 41.55-20.94 58.3c0 0-66-7.33-86.25-2s-20.87-39.54-11.63-42.22 118.82-14.08 118.82-14.08z",transform:"translate(-21.14 -37.01)",fill:"url(#aP)"})),$e||($e=sc.createElement("path",{d:"m701.28 592 5.78 33.67s1.45-25.41-5.78-33.67z",transform:"translate(-21.14 -37.01)",fill:"url(#aQ)",opacity:.1})),et||(et=sc.createElement("path",{d:"M784 552.61s-1.31 15.07-1.93 19.76 4.3-18.37 1.93-19.76z",transform:"translate(-21.14 -37.01)",fill:"url(#aR)",opacity:.1})),tt||(tt=sc.createElement("path",{d:"M799.77 769s14 24.36 25.18 7.1",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#aS)"})),at||(at=sc.createElement("path",{d:"M862.93 787.42s34.07 17.41 21.65 24.3",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#aT)"})),lt||(lt=sc.createElement("path",{d:"M545.43 416.76s-.02-.06 0 0z",fill:"#9d9cb5"})),ct||(ct=sc.createElement("path",{d:"m529.72 469.79-4.58 3.14c0-2.2 8.05-10.94 8.05-10.94-2.09-1.2-9.46 4.65-9.46 4.65.87-3.83 7.39-8.46 7.39-8.46-.58-.3-5.6 2.28-5.6 2.28 1.65-3.52 8.42-8.65 8.42-8.65-.84-.54-5.8 1.64-6 1.74.26-.19 8.51-6.08 7.78-6.26s-7 1.14-7 1.14c-.49-2.24 9.79-12.84 9.79-12.84s1.28-1.84.82-1.36-5.23 2.18-5.23 2.18c.07-3.32 10-8.46 10-8.46l-4.52-.17 3-3.25c-.14.1-4.8 3.73-4.86 2.67s4.38-5.34 5.34-6 3.94-.13 3.94-.13-1.28-3.79-1.53-4.33c.71.59 10.84 4.94 10.84 4.94l.88.17c2.37.48 8.76 1.8 9.76 2.49s5.83 1.65 8.68 2.21l2 .38-7.2 45.92h-2c-1.16 0-2.32-.1-3.48-.2-1.81-.16-3.62-.42-5.42-.76-3.62-.69-8.37-1.6-12-2.32-2.27-.45-4.12-.84-5-1.05-3.63-.86-8.16 2-9.2 2s-7.27 5.28-7.27 5.28c-.01-1.03 3.66-6.01 3.66-6.01z",fill:"#e4e3f9"})),rt||(rt=sc.createElement("path",{d:"M529.68 469.7c.07 0 7.11-2.93 9.47-3.86s30.49 1.12 31.69 1.2v.19c-.29 0-29.27-2.15-31.6-1.22s-9.4 3.84-9.47 3.86z",opacity:.1})),nt||(nt=sc.createElement("path",{d:"M545.43 416.76s-.02-.06 0 0z",fill:"none"})),it||(it=sc.createElement("path",{d:"M537.62 427.13a58.51 58.51 0 0 1 6-4.3c1.61-.9 4.74-.26 7 .21a15.38 15.38 0 0 0 2 .34c1.41 0 9.06 2.21 9.38 2.31.08 0 8.37 2 9.42 1.93a31.23 31.23 0 0 1 4.94.91v.18a31.86 31.86 0 0 0-4.89-.91c-1.08.06-9.13-1.85-9.47-1.93-.09 0-8-2.3-9.34-2.31a13.43 13.43 0 0 1-2.06-.34c-2.14-.43-5.36-1.09-6.91-.23a58.6 58.6 0 0 0-6 4.28z",opacity:.1})),st||(st=sc.createElement("path",{d:"M539.28 427.65c.71-.8 9-1.09 9.77-.8s10.27 1.24 10.77 1.23c.16 0 12.52 2.43 16.3 3.18v.18c-5.51-1.09-16-3.16-16.27-3.17-.05 0-10-.9-10.84-1.25s-9 .14-9.56.75zm-5.27 8.71c2.56-4.43 17-5.73 17.1-5.74 1.53-.14 23.42 4.09 24.36 4.27v.18c-.23 0-22.8-4.4-24.31-4.27-4 .35-14.87 2.05-17 5.65zm-.97 5.12c4.06-4.65 17-4.32 17.09-4.32 1 0 22.92 3.34 23.86 3.48v.18c-.23 0-22.88-3.43-23.83-3.47-.13 0-12.94-.33-16.95 4.25z",opacity:.1})),ot||(ot=sc.createElement("path",{d:"M529.19 446.63c1.53-2.9 5.81-5 12.74-6.16a69.62 69.62 0 0 1 10.14-.93l22.35 2.6v.18l-22.34-2.59c-.18 0-19.35.15-22.77 7.12l-.17-.08s.03-.1.05-.14z",opacity:.1})),mt||(mt=sc.createElement("path",{d:"M528.64 448.37c2.14-2.38 10.52-4.28 14.53-4.76 3.77-.46 28.71 3.55 29.77 3.72v.18c-.25 0-26-4.17-29.72-3.72s-12.33 2.39-14.41 4.7z",opacity:.1})),dt||(dt=sc.createElement("path",{d:"m533.54 449.26 9.45-1.59a24.74 24.74 0 0 1 7.34-.14l10.53 1.37 11.54 2.22v.18l-11.53-2.22-10.48-1.36a24.4 24.4 0 0 0-7.29.13l-9.45 1.59zm-7.91 10.73c2-3.7 10.66-5.54 15.43-6.55 1-.21 1.81-.38 2.28-.52 2.69-.77 27.88 1.81 28.95 1.92v.19c-.26 0-26.22-2.69-28.88-1.93-.48.14-1.28.31-2.29.52-4.57 1-14.08 3-15.49 6.89l-.18-.07a4.43 4.43 0 0 1 .18-.45z",opacity:.1})),ft||(ft=sc.createElement("path",{d:"M530.86 458.23c.05 0 4.81-1.54 5.9-2.05s13.55-.82 14.08-.84l21.34 1.33v.19l-21.32-1.33c-.12 0-12.92.32-14 .82s-5.73 2-5.93 2.06z",opacity:.1})),pt||(pt=sc.createElement("path",{d:"M523.66 466.59c4.69-6.72 22.61-9.33 24.22-9.22s23.85 1.56 24.07 1.58v.18l-24.09-1.57c-1.59-.12-19.39 2.47-24 9.13z",opacity:.1})),ht||(ht=sc.createElement("path",{d:"M525.61 471.52c4.24-8.06 22.47-9.88 24.16-9.8l21.3 1v.18l-21.3-1c-1.77-.09-21.8 1.91-24.53 11h-.18a7.53 7.53 0 0 1 .55-1.38z",opacity:.1})),yt||(yt=sc.createElement("path",{d:"m568.38 472.85 7.21-46.28 2 .38-7.2 45.92c-.68 0-1.35 0-2.01-.02z",opacity:.1})),ut||(ut=sc.createElement("path",{d:"m568.86 473.86 7.52-48.24 9.22 3 6.74 2.19s4.72-1 6.22 2.5-3.29 13.69-1 15.89 21.9 4 21.9 4 28.4 7.7 31.4 8.15 19.23 10.12 19.23 10.12c.89 2.28-10 2.39-12.49 3.06s-25.77-3.79-27.29-5.15-23.22-7.33-23.22-7.33c-7-3.68-11.48-2.13-11.48-2.13a55.25 55.25 0 0 1-3.37 13.89 3.71 3.71 0 0 1-3.91 2.17l-10.47-.86z",fill:"#535461"})),Et||(Et=sc.createElement("path",{d:"m568.86 473.86 7.52-48.24 9.22 3c-1.44 4.65-10.32 34-7.73 46.5z",opacity:.1})),xt||(xt=sc.createElement("path",{d:"m529.72 469.79-4.58 3.14c0-2.2 8.05-10.94 8.05-10.94-2.08-1.2-9.46 4.65-9.46 4.65.87-3.83 7.39-8.46 7.39-8.46-.58-.31-5.6 2.28-5.6 2.28 1.65-3.53 8.42-8.65 8.42-8.65-.84-.54-5.8 1.64-6 1.74.26-.19 8.51-6.08 7.78-6.26s-7 1.14-7 1.14c-.49-2.25 9.79-12.85 9.79-12.85s1.28-1.83.82-1.35-5.23 2.17-5.23 2.17c.07-3.31 10-8.45 10-8.45l-4.51-.17 3-3.25c-.14.1-4.8 3.73-4.86 2.67s4.38-5.34 5.34-6 3.94-.13 3.94-.13-1.28-3.79-1.53-4.33c.71.59 10.84 4.94 10.84 4.94l.88.17c-.93.76-1.87 1.44-2.47 2a7.38 7.38 0 0 0-2.16 2.69 5.54 5.54 0 0 0 .67 4.48c.76 1.36 1.79 2.55 2.54 3.92a2.68 2.68 0 0 1 .41 1.93 3.3 3.3 0 0 1-1.29 1.51 25.19 25.19 0 0 0-8.13 11.44 3.2 3.2 0 0 0-.25 1.39 4.76 4.76 0 0 0 .81 1.74 6.39 6.39 0 0 1-.79 7.24c-.81.89-1.94 1.68-2 2.87a3.71 3.71 0 0 0 .58 1.92c.8 1.52 1.59 3.05 2.39 4.59-2.27-.46-4.12-.84-5-1.05-3.63-.86-8.16 2-9.19 2s-7.28 5.28-7.28 5.28c.01-1.03 3.68-6.01 3.68-6.01z",fill:"#a4a4a4"})),zt||(zt=sc.createElement("path",{d:"m683.05 740.68 4.34 17.66s97.27 32 128.8 2-3.47-88.35-3.47-88.35l-21.33-22.33-56.34-6.67h-20z",fill:"#5e52ad"})),vt||(vt=sc.createElement("path",{d:"m683.05 740.68 4.34 17.66s97.27 32 128.8 2-3.47-88.35-3.47-88.35l-21.33-22.33-56.34-6.67h-20z",opacity:.03})),Mt||(Mt=sc.createElement("path",{d:"m919.39 611.99-9.34 10.83-32.33 58.84-11 20.67s-8.31 10.52-7.49 14.92 3.16 37.08-24.84 39.74-88.67-64-88.67-64l2.47-1.7 54.2-37.3 19.47-21.29 5.2-5.69s25.34-34.66 24.67-40 25.33-37.33 40.33-36.33 26.34 1 31.67 20.33-4.34 40.98-4.34 40.98z",fill:"#5e52ad"})),gt||(gt=sc.createElement("path",{fill:"#784d55",d:"M725.47 386.93h102.75v77.75H725.47z"})),kt||(kt=sc.createElement("path",{opacity:.1,d:"M725.47 386.93h102.75v77.75H725.47z"})),bt||(bt=sc.createElement("path",{d:"M697.39 548.87c0 1.42-.13 3.37-.33 5.57-.77 8.55-2.67 20.91-2.67 20.91s-4 21.72-3 23.49-1 16.25-2.34 19.43-9.33 0-9.33 0l-26.39-70.86-1.47-3.91-.57-1.54.6-2.37 2.15-8.58s43.35 10.98 43.35 17.86zm120.66-70.08v11.2l-8 39.14-17.33 23.24-38.33 5-36.67-14.38s-24.33-39.27 4-61.4a54.2 54.2 0 0 0 16.23-20.65 67 67 0 0 0 5.61-26.53 61.53 61.53 0 0 0-.84-11.74s60-27.66 50.33 0a31.43 31.43 0 0 0-1.36 14.87 46.8 46.8 0 0 0 4.8 14.59c7.75 15.31 21.56 26.66 21.56 26.66z",fill:"#f8bdc5"})),wt||(wt=sc.createElement("path",{d:"M793.05 422.64a31.43 31.43 0 0 0-1.36 14.87 40.36 40.36 0 0 1-48.13-3.13 61.53 61.53 0 0 0-.84-11.74s60-27.65 50.33 0z",opacity:.1})),Ht||(Ht=sc.createElement("circle",{cx:769.72,cy:401.68,r:40.33,fill:"#f8bdc5"})),Ot||(Ot=sc.createElement("path",{d:"M818.05 478.79v11.2l-8 39.14-17.33 23.24-38.33 5-36.67-14.38s-24.33-39.27 4-61.4a54.2 54.2 0 0 0 16.23-20.65c-22.16 84.84 25.08 80.44 25.08 80.44 43.2 0 34.51-80.63 33.46-89.25 7.75 15.31 21.56 26.66 21.56 26.66z",opacity:.1})),Gt||(Gt=sc.createElement("path",{d:"M854.72 516.68c-1.67 5.67-5.67 26.33-5.67 26.33s-1.12.44-2.92 1.27c-6.9 3.17-23.77 12-25 22.91v.49c-1 14-13.33 43.67-19.66 57s3 27.67 3 27.67l-12.67 3s-17.67 2.33-32.67-1.34-13 6-22.33 2.67-40-5.67-45-8.67-9.33-29.66-6.67-33 11-73.66 11-73.66-33.66-31.34-33-51.67 25-21.33 25-21.33 9.36-3.28 17.29-6.69c1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06 1.57.2 2.52.34 2.52.34-.86 3-1.63 5.91-2.33 8.71-13.6 54.61 2.36 70.94 14.54 75.75a26.93 26.93 0 0 0 11.25 1.93c15.31 0 24.11-10.13 29-23.6 9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 8.95 30.33 7.28 36.02z",opacity:.1})),Tt||(Tt=sc.createElement("path",{d:"M854.72 514.68c-1.67 5.67-5.67 26.33-5.67 26.33s-1.12.44-2.92 1.27c-6.9 3.17-23.77 12-25 22.91v.49c-1 14-13.33 43.67-19.66 57s3 27.67 3 27.67l-12.67 3s-17.67 2.33-32.67-1.34-13 6-22.33 2.67-40-5.67-45-8.67-9.33-29.66-6.67-33 11-73.66 11-73.66-33.66-31.34-33-51.67 25-21.33 25-21.33 9.36-3.28 17.29-6.69c1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06 1.57.2 2.52.34 2.52.34-.86 3-1.63 5.91-2.33 8.71-13.6 54.61 2.36 70.94 14.54 75.75a26.93 26.93 0 0 0 11.25 1.93c15.31 0 24.11-10.13 29-23.6 9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 8.95 30.33 7.28 36.02z",fill:"#eb6475"})),Lt||(Lt=sc.createElement("path",{d:"M697.39 548.87v6l-.33-.42c-14.07-17.83-36.86-10-43.73-7-1.3.56-2 .94-2 .94s.39-2.29.57-4.85a27 27 0 0 0 0-3.91l2.15-8.58s43.34 10.94 43.34 17.82z",opacity:.1})),Ct||(Ct=sc.createElement("path",{d:"m673.39 485.68-8.69 11.31s-14.65 35.66-13.31 38.32-.09 11-.09 11 29.42-15.29 46.09 6.52v-11.15s1.66-4.67 2.33-6 0-11.67 0-11.67z",fill:"#eb6475"})),It||(It=sc.createElement("path",{d:"M689.05 618.35a5.33 5.33 0 0 1-.34 1.11c-4.25 9.66-36.09-4.45-36.09-4.45s-.27-1.33-.69-3.49c-1.68-8.69-5.68-30.9-3.54-35.17 2.66-5.34 2.91-22 2.91-22 8.92-16 4.42-48.34 4.42-48.34 4-7-2.33-13.33-2.33-13.33s-55.34-32.67-17.34-37 45.34 41.65 42.34 46.67 2.33 45.64 2.33 45.64l5.33 31.41s5.3 27.16 3 38.95zm160.29 157.21-9.89-.49-38.48-1.89-.05-1.23-.82-19.89 29.22-14.95.04-.02.37.27.75.53.81.57 16.69 11.91 1.36 25.19z",fill:"#f8bdc5"})),jt||(jt=sc.createElement("path",{opacity:.1,d:"m831.39 738.35-.1.11-30.37 33.49-.82-19.89 29.22-14.95.41.25 1.66.99zM688.71 619.46c-4.25 9.66-36.09-4.45-36.09-4.45s-.27-1.33-.69-3.49c4.25-1.78 9.65-2.15 16.79-.17 9.26 2.57 15.64 5.49 19.99 8.11z"})),Zt||(Zt=sc.createElement("path",{d:"M687.39 758.34s-18.67-9.35-19.67-14.35-6.33-20.67-8.67-24-16.66-26-20-35.67-13.33-37-6-47.33 11.67-30.33 35.67-23.67 28.67 15.67 28.67 15.67l2.63 5.67s58 53.94 59 55.63 32 25 32 25l38.34 23-32.31 35.7s-41-16-42.33-22.67-12.6-12.66-12.6-12.66l-15.4-6z",fill:"#5e52ad"})),Pt||(Pt=sc.createElement("path",{d:"M648.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",opacity:.1})),Ft||(Ft=sc.createElement("path",{d:"M646.39 680.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",opacity:.1})),St||(St=sc.createElement("path",{d:"M646.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",fill:"#5e52ad"})),Vt||(Vt=sc.createElement("path",{d:"M646.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",fill:"#5e52ad"})),At||(At=sc.createElement("path",{d:"M653.72 698.99s20.14 33.39 31.07 36.36-31.07-36.36-31.07-36.36z",opacity:.1})),qt||(qt=sc.createElement("path",{fill:"#f8bdc5",d:"m810.39 708.1-3.03 17.11-2.78 15.71-1.19 6.76-26.25-8.33 2.68-14.65.15-.81 1.75-9.54 28.67-6.25z"})),Dt||(Dt=sc.createElement("path",{d:"m804.58 740.92-1.19 6.76-26.25-8.33 2.72-14.65c3.84-4.93 13.94-1 13.94-1 14-1.67 9.29 14.67 9.29 14.67a5.4 5.4 0 0 1 1.49 2.55z",opacity:.1})),Nt||(Nt=sc.createElement("path",{d:"M807.39 796.35c-7-6.34-32.34-9.34-40.67-9.34s-5-2.66-5-2.66l-5.51-4c-3.77-2.73-2-9.19-.57-13 .69-1.78 1.32-3 1.32-3s2.09-15.67 4.18-20.34 17.29-11.72 17.29-11.72c-1.29-14 15.33-7.61 15.33-7.61 14-1.67 9.29 14.67 9.29 14.67 2.67 2 3.34 12.66 2.67 16.33s2.33 15.31 2.33 15.31 2.81 10.55 4.51 16.71c.33 1.18.61 2.21.83 3 1.33 4.65-6 5.65-6 5.65z",fill:"#ffc075"})),_t||(_t=sc.createElement("path",{d:"M807.39 796.35c-7-6.34-32.34-9.34-40.67-9.34s-5-2.66-5-2.66l-5.51-4c-3.77-2.73-2-9.19-.57-13l7.46 6.67s-2.13 1.67 0 1.67h8.76s28 5.93 40.72 12c.33 1.18.61 2.21.83 3 1.31 4.66-6.02 5.66-6.02 5.66z",opacity:.1})),Ut||(Ut=sc.createElement("circle",{cx:777.14,cy:738.43,r:1.34,opacity:.1})),Bt||(Bt=sc.createElement("circle",{cx:779.82,cy:749.02,r:1.34,opacity:.1})),Rt||(Rt=sc.createElement("circle",{cx:779.1,cy:745.09,r:1.34,opacity:.1})),Wt||(Wt=sc.createElement("circle",{cx:779.82,cy:754.31,r:1.34,opacity:.1})),Xt||(Xt=sc.createElement("circle",{cx:773.38,cy:759.78,r:1.34,opacity:.1})),Kt||(Kt=sc.createElement("path",{d:"m849.34 775.56-9.89-.49a3.46 3.46 0 0 1 0-1.89s7.25-6.94-4.75-20.22c0 0 .69-3.11 3.47-2.32 0 0-6.59-11.08-7.59-12.21a.89.89 0 0 1-.12-.54l.81.57 16.69 11.91z",opacity:.1})),Jt||(Jt=sc.createElement("path",{d:"M934.47 750.37a21.43 21.43 0 0 1-2.61 10.92 21.73 21.73 0 0 1-4.68 6.05h-.09a72.61 72.61 0 0 1-30.81 5.55c-13.63-.51-30.9-.47-36.72 2.63 0 0-20.13 5.62-18.13-2.38 0 0 7.25-6.94-4.75-20.22 0 0 .69-3.11 3.47-2.32 0 0-6.59-11.08-7.59-12.21-.55-.62.94-5 2.39-8.78.42-1.11.84-2.18 1.21-3.09.66-1.63 1.14-2.76 1.14-2.76.22.13 1.39.84 3.12 1.76 3.23 1.71 8.42 4.14 13.14 4.87 7.24 1.13 13.5 3.5 25 0s16.5-8.33 32.12-2.54 23.42 11.83 23.79 22.52z",fill:"#ffc075"})),Qt||(Qt=sc.createElement("path",{d:"M934.47 750.37a21.43 21.43 0 0 1-2.61 10.92c-2.8-11.78-6.38-19-18.43-28.11-13.25-10-33.75.88-33.75.88s-16.62.74-28.75.74a26.41 26.41 0 0 1-16-5.15 17.27 17.27 0 0 1-2.51-2.22l3.72-.87 4.26-1c3.23 1.71 8.42 4.14 13.14 4.87 7.24 1.13 13.5 3.5 25 0s16.5-8.33 32.12-2.54 23.44 11.79 23.81 22.48z",opacity:.1})),Yt||(Yt=sc.createElement("path",{d:"M863.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87l30.58-32s34 34.42 36 35.09 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-17.5-4.11-53.67-16.63z",opacity:.1})),$t||($t=sc.createElement("path",{d:"M866.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87 35.13-22.87 48.25 29.13l12-17.48s4.33-9.19 6.33-8.52 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-21.17-7.67-53.67-16.67z",opacity:.1})),ea||(ea=sc.createElement("path",{d:"m810.39 708.1-3 17.11c-10.33-7.15-21.64-3.87-27.39-1.32l1.75-9.54z",opacity:.1})),ta||(ta=sc.createElement("path",{d:"M865.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87 35.13-22.87 48.25 29.13l12-17.48s4.33-9.19 6.33-8.52 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-17-40.98-53.67-16.67z",fill:"#5e52ad"})),aa||(aa=sc.createElement("path",{d:"M710.05 609.34s49.44-18.68 77.28 6zm5.1 12.25s39.57 6.75 54.57 5.42-54.57-5.42-54.57-5.42zm-11.43-152.82s-3.11 20.57 4.28 25.57-4.28-25.57-4.28-25.57zm-20.67 8.57s10.36 16.67 11.35 25.34m16.99 187.63s37.33 28 34.33 41-2.22 0-2.22 0z",opacity:.1})),la||(la=sc.createElement("circle",{cx:893.5,cy:742.4,r:1.34,opacity:.1})),ca||(ca=sc.createElement("circle",{cx:898.85,cy:770.44,r:1.34,opacity:.1})),ra||(ra=sc.createElement("path",{d:"M880.06 624.5s-24.2 23.49-24.12 34.84-1.34 26-1.34 26l8.1-30zm2.08-23.16s-42.56 34.34-39 38 39-38 39-38zm-65.95 102.65s20.47 9.52 19.33 13.26-19.33-13.26-19.33-13.26z",opacity:.1})),na||(na=sc.createElement("circle",{cx:862.71,cy:749.02,r:1.34,opacity:.1})),ia||(ia=sc.createElement("circle",{cx:844.49,cy:746.43,r:1.34,opacity:.1})),sa||(sa=sc.createElement("circle",{cx:878.72,cy:748.49,r:1.34,opacity:.1})),oa||(oa=sc.createElement("circle",{cx:883.48,cy:769.1,r:1.34,opacity:.1})),ma||(ma=sc.createElement("circle",{cx:886.72,cy:745.81,r:1.34,opacity:.1})),da||(da=sc.createElement("circle",{cx:890.97,cy:769.1,r:1.34,opacity:.1})),fa||(fa=sc.createElement("circle",{cx:870.35,cy:749.83,r:1.34,opacity:.1})),pa||(pa=sc.createElement("circle",{cx:873.85,cy:770.44,r:1.34,opacity:.1})),ha||(ha=sc.createElement("circle",{cx:854.6,cy:748.49,r:1.34,opacity:.1})),ya||(ya=sc.createElement("path",{d:"M821.86 632.7c-.33 1.83-.46 3-.46 3s-18.67 29.67-31.67 33.67c0 0-29.47 21.72-41.53 22l54.2-37.3z",opacity:.1})),ua||(ua=sc.createElement("path",{d:"m843.72 552.86-2.07 10.13s-.12.68-.35 1.88c-1.56 8.23-8 41.08-13.25 47.78-6 7.67-7.66 22-7.66 22s-18.67 29.67-31.67 33.67c0 0-50.67 37.33-46.33 14.66s33.66-31.66 33.66-31.66 4-7.67 4-9.34 8.67-12 8.67-12 7.67-14 8-17 13.67-58 13.67-58l7.89-.51z",fill:"#f8bdc5"})),Ea||(Ea=sc.createElement("path",{d:"m843.72 552.86-2.07 10.13s-.12.68-.35 1.88c-10.17 1.85-27 4.16-29.36-.22-1.07-2 1.84-5.83 6.34-10.18z",opacity:.1})),xa||(xa=sc.createElement("path",{d:"M849.05 561.35s-16.87 3.84-28 3.84h-1.61c-3.79-.15-6.67-.85-7.55-2.48-1.09-2 1.93-6 6.56-10.39 6.13-5.88 15.08-12.64 21-16.93 3.65-2.64 6.15-4.35 6.15-4.35l3.4 10s-.37 1.78-.77 4.3c-.81 5.45-1.77 14.41.82 16.01z",fill:"#eb6475"})),za||(za=sc.createElement("path",{d:"M745.22 516.34q4.93 12 10.14 23.8a14 14 0 0 1-3.58 1.28c-6.14 1.32-13-1.24-19-3.83-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.22-14.19-3.38-21.32-1-6.16-3.49-12.06-4-18.28-.53-7.06 1.55-14 2.74-21 1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06a25.16 25.16 0 0 0-.34 4.34 24.8 24.8 0 0 0 .53 4.71c1.48 7.58 5.67 14.77 5.69 22.55 0 4.83-1.61 9.57-1.48 14.4s1.98 9.36 3.8 13.77zm109.5-1.66c-1.67 5.67-5.67 26.33-5.67 26.33s-.37 1.78-.77 4.3c-.74-1-1.44-2-2.15-3a66.3 66.3 0 0 0-1.42-2 19.08 19.08 0 0 0-5.21-4.93 9.12 9.12 0 0 0-4.92-1.39c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59a22.6 22.6 0 0 1-3.93-12.51c9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 9 30.29 7.33 35.98z",opacity:.1})),va||(va=sc.createElement("path",{d:"M753.39 375.99c-1.24 3.83 0 8-.36 12-.88 9.44-10.34 16-12.49 25.26-1.65 7.07 1.26 14.41.93 21.66-.37 8.19-4.86 15.84-4.76 24 .12 9.36 6.19 17.89 6.22 27.25 0 4.84-1.61 9.58-1.48 14.41s1.95 9.31 3.77 13.72q4.93 12 10.14 23.8c-7 3.62-15.38.54-22.59-2.55-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.21-14.19-3.38-21.32-1-6.16-3.49-12.06-4-18.28-.54-7.24 1.66-14.36 2.83-21.52a75.92 75.92 0 0 0-2.25-34.07c-1.94-6.4-4.74-12.56-6-19.14s-.7-13.9 3.46-19.14c4.51-5.69 12.18-7.74 17.87-12.27 6-4.8 9.48-12.16 11.67-19.56 1.86-6.3 3.52-13.6 9.28-16.75a15 15 0 0 1 7.59-1.59c8.85.21 17 5.23 25.82 5.78 5 .32 10-.84 15-1.43 12.41-1.45 25.43.77 36 7.45s18.34 18.05 19.46 30.49c.67 7.46-1 15-.28 22.44a36 36 0 0 0 9.85 21.4c3.48 3.62 7.77 6.54 10.45 10.79a28.64 28.64 0 0 1 3.7 11.46c4.32 30.48-12.6 60.72-9.78 91.38.45 4.91 2 10.51 6.48 12.49-2.24 3.47-7.67 3.3-11.07 1s-5.46-6.15-7.94-9.46-6-6.43-10.13-6.31c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59-5-6.89-4.35-16.28-3-24.69s3.06-17.38-.36-25.18c-2.57-5.84-8-11.08-7.06-17.38.7-4.83 4.89-8.23 8-12 5.87-7.22 8.05-16.88 7.85-26.18s-2.56-18.41-4.92-27.41c-1.91-7.31-3.94-14.86-8.73-20.7a19.07 19.07 0 0 0-18.87-6.9c-2.94.53-5.71-.75-8.77.11a9.75 9.75 0 0 0-6.73 6.01z",fill:"#784d55"})),Ma||(Ma=sc.createElement("path",{d:"M842.96 392.44c.18-4.62.68-9.25.47-13.86-.18 4.62-.69 9.25-.47 13.86zm-102.81 23.24a18.46 18.46 0 0 1 .39-2.42c2.15-9.24 11.61-15.82 12.49-25.26a30.11 30.11 0 0 0 0-4.65c-1.09 9.26-10.32 15.79-12.44 24.91a24 24 0 0 0-.44 7.42zm-33.8 26.79a75.77 75.77 0 0 0-3.2-24.45c-1.95-6.4-4.75-12.56-6-19.14a33.67 33.67 0 0 1-.47-3.51 31.5 31.5 0 0 0 .47 8.51c1.24 6.58 4 12.74 6 19.14a76 76 0 0 1 3.2 19.45zm35.24 55.01c.37-3.75 1.35-7.48 1.34-11.27a21 21 0 0 0-.15-2.38c-.38 3.93-1.44 7.83-1.33 11.79.02.62.07 1.25.14 1.86zm-4.73-41.34c.75-7.15 4.29-14 4.62-21.22a30.93 30.93 0 0 0-.08-3.85c-.71 7.76-4.77 15.08-4.68 22.89 0 .73.06 1.46.14 2.18zm123.57 88.01a9.67 9.67 0 0 1-7.78-1.41c-3.41-2.35-5.46-6.15-7.94-9.46s-6-6.43-10.13-6.31c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59a22.21 22.21 0 0 1-3.89-11.94c-.34 6.07.38 12.12 3.89 16.94 6.63 9.13 20.67 9.61 30.77 4.59 2.51-1.24 5-2.8 7.82-2.88 4.14-.12 7.64 3 10.13 6.31s4.53 7.11 7.94 9.46 8.83 2.52 11.08-1a8.33 8.33 0 0 1-3.3-2.59zm-3.46-19.55c.72-24.69 11.47-49.16 10.71-73.75-.7 24.57-11.44 49.03-10.71 73.75zm-62.44-35.92a28.4 28.4 0 0 0-1.92-13.29c-2-4.57-5.75-8.78-6.84-13.42-.09.34-.16.68-.22 1-.91 6.3 4.49 11.54 7.06 17.38a24.8 24.8 0 0 1 1.92 8.33zm-61.76 41.91c-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.21-14.19-3.38-21.32-1-6.13-3.45-12-3.94-18.17a33.25 33.25 0 0 0 0 4.89c.47 6.22 3 12.12 4 18.28 1.17 7.13.39 14.74 3.38 21.32 4.06 8.91 13.83 13.5 22.83 17.36 7.22 3.09 15.63 6.17 22.59 2.55-.61-1.41-1.21-2.82-1.83-4.23-6.63 2.3-14.23-.49-20.82-3.32zm54.95-153.88c4.79 5.84 6.82 13.39 8.73 20.7 2.26 8.61 4.5 17.32 4.86 26.21.07-1.27.09-2.54.06-3.8-.19-9.31-2.56-18.41-4.92-27.41-1.91-7.31-3.94-14.86-8.73-20.7a19.06 19.06 0 0 0-18.87-6.9c-2.94.53-5.71-.75-8.77.12a9.72 9.72 0 0 0-6.69 6.06 18.82 18.82 0 0 0-.44 7 12.07 12.07 0 0 1 .44-2 9.72 9.72 0 0 1 6.69-6.06c3.06-.87 5.83.41 8.77-.12a19.06 19.06 0 0 1 18.87 6.9zm29.47 168.63s15.53 41.34-20.47 58c0 0-64.48-7.29-84.33-2s-20.41-39.33-11.37-42 116.17-14 116.17-14z",opacity:.1})),ga||(ga=sc.createElement("path",{d:"M816.19 543.34s15.53 41.34-20.47 58c0 0-64.48-7.29-84.33-2s-20.41-39.33-11.37-42 116.17-14 116.17-14z",fill:"#eb6475"})),ka||(ka=sc.createElement("path",{d:"m682.13 556.22 5.65 33.5s1.42-25.29-5.65-33.5zm80.9-39.23s-1.29 15-1.89 19.67 4.19-18.32 1.89-19.67z",opacity:.1})),ba||(ba=sc.createElement("path",{d:"M778.43 732.29s13.7 24.23 24.62 7.06m37.14 11.29s33.31 17.35 21.17 24.18",fill:"none",stroke:"#000",strokeMiterlimit:10,opacity:.1})),wa||(wa=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-10.25 3.64-32.64 4.06-32.64 4.06l-42.23-1-20.9-3a87.51 87.51 0 0 1-9.92-3.47c-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.6 6.76 53.62 13.69z",fill:"#534d72"})),Ha||(Ha=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-10.25 3.64-32.64 4.06-32.64 4.06l-42.23-1-20.9-3a87.51 87.51 0 0 1-9.92-3.47c-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.6 6.76 53.62 13.69z",opacity:.1})),Oa||(Oa=sc.createElement("path",{d:"m485.96 633.14-1.25 26.38-.56 11.82-1.85 39-.5 10.7-1.36 28.57c-32.47 16.11-102.29 0-102.29 0l-1.08-28.57-.53-14-1.35-35.73-.55-14.58-.94-25.11c39.26 12.98 112.26 1.52 112.26 1.52z",fill:"#534d72"})),Ga||(Ga=sc.createElement("path",{d:"m484.71 659.52-.56 11.82h-109l-.55-14.58c14.07 4.4 72.97 21.01 110.11 2.76zm-2.41 50.84-.5 10.7H377.07l-.53-14c16.45 4.98 70.06 19.05 105.76 3.3z",opacity:.1})),Ta||(Ta=sc.createElement("ellipse",{cx:429.83,cy:667.8,rx:26.28,ry:11.12,opacity:.1})),La||(La=sc.createElement("ellipse",{cx:429.83,cy:667.16,rx:26.28,ry:11.12,fill:"#a4a4a4"})),Ca||(Ca=sc.createElement("ellipse",{cx:432.69,cy:633.25,rx:39.47,ry:4.99,opacity:.1})),Ia||(Ia=sc.createElement("ellipse",{cx:432.91,cy:633.67,rx:39.47,ry:4.99,fill:"#a4a4a4"})),ja||(ja=sc.createElement("path",{d:"M486.6 630.42c-.41 1.43-2.26 2.6-4.93 3.55-6.93-18.28-51.81-13.35-51.81-13.35-32.35-2-49.22 7-53.85 10-2.49-1.09-4.58-2.31-5-3.42 0 0 29.71-12.84 62-10.4s55.57 6.68 53.59 13.62z",opacity:.1})),Za||(Za=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-6.93-18.28-51.81-13.35-51.81-13.35-32.35-2-49.22 7-53.85 10-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.57 6.7 53.59 13.63z",fill:"#534d72"})),Pa||(Pa=sc.createElement("path",{d:"M377.95 743.81s-6.91 3.19-.43 8.49 49.44 8.69 60.27 6.69c0 0 39.37-2.12 44.51-7.75 0 0 .12-3.8-1.77-3.92 0 0-15.21 6.73-48.79 6.15s-55.48-2.88-53.79-9.66z",opacity:.1})),Fa||(Fa=sc.createElement("path",{d:"M377.95 744.23s-6.91 3.19-.43 8.5 49.44 8.7 60.27 6.68c0 0 39.37-2.12 44.51-7.74 0 0 .12-3.81-1.77-3.92 0 0-15.21 6.72-48.79 6.14s-55.48-2.9-53.79-9.66zm-1.26-33.91c-4.16-1.17-20.29-7.58-12.21-35 0 0 8.7-29.4 14-36.4 0 0-.92-1.64-2.22 0s-5.2 11.36-5.2 11.36-16.88 31.93-8.39 50.29c2.93 6.34 8.21 10 13.87 12",fill:"#534d72"})),Sa||(Sa=sc.createElement("path",{d:"M370.94 627.2s-.53 4.68 2.81 6.37 97.57 13.79 112.21 3c0 0 2.12-6.58 0-6.37s-84.46 14.4-115.02-3z",opacity:.1})),Va||(Va=sc.createElement("path",{d:"M370.94 626.77s-.53 4.68 2.81 6.38 97.57 13.78 112.21 3c0 0 2.12-6.58 0-6.37s-84.46 14.4-115.02-3.01z",fill:"#534d72"})),Aa||(Aa=sc.createElement("circle",{cx:378.42,cy:639.66,r:4.83,opacity:.1})),qa||(qa=sc.createElement("circle",{cx:377.74,cy:638.92,r:4.83,fill:"#534d72"})),Da||(Da=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 6.2 2.2 19.74 2.45 19.74 2.45l25.55-.57 12.64-1.8a53.57 53.57 0 0 0 6-2.1c1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.04-32.5 8.24z",fill:"#534d72"})),Na||(Na=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 6.2 2.2 19.74 2.45 19.74 2.45l25.55-.57 12.64-1.8a53.57 53.57 0 0 0 6-2.1c1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.04-32.5 8.24z",opacity:.1})),_a||(_a=sc.createElement("path",{d:"m253.28 631.31.75 15.95.34 7.15 1.12 23.6.31 6.48.81 17.28c19.64 9.74 61.88 0 61.88 0l.65-17.28.32-8.46.82-21.61.33-8.81.57-15.19c-23.75 7.82-67.9.89-67.9.89z",fill:"#534d72"})),Ua||(Ua=sc.createElement("path",{d:"m254.03 647.26.34 7.15h65.91l.33-8.81c-8.49 2.66-44.11 12.71-66.58 1.66zm1.46 30.73.31 6.48h63.34l.32-8.46c-9.95 2.98-42.37 11.54-63.97 1.98z",opacity:.1})),Ba||(Ba=sc.createElement("ellipse",{cx:287.23,cy:652.27,rx:15.9,ry:6.72,opacity:.1})),Ra||(Ra=sc.createElement("ellipse",{cx:287.23,cy:651.89,rx:15.9,ry:6.72,fill:"#a4a4a4"})),Wa||(Wa=sc.createElement("ellipse",{cx:287.23,cy:651.89,rx:15.9,ry:6.72,fill:"#fff",opacity:.5})),Xa||(Xa=sc.createElement("ellipse",{cx:285.5,cy:631.37,rx:23.88,ry:3.02,opacity:.1})),Ka||(Ka=sc.createElement("ellipse",{cx:285.37,cy:631.63,rx:23.88,ry:3.02,fill:"#a4a4a4"})),Ja||(Ja=sc.createElement("ellipse",{cx:285.5,cy:631.66,rx:23.88,ry:3.02,fill:"#fff",opacity:.5})),Qa||(Qa=sc.createElement("path",{d:"M252.86 629.66c.25.87 1.37 1.58 3 2.15 4.2-11.06 31.36-8.07 31.36-8.07 19.57-1.19 29.77 4.25 32.57 6 1.5-.67 2.77-1.4 3.05-2.08 0 0-18-7.76-37.48-6.29s-33.67 4.1-32.5 8.29z",opacity:.1})),Ya||(Ya=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 4.2-11.06 31.36-8.07 31.36-8.07 19.57-1.18 29.77 4.25 32.57 6 1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.09-32.5 8.29z",fill:"#534d72"})),$a||($a=sc.createElement("path",{d:"M318.61 698.25s4.18 1.93.26 5.14-29.91 5.26-36.45 4c0 0-23.82-1.28-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.2 4.07 29.51 3.72s33.56-1.7 32.54-5.8z",opacity:.1})),el||(el=sc.createElement("path",{d:"M318.61 698.5s4.18 1.93.26 5.14-29.91 5.27-36.45 4.05c0 0-23.82-1.29-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.2 4.07 29.51 3.72s33.56-1.74 32.54-5.85zm.76-20.51c2.52-.71 12.27-4.58 7.39-21.17 0 0-5.27-17.78-8.47-22 0 0 .56-1 1.34 0s3.15 6.86 3.15 6.86 10.2 19.31 5.08 30.42a14.06 14.06 0 0 1-8.39 7.26",fill:"#534d72"})),tl||(tl=sc.createElement("path",{d:"M322.86 627.71s.32 2.84-1.7 3.86-59 8.34-67.87 1.79c0 0-1.29-4 0-3.85s51.08 8.73 69.57-1.8z",opacity:.1})),al||(al=sc.createElement("path",{d:"M322.86 627.46s.32 2.83-1.7 3.85-59 8.34-67.87 1.8c0 0-1.29-4 0-3.85s51.08 8.73 69.57-1.8z",fill:"#534d72"})),ll||(ll=sc.createElement("circle",{cx:318.32,cy:635.25,r:2.92,opacity:.1})),cl||(cl=sc.createElement("circle",{cx:318.74,cy:634.81,r:2.92,fill:"#534d72"})),rl||(rl=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 6.2 2.19 19.74 2.45 19.74 2.45l25.54-.58 12.64-1.8a52.83 52.83 0 0 0 6-2.1c1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.08-32.44 8.24z",fill:"#534d72"})),nl||(nl=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 6.2 2.19 19.74 2.45 19.74 2.45l25.54-.58 12.64-1.8a52.83 52.83 0 0 0 6-2.1c1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.08-32.44 8.24z",opacity:.1})),il||(il=sc.createElement("path",{d:"m983.72 635.05.76 16 .34 7.15 1.11 23.6.31 6.47.82 17.28c19.64 9.75 61.87 0 61.87 0l.65-17.28.32-8.46.82-21.61.33-8.82.58-15.19c-23.77 7.8-67.91.86-67.91.86z",fill:"#534d72"})),sl||(sl=sc.createElement("path",{d:"m984.48 650.99.34 7.15h65.9l.33-8.82c-8.48 2.67-44.11 12.73-66.57 1.67zm1.45 30.77.31 6.47h63.34l.32-8.46c-9.94 3.01-42.37 11.52-63.97 1.99z",opacity:.1})),ol||(ol=sc.createElement("ellipse",{cx:1017.67,cy:656.02,rx:15.9,ry:6.72,opacity:.1})),ml||(ml=sc.createElement("ellipse",{cx:1017.67,cy:655.63,rx:15.9,ry:6.72,fill:"#a4a4a4"})),dl||(dl=sc.createElement("ellipse",{cx:1017.67,cy:655.63,rx:15.9,ry:6.72,opacity:.2})),fl||(fl=sc.createElement("ellipse",{cx:1015.94,cy:635.12,rx:23.88,ry:3.02,opacity:.1})),pl||(pl=sc.createElement("ellipse",{cx:1015.81,cy:635.37,rx:23.88,ry:3.02,fill:"#a4a4a4"})),hl||(hl=sc.createElement("ellipse",{cx:1016.84,cy:635.12,rx:23.88,ry:3.02,opacity:.2})),yl||(yl=sc.createElement("path",{d:"M983.33 633.41c.25.86 1.37 1.57 3 2.14 4.19-11.06 31.35-8.07 31.35-8.07 19.57-1.18 29.77 4.25 32.57 6 1.51-.66 2.77-1.4 3-2.07 0 0-18-7.77-37.48-6.29s-33.63 4.09-32.44 8.29z",opacity:.1})),ul||(ul=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 4.19-11.06 31.35-8.08 31.35-8.08 19.57-1.18 29.77 4.25 32.57 6 1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.13-32.44 8.29z",fill:"#534d72"})),El||(El=sc.createElement("path",{d:"M1007.29 629.99s-.04 0 0 0z",fill:"#9d9cb5"})),xl||(xl=sc.createElement("path",{d:"m1027.57 646.13.55 2.54c-1-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7a11.67 11.67 0 0 0 0 2.84c-1.25-1.34-2.28-5.18-2.28-5.18-.38.27-.31 2.81-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.57-.88-.44-.59a18.22 18.22 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.86 1.93-.9-1.86c0 .08.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.87-.1-2.15-.09c.38-.21 4-3.84 4-3.84s.08-.14.23-.36a28.11 28.11 0 0 1 2.79-3.79 23.22 23.22 0 0 0 2.48-3.39c.31-.47.51-.8.51-.8l18.77 11.17-.36.86c-.22.5-.45 1-.7 1.48-.39.76-.82 1.5-1.28 2.22-.93 1.45-2.16 3.35-3.12 4.82-.59.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.69 17.69 0 0 1-1.91-2.66z",fill:"#e4e3f9"})),zl||(zl=sc.createElement("path",{d:"M1027.52 646.13v-4.79c0-1.19 5.84-13.05 6.09-13.55h.08c-.07.13-6.07 12.34-6.08 13.52s0 4.75 0 4.79z",opacity:.1})),vl||(vl=sc.createElement("path",{d:"M1007.29 629.99s-.04 0 0 0z",fill:"none"})),Ml||(Ml=sc.createElement("path",{d:"M1010.42 635.21a27.07 27.07 0 0 1-.82-3.35c-.1-.86.73-2.11 1.33-3a6.16 6.16 0 0 0 .5-.83 44.25 44.25 0 0 1 2.65-3.67s2.33-3.28 2.49-3.75a15.58 15.58 0 0 1 1.26-2h.07a14.59 14.59 0 0 0-1.25 2c-.16.48-2.4 3.64-2.5 3.78s-2.39 3.05-2.64 3.65a5.17 5.17 0 0 1-.51.83c-.56.85-1.41 2.14-1.31 3a29.7 29.7 0 0 0 .81 3.33z",opacity:.1})),gl||(gl=sc.createElement("path",{d:"M1010.94 634.58c-.22-.45 1.11-4.11 1.37-4.38s2.34-4.25 2.42-4.46 3.25-5 4.24-6.53h.07c-1.44 2.2-4.17 6.39-4.23 6.51s-2.14 4.16-2.44 4.49a14.76 14.76 0 0 0-1.35 4.28zm2.86 3.82c-1.48-1.89.48-8.37.5-8.44.21-.68 5.89-9.45 6.13-9.83l.07.05c-.05.09-5.91 9.13-6.12 9.81-.55 1.8-1.72 6.82-.51 8.35zm2.06 1.32c-1.31-2.58 1.1-8.13 1.12-8.18.19-.42 5.48-9.37 5.7-9.75h.08c-.06.09-5.51 9.33-5.7 9.74 0 .06-2.41 5.56-1.12 8.11z",opacity:.1})),kl||(kl=sc.createElement("path",{d:"M1017.41 642.29c-1-1.17-1.14-3.39-.44-6.61a32.55 32.55 0 0 1 1.38-4.57l5-9.25h.07l-5 9.25c0 .08-3.33 8.43-.9 11.14l-.07.06z",opacity:.1})),bl||(bl=sc.createElement("path",{d:"M1018.07 642.84c-.66-1.35 0-5.32.48-7.15s6.58-11.85 6.84-12.28l.08.05c-.07.1-6.37 10.55-6.83 12.25s-1.13 5.78-.49 7.09z",opacity:.1})),wl||(wl=sc.createElement("path",{d:"m1019.32 640.87 1-4.39a11.45 11.45 0 0 1 1.22-3.21l2.44-4.32 3-4.62h.07l-3 4.62-2.43 4.31a11.76 11.76 0 0 0-1.22 3.19l-1 4.39zm3.27 5.31c-1.27-1.49-.54-5.6-.14-7.85.08-.47.15-.85.17-1.08.14-1.3 5.68-11.79 5.92-12.24h.07c0 .11-5.76 10.92-5.9 12.21 0 .23-.09.61-.18 1.09-.38 2.15-1.17 6.63.28 7.93l-.06.07a1.29 1.29 0 0 1-.16-.13z",opacity:.1})),Hl||(Hl=sc.createElement("path",{d:"M1022.75 643.59s.17-2.36.15-2.92a64.54 64.54 0 0 1 2.1-6.26l4.32-9h.08l-4.32 9s-2.13 5.67-2.1 6.22-.13 2.84-.14 2.94z",opacity:.1})),Ol||(Ol=sc.createElement("path",{d:"M1025.11 648.2c-2.09-3.22-.08-11.46.25-12.14s4.86-10.09 4.91-10.18h.07c0 .09-4.57 9.51-4.9 10.18s-2.33 8.86-.26 12z",opacity:.1})),Gl||(Gl=sc.createElement("path",{d:"M1027.6 648.22c-2.76-3.26-.35-11.5 0-12.22l4.17-9.07h.08l-4.17 9.08c-.35.75-3 9.81.49 12.59v.07a3.25 3.25 0 0 1-.57-.45z",opacity:.1})),Tl||(Tl=sc.createElement("path",{d:"m1035.68 629.87-18.82-11.25c.31-.47.51-.8.51-.8l18.67 11.17z",opacity:.1})),Ll||(Ll=sc.createElement("path",{d:"m1036.19 629.86-19.63-11.73 2.92-3.48 2.13-2.54s.39-2.23 2.18-2.27 5.37 3.84 6.73 3.21 5.58-8.81 5.58-8.81 8.34-11 9.06-12.22 7.77-6.58 7.77-6.58c1.15 0-.73 4.78-.87 6s-6.16 10.53-7 11-7.26 8.8-7.26 8.8c-2.82 2.39-2.94 4.61-2.94 4.61a26.26 26.26 0 0 1 5.45 3.91 1.74 1.74 0 0 1 .25 2.07l-2.22 4.43z",fill:"#535461"})),Cl||(Cl=sc.createElement("path",{d:"m1036.19 629.86-19.63-11.73 2.92-3.48c1.76 1.44 13 10.46 18.84 11.52z",opacity:.1})),Il||(Il=sc.createElement("path",{d:"m1027.57 646.13.55 2.54c-1-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7-.24.2 0 2.84 0 2.84-1.25-1.34-2.28-5.18-2.28-5.18-.39.27-.31 2.8-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.57-.88-.44-.59a18.22 18.22 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.86 1.93-.9-1.86c0 .07.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.87-.1-2.15-.09c.38-.21 4-3.84 4-3.84l.23-.36c.17.54.3 1.07.43 1.43a3.4 3.4 0 0 0 .79 1.4 2.55 2.55 0 0 0 2.06.5c.73-.09 1.43-.33 2.15-.41a1.19 1.19 0 0 1 .91.16 1.52 1.52 0 0 1 .43.82 11.8 11.8 0 0 0 3.54 5.54 1.47 1.47 0 0 0 .57.35 2.24 2.24 0 0 0 .89 0 3 3 0 0 1 3 1.61c.24.5.39 1.13.89 1.38a1.86 1.86 0 0 0 .94.08l2.41-.23c-.59.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.69 17.69 0 0 1-1.83-2.72z",fill:"#a4a4a4"})),jl||(jl=sc.createElement("path",{d:"m1027.67 646.13.56 2.54c-.95-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7-.24.2 0 2.84 0 2.84-1.25-1.34-2.28-5.18-2.28-5.18-.39.27-.31 2.8-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.58-.88-.45-.59a18.37 18.37 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.87 1.93-.89-1.86c0 .07.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.88-.1-2.15-.09c.37-.21 4-3.84 4-3.84l.23-.36c.17.54.3 1.07.43 1.43a3.4 3.4 0 0 0 .79 1.4 2.55 2.55 0 0 0 2.06.5c.73-.09 1.42-.33 2.15-.41a1.2 1.2 0 0 1 .91.16 1.52 1.52 0 0 1 .43.82 11.8 11.8 0 0 0 3.54 5.54 1.51 1.51 0 0 0 .56.35 2.29 2.29 0 0 0 .9 0 3 3 0 0 1 3 1.61c.24.5.39 1.13.89 1.38a1.86 1.86 0 0 0 .94.08l2.41-.23c-.6.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.16 17.16 0 0 1-1.83-2.72z",opacity:.2})),Zl||(Zl=sc.createElement("path",{d:"M1049.05 701.99s4.18 1.93.26 5.14-29.9 5.26-36.45 4c0 0-23.82-1.28-26.93-4.68 0 0-.07-2.3 1.07-2.37 0 0 9.21 4.06 29.52 3.71s33.56-1.7 32.53-5.8z",opacity:.1})),Pl||(Pl=sc.createElement("path",{fill:"#534d72",d:"M1002.97 637.31h32.5v11.39h-32.5zm46.08 64.94s4.18 1.93.26 5.14-29.9 5.26-36.45 4c0 0-23.82-1.28-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.21 4.07 29.52 3.72s33.56-1.7 32.53-5.8zm.81-20.52c2.52-.71 12.28-4.58 7.39-21.17 0 0-5.26-17.78-8.47-22 0 0 .56-1 1.35 0s3.14 6.87 3.14 6.87 10.21 19.32 5.07 30.42a14 14 0 0 1-8.39 7.26"})),Fl||(Fl=sc.createElement("path",{d:"M1053.29 631.46s.32 2.83-1.7 3.85-59 8.34-67.87 1.8c0 0-1.28-4 0-3.86s51.14 8.74 69.57-1.79z",opacity:.1})),Sl||(Sl=sc.createElement("path",{d:"M1053.29 631.2s.32 2.83-1.7 3.86-59 8.34-67.87 1.79c0 0-1.28-4 0-3.85s51.14 8.73 69.57-1.8z",fill:"#534d72"})),Vl||(Vl=sc.createElement("circle",{cx:1048.77,cy:639,r:2.92,opacity:.1})),Al||(Al=sc.createElement("circle",{cx:1049.18,cy:638.55,r:2.92,fill:"#534d72"})),ql||(ql=sc.createElement("ellipse",{cx:116.42,cy:773.8,rx:26.93,ry:4.55,fill:"#a4a4a4",opacity:.1})),Dl||(Dl=sc.createElement("path",{d:"M1076.36 814.87a11.66 11.66 0 0 0 3.83-5.78c.5-2.3-.48-5.06-2.67-5.9-2.46-.94-5.09.77-7.09 2.49s-4.27 3.69-6.88 3.32a10.47 10.47 0 0 0 3.24-9.81 4.12 4.12 0 0 0-.9-2c-1.37-1.46-3.84-.83-5.48.32-5.2 3.65-6.65 10.72-6.68 17.07-.52-2.29-.08-4.68-.09-7s-.66-5-2.64-6.22a8 8 0 0 0-4-1c-2.34-.09-4.94.15-6.54 1.86-2 2.12-1.47 5.69.26 8s4.35 3.81 6.76 5.42a15 15 0 0 1 4.84 4.62 5.19 5.19 0 0 1 .36.82h14.65a40.77 40.77 0 0 0 9.03-6.21z",fill:"#a4a4a4"})),Nl||(Nl=sc.createElement("path",{d:"M98.34 752.64s15.36-.47 20-3.77 23.62-7.23 24.77-1.94 23.08 26.29 5.74 26.43-40.29-2.7-44.91-5.52-5.6-15.2-5.6-15.2z",fill:"#a8a8a8"})),_l||(_l=sc.createElement("path",{d:"M149.15 771.52c-17.34.14-40.29-2.7-44.91-5.52-3.52-2.14-4.92-9.83-5.39-13.38h-.51s1 12.39 5.59 15.2 27.57 5.66 44.91 5.52c5 0 6.74-1.82 6.64-4.46-.69 1.61-2.62 2.61-6.33 2.64z",opacity:.2})),Ul||(Ul=sc.createElement("path",{d:"M247.46 385.54s4 11 2.46 20.5.53 2.83 1.78 6.95 1.26 18.24 1.26 18.24v-9.68s-.46-14.75 0-19.13-5.5-16.88-5.5-16.88zm36.51-16.39s4 11 2.46 20.5.53 2.83 1.78 6.94 1.26 18.25 1.26 18.25v-9.69s-.46-14.75 0-19.12-5.5-16.88-5.5-16.88z",fill:"#a4a4a4",opacity:.5})),Bl||(Bl=sc.createElement("path",{d:"M267.41 259.33s7.92 11 4.92 20.5-5 14.77-2.5 18.89 8.58 6.3 8.58 6.3v-9.68s-.92-14.75 0-19.13-11-16.88-11-16.88zm186.19-10.25s-1.41 13.46-10 18.57-13.53 7.73-14.41 12.46 2.19 10.38 2.19 10.38l6.43-7.23s9.12-11.63 12.72-14.29 3.07-19.89 3.07-19.89z",fill:"#fff",opacity:.5})),Rl||(Rl=sc.createElement("path",{d:"M530.27 491.13a29.43 29.43 0 0 0-1.14 4.21 4.2 4.2 0 0 0 1.4 3.92 1.42 1.42 0 0 0 1.1.3c.8-.17 1-1.2 1-2 0-1.61 0-3.22-.1-4.84a12.57 12.57 0 0 0-.41-3.24 3.76 3.76 0 0 0-1.64-2.31c-.37.82.1 2.76-.21 3.96zm17.71 9.86a30.11 30.11 0 0 0-1.13 4.21 4.16 4.16 0 0 0 1.4 3.92 1.41 1.41 0 0 0 1.09.31c.81-.17 1-1.2 1-2 0-1.61 0-3.22-.09-4.83a13.17 13.17 0 0 0-.42-3.25 3.73 3.73 0 0 0-1.63-2.3c-.34.83.1 2.75-.22 3.94zm-8.44-12.9a12.06 12.06 0 0 0 .48-1.76 1.76 1.76 0 0 0-.59-1.64.56.56 0 0 0-.46-.13c-.34.07-.43.5-.44.85v2a5.18 5.18 0 0 0 .18 1.36 1.52 1.52 0 0 0 .68 1c.21-.37.02-1.17.15-1.68zm95.51-191a12.19 12.19 0 0 0 .48-1.77 1.75 1.75 0 0 0-.59-1.64.64.64 0 0 0-.46-.13c-.34.07-.43.51-.43.85v2a4.83 4.83 0 0 0 .17 1.36 1.61 1.61 0 0 0 .68 1c.22-.37.02-1.17.15-1.67z",fill:"#a4a4a4"})),Wl||(Wl=sc.createElement("ellipse",{cx:548.62,cy:732.82,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Xl||(Xl=sc.createElement("ellipse",{cx:554.91,cy:733.54,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Kl||(Kl=sc.createElement("ellipse",{cx:557.53,cy:730.53,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Jl||(Jl=sc.createElement("ellipse",{cx:562.44,cy:734.05,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Ql||(Ql=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m300.02 251.23 1.03 5.48 1.96-7.68-2.99 2.2zm-7.58-65.15 11.36 59.83 4.89-19.14h-.59l8.31-46.18q-8.42 1.62-16.54 3.59l1.75 15.94-4.09-15.37q-2.57.67-5.09 1.33z"})),Yl||(Yl=sc.createElement("path",{d:"m616.61 258.53-1.41 8.09 1.41 8.09c1.94-2.66 3.73-5.36 5.4-8.09-1.67-2.74-3.46-5.43-5.4-8.09z",fill:"#a4a4a4",opacity:.8})),$l||($l=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m286.73 266.62.16 5.75 8.56 6.28 3.07-12.03-3.07-12.03-8.56 6.28-.16 5.75zm14.32 9.91-1.03 5.48 2.99 2.2-1.96-7.68zm-98.19 8.97-4.73-13.84-6.91 25.52c2 1.75 12.93 3.47 15.07 5.16 1.57-5.73-5.43-11.63-3.43-16.84zm67 5.91 5.43-24.79 7.46-50.7c-5 1.74-14.21-6.69-19-4.75l-5.3 14.92-8.31-25.68c-4 1.68-18.17 23.21-21.94 25l6.38 41.2 10 43.05c3.77 1.81 1.65 21.48 5.61 23.16l8.31-25.68-4.41 27.29c4.77 1.95 10.77-44.76 15.77-43.02zm46.55 61.2-8.31-46.18h.59l-4.89-19.15-11.36 59.83q2.52.68 5.09 1.3l4.09-15.37-1.76 15.95c5.43 1.33 10.94 2.54 16.55 3.62zM197.39 230.9q-3.19 2.54-6.21 5.16l6.91 25.51 4.77-13.84c-2-5.21-3.85-11.1-5.47-16.83zm-11.08 9.58-3.51 51.44c.27.27 4.07 1.36 4.35 1.62l9.21-26.92-9.21-26.93c-.29.3-.57.52-.84.79z"})),ec||(ec=sc.createElement("path",{d:"m236 309.67-18.4-117.5q-6.12 3.3-11.85 6.81c2.49 17.22 16 64.25 8.48 65.06-3.45.38-7.06-5.5-10.38-13.68l-4.4 16.26 4.4 16.26c3.32-8.18 6.93-14.06 10.38-13.69 7.55.81-3.24 10.51-5.73 27.73 3.81 2.35 23.41 10.56 27.5 12.75z",fill:"#a4a4a4",opacity:.8})),tc||(tc=sc.createElement("path",{d:"M320.16 353.31q10.86 2 22.14 3.39l-5.13-40.95-.75 14.24-.9-27.4-.51-4-2.15 19.75-4.85-7.76 5.8-21.8-1.37-10.79-2.58-1.92 1.18-9.45-1.18-9.45 2.61-1.92 1.35-10.8-5.8-21.8 4.85-7.75 2.17 19.8.51-4 .9-27.41.75 14.24 9.08-6.59c-5.59 4.48 19.84 38.67-26.09-31l-2 46.17-7.72.55-7.55 40 7.55 40 7.72.55zm235.4-150.32c-2.14-1-4.31-1.91-6.5-2.83l-6.43 14.21 14.89 2.62zm-35.04 74.28c-2.17-.87 2.22-54.91 0-55.75l8.24-7.35-3.06 47.4z",fill:"#a4a4a4",opacity:.5})),ac||(ac=sc.createElement("path",{d:"m180.25 270.19 2.55-3.57-1.84-20.81a122.16 122.16 0 0 0-16.1 20.81c4.39 7.22 9.07-3.05 15.39 3.57z",fill:"#a4a4a4",opacity:.95})),lc||(lc=sc.createElement("path",{d:"M546.5 314.86c2.76-1.48 17.7 4.47 20.34 2.92l8.47-51.16-3.56-38.11c-2.64-1.56-13.34-1.18-16.1-2.66l-5.89 28.49-4.6-32.82-7.58 45.1-5.28 35.8 17.46-23.53zm-35.02 27.32-21.19-73.87-5.31 15.13 4.88-16.82-4.83-16.82 5.31 15.13 21.19-73.87c-3.86-1.24-7.77-2.42-11.76-3.54v39.29l-11.72-24.14c-6.36-1.66-8.79-.51-15.43-1.85l-4.29 15.39q-6.69-1.22-13.47-2.22l2.43-13.8-6 13.27c-2.28-.32-4.56-.63-6.86-.91l13.43 51.56 2.32-10-1.93 12.55 1.93 12.55-2.32-28-13.47 87.59q3.45 26.56 6.86-.91l6-22.73-2.39 22.12c4.53 17.32 9-1.43 13.44-2.25l4.29-2.61 1.62 1.45c6.64-1.35 13.15 15.15 19.51 13.49l6-40.93v39.29c3.99-1.12 7.9-2.31 11.76-3.54z",fill:"#a4a4a4",opacity:.5})),cc||(cc=sc.createElement("path",{d:"m490.86 295.81-8.19-28.54-2 5.85 1.86-6.5-1.86-6.5 2 5.84 8.19-28.53c-1.49-.48-3-.94-4.54-1.37v15.18l-2.33-15.82q-3.69-1-7.54-1.74l-.59 7.51-1.66-8c-1.71-.32-3.45-.6-5.2-.87l.94 8.58-2.33-8.78-2.65-.35 5.2 33.84.9-3.88-.75 4.85.75 4.85-.9-3.88-5.2 33.84 2.65-.35 2.33-8.78-.94 8.57c1.75-.26 3.49-.55 5.2-.87l1.66-8 .62 7.52q3.86-.78 7.54-1.75l2.33-15.74v15.18c1.51-.42 3.05-.88 4.51-1.36zM577 234.17l-1.54 31.53.29-1.73-.21 2.65.21 2.65-.29-1.74-.15 37.14c5.55-3.46 19.27-12.72 24.19-16.5l-19.09 15.82 3.52-37.38 8.07-16.95-4.66-20.43c-4.92-3.76-4.8 8.41-10.34 4.94z",fill:"#a4a4a4",opacity:.5})),rc||(rc=sc.createElement("path",{d:"M365.5 344.42c1.11-.23 34.11 15.15 35.22 14.92l3.05-92.72-10.55-53.35c-4.69-1-15-7.14-19.72-8.12l3.24 14.29 1.57 14.35-3-11.33-8.45 17.65 1.73 15.79-3.32-12.47-9 18.87-.53 4.32.53 4.32 9 18.86 3.32-12.46-1.73 15.78 8.41 17.66 3-11.33-1.57 14.35z",fill:"#a4a4a4",opacity:.6})),nc||(nc=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m281.27 268.23.08-1.61-.08-1.61-2.2 1.61 2.2 1.61zm233.85-1.61-4.15-55.63 8.18 1.45 1.37-18.35c-1.24-.44-2.48-.87-3.73-1.29l-25.93 73.82 25.9 73.8 3.73-1.3-1.37-18.35-8.18 1.46zm-81.82 75.7 13.95-75.7-16.77-47c-3.41-.44-6.86-.81-10.33-1.12l1.84-22.9-4.52 22.69q-3.87-.3-7.79-.5l-2.06 48.85 1.64 73.8c2.61-.13 5.63 18.74 8.21 18.54l4.52-21.3 10 19c3.48-.29-2.13-13.92 1.31-14.36z"})),ic||(ic=sc.createElement("path",{fill:"#a4a4a4",d:"m236 231.81 11.46 36.5 14.4-19.23 5.55-9.38-9.49 35.01-6.22 15.79-15.7-35.91v-22.78z"})))}},4489:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v=a(7294),M=["title","titleId"];function g(){return g=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,b=k(e,M);return v.createElement("svg",g({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:980,height:489.48,viewBox:"0 0 980 489.48","aria-labelledby":a},b),t?v.createElement("title",{id:a},t):null,l||(l=v.createElement("path",{d:"M207.06 0a205.979 205.979 0 0 0-77.685 15.067c-.993.407-1.99.816-2.988 1.235A206.78 206.78 0 0 0 0 207.06V433a9.01 9.01 0 0 0 9 9l.179.016c173.467 31.502 342.106 47.465 501.372 47.465q3.581 0 7.156-.011c156.555-.477 308.994-16.44 453.083-47.447L971 442a9.01 9.01 0 0 0 9-9V9a9.01 9.01 0 0 0-9-9z",fill:"#a4a4a4"})),c||(c=v.createElement("path",{"data-name":"Path 40",d:"M745.8 180.193a5.947 5.947 0 0 0 0 11.892h149.085a5.947 5.947 0 1 0 .195-11.892q-.097-.002-.195 0z",fill:"#3f3d56"})),r||(r=v.createElement("path",{d:"M928.694 178.537a1.17 1.17 0 0 0 0 1.655l5.023 5.023h-12.386a1.17 1.17 0 1 0 0 2.34h12.386l-5.023 5.023a1.17 1.17 0 1 0 1.655 1.654l7.02-7.02a1.17 1.17 0 0 0 0-1.655l-7.02-7.02a1.17 1.17 0 0 0-1.655 0zm-216.767 0a1.17 1.17 0 0 1 0 1.655l-5.022 5.023h12.385a1.17 1.17 0 1 1 0 2.34h-12.385l5.022 5.023a1.17 1.17 0 0 1-1.654 1.654l-7.02-7.02a1.17 1.17 0 0 1 0-1.655l7.02-7.02a1.17 1.17 0 0 1 1.654 0z",fill:"#fff"})),n||(n=v.createElement("g",{opacity:.4,fill:"#fff"},v.createElement("circle",{cx:751.82,cy:50.39,r:6.39}),v.createElement("circle",{cx:778.445,cy:50.39,r:6.39}),v.createElement("circle",{cx:805.069,cy:50.39,r:6.39}),v.createElement("circle",{cx:831.694,cy:50.39,r:6.39}),v.createElement("circle",{cx:858.318,cy:50.39,r:6.39}),v.createElement("circle",{cx:884.943,cy:50.39,r:6.39}),v.createElement("circle",{cx:911.567,cy:50.39,r:6.39}),v.createElement("circle",{cx:751.82,cy:70.625,r:6.39}),v.createElement("circle",{cx:778.445,cy:70.625,r:6.39}),v.createElement("circle",{cx:805.069,cy:70.625,r:6.39}),v.createElement("circle",{cx:831.694,cy:70.625,r:6.39}),v.createElement("circle",{cx:858.318,cy:70.625,r:6.39}),v.createElement("circle",{cx:884.943,cy:70.625,r:6.39}),v.createElement("circle",{cx:911.567,cy:70.625,r:6.39}),v.createElement("circle",{cx:751.82,cy:90.859,r:6.39}),v.createElement("circle",{cx:778.445,cy:90.859,r:6.39}),v.createElement("circle",{cx:805.069,cy:90.859,r:6.39}),v.createElement("circle",{cx:831.694,cy:90.859,r:6.39}),v.createElement("circle",{cx:858.318,cy:90.859,r:6.39}),v.createElement("circle",{cx:884.943,cy:90.859,r:6.39}),v.createElement("circle",{cx:911.567,cy:90.859,r:6.39}),v.createElement("circle",{cx:751.82,cy:111.094,r:6.39}),v.createElement("circle",{cx:778.445,cy:111.094,r:6.39}),v.createElement("circle",{cx:751.82,cy:131.329,r:6.39}),v.createElement("circle",{cx:778.445,cy:131.329,r:6.39}),v.createElement("circle",{cx:805.069,cy:131.329,r:6.39}),v.createElement("circle",{cx:805.069,cy:111.094,r:6.39}),v.createElement("circle",{cx:831.694,cy:111.094,r:6.39}),v.createElement("circle",{cx:858.318,cy:111.094,r:6.39}),v.createElement("circle",{cx:884.943,cy:111.094,r:6.39}),v.createElement("circle",{cx:911.567,cy:111.094,r:6.39}))),i||(i=v.createElement("path",{d:"M660.157 375.459a35.272 35.272 0 1 1 35.273-35.272 35.313 35.313 0 0 1-35.273 35.272zm0-68.545a33.272 33.272 0 1 0 33.273 33.273 33.31 33.31 0 0 0-33.273-33.273z",fill:"#3f3d56"})),s||(s=v.createElement("path",{d:"M673.68 336.806h-10.142v-10.143a3.38 3.38 0 0 0-6.761 0v10.143h-10.143a3.38 3.38 0 0 0 0 6.761h10.143v10.143a3.38 3.38 0 0 0 6.761 0v-10.143h10.143a3.38 3.38 0 1 0 0-6.761z",fill:"#fff"})),o||(o=v.createElement("g",{opacity:.4,fill:"#fff"},v.createElement("circle",{cx:54.024,cy:374.766,r:5.024}),v.createElement("circle",{cx:54.024,cy:353.833,r:5.024}),v.createElement("circle",{cx:54.024,cy:332.9,r:5.024}),v.createElement("circle",{cx:54.024,cy:311.967,r:5.024}),v.createElement("circle",{cx:54.024,cy:291.034,r:5.024}),v.createElement("circle",{cx:54.024,cy:270.101,r:5.024}),v.createElement("circle",{cx:54.024,cy:249.168,r:5.024}),v.createElement("circle",{cx:69.933,cy:374.766,r:5.024}),v.createElement("circle",{cx:69.933,cy:353.833,r:5.024}),v.createElement("circle",{cx:69.933,cy:332.9,r:5.024}),v.createElement("circle",{cx:69.933,cy:311.967,r:5.024}),v.createElement("circle",{cx:69.933,cy:291.034,r:5.024}),v.createElement("circle",{cx:69.933,cy:270.101,r:5.024}),v.createElement("circle",{cx:69.933,cy:249.168,r:5.024}),v.createElement("circle",{cx:85.842,cy:374.766,r:5.024}),v.createElement("circle",{cx:85.842,cy:353.833,r:5.024}),v.createElement("circle",{cx:85.842,cy:332.9,r:5.024}),v.createElement("circle",{cx:85.842,cy:311.967,r:5.024}),v.createElement("circle",{cx:85.842,cy:291.034,r:5.024}),v.createElement("circle",{cx:85.842,cy:270.101,r:5.024}),v.createElement("circle",{cx:85.842,cy:249.168,r:5.024}),v.createElement("circle",{cx:101.751,cy:374.766,r:5.024}),v.createElement("circle",{cx:101.751,cy:353.833,r:5.024}),v.createElement("circle",{cx:117.66,cy:374.766,r:5.024}),v.createElement("circle",{cx:117.66,cy:353.833,r:5.024}),v.createElement("circle",{cx:117.66,cy:332.9,r:5.024}),v.createElement("circle",{cx:101.751,cy:332.9,r:5.024}),v.createElement("circle",{cx:101.751,cy:311.967,r:5.024}),v.createElement("circle",{cx:101.751,cy:291.034,r:5.024}),v.createElement("circle",{cx:101.751,cy:270.101,r:5.024}),v.createElement("circle",{cx:101.751,cy:249.168,r:5.024}))),m||(m=v.createElement("path",{d:"M497.408 33.002H163.666a6.189 6.189 0 0 0-6.182 6.183v285.383a6.189 6.189 0 0 0 6.182 6.182h333.742a6.189 6.189 0 0 0 6.183-6.182V39.185a6.189 6.189 0 0 0-6.183-6.183zm3.705 291.566a3.718 3.718 0 0 1-3.705 3.716H163.666a3.71 3.71 0 0 1-3.704-3.716V39.185a3.71 3.71 0 0 1 3.704-3.717h333.742a3.718 3.718 0 0 1 3.705 3.717z",fill:"#3f3d56"})),d||(d=v.createElement("path",{d:"M240.702 280.006c0 .44-.011.88-.034 1.309a25.175 25.175 0 0 1-50.281 0 24.33 24.33 0 0 1-.035-1.309 25.175 25.175 0 1 1 50.35 0z",fill:"#fff"})),f||(f=v.createElement("path",{d:"M471.475 263.22H273.663a4.197 4.197 0 0 0 0 8.393h197.812a4.197 4.197 0 0 0 0-8.394z",fill:"#3f3d56"})),p||(p=v.createElement("path",{d:"M358.78 288.4h-85.117a4.191 4.191 0 0 0 0 8.382h85.117a4.191 4.191 0 1 0 0-8.382zm217.918-54.819h-333.74a8.559 8.559 0 0 1-8.549-8.55V78.57a8.559 8.559 0 0 1 8.549-8.549h333.74a8.559 8.559 0 0 1 8.55 8.55V225.03a8.559 8.559 0 0 1-8.55 8.55zM242.958 73.02a5.555 5.555 0 0 0-5.549 5.55v146.46a5.556 5.556 0 0 0 5.549 5.55h333.74a5.556 5.556 0 0 0 5.55-5.55V78.57a5.555 5.555 0 0 0-5.55-5.549z",fill:"#fff"})),h||(h=v.createElement("path",{d:"M310.924 123.44a4.196 4.196 0 1 0 0 8.391h197.808a4.196 4.196 0 1 0 0-8.392zm0 24.312a4.196 4.196 0 0 0 0 8.392h197.808a4.196 4.196 0 0 0 0-8.392zm0 24.018a4.196 4.196 0 0 0 0 8.392h85.117a4.196 4.196 0 0 0 0-8.392zm320.8 123.863-33.52-47.307 10.85 2.26a1.501 1.501 0 1 0 .613-2.939l-16.17-3.366-2.183 16.37a1.501 1.501 0 1 0 2.976.397l1.463-10.993 33.523 47.312a1.5 1.5 0 1 0 2.448-1.734z",fill:"#fff"})),y||(y=v.createElement("path",{d:"M449.666 433.32H211.409a4.417 4.417 0 0 1-4.412-4.412v-59.101a4.417 4.417 0 0 1 4.412-4.412h238.257a4.417 4.417 0 0 1 4.412 4.412v59.101a4.417 4.417 0 0 1-4.412 4.413zm-238.257-66.16a2.65 2.65 0 0 0-2.647 2.647v59.101a2.65 2.65 0 0 0 2.647 2.648h238.257a2.65 2.65 0 0 0 2.647-2.648v-59.101a2.65 2.65 0 0 0-2.647-2.647z",fill:"#3f3d56"})),u||(u=v.createElement("circle",{cx:248.429,cy:397.09,r:17.973,fill:"#fff"})),E||(E=v.createElement("path",{d:"M289.938 385.108a2.995 2.995 0 1 0 0 5.991h141.215a2.995 2.995 0 1 0 0-5.99zm0 17.972a2.995 2.995 0 1 0 0 5.992h60.765a2.995 2.995 0 1 0 0-5.991z",fill:"#fff"})),x||(x=v.createElement("path",{d:"M764.024 222.756h105.893a4.417 4.417 0 0 1 4.412 4.412V337.45a4.417 4.417 0 0 1-4.412 4.413H764.024a4.417 4.417 0 0 1-4.412-4.413V227.168a4.417 4.417 0 0 1 4.413-4.412zm105.893 117.342a2.65 2.65 0 0 0 2.647-2.648V227.168a2.65 2.65 0 0 0-2.647-2.647H764.024a2.65 2.65 0 0 0-2.647 2.647V337.45a2.65 2.65 0 0 0 2.648 2.648z",fill:"#3f3d56"})),z||(z=v.createElement("path",{d:"M847.353 319.12a2.995 2.995 0 0 0 0-5.99h-60.765a2.995 2.995 0 0 0 0 5.99zm0-17.648a2.995 2.995 0 1 0 0-5.991h-60.765a2.995 2.995 0 1 0 0 5.99zm-30.383-55.974a18.855 18.855 0 1 1-18.855 18.855 18.876 18.876 0 0 1 18.855-18.855z",fill:"#fff"})))}},7627:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k=a(7294),b=["title","titleId"];function w(){return w=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,O=H(e,b);return k.createElement("svg",w({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1094,height:768.5,viewBox:"0 0 1094 768.5","aria-labelledby":a},O),void 0===t?k.createElement("title",{id:a},"image_focus"):t?k.createElement("title",{id:a},t):null,l||(l=k.createElement("path",{fill:"#3f3d56",d:"M530 707.5h564v2H530zM495.53 94.016l-17.664-18.938 18.938-17.663 17.664 18.937zm-14.848-18.84 14.946 16.025 16.024-14.947-14.946-16.024zm229.767 288.929h-25.897v-25.897h25.897zm-23.905-1.992h21.913V340.2h-21.913z"})),c||(c=k.createElement("path",{fill:"#5cb85c",d:"M0 222h663v478H0z"})),r||(r=k.createElement("path",{fill:"#3f3d56",d:"M352 264 0 306.35v-36.27L352 264zm311 338.46v38.53L289 596l374 6.46zM539 489 0 558.9v-38.03L539 489zm124-127.83v39.59L102 328l561 33.17zM225 373 0 400.07v-23.18L225 373z"})),n||(n=k.createElement("path",{d:"M750 565H280V173h470zm-468-2h466V175H282z",fill:"#3f3d56"})),i||(i=k.createElement("path",{d:"M777 174c0 .69-.02 1.37-.08 2.04a27.997 27.997 0 1 1-52.68-15.11 25.74 25.74 0 0 1 2.06-3.31 27.989 27.989 0 0 1 50.6 14.1c.07.75.1 1.51.1 2.28z",fill:"#5cb85c"})),s||(s=k.createElement("path",{d:"M777 174c0 .69-.02 1.37-.08 2.04L735 171l41.9.72c.07.75.1 1.51.1 2.28zm-10 14.11-38.78 4.67a28.058 28.058 0 0 1-2.96-3.95zm-11-31-31.76 3.82a25.74 25.74 0 0 1 2.06-3.31z",fill:"#3f3d56"})),o||(o=k.createElement("path",{d:"M611.91 700h-592s-9.89-145.1 41.44-173.3c.3-.17.61-.34.92-.49A38.144 38.144 0 0 1 78.91 522c71-2 63 78 152-32 55.35-68.41 118.05-91.95 160.91-84.34.79.14 1.57.29 2.35.45 24.84 5.16 42.61 21.06 47.74 44.89 14 65-27 117 48 101 35.11-7.49 77.45-2.27 106.3 17.92l.84.6c32.2 23.06 47.03 65.15 14.86 129.48z",fill:"#2f2e41"})),m||(m=k.createElement("path",{d:"M394.17 406.11c-4.94 4.98-22.19 23.99-40.05 62.47-19.43 41.87-43.55 116-48.2 231.42v.04l-1-.04-1-.04c4.66-115.88 28.93-190.33 48.46-232.38 16.95-36.46 33.4-55.6 39.44-61.92.79.14 1.57.29 2.35.45zm126.006 294.17-1.92-.56c23.119-79.353 77.561-129.454 78.11-129.951l1.343 1.48c-.543.493-54.578 50.24-77.533 129.03zm-407.024-.142-1.982-.276c7.844-56.57-6.324-100.46-19.592-127.318-14.366-29.08-30.757-44.963-30.92-45.12l1.383-1.443c.166.159 16.81 16.286 31.33 45.677 13.392 27.11 27.694 71.405 19.78 128.48z",fill:"#f2f2f2"})),d||(d=k.createElement("path",{fill:"#5cb85c",d:"M252 147h56v56h-56z"})),f||(f=k.createElement("path",{fill:"#3f3d56",d:"m257 162 51 3.02v3.59L257 162zm0 30 51 3.02v3.59L257 192zm-5-9.32 38-4.57-38 .66v3.91z"})),p||(p=k.createElement("path",{fill:"#5cb85c",d:"m789.6 563.39-39.6 39.6-39.6-39.6 39.6-39.6 27.76 27.76 11.84 11.84z"})),h||(h=k.createElement("path",{fill:"#3f3d56",d:"m774.77 548.56 2.99 2.99-39.76-5.16 36.77 2.17zM729 566.39l54.38 3.22-3.39 3.39-50.99-6.61zm33 19.11-26.32 3.17-2.67-2.67 28.99-.5zM87.53 459.016l-17.664-18.938 18.938-17.663 17.664 18.937zm-14.849-18.84 14.947 16.025 16.024-14.947-14.946-16.024z"})),y||(y=k.createElement("path",{d:"M726.356 286.368s-54.276 53.19-31.48 59.703 48.848-48.848 48.848-48.848zm54.276 179.11-6.513 30.395 48.848 2.171-7.599-32.566h-34.736zm154.144 187.795-6.513 30.395 48.848 2.171-7.599-32.566h-34.736z",fill:"#a0616a"})),u||(u=k.createElement("path",{d:"m849.02 262.486 4.342 17.368s-120.493-23.881-113.98 36.908S774.12 436.17 774.12 436.17s-2.171 19.54 2.17 22.796 0 14.112 0 14.112 40.165 5.428 41.25-4.342a68.083 68.083 0 0 0-1.085-19.54s2.17 0 0-10.855S805.514 339.94 799 328c0 0 57.618 44.124 88.013 38.696 0 0-4.342 43.42 13.026 100.953s17.368 64.046 17.368 64.046 20.625 109.638 15.198 122.664l-1.086 5.427h40.164s-3.256-57.532 0-65.13 3.257-72.73-15.197-105.296C943.418 466.298 945.852 399.43 953 373c6.003-22.195 7.519-39.278 4-62-3.763-24.299-15-37-28.737-48.514z",fill:"#2f2e41"})),E||(E=k.createElement("circle",{cx:881.042,cy:60.037,r:39.079,fill:"#a0616a"})),x||(x=k.createElement("path",{d:"M870.73 87.717s11.94 34.737 10.855 41.25 34.737-13.026 34.737-13.026-14.112-34.737-9.77-44.506z",fill:"#a0616a"})),z||(z=k.createElement("path",{d:"m914.15 104-37.992 15.198 2.17 13.026s-3.256 4.342-2.17 6.513-14.112 10.855-11.941 14.112-13.026 16.282-11.94 19.539-34.738 22.796-15.198 60.79c0 0 10.13 13.169 8.861 28.743q-.067.821-.177 1.65c-2.171 16.283 82.5-2.17 82.5-2.17v-18.454s7.598-3.257 6.513-17.369-7.599-7.598 0-15.197 7.598-6.513 6.513-13.026c-.434-2.6-.521-11.953-.47-22.25a98.776 98.776 0 0 0-20.155-60.25z",fill:"#d0cde1"})),v||(v=k.createElement("path",{d:"m893.526 132.224-70.559 73.815-103.124 81.414 22.796 18.454L932.605 178.9s16.282-69.473-39.08-46.677z",fill:"#d0cde1"})),M||(M=k.createElement("path",{d:"M783.888 481.761s-7.598-13.026-13.026-8.684l-37.993 30.395s-67.302 19.539-2.171 34.736c0 0 35.822 5.428 43.42 0s19.54-4.342 22.797-2.17 44.506-1.086 44.506-9.77-22.75-46.638-22.75-46.638-13.072 15.157-34.783 2.131zm154.144 187.795s-7.598-13.026-13.026-8.684l-37.993 30.394s-67.302 19.54-2.171 34.737c0 0 35.822 5.428 43.42 0s19.54-4.342 22.796-2.17 44.507-1.086 44.507-9.77-22.75-46.639-22.75-46.639-13.072 15.158-34.783 2.132zM834.21 44.539s6.607-58.083 63.119-41.591c0 0 39.979-8.132 54.099 41.8l14.332 52.349-6.56-3.41-2.9 6.675-10.47 2.867-4.674-8.85-1.97 10.894-72.304 14.618s24.453-27.939 24.28-68.859l-7.202 7.91z",fill:"#2f2e41"})),g||(g=k.createElement("path",{fill:"#3f3d56",d:"M762 733.5h272v2H762zm-132 33h437v2H630z"})))}},7905:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P,F,S,V,A=a(7294),q=["title","titleId"];function D(){return D=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,_=N(e,q);return A.createElement("svg",D({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:973.461,height:587.025,viewBox:"0 0 973.461 587.025","aria-labelledby":a},_),t?A.createElement("title",{id:a},t):null,l||(l=A.createElement("g",{"data-name":"Group 100",fill:"#e4e4e4"},A.createElement("path",{"data-name":"Path 1465",d:"M561.877 471.613a11.49 11.49 0 1 0 11.49 11.49 11.49 11.49 0 0 0-11.49-11.49zm0 18.561a7.071 7.071 0 1 1 7.071-7.071 7.071 7.071 0 0 1-7.07 7.071z"}),A.createElement("path",{"data-name":"Path 1467",d:"M517.684 462.774h44.193v43.739a5.757 5.757 0 0 1-5.757 5.757h-32.679a5.757 5.757 0 0 1-5.757-5.757v-43.739z"}))),c||(c=A.createElement("path",{"data-name":"Path 944",d:"M665.133 513.271H.896a1.006 1.006 0 0 1 0-2h664.237a1.006 1.006 0 0 1 0 2z",fill:"#cacaca"})),r||(r=A.createElement("path",{fill:"#ffb6b6",d:"m89.41 494.381-4.108 20.313 76.393 25.514 6.064-29.98-78.349-15.847z"})),n||(n=A.createElement("path",{d:"M97.09 490.542 89 530.544l-.001.002a26.01 26.01 0 0 1-30.65 20.336l-.828-.168 13.247-65.496z",fill:"#2f2e41"})),i||(i=A.createElement("circle",{"data-name":"Ellipse 276",cx:175.979,cy:162.713,r:51.871,fill:"#feb8b8"})),s||(s=A.createElement("path",{"data-name":"Path 1461",d:"M224.427 117.963a59.907 59.907 0 0 0-34.08-26.052l-6.369 4.647v-6.034a55.143 55.143 0 0 0-10.3-.6l-5.494 4.971v-4.558a59.335 59.335 0 0 0-40.932 24.347c-11.93 17.2-13.945 41.129-2.21 58.467 3.221-9.9 7.131-19.189 10.353-29.088a29.3 29.3 0 0 0 7.633.037l3.92-9.145 1.094 8.758c12.148-1.058 30.166-3.382 41.682-5.511l-1.12-6.719 6.7 5.583c3.528-.812 5.623-1.549 5.45-2.112 8.565 13.808 19.047 22.627 27.611 36.435 3.253-19.47 6.997-35.659-3.938-53.426z",fill:"#2f2e41"})),o||(o=A.createElement("ellipse",{"data-name":"Ellipse 260",cx:192.856,cy:464.787,rx:133.56,ry:37.359,fill:"#2f2e41"})),m||(m=A.createElement("path",{d:"M287.54 296.101c-1.784-10.731-3.624-21.668-8.612-31.335-3.277-6.332-8.48-12.366-15.495-13.618a14.99 14.99 0 0 1-4.034-.934c-2.056-.99-29.674-16.756-34.063-19.502-3.77-2.357-9.72-6.722-12.72-6.722-3.017-.067-14.59 2.627-59.76-.904a163.141 163.141 0 0 0-22.01 10.822c-.145-.096-46.882 25.001-48.637 24.935-3.326-.14-6.416 1.989-8.323 4.67-1.905 2.681-2.8 6-3.735 9.21 10.208 22.732 19.547 45.494 29.756 68.227a5.821 5.821 0 0 1 .739 2.8 6.834 6.834 0 0 1-1.27 2.8c-5.007 8.042-4.848 18.157-4.3 27.61.547 9.451 1.223 19.435-3 27.907-1.15 2.326-2.644 4.455-3.736 6.781-2.56 5.268-3.484 22.117-1.99 27.777l187.267 5.365c-4.027-11.068 13.922-145.89 13.922-145.89z",fill:"#a4a4a4"})),d||(d=A.createElement("path",{"data-name":"Path 1421",d:"M53.963 341.958a33.063 33.063 0 0 0-.112 8.154l2.684 38.546c.252 3.633.5 7.257.841 10.881.644 7.033 1.606 14.01 2.8 20.977a3.736 3.736 0 0 0 3.83 3.633c11.814 2.5 24.021 2.4 36.08 1.719 18.4-1.027 65.473-2.97 68.35-6.706s1.2-9.779-2.55-12.8-65.872-10.386-65.872-10.386c.607-4.81 2.438-9.34 4.175-13.907 3.12-8.1 6.034-16.466 6.09-25.143s-3.213-17.8-10.32-22.771c-5.848-4.081-13.376-4.838-20.5-4.67-5.185.149-14.142-1.093-18.877.934-3.747 1.65-5.919 7.87-6.619 11.539z",fill:"#fbbebe"})),f||(f=A.createElement("path",{"data-name":"Path 1423",d:"M287.871 429.091c3.11-1.186 6.538-.757 9.872-.308 10.732 1.466 21.622 2.97 31.57 7.257 4.67 2 9.115 4.67 12.272 8.6 2.8 3.54 4.436 7.874 5.987 12.142l3.587 9.826a47.3 47.3 0 0 1 3.13 11.516c1.12 11.759-6.922 22.845-17.037 28.954s-22.023 8.284-33.624 10.563-23.247 4.8-34.8 7.472a140.086 140.086 0 0 1-16.373 3.222c-12.366 1.4-25.292-.663-37.042 3.428-4.67 1.635-9.256 4.063-14.1 5.193a87.745 87.745 0 0 1-9.75 1.485l-22.239 2.54a121.313 121.313 0 0 1-13.636 1.046c-9.713 0-19.268-2.3-28.7-4.6a7.258 7.258 0 0 1-2.8-1.13c-1.494-1.177-1.82-3.26-2.036-5.146q-1.429-12.525-2.5-25.077c-.224-2.718-.392-5.66 1.093-7.948 1.868-2.8 5.511-3.68 8.836-4.222a230.58 230.58 0 0 1 42.665-2.961c5.426-5.426 14.374-5.454 21.482-8.406a63.897 63.897 0 0 0 7.575-4.119 99 99 0 0 1 41.59-13.141 38.714 38.714 0 0 0 8.51-1.214c5.5-1.709 10.516-6.361 16.166-5.221.7-1.933 1.186-4.521 2.8-5.847.8-.682 1.793-1.139 2.531-1.868 1.56-1.578 1.7-4.063 1.466-6.267s-.757-4.464-.187-6.613a9.14 9.14 0 0 1 1.037-2.307c2.792-4.832 7.023-7.316 12.655-6.849z",fill:"#2f2e41"})),p||(p=A.createElement("path",{"data-name":"Path 1430",d:"M69.61 273.414a9.667 9.667 0 0 0-2.073 3.316 156.78 156.78 0 0 0-13.169 53.816 5.38 5.38 0 0 1-.607 2.606 11.403 11.403 0 0 1-1.373 1.485 5.156 5.156 0 0 0 .617 7.266q.127.107.261.206c1.541-2.9 5.23-3.848 8.51-4.1 15.7-1.242 31.035 6.062 46.782 5.511-1.11-3.839-2.709-7.528-3.615-11.413-4.007-17.251 5.987-36.033-.14-52.649-1.224-3.325-3.269-6.594-6.49-8.051a17.29 17.29 0 0 0-4.157-1.1c-3.979-.719-11.9-3.792-15.747-2.559-1.42.458-1.98 1.793-3.157 2.6-1.788 1.142-4.16 1.562-5.642 3.066z",fill:"#a4a4a4"})),h||(h=A.createElement("path",{"data-name":"Path 1421",d:"M287.651 330.419c-4.735-2.027-13.692-.785-18.876-.934-7.125-.168-14.653.589-20.5 4.67-7.108 4.971-10.377 14.094-10.32 22.771s2.97 17.043 6.09 25.143c1.736 4.567 3.567 9.097 4.174 13.907 0 0-62.12 7.365-65.87 10.386s-5.427 9.064-2.55 12.8 92.614 7.487 104.43 4.987a3.736 3.736 0 0 0 3.828-3.633c1.194-6.967 2.156-13.944 2.8-20.977.341-3.624.59-7.248.841-10.881l2.684-38.546a33.064 33.064 0 0 0-.112-8.154c-.7-3.669-2.872-9.889-6.619-11.539z",fill:"#fbbebe"})),y||(y=A.createElement("path",{"data-name":"Path 1430",d:"M272.981 270.348c-1.177-.807-1.737-2.142-3.157-2.6-3.847-1.233-11.768 1.84-15.747 2.559a17.29 17.29 0 0 0-4.156 1.1c-3.222 1.457-5.267 4.726-6.49 8.051-6.128 16.616 3.866 35.398-.14 52.649-.907 3.885-2.505 7.574-3.616 11.413 15.747.551 31.083-6.753 46.783-5.511 3.28.252 6.968 1.2 8.51 4.1q.133-.099.26-.206a5.156 5.156 0 0 0 .617-7.266 11.401 11.401 0 0 1-1.373-1.485 5.38 5.38 0 0 1-.607-2.606 156.78 156.78 0 0 0-13.169-53.816 9.667 9.667 0 0 0-2.073-3.316c-1.482-1.504-3.854-1.924-5.642-3.066z",fill:"#a4a4a4"})),u||(u=A.createElement("path",{fill:"#ffb6b6",d:"m299.243 523.378-2.73 20.543-80.538-.755 4.03-30.32 79.238 10.532z"})),E||(E=A.createElement("path",{d:"m319.853 520.785-8.804 66.24-.838-.111a26.01 26.01 0 0 1-22.356-29.209v-.001l5.377-40.457z",fill:"#2f2e41"})),x||(x=A.createElement("path",{"data-name":"Path 1427",d:"M109.77 439.487c0 .934-1.467 0-1.6-1-1.028-7.556-7.025-13.786-14.01-16.812s-14.945-3.185-22.51-2.466c-11.44 1.083-24.284 5.464-28.468 16.158-.99 2.5-10.264 24.76-9.359 29.766 2.438 13.356 11.572 24.779 22.64 32.69s24 12.637 36.9 16.9a639.95 639.95 0 0 0 104.607 24.984c5.753.869 11.563 1.672 17.073 3.521 4.931 1.653 9.545 4.128 14.365 6.071 11.208 4.5 23.266 6.108 35.211 7.687 2.036.262 4.371.448 5.875-.934 1.943-1.8 1.3-4.941.747-7.528a40.488 40.488 0 0 1 4.773-28.729c2-3.362 4.6-6.809 4.222-10.7-.448-4.539-4.969-7.752-9.47-8.481s-9.079.346-13.6.934a7.285 7.285 0 0 1-4.624-.458 9.235 9.235 0 0 1-1.812-1.606 20.482 20.482 0 0 0-23.854-3.334c-1.672.934-4.2-1.149-5.94-1.933l-19.642-8.892c-22.565-10.208-45.242-20.464-69.115-26.927a14.514 14.514 0 0 1-5.324-2.214c-1.186-.934-2.036-2.2-3.129-3.241-2.382-2.251-5.7-3.148-8.555-4.745s-6.056-5.508-5.402-8.711z",fill:"#2f2e41"})),z||(z=A.createElement("circle",{cx:160.617,cy:411.99,r:14,fill:"#fbbebe"})),v||(v=A.createElement("circle",{cx:191.617,cy:411.99,r:14,fill:"#fbbebe"})),M||(M=A.createElement("path",{d:"M278.035 443.537H85.697a8.48 8.48 0 0 1-8.47-8.47V318.381a8.48 8.48 0 0 1 8.47-8.47h192.338a8.48 8.48 0 0 1 8.47 8.47v116.686a8.48 8.48 0 0 1-8.47 8.47z",fill:"#3f3d56"})),g||(g=A.createElement("circle",{"data-name":"Ellipse 263",cx:181.399,cy:376.724,r:5.604,fill:"#fff"})),k||(k=A.createElement("path",{d:"M868.03 210.452H618.136a5.006 5.006 0 0 1-5-5v-47.1h2v47.1a3.003 3.003 0 0 0 3 3h249.892a3.003 3.003 0 0 0 3-3v-47.429h2v47.43a5.006 5.006 0 0 1-5 5z",fill:"#3f3d56"})),b||(b=A.createElement("path",{fill:"#3f3d56",d:"M371.397 157.352h587.22v2h-587.22z"})),w||(w=A.createElement("circle",{"data-name":"Ellipse 264",cx:371.439,cy:158.196,r:17.202,fill:"#a4a4a4"})),H||(H=A.createElement("circle",{"data-name":"Ellipse 266",cx:546.244,cy:158.196,r:17.202,fill:"#a4a4a4"})),O||(O=A.createElement("circle",{"data-name":"Ellipse 268",cx:664.876,cy:208.757,r:17.202,fill:"#3f3d56"})),G||(G=A.createElement("circle",{"data-name":"Ellipse 269",cx:755.063,cy:208.757,r:17.202,fill:"#ccc"})),T||(T=A.createElement("circle",{"data-name":"Ellipse 270",cx:711.36,cy:158.196,r:17.202,fill:"#a4a4a4"})),L||(L=A.createElement("circle",{"data-name":"Ellipse 271",cx:956.259,cy:158.196,r:17.202,fill:"#a4a4a4"})),C||(C=A.createElement("circle",{"data-name":"Ellipse 272",cx:872.029,cy:158.196,r:17.202,fill:"#a4a4a4"})),I||(I=A.createElement("path",{"data-name":"Rectangle 207",fill:"#3f3d56",d:"M648.539 0h31.906v21.99h-31.906z"})),j||(j=A.createElement("path",{"data-name":"Rectangle 208",fill:"#a4a4a4",d:"M355.612 0h31.906v21.99h-31.906z"})),Z||(Z=A.createElement("path",{"data-name":"Rectangle 209",fill:"#ccc",d:"M463.685 0h31.906v21.99h-31.906z"})),P||(P=A.createElement("path",{d:"M424.782 159.352a1 1 0 0 1-1-1V108.99a5.006 5.006 0 0 1 5-5h48.675a1 1 0 0 1 0 2h-48.675a3.003 3.003 0 0 0-3 3v49.362a1 1 0 0 1-1 1z",fill:"#3f3d56"})),F||(F=A.createElement("circle",{"data-name":"Ellipse 265",cx:479.744,cy:104.616,r:17.202,fill:"#e6e6e6"})),S||(S=A.createElement("path",{d:"M809.782 158.352h-2V108.99a5.006 5.006 0 0 1 5-5h48.675v2h-48.675a3.003 3.003 0 0 0-3 3z",fill:"#3f3d56"})),V||(V=A.createElement("circle",{"data-name":"Ellipse 265",cx:863.744,cy:104.616,r:17.202,fill:"#e6e6e6"})))}},5878:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O=a(7294),G=["title","titleId"];function T(){return T=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,C=L(e,G);return O.createElement("svg",T({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1008.92,height:607.45,viewBox:"0 0 1008.92 607.45","aria-labelledby":a},C),t?O.createElement("title",{id:a},t):null,l||(l=O.createElement("path",{d:"M1008.92 474.03a15.34 15.34 0 0 1-15.26 15.42h-671.4A15.34 15.34 0 0 1 307 474.03V15.42A15.34 15.34 0 0 1 322.26 0h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),c||(c=O.createElement("path",{d:"M1001 466.52a14.91 14.91 0 0 1-14.91 14.91h-655.8a14.91 14.91 0 0 1-14.91-14.91V23.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 1001 23.14z",fill:"#fff"})),r||(r=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M350.43 27.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H350.43a8.85 8.85 0 0 1-8.85-8.85V36.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),n||(n=O.createElement("path",{d:"M358.23 37.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H358.23a8.85 8.85 0 0 1-8.85-8.85V46.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),i||(i=O.createElement("path",{d:"M781.836 310.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#3f3d56"})),s||(s=O.createElement("path",{d:"M684.255 318.762H562.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#3f3d56"})),o||(o=O.createElement("circle",{cx:900.879,cy:386.814,r:36.167,fill:"#e6e6e6"})),m||(m=O.createElement("path",{d:"m919.665 386.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})),d||(d=O.createElement("path",{d:"M853.92 529.03a15.34 15.34 0 0 1-15.26 15.42h-671.4A15.34 15.34 0 0 1 152 529.03V70.42A15.34 15.34 0 0 1 167.26 55h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),f||(f=O.createElement("path",{d:"M846 521.52a14.91 14.91 0 0 1-14.91 14.91h-655.8a14.91 14.91 0 0 1-14.91-14.91V78.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 846 78.14z",fill:"#fff"})),p||(p=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M195.43 82.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H195.43a8.85 8.85 0 0 1-8.85-8.85V91.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),h||(h=O.createElement("path",{d:"M203.23 92.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H203.23a8.85 8.85 0 0 1-8.85-8.85V101.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),y||(y=O.createElement("path",{d:"M626.836 365.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#3f3d56"})),u||(u=O.createElement("path",{d:"M529.255 373.762H407.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#3f3d56"})),E||(E=O.createElement("circle",{cx:745.879,cy:441.814,r:36.167,fill:"#e6e6e6"})),x||(x=O.createElement("path",{d:"m764.665 441.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})),z||(z=O.createElement("path",{d:"M701.92 592.03a15.34 15.34 0 0 1-15.26 15.42H15.26A15.34 15.34 0 0 1 0 592.03V133.42A15.34 15.34 0 0 1 15.26 118h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),v||(v=O.createElement("path",{d:"M694 584.52a14.91 14.91 0 0 1-14.91 14.91H23.29a14.91 14.91 0 0 1-14.91-14.91V141.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 694 141.14z",fill:"#fff"})),M||(M=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M43.43 145.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H43.43a8.85 8.85 0 0 1-8.85-8.85V154.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),g||(g=O.createElement("path",{d:"M51.23 155.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H51.23a8.85 8.85 0 0 1-8.85-8.85V164.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),k||(k=O.createElement("path",{d:"M474.836 428.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#5cb85c"})),b||(b=O.createElement("path",{d:"M377.255 436.762H255.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#5cb85c"})),w||(w=O.createElement("circle",{cx:593.879,cy:504.814,r:36.167,fill:"#3f3d56"})),H||(H=O.createElement("path",{d:"m612.665 504.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})))}},8793:function(e,t,a){var l=a(7294),c=a(9960),r=a(1954),n=a(2949);t.Z=function(e){var t=(0,l.useState)(!1),a=t[0],i=t[1];(0,l.useEffect)((function(){i(!0)}),[]);var s,o,m,d=(s=(0,n.I)(),o=s.colorMode,s.setColorMode,"dark"===o?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",l.createElement(c.Z,{key:String(a),className:m,to:e.to},e.icon&&l.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1558:function(e,t,a){a.d(t,{Z:function(){return r}});var l=a(7294),c="featureSvg_UK3L";var r=function(e){var t=e.Svg,a=e.title,r=e.children;return l.createElement("div",null,l.createElement("div",{className:"text--center"},l.createElement(t,{className:c,alt:a})),l.createElement("div",{className:"text--left padding-horiz--md"},l.createElement("h3",{className:"text--center"},a),l.createElement("p",null,r)))}},6937:function(e,t,a){a.d(t,{Z:function(){return x}});var l=a(7294),c=a(6010),r=a(2730),n="navigationWrapper_JWzE",i="arrow_bCLT",s="disabled_AqwA",o="left_UJxi",m="right_iVh6",d="dots_V3wA",f="dot_TDDQ",p="active_Hf3j",h="slideItem_rSD0";function y(e){var t=e.disabled?" ${styles.disabled}":"";return l.createElement("svg",{onClick:e.onClick,className:(0,c.Z)([i,o,t]),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},l.createElement("path",{d:"M16.67 0l2.83 2.829-9.339 9.175 9.339 9.167-2.83 2.829-12.17-11.996z"}))}function u(e){var t=e.disabled?" "+s:"";return l.createElement("svg",{onClick:e.onClick,className:(0,c.Z)([i,m,t]),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},l.createElement("path",{d:"M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z"}))}var E=function(e){var t=new ResizeObserver((function(){e.update()}));e.on("created",(function(){t.observe(e.container)})),e.on("destroyed",(function(){t.unobserve(e.container)}))};var x=function(e){var t=l.useState(0),a=t[0],i=t[1],s=l.useState(!1),o=s[0],m=s[1],x=void 0!==e.spacing?e.spacing:15,z=(0,r.E)({initial:void 0!==e.initial?e.initial:0,loop:void 0===e.loop||e.loop,breakpoints:void 0!==e.breakpoints?e.breakpoints:{"(min-width: 768px)":{slides:{perView:2,spacing:x}},"(min-width: 1440px)":{slides:{perView:3,spacing:x+5}},"(min-width: 1920px)":{slides:{perView:3,spacing:x+15}}},slides:{perView:void 0!==e.slidesPerView?e.slidesPerView:1,origin:void 0!==e.centered?e.centered?"center":"auto":"center",spacing:x},selector:"."+h,created:function(){m(!0)},slideChanged:function(e){i(e.track.details.rel)}},[E]),v=z[0],M=z[1];return l.createElement(l.Fragment,null,l.createElement("div",{className:n},l.createElement("div",{ref:v,className:"keen-slider"},e.children&&l.Children.map(e.children,(function(e){return l.createElement("div",{className:h},e)}))),o&&M.current&&l.createElement(l.Fragment,null,l.createElement(y,{onClick:function(e){var t;return e.stopPropagation()||(null==(t=M.current)?void 0:t.prev())},disabled:!1}),l.createElement(u,{onClick:function(e){var t;return e.stopPropagation()||(null==(t=M.current)?void 0:t.next())},disabled:!1}))),o&&M.current&&l.createElement("div",{className:d},Array.from(Array(M.current.track.details.slides.length).keys()).map((function(e){return l.createElement("button",{key:e,onClick:function(){var t;null==(t=M.current)||t.moveToIdx(e)},className:(0,c.Z)([f,a===e?p:""])})}))))}},1279:function(e,t,a){a.r(t),a.d(t,{assets:function(){return x},contentTitle:function(){return u},default:function(){return M},frontMatter:function(){return y},metadata:function(){return E},toc:function(){return z}});var l=a(3117),c=a(102),r=(a(7294),a(3905)),n=a(9960),i=a(8793),s=a(1558),o=a(6937),m=a(541),d=a(3818),f=a(1320),p=a(9520),h=(a(4212),["components"]),y={id:"introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",slug:"/"},u=void 0,E={unversionedId:"introduction",id:"version-3.2.x/introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",source:"@site/versioned_docs/version-3.2.x/introduction.mdx",sourceDirName:".",slug:"/",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/introduction.mdx",tags:[],version:"3.2.x",frontMatter:{id:"introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",slug:"/"},sidebar:"docs",next:{title:"Installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/installation"}},x={},z=[{value:"Related materials",id:"related-materials",level:2}],v={toc:z};function M(e){var t=e.components,y=(0,c.Z)(e,h);return(0,r.kt)("wrapper",(0,l.Z)({},v,y,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'This project is also named as "',(0,r.kt)("em",{parentName:"p"},"FFmpeg-Encoder-Decoder-for-Python"),'". It is implemented based on ',(0,r.kt)("a",{parentName:"p",href:"https://ffmpeg.org",title:"FFMpeg"},"FFMpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", ",(0,r.kt)("a",{parentName:"p",href:"https://docs.python.org/3/c-api/index.html",title:"Python-C-API"},"Python-C-API",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)("a",{parentName:"p",href:"https://en.cppreference.com/w/",title:"C++ 11"},"C++11",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". It is under ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE"},"GPL v3 License",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", and recommended for researching purposes."),(0,r.kt)("p",null,"With this package, users could:"),(0,r.kt)(o.Z,{mdxType:"KeenSlider"},(0,r.kt)(s.Z,{Svg:a(3503).Z,title:"Make use of all FFMpeg video codec",mdxType:"FeatureCase"},"When decoding a video (or an online stream), like the original FFMpeg (C version), the provided APIs could detect the video format and codec format automatically. When encoding a video, users could control the codec format, bit rate and some other options by setting parameters."),(0,r.kt)(s.Z,{Svg:a(5878).Z,title:"Work with FFMpeg directly",mdxType:"FeatureCase"},"This project invokes the FFMpeg C APIs in the bottom level. Unlike ",(0,r.kt)(n.Z,{href:"https://github.com/kkroening/ffmpeg-python",alt:"ffmpeg-python",mdxType:"Link"},"ffmpeg-python",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"https://github.com/deuteronomy-works/pyffmpeg",alt:"pyffmpeg",mdxType:"Link"},"pyffmpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is ",(0,r.kt)(n.Z,{href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",alt:"np.ndarray",mdxType:"Link"},(0,r.kt)("code",null,"np.ndarray"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". In other words, our project enables users to combine ",(0,r.kt)(n.Z,{href:"https://numpy.org",alt:"Numpy",mdxType:"Link"},(0,r.kt)("code",null,"Numpy"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and FFMpeg directly."),(0,r.kt)(s.Z,{Svg:a(7627).Z,title:"Frame-level APIs",mdxType:"FeatureCase"},"Unlike ",(0,r.kt)(n.Z,{href:"https://github.com/deuteronomy-works/pyffmpeg",alt:"pyffmpeg",mdxType:"Link"},"pyffmpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", this package is not a simple wrapper of FFMpeg. Users could works on the frame-level APIs. For example, when decoding a video, users could get the data frame-by-frame. Each frame is a 3D ",(0,r.kt)(n.Z,{href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",alt:"np.ndarray",mdxType:"Link"},(0,r.kt)("code",null,"np.ndarray"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"."),(0,r.kt)(s.Z,{Svg:a(7353).Z,title:"Pre-compiled package",mdxType:"FeatureCase"},"This package has been pre-compiled by the author. If users download the dependent dynamic libraries (",(0,r.kt)("code",null,".so")," or ",(0,r.kt)("code",null,".dll"),"), they do not need to compile the package by themself.")),(0,r.kt)("p",null,"However, users could not work with this project in such cases:"),(0,r.kt)(o.Z,{mdxType:"KeenSlider"},(0,r.kt)(s.Z,{Svg:a(4489).Z,title:"Platform limited",mdxType:"FeatureCase"},"Currently, we only support Linux and Windows. The Linux release is pre-compiled on Debian. It has been only tested in Ubuntu, Debian and Windows. In other cases, the pre-compiled library may not work. Users may need to compile the package by themselves."),(0,r.kt)(s.Z,{Svg:a(7905).Z,title:"Version limited",mdxType:"FeatureCase"},"Currently, our project works with FFMpeg ",(0,r.kt)("code",null,"4.4")," and ",(0,r.kt)("code",null,"5.0"),". Users need to download the dependent dynamic libraries to make the package work. The ",(0,r.kt)(n.Z,{to:"./docs/installation/pypi",alt:"pip version",mdxType:"Link"},(0,r.kt)("code",null,"pip")," version")," is able to download the libraries automatically. The legacy versions of this project supports FFMpeg ",(0,r.kt)("code",null,"3.3"),", ",(0,r.kt)("code",null,"3.4.2")," and ",(0,r.kt)("code",null,"4.0"),". However, the legacy built packages are not technically supported now."),(0,r.kt)(s.Z,{Svg:a(3073).Z,title:"Audio not supported",mdxType:"FeatureCase"},"Although the original FFMpeg supports both video and audio streams, our project only works on video streams. For example, if a video contains audio streams, our package would omit all audio frames in the bottom level. In other words, you ",(0,r.kt)("b",null,"could not")," perform audio analysis now. In the future (",(0,r.kt)("code",null,"v4"),"), we may support the audio frame analysis."),(0,r.kt)(s.Z,{Svg:a(7632).Z,title:"Filters not supported",mdxType:"FeatureCase"},"Although the original FFMpeg supports some video processing tools (",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lavfi.html",alt:"libavfilter",mdxType:"Link"},(0,r.kt)("code",null,"avfilter"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lpp.html",alt:"libpostproc",mdxType:"Link"},(0,r.kt)("code",null,"postproc"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"), our implementation drops these modules. Instead, we suggest that users should process the frames with ",(0,r.kt)(n.Z,{href:"https://pypi.org/project/Pillow",alt:"Pillow",mdxType:"Link"},"pillow",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," or ",(0,r.kt)(n.Z,{href:"https://pypi.org/project/opencv-python",alt:"OpenCV Python",mdxType:"Link"},"openCV",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". On the other hand, our implementation still supports frame scaling and re-sampling (supported by ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__libsws.html",alt:"libswscale",mdxType:"Link"},(0,r.kt)("code",null,"swscale"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lswr.html",alt:"libswresample",mdxType:"Link"},(0,r.kt)("code",null,"swresample"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),").")),(0,r.kt)("p",{className:"right noemph"},"Pictures are provided by ",(0,r.kt)(n.Z,{href:"https://undraw.co",alt:"unDraw",mdxType:"Link"},"unDraw",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"."),(0,r.kt)("h2",{id:"related-materials"},"Related materials"),(0,r.kt)("p",null,"License of this project:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE",icon:d.Z,mdxType:"DarkButton"},"GPL v3 License")),(0,r.kt)("p",null,"Guidelines for the contributions:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md",icon:f.Z,mdxType:"DarkButton"},"Contributions")),(0,r.kt)("p",null,"Contributor covenant code of conduct:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md",icon:p.Z,mdxType:"DarkButton"},"Code of Conduct")))}M.isMDXComponent=!0},2730:function(e,t,a){var l=a(7294);function c(e){return Array.prototype.slice.call(e)}function r(){return Date.now()}function n(e,t,a){if(t="data-keen-slider-"+t,null===a)return e.removeAttribute(t);e.setAttribute(t,a||"")}function i(e,t){return t=t||document,"function"==typeof e&&(e=e(t)),Array.isArray(e)?e:"string"==typeof e?c(t.querySelectorAll(e)):e instanceof HTMLElement?[e]:e instanceof NodeList?c(e):[]}function s(e){e.raw&&(e=e.raw),e.cancelable&&!e.defaultPrevented&&e.preventDefault()}function o(e){e.raw&&(e=e.raw),e.stopPropagation&&e.stopPropagation()}function m(){var e=[];return{add:function(t,a,l,c){t.addListener?t.addListener(l):t.addEventListener(a,l,c),e.push([t,a,l,c])},input:function(e,t,a,l){this.add(e,t,function(e){return function(t){t.nativeEvent&&(t=t.nativeEvent);var a=t.changedTouches||[],l=t.targetTouches||[],c=t.detail&&t.detail.x?t.detail:null;return e({id:c?c.identifier?c.identifier:"i":l[0]?l[0]?l[0].identifier:"e":"d",idChanged:c?c.identifier?c.identifier:"i":a[0]?a[0]?a[0].identifier:"e":"d",raw:t,x:c&&c.x?c.x:l[0]?l[0].screenX:c?c.x:t.pageX,y:c&&c.y?c.y:l[0]?l[0].screenY:c?c.y:t.pageY})}}(a),l)},purge:function(){e.forEach((function(e){e[0].removeListener?e[0].removeListener(e[2]):e[0].removeEventListener(e[1],e[2],e[3])})),e=[]}}}function d(e,t,a){return Math.min(Math.max(e,t),a)}function f(e){return(e>0?1:0)-(e<0?1:0)||+e}function p(e){return e.getBoundingClientRect()}function h(e,t,a,l){var c=e&&e[t];return null==c?a:l&&"function"==typeof c?c():c}function y(e){return Math.round(1e6*e)/1e6}function u(e,t){if(e===t)return!0;var a=typeof e;if(a!==typeof t)return!1;if("object"!==a||null===e||null===t)return"function"===a&&e.toString()===t.toString();if(e.length!==t.length||Object.getOwnPropertyNames(e).length!==Object.getOwnPropertyNames(t).length)return!1;for(var l in e)if(!u(e[l],t[l]))return!1;return!0}function E(e,t){return u(e.current,t)||(e.current=t),e.current}var x=function(){return x=Object.assign||function(e){for(var t,a=1,l=arguments.length;a0?1:-1),{abs:n+t*i*c,origin:r,rel:n}}function G(e,t,a){var l;if(t||!I())return T(e,a);if(!L(e))return null;var c=O(null!=a?a:b),r=c.abs,n=e-c.rel,s=r+n;l=T(s);var o=T(s-i*f(n));return(null!==o&&Math.abs(o)6&&(g=g.slice(-6)),b=Math.round(1e6*t)/1e6;var l=P().abs;if(l!==k){var c=null!==k;k=l,c&&e.emit("slideChanged")}}function P(r){var s=r?null:function(){if(i){var e=I(),t=e?(b%a+a)%a:b,r=(e?b%a:b)-n[0][2],s=0-(r<0&&e?a-Math.abs(r):r),o=0,d=O(b),h=d.abs,y=d.rel,z=n[y][2],M=n.map((function(t,l){var r=s+o;(r<0-t[0]||r>1)&&(r+=(Math.abs(r)>a-1&&e?a:0)*f(-r));var n=l-y,m=f(n),d=n+h;e&&(-1===m&&r>z&&(d+=i),1===m&&rE&&(r-=a));var p=r+t[0]+t[1],x=Math.max(r>=0&&p<=1?1:p<0||r>1?0:r<0?Math.min(1,(t[0]+r)/t[0]):(1-r)/t[0],0);return o+=t[0]+t[1],{abs:d,distance:c.rtl?-1*r+1-t[0]:r,portion:x,size:t[0]}}));return h=C(h),y=j(h),{abs:C(h),length:l,max:v,maxIdx:p,min:x,minIdx:m,position:b,progress:e?t/a:b/l,rel:y,slides:M}}}();return t.details=s,e.emit("detailsChanged"),s}return t={absToRel:j,add:w,details:null,distToIdx:H,idxToDist:G,init:function(t){if(function(){if(c=e.options,n=(c.trackConfig||[]).map((function(e){return[h(e,"size",1),h(e,"spacing",0),h(e,"origin",0)]})),i=n.length){a=y(n.reduce((function(e,t){return e+t[0]+t[1]}),0));var t,r=i-1;l=y(a+n[0][2]-n[r][0]-n[r][2]-n[r][1]),(s=n.reduce((function(e,a){if(!e)return[0];var l=n[e.length-1],c=e[e.length-1]+(l[0]+l[2])+l[1];return c-=a[2],e[e.length-1]>c&&(c=e[e.length-1]),c=y(c),e.push(c),(!t||t200||(f(l)!==f(t.distance)&&t.distance&&(t={distance:0,lastTimestamp:0,time:0}),t.time&&(t.distance+=l),t.lastTimestamp&&(t.time+=c-t.lastTimestamp),t.lastTimestamp=c),t}),{distance:0,lastTimestamp:0,time:0});return t.distance/t.time||0}}}function M(e){var t,a,l,c,r,n,i;function s(e){return 2*e}function o(e){return d(e,n,i)}function m(e){return 1-Math.pow(1-e,3)}function p(){u();var t="free-snap"===e.options.mode,a=e.track,n=a.velocity();l=f(n);var i=e.track.details,d=[];if(n||!t){var p=h(n),y=p.dist,E=p.dur;if(E=s(E),y*=l,t){var x=a.idxToDist(a.distToIdx(y),!0);x&&(y=x)}d.push({distance:y,duration:E,easing:m});var z=i.position,v=z+y;if(vr){var M=vr||i=b)return t;if(i0||i>w&&a<0)return t;var o=(ib&&M0||M===w&&a<0)&&o(i),x+=v,!z&&Math.abs(x*c)>5&&(z=!0,n(t,"moves","")),e.track.add(v),E=m,e.emit("dragged")}}function G(t){!p&&e.track.details&&e.track.details.length&&(z=!1,x=0,p=!0,u=!0,y=t.id,L(t),E=C(t),e.emit("dragStarted"))}function T(a){p&&y===a.idChanged&&(n(t,"moves",null),p=!1,e.emit("dragEnded"))}function L(e){var t=I(),a=t?e.y:e.x,l=t?e.x:e.y,c=void 0!==v&&void 0!==M&&Math.abs(M-l)<=Math.abs(v-a);return v=a,M=l,c}function C(e){return I()?e.y:e.x}function I(){return e.options.vertical}function j(){c=e.size,r=I()?window.innerHeight:window.innerWidth;var t=e.track.details;t&&(b=t.min,w=t.max)}function Z(){if(H.purge(),e.options.drag&&!e.options.disabled){var a;a=e.options.dragSpeed||1,h="function"==typeof a?a:function(e){return e*a},l=e.options.rtl?-1:1,j(),t=e.container,function(){var e="data-keen-slider-clickable";i("[".concat(e,"]:not([").concat(e,"=false])"),t).map((function(e){H.add(e,"mousedown",o),H.add(e,"touchstart",o)}))}(),H.add(t,"dragstart",(function(e){s(e)})),H.input(t,"ksDragStart",G),H.input(t,"ksDrag",O),H.input(t,"ksDragEnd",T),H.input(t,"mousedown",G),H.input(t,"mousemove",O),H.input(t,"mouseleave",T),H.input(t,"mouseup",T),H.input(t,"touchstart",G,{passive:!0}),H.input(t,"touchmove",O,{passive:!1}),H.input(t,"touchend",T),H.input(t,"touchcancel",T),H.add(window,"wheel",(function(e){p&&s(e)}));var c="data-keen-slider-scrollable";i("[".concat(c,"]:not([").concat(c,"=false])"),e.container).map((function(e){return function(e){var t;H.input(e,"touchstart",(function(e){t=C(e),k=!0,g=!0}),{passive:!0}),H.input(e,"touchmove",(function(a){var l=I(),c=l?e.scrollHeight-e.clientHeight:e.scrollWidth-e.clientWidth,r=t-C(a),n=l?e.scrollTop:e.scrollLeft,i=l&&"scroll"===e.style.overflowY||!l&&"scroll"===e.style.overflowX;if(t=C(a),(r<0&&n>0||r>0&&n=1||(e.origin=1-t-(m>1?0:1-m)),e}))}a.options.trackConfig=r}function w(){O();var e=a.size;a.options.disabled||e===c||(c=e,k())}function H(){w(),setTimeout(w,500),setTimeout(w,2e3)}function O(){var e=p(a.container);a.size=(a.options.vertical?e.height:e.width)||1}function G(){a.slides=i(a.options.selector,a.container)}a.container=(o=i(e,document)).length?o[0]:null,a.destroy=function(){d.purge(),a.emit("destroyed"),f(!0)},a.prev=function(){a.moveToIdx(a.track.details.abs-1,!0)},a.next=function(){a.moveToIdx(a.track.details.abs+1,!0)},a.update=k,v(a.options)}}var w=function(e,t,a){try{return function(e,t){var a,l={};return a={emit:function(e){l[e]&&l[e].forEach((function(e){e(a)}));var t=a.options&&a.options[e];t&&t(a)},moveToIdx:function(e,t,l){var c=a.track.idxToDist(e,t);if(c){var r=a.options.defaultAnimation;a.animator.start([{distance:c,duration:h(l||r,"duration",500),easing:h(l||r,"easing",(function(e){return 1+--e*e*e*e*e}))}])}},on:function(e,t,a){void 0===a&&(a=!1),l[e]||(l[e]=[]);var c=l[e].indexOf(t);c>-1?a&&delete l[e][c]:a||l[e].push(t)},options:e},function(){if(a.track=v(a),a.animator=function(e){var t,a,l,c,r,n;function i(t){n||(n=t),s(!0);var r=t-n;r>l&&(r=l);var d=c[a];if(d[3]'}},1320:function(e,t){t.Z={body:''}},9520:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/365d81ba.2c6720cf.js b/assets/js/365d81ba.2c6720cf.js new file mode 100644 index 0000000..c686e5a --- /dev/null +++ b/assets/js/365d81ba.2c6720cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7690],{7370:function(e,t,a){var l,n,r,s,m,i,c,d,o,f,h,p,x,y,E,v,u,k,N,b,M,H,g,w,z,C,V,T,I,L,F,Z,D,O,P,S,A,j,U,_,R,q,G,B,X,J,W,K,Q,Y,$,ee,te,ae,le,ne,re,se,me,ie,ce,de,oe,fe,he,pe,xe,ye,Ee,ve,ue,ke,Ne,be,Me,He,ge,we,ze,Ce,Ve,Te,Ie,Le,Fe,Ze,De,Oe,Pe,Se,Ae,je=a(7294),Ue=["title","titleId"];function _e(){return _e=Object.assign||function(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}t.Z=function(e){var t=e.title,a=e.titleId,qe=Re(e,Ue);return je.createElement("svg",_e({id:"graph-div",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{maxWidth:"399.5px",height:"auto",maxHeight:"291.5px"},width:"100%",viewBox:"0 0 399.5 291.5","aria-labelledby":a},qe),t?je.createElement("title",{id:a},t):null,l||(l=je.createElement("style",null,"#graph-div .stk-n{stroke:none}#graph-div .font-d{fill:#555;fill-opacity:1}#graph-div .font-e{fill:#333;fill-opacity:1}#graph-div .class-box,#graph-div .d-line,#graph-div .func-box{stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .class-box{fill-rule:evenodd;fill:#ececff;fill-opacity:1;stroke:#9370db}#graph-div .d-line,#graph-div .func-box{stroke:#999}#graph-div .func-box{fill-rule:evenodd;fill:#eee;fill-opacity:1}#graph-div .d-line{fill:none}")),n||(n=je.createElement("defs",null,je.createElement("symbol",{overflow:"visible",id:"a"},je.createElement("path",{className:"stk-n",d:"M1.156-7.719V0h1.235v-4.86c0-1.109.796-2.015 1.812-2.015.89 0 1.422.578 1.422 1.547V0h1.25v-4.86c0-1.109.813-2.015 1.797-2.015.906 0 1.437.578 1.437 1.547V0h1.235v-5.797c0-1.39-.781-2.156-2.235-2.156-1.03 0-1.64.297-2.375 1.187-.453-.828-1.078-1.187-2.078-1.187-1.047 0-1.765.406-2.36 1.328v-1.094zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"b"},je.createElement("path",{className:"stk-n",d:"M.875 3.203h1.219V-.812C2.75-.016 3.469.327 4.469.327c2 0 3.297-1.61 3.297-4.062 0-2.594-1.266-4.22-3.297-4.22-1.063 0-1.969.516-2.453 1.391V-7.72H.875zm3.39-10C5.61-6.797 6.5-5.609 6.5-3.766c0 1.75-.906 2.938-2.234 2.938C2.937-.828 2.094-2 2.094-3.813c0-1.812.86-2.984 2.172-2.984zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"c"},je.createElement("path",{className:"stk-n",d:"M7.625-3.453c.016-1.11-.078-1.813-.281-2.36-.453-1.328-1.657-2.14-3.14-2.14-2.157 0-3.548 1.64-3.548 4.203C.656-1.203 2 .344 4.172.344c1.75 0 3-1 3.297-2.688H6.234C5.891-1.328 5.188-.797 4.22-.797c-.766 0-1.407-.328-1.828-.937-.329-.454-.438-.907-.454-1.72zm-5.64-1c.077-1.422.952-2.36 2.202-2.36s2.125.985 2.11 2.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"d"},je.createElement("path",{className:"stk-n",d:"M6.156-7.719v1.125c-.625-.937-1.375-1.36-2.36-1.36-1.968 0-3.28 1.72-3.28 4.235 0 1.266.328 2.297.968 3.031C2.063-.046 2.875.345 3.688.345c.968 0 1.671-.422 2.343-1.39v.405c0 1.032-.14 1.657-.437 2.094-.328.453-.953.719-1.703.719-.547 0-1.063-.125-1.391-.39-.297-.204-.422-.438-.469-.891H.766c.14 1.453 1.28 2.312 3.062 2.312 1.156 0 2.14-.375 2.656-.984.579-.703.813-1.656.813-3.485v-6.453zm-2.218.89c1.312 0 2.093 1.126 2.093 3.063 0 1.844-.797 2.97-2.093 2.97-1.344 0-2.157-1.141-2.157-3.016 0-1.86.828-3.016 2.157-3.016zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"e"},je.createElement("path",{className:"stk-n",d:"M9.86-7.406c-.438-2.375-1.797-3.516-4.141-3.516-1.453 0-2.61.453-3.407 1.344-.984 1.078-1.5 2.61-1.5 4.344 0 1.75.547 3.28 1.563 4.312C3.188-.062 4.25.344 5.656.344c2.625 0 4.094-1.422 4.422-4.266H8.672c-.125.719-.25 1.172-.469 1.61-.437.937-1.344 1.437-2.531 1.437-2.125 0-3.5-1.703-3.5-4.39 0-2.75 1.297-4.438 3.39-4.438.829 0 1.61.234 2.063.625.438.36.656.828.813 1.672zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"f"},je.createElement("path",{className:"stk-n",d:"M4.078-7.953c-2.187 0-3.484 1.547-3.484 4.14C.594-1.203 1.89.329 4.078.329c2.172 0 3.5-1.547 3.5-4.078 0-2.672-1.281-4.203-3.5-4.203zm0 1.14c1.39 0 2.219 1.125 2.219 3.032 0 1.828-.86 2.969-2.219 2.969-1.36 0-2.203-1.141-2.203-3 0-1.86.844-3 2.203-3zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"g"},je.createElement("path",{className:"stk-n",d:"M7.375-10.734H6.156v3.968c-.531-.78-1.343-1.187-2.375-1.187C1.766-7.953.47-6.343.47-3.891.47-1.266 1.735.344 3.83.344c1.062 0 1.765-.39 2.452-1.36V0h1.094zm-3.39 3.937c1.328 0 2.171 1.172 2.171 3.031 0 1.782-.86 2.954-2.172 2.954-1.343 0-2.25-1.204-2.25-3 0-1.782.907-2.985 2.25-2.985zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"h"},je.createElement("path",{className:"stk-n",d:"M1.063-7.719V0h1.234v-4c0-1.063.25-1.797.812-2.219.407-.328.766-.406 1.657-.422v-1.265a2.946 2.946 0 0 0-.47-.047c-.796 0-1.468.516-2.093 1.64v-1.406zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"w"},je.createElement("path",{className:"stk-n",d:"M7-5.125c-.063-.719-.188-1.188-.469-1.61-.515-.765-1.468-1.218-2.578-1.218-2.078 0-3.422 1.656-3.422 4.219C.531-1.25 1.844.328 3.937.328c1.86 0 3-1.094 3.157-2.984h-1.25C5.656-1.422 5.03-.812 3.969-.812c-1.36 0-2.172-1.094-2.172-2.922 0-1.938.797-3.079 2.14-3.079 1.032 0 1.688.61 1.844 1.688zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"x"},je.createElement("path",{className:"stk-n",d:"M2.266-10.734H1.03V0h1.235zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"y"},je.createElement("path",{className:"stk-n",d:"M7.953-.719c-.125.031-.187.031-.266.031-.421 0-.671-.218-.671-.609v-4.516c0-1.406-.985-2.14-2.891-2.14-1.094 0-1.984.297-2.516.86-.375.405-.546.859-.578 1.655h1.25c.094-.937.64-1.375 1.797-1.375 1.11 0 1.734.407 1.734 1.172v.313c0 .531-.328.734-1.28.86-1.704.202-1.954.25-2.407.437C1.172-3.656.687-2.97.687-1.938.688-.546 1.672.345 3.22.345c.984 0 1.765-.328 2.625-1.14.093.796.468 1.14 1.265 1.14.266 0 .422-.031.844-.14zm-2.14-1.703c0 .406-.125.672-.485 1A2.66 2.66 0 0 1 3.5-.734c-.969 0-1.531-.47-1.531-1.235 0-.812.531-1.218 1.86-1.406 1.312-.188 1.577-.234 1.983-.438zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"z"},je.createElement("path",{className:"stk-n",d:"M6.531-5.563c-.015-1.53-1.031-2.39-2.812-2.39S.766-7.016.766-5.578c0 1.219.625 1.781 2.437 2.219l1.156.28c.844.22 1.188.517 1.188 1.063 0 .735-.719 1.22-1.797 1.22-.625 0-1.188-.173-1.5-.485-.219-.219-.297-.438-.39-1.016H.561C.625-.516 1.625.343 3.642.343c1.937 0 3.187-.952 3.187-2.437 0-1.156-.64-1.812-2.172-2.172L3.47-4.53c-1-.219-1.406-.563-1.406-1.11 0-.718.624-1.171 1.624-1.171.985 0 1.5.421 1.547 1.25zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"D"},je.createElement("path",{className:"stk-n",d:"M3.781-7.719H2.5v-2.125H1.297v2.125H.234v1h1.063V-.89c0 .782.516 1.22 1.484 1.22.313 0 .578-.032 1-.11V-.797a3.266 3.266 0 0 1-.594.047c-.53 0-.687-.156-.687-.672v-5.297h1.281zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"E"},je.createElement("path",{className:"stk-n",d:"M1.11-10.734V0h1.218v-4.266c0-1.562.828-2.609 2.094-2.609 1 0 1.594.578 1.594 1.516V0h1.218v-5.828c0-1.313-.937-2.125-2.421-2.125-1.11 0-1.766.344-2.485 1.281v-4.062zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"i"},je.createElement("path",{className:"stk-n",d:"m7.469 0 3.234-9.61V0h1.375v-11.453h-2.015L6.719-1.484l-3.407-9.97H1.297V0h1.375v-9.61L5.937 0zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"j"},je.createElement("path",{className:"stk-n",d:"M.922 3.422h1.312V-.86C2.922-.016 3.704.359 4.766.359 6.89.36 8.28-1.359 8.28-3.984c0-2.766-1.36-4.5-3.515-4.5-1.141 0-2.094.546-2.625 1.468v-1.218H.92zM4.547-7.25c1.437 0 2.375 1.266 2.375 3.234 0 1.875-.953 3.141-2.375 3.141-1.406 0-2.313-1.25-2.313-3.188 0-1.937.922-3.187 2.313-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"k"},je.createElement("path",{className:"stk-n",d:"M8.125-3.688c.016-1.171-.078-1.921-.281-2.515-.5-1.406-1.782-2.281-3.36-2.281C2.172-8.484.704-6.734.704-4c0 2.719 1.421 4.375 3.75 4.375C6.312.375 7.64-.703 7.968-2.5H6.656C6.281-1.422 5.531-.844 4.5-.844c-.813 0-1.516-.36-1.953-1.015-.344-.485-.469-.954-.485-1.829zM2.109-4.75c.094-1.516 1.032-2.516 2.36-2.516 1.328 0 2.265 1.047 2.25 2.516zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"l"},je.createElement("path",{className:"stk-n",d:"M6.563-8.234v1.187c-.657-.984-1.454-1.437-2.516-1.437-2.094 0-3.5 1.828-3.5 4.515 0 1.344.344 2.453 1.031 3.235.61.687 1.5 1.109 2.36 1.109 1.015 0 1.78-.453 2.5-1.5v.438c0 1.109-.157 1.78-.47 2.234-.359.484-1.03.766-1.827.766-.579 0-1.11-.141-1.47-.407-.312-.218-.452-.468-.515-.968H.812C.954 2.5 2.173 3.421 4.079 3.421c1.234 0 2.297-.39 2.828-1.047.625-.766.875-1.781.875-3.719v-6.89zm-2.375.953c1.406 0 2.25 1.203 2.25 3.265 0 1.97-.86 3.172-2.25 3.172-1.422 0-2.282-1.219-2.282-3.219 0-1.984.875-3.218 2.282-3.218zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"m"},je.createElement("path",{className:"stk-n",d:"M10.516-7.906c-.47-2.532-1.907-3.735-4.422-3.735-1.547 0-2.782.47-3.625 1.422-1.047 1.14-1.61 2.781-1.61 4.64 0 1.86.594 3.5 1.672 4.61.875.906 2 1.344 3.5 1.344 2.797 0 4.375-1.531 4.719-4.547h-1.5c-.125.75-.281 1.25-.5 1.703-.469 1-1.438 1.547-2.703 1.547-2.266 0-3.734-1.828-3.734-4.687 0-2.938 1.39-4.75 3.624-4.75.875 0 1.704.265 2.188.671.469.391.703.891.89 1.782zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"n"},je.createElement("path",{className:"stk-n",d:"M2.422-11.453H1.109V0h1.313zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"o"},je.createElement("path",{className:"stk-n",d:"M2.39-8.234H1.095V0H2.39zm0-3.22H1.079v1.642h1.313zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"p"},je.createElement("path",{className:"stk-n",d:"M1.188-8.234V0H2.5v-4.547c0-1.687.875-2.781 2.219-2.781 1.047 0 1.703.625 1.703 1.61V0h1.312v-6.219c0-1.36-1.046-2.265-2.609-2.265-1.234 0-2.063.5-2.719 1.625v-1.375zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"q"},je.createElement("path",{className:"stk-n",d:"M4.031-8.234h-1.36V-10.5H1.376v2.266H.25v1.062h1.125v6.234c0 .829.563 1.297 1.578 1.297.344 0 .625-.046 1.078-.125V-.844a3.642 3.642 0 0 1-.625.047c-.578 0-.734-.156-.734-.719v-5.656h1.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"r"},je.createElement("path",{className:"stk-n",d:"M1.5 0h4.422c2.875 0 4.656-2.172 4.656-5.734 0-3.547-1.781-5.72-4.656-5.72H1.5zm1.453-1.297v-8.86h2.703c2.266 0 3.469 1.516 3.469 4.423 0 2.921-1.203 4.437-3.469 4.437zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"s"},je.createElement("path",{className:"stk-n",d:"M7.469-5.469c-.063-.765-.203-1.265-.516-1.718C6.422-8 5.406-8.485 4.22-8.485 2-8.484.562-6.72.562-3.984.563-1.328 1.97.359 4.204.359c1.969 0 3.203-1.171 3.36-3.187h-1.33c-.203 1.312-.875 1.969-2 1.969-1.453 0-2.312-1.172-2.312-3.125 0-2.063.844-3.282 2.281-3.282 1.094 0 1.797.641 1.953 1.797zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"t"},je.createElement("path",{className:"stk-n",d:"M4.36-8.484C2.015-8.484.64-6.828.64-4.063.64-1.28 2.017.36 4.36.36 6.671.36 8.077-1.297 8.077-4c0-2.844-1.36-4.484-3.719-4.484zm0 1.218c1.484 0 2.359 1.204 2.359 3.235 0 1.953-.907 3.172-2.36 3.172C2.891-.86 2-2.08 2-4.063c0-1.984.89-3.203 2.36-3.203zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"u"},je.createElement("path",{className:"stk-n",d:"M7.875-11.453H6.562v4.234C6-8.047 5.141-8.484 4.033-8.484 1.89-8.484.5-6.766.5-4.141.5-1.344 1.86.375 4.078.375c1.14 0 1.89-.422 2.625-1.469V0h1.172zM4.25-7.25c1.406 0 2.313 1.25 2.313 3.234 0 1.907-.922 3.157-2.313 3.157-1.438 0-2.39-1.282-2.39-3.204 0-1.906.952-3.187 2.39-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"v"},je.createElement("path",{className:"stk-n",d:"M1.14-8.234V0h1.313v-4.266c0-1.14.266-1.906.86-2.375.437-.328.812-.437 1.78-.453v-1.343a3.67 3.67 0 0 0-.515-.047c-.844 0-1.547.546-2.219 1.75v-1.5zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"A"},je.createElement("path",{className:"stk-n",d:"M9.453-8.094v-.203c0-.656-.187-1.234-.562-1.781-.704-1.047-1.938-1.563-3.625-1.563-2.516 0-4.063 1.266-4.063 3.36 0 1.406.734 2.281 2.234 2.687l2.844.735c1.469.375 2.125.953 2.125 1.843 0 .61-.328 1.25-.828 1.594-.453.313-1.172.484-2.11.484-1.218 0-2.03-.296-2.593-.906-.438-.5-.656-1.062-.656-1.797H.844c.015 1 .203 1.672.61 2.266C2.218-.235 3.577.359 5.39.359 6.75.36 7.859.047 8.594-.53a3.455 3.455 0 0 0 1.265-2.625c0-1.422-.89-2.438-2.453-2.86l-2.86-.765c-1.39-.39-1.89-.828-1.89-1.703 0-1.157 1.031-1.938 2.563-1.938 1.828 0 2.828.828 2.86 2.328zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"B"},je.createElement("path",{className:"stk-n",d:"m4.547 0 3.156-8.234H6.22L3.89-1.563l-2.171-6.67h-1.5L3.125 0zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"C"},je.createElement("path",{className:"stk-n",d:"M2.953-5.219h6.25v-1.297h-6.25v-3.64h6.485v-1.297H1.5V0h8.234v-1.297h-6.78zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"F"},je.createElement("path",{className:"stk-n",d:"M6.953-5.938C6.937-7.563 5.875-8.483 3.97-8.483s-3.156 1-3.156 2.53c0 1.298.671 1.907 2.609 2.376l1.234.297c.89.219 1.266.547 1.266 1.14 0 .782-.766 1.297-1.922 1.297-.672 0-1.266-.203-1.594-.515-.25-.235-.328-.485-.422-1.094H.61C.672-.547 1.734.375 3.891.375c2.062 0 3.39-1.031 3.39-2.61 0-1.234-.687-1.921-2.328-2.312l-1.25-.281c-1.062-.25-1.515-.61-1.515-1.188 0-.765.671-1.25 1.75-1.25 1.03 0 1.593.454 1.64 1.329zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"G"},je.createElement("path",{className:"stk-n",d:"M11.25-6.047H6.469v1.281h3.484v2.454C8.406-1.298 7.47-.938 6.281-.938c-1.093 0-2.14-.437-2.812-1.156-.75-.797-1.219-2.187-1.219-3.61 0-2.796 1.61-4.655 4.016-4.655 1.765 0 3.015.906 3.312 2.375h1.516c-.406-2.313-2.188-3.657-4.813-3.657-1.39 0-2.515.36-3.422 1.094C1.547-9.437.797-7.657.797-5.609.797-2.125 2.953.359 5.984.359c.844 0 2-.265 2.938-.64.719-.313 1.25-.61 2.328-1.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"H"},je.createElement("path",{className:"stk-n",d:"M.922-11.453V0h1.187v-1.063C2.672-.125 3.547.375 4.72.375c2.156 0 3.562-1.781 3.562-4.516 0-2.687-1.344-4.343-3.515-4.343-1.141 0-1.922.421-2.547 1.359v-4.328zm3.61 4.203c1.452 0 2.39 1.266 2.39 3.234 0 1.875-.969 3.157-2.39 3.157-1.391 0-2.313-1.25-2.313-3.204 0-1.921.922-3.187 2.312-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"I"},je.createElement("path",{className:"stk-n",d:"M8.484-.766c-.125.032-.203.032-.296.032-.438 0-.704-.22-.704-.641v-4.828c0-1.5-1.046-2.281-3.078-2.281-1.172 0-2.125.328-2.687.921-.407.422-.578.907-.61 1.766h1.329c.093-1 .687-1.469 1.921-1.469 1.172 0 1.829.438 1.829 1.25v.329c0 .562-.329.796-1.36.921-1.797.22-2.078.266-2.562.47C1.25-3.907.734-3.173.734-2.063.734-.579 1.781.374 3.438.374c1.046 0 1.874-.36 2.796-1.219.11.844.5 1.219 1.344 1.219.297 0 .453-.031.906-.156zM6.188-2.578c0 .437-.125.703-.5 1.062a2.91 2.91 0 0 1-1.954.735c-1.03 0-1.64-.5-1.64-1.313 0-.86.578-1.312 1.984-1.5 1.406-.203 1.688-.265 2.11-.469zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"J"},je.createElement("path",{className:"stk-n",d:"M1.234-8.234V0h1.313v-5.188c0-1.187.86-2.14 1.937-2.14.954 0 1.516.61 1.516 1.64V0h1.328v-5.188c0-1.187.86-2.14 1.922-2.14.969 0 1.531.61 1.531 1.64V0h1.313v-6.172c0-1.484-.828-2.312-2.375-2.312-1.094 0-1.75.328-2.531 1.265-.485-.875-1.157-1.265-2.235-1.265-1.094 0-1.86.437-2.5 1.406v-1.156zm0 0"})))),je.createElement("path",{className:"module-box","data-tstyle":"module-box",d:"M0 0h-198v288h396V0zm0 0",transform:"matrix(1 0 0 -1 199.75 289.75)",style:{fillRule:"evenodd",fill:"#ffffde",fillOpacity:1,strokeWidth:1.5,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#aa3",strokeOpacity:1,strokeMiterlimit:10}}),je.createElement("g",{className:"font-f","data-tstyle":"font-f",style:{fill:"#000",fillOpacity:1}},r||(r=je.createElement("use",{xlinkHref:"#a",x:160.45,y:22.25})),s||(s=je.createElement("use",{xlinkHref:"#b",x:172.945,y:22.25})),m||(m=je.createElement("use",{xlinkHref:"#c",x:181.33,y:22.25})),i||(i=je.createElement("use",{xlinkHref:"#d",x:189.715,y:22.25})),c||(c=je.createElement("use",{xlinkHref:"#e",x:198.1,y:22.25})),d||(d=je.createElement("use",{xlinkHref:"#f",x:208.9,y:22.25})),o||(o=je.createElement("use",{xlinkHref:"#g",x:217.285,y:22.25})),f||(f=je.createElement("use",{xlinkHref:"#c",x:225.67,y:22.25})),h||(h=je.createElement("use",{xlinkHref:"#h",x:234.055,y:22.25}))),p||(p=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M0 0c-1.7 0-3.302-1.698-3.302-3.402v-29.296C-3.302-34.3-1.7-36 0-36h137.3c1.7 0 3.398 1.699 3.398 3.3v29.297c0 1.704-1.699 3.403-3.398 3.403zm0 0",transform:"matrix(1 0 0 -1 215.45 70.95)"})),x||(x=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:243.75,y:94.65}),je.createElement("use",{xlinkHref:"#j",x:257.046,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:265.942,y:94.65}),je.createElement("use",{xlinkHref:"#l",x:274.742,y:94.65}),je.createElement("use",{xlinkHref:"#m",x:283.638,y:94.65}),je.createElement("use",{xlinkHref:"#n",x:295.142,y:94.65}),je.createElement("use",{xlinkHref:"#o",x:298.726,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:302.31,y:94.65}),je.createElement("use",{xlinkHref:"#p",x:311.206,y:94.65}),je.createElement("use",{xlinkHref:"#q",x:320.102,y:94.65}))),y||(y=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 199.75 178.15)"})),E||(E=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.4",transform:"matrix(1 0 0 -1 170.95 178.15)"})),v||(v=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002H-14.4",transform:"matrix(1 0 0 -1 142.15 178.15)"})),u||(u=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 113.35 178.15)"})),k||(k=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.402",transform:"matrix(1 0 0 -1 84.55 178.15)"})),N||(N=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 55.75 178.15)"})),b||(b=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-7.2V7.2",transform:"matrix(1 0 0 -1 26.95 178.15)"})),M||(M=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.402",transform:"matrix(1 0 0 -1 19.75 156.55)"})),H||(H=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.398",transform:"matrix(1 0 0 -1 19.75 127.75)"})),g||(g=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.4",transform:"matrix(1 0 0 -1 19.75 98.95)"})),w||(w=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002V14.4",transform:"matrix(1 0 0 -1 19.75 70.15)"})),z||(z=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002V3.6h10.8",transform:"matrix(1 0 0 -1 19.75 41.35)"})),C||(C=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 44.95 37.75)"})),V||(V=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 73.75 37.75)"})),T||(T=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.4",transform:"matrix(1 0 0 -1 102.55 37.75)"})),I||(I=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0H14.4",transform:"matrix(1 0 0 -1 131.35 37.75)"})),L||(L=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0h14.403",transform:"matrix(1 0 0 -1 160.15 37.75)"})),F||(F=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 188.95 37.75)"})),Z||(Z=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 217.75 37.75)"})),D||(D=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.4",transform:"matrix(1 0 0 -1 246.55 37.75)"})),O||(O=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0H14.4",transform:"matrix(1 0 0 -1 275.35 37.75)"})),P||(P=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0h14.403",transform:"matrix(1 0 0 -1 304.15 37.75)"})),S||(S=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 332.95 37.75)"})),A||(A=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 361.75 37.75)"})),j||(j=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.4",transform:"matrix(1 0 0 -1 379.75 48.55)"})),U||(U=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002V-14.4",transform:"matrix(1 0 0 -1 379.75 77.35)"})),_||(_=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002v-14.403",transform:"matrix(1 0 0 -1 379.75 106.15)"})),R||(R=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.402",transform:"matrix(1 0 0 -1 379.75 134.95)"})),q||(q=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.398",transform:"matrix(1 0 0 -1 379.75 163.75)"})),G||(G=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 365.35 178.15)"})),B||(B=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.402",transform:"matrix(1 0 0 -1 336.55 178.15)"})),X||(X=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 307.75 178.15)"})),J||(J=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.4",transform:"matrix(1 0 0 -1 278.95 178.15)"})),W||(W=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002H-14.4",transform:"matrix(1 0 0 -1 250.15 178.15)"})),K||(K=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 221.35 178.15)"})),Q||(Q=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M.002 0c-1.704 0-3.403-1.698-3.403-3.402v-29.296C-3.4-34.3-1.7-36 .002-36h137.296c1.602 0 3.301 1.699 3.301 3.3v29.297c0 1.704-1.699 3.403-3.3 3.403zm0 0",transform:"matrix(1 0 0 -1 46.85 70.95)"})),Y||(Y=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:65.35,y:94.65}),je.createElement("use",{xlinkHref:"#j",x:78.742,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:87.542,y:94.65}),je.createElement("use",{xlinkHref:"#l",x:96.438,y:94.65}),je.createElement("use",{xlinkHref:"#r",x:105.334,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:116.838,y:94.65}),je.createElement("use",{xlinkHref:"#s",x:125.734,y:94.65}),je.createElement("use",{xlinkHref:"#t",x:133.638,y:94.65}),je.createElement("use",{xlinkHref:"#u",x:142.534,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:151.43,y:94.65}),je.createElement("use",{xlinkHref:"#v",x:160.326,y:94.65}))),$||($=je.createElement("g",{className:"font-d","data-tstyle":"font-d"},je.createElement("use",{xlinkHref:"#w",x:319.35,y:58.95}),je.createElement("use",{xlinkHref:"#x",x:326.94,y:58.95}),je.createElement("use",{xlinkHref:"#y",x:330.24,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:338.625,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:346.215,y:58.95}),je.createElement("use",{xlinkHref:"#c",x:353.805,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:362.1,y:58.95}))),ee||(ee=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M0 0c-1.698 0-3.402-1.698-3.402-3.402v-29.296C-3.402-34.3-1.698-36 .001-36h137.3c1.598 0 3.297 1.699 3.297 3.3v29.297c0 1.704-1.699 3.403-3.296 3.403zm0 0",transform:"matrix(1 0 0 -1 215.55 124.95)"})),te||(te=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:240.65,y:148.65}),je.createElement("use",{xlinkHref:"#j",x:253.946,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:262.842,y:148.65}),je.createElement("use",{xlinkHref:"#l",x:271.738,y:148.65}),je.createElement("use",{xlinkHref:"#A",x:280.634,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:291.226,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:300.122,y:148.65}),je.createElement("use",{xlinkHref:"#B",x:305.914,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:313.514,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:322.314,y:148.65}))),ae||(ae=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M.002 0c-1.704 0-3.403-1.698-3.403-3.402v-29.296C-3.4-34.3-1.7-36 .002-36h137.296c1.704 0 3.403 1.699 3.403 3.3v29.297c0 1.704-1.7 3.403-3.403 3.403zm0 0",transform:"matrix(1 0 0 -1 46.85 124.95)"})),le||(le=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:65.85,y:148.65}),je.createElement("use",{xlinkHref:"#j",x:79.146,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:88.042,y:148.65}),je.createElement("use",{xlinkHref:"#l",x:96.842,y:148.65}),je.createElement("use",{xlinkHref:"#C",x:105.738,y:148.65}),je.createElement("use",{xlinkHref:"#p",x:116.426,y:148.65}),je.createElement("use",{xlinkHref:"#s",x:125.322,y:148.65}),je.createElement("use",{xlinkHref:"#t",x:133.226,y:148.65}),je.createElement("use",{xlinkHref:"#u",x:142.122,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:151.018,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:159.914,y:148.65}))),ne||(ne=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 199.75 278.95)"})),re||(re=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.4",transform:"matrix(1 0 0 -1 170.95 278.95)"})),se||(se=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0H-14.4",transform:"matrix(1 0 0 -1 142.15 278.95)"})),me||(me=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 113.35 278.95)"})),ie||(ie=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.402",transform:"matrix(1 0 0 -1 84.55 278.95)"})),ce||(ce=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 55.75 278.95)"})),de||(de=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-7.2v7.2",transform:"matrix(1 0 0 -1 26.95 278.95)"})),oe||(oe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002v14.403",transform:"matrix(1 0 0 -1 19.75 257.35)"})),fe||(fe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.402",transform:"matrix(1 0 0 -1 19.75 228.55)"})),he||(he=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v3.602h10.8",transform:"matrix(1 0 0 -1 19.75 199.75)"})),pe||(pe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 44.95 196.15)"})),xe||(xe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 73.75 196.15)"})),ye||(ye=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.4",transform:"matrix(1 0 0 -1 102.55 196.15)"})),Ee||(Ee=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002H14.4",transform:"matrix(1 0 0 -1 131.35 196.15)"})),ve||(ve=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002h14.403",transform:"matrix(1 0 0 -1 160.15 196.15)"})),ue||(ue=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 188.95 196.15)"})),ke||(ke=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 217.75 196.15)"})),Ne||(Ne=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.4",transform:"matrix(1 0 0 -1 246.55 196.15)"})),be||(be=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002H14.4",transform:"matrix(1 0 0 -1 275.35 196.15)"})),Me||(Me=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002h14.403",transform:"matrix(1 0 0 -1 304.15 196.15)"})),He||(He=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 332.95 196.15)"})),ge||(ge=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 361.75 196.15)"})),we||(we=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.402",transform:"matrix(1 0 0 -1 379.75 206.95)"})),ze||(ze=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.398",transform:"matrix(1 0 0 -1 379.75 235.75)"})),Ce||(Ce=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.4",transform:"matrix(1 0 0 -1 379.75 264.55)"})),Ve||(Ve=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 365.35 278.95)"})),Te||(Te=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.402",transform:"matrix(1 0 0 -1 336.55 278.95)"})),Ie||(Ie=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 307.75 278.95)"})),Le||(Le=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.4",transform:"matrix(1 0 0 -1 278.95 278.95)"})),Fe||(Fe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0H-14.4",transform:"matrix(1 0 0 -1 250.15 278.95)"})),Ze||(Ze=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 221.35 278.95)"})),De||(De=je.createElement("g",{className:"font-d","data-tstyle":"font-d"},je.createElement("use",{xlinkHref:"#a",x:311.75,y:217.35}),je.createElement("use",{xlinkHref:"#c",x:324.245,y:217.35}),je.createElement("use",{xlinkHref:"#D",x:332.54,y:217.35}),je.createElement("use",{xlinkHref:"#E",x:336.635,y:217.35}),je.createElement("use",{xlinkHref:"#f",x:345.02,y:217.35}),je.createElement("use",{xlinkHref:"#g",x:353.405,y:217.35}),je.createElement("use",{xlinkHref:"#z",x:361.79,y:217.35}))),Oe||(Oe=je.createElement("path",{className:"func-box","data-tstyle":"func-box",d:"M0 0h-72v36H72V0zm0 0",transform:"matrix(1 0 0 -1 115.45 264.55)"})),Pe||(Pe=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#F",x:81.85,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:89.754,y:252.25}),je.createElement("use",{xlinkHref:"#q",x:98.458,y:252.25}),je.createElement("use",{xlinkHref:"#G",x:102.938,y:252.25}),je.createElement("use",{xlinkHref:"#n",x:115.242,y:252.25}),je.createElement("use",{xlinkHref:"#t",x:118.826,y:252.25}),je.createElement("use",{xlinkHref:"#H",x:127.722,y:252.25}),je.createElement("use",{xlinkHref:"#I",x:136.618,y:252.25}),je.createElement("use",{xlinkHref:"#n",x:145.514,y:252.25}))),Se||(Se=je.createElement("path",{className:"func-box","data-tstyle":"func-box",d:"M.002 0h-72v36h144V0zm0 0",transform:"matrix(1 0 0 -1 284.85 264.55)"})),Ae||(Ae=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#v",x:257.95,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:263.054,y:252.25}),je.createElement("use",{xlinkHref:"#I",x:271.95,y:252.25}),je.createElement("use",{xlinkHref:"#u",x:280.846,y:252.25}),je.createElement("use",{xlinkHref:"#J",x:289.742,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:303.038,y:252.25}))))}},5549:function(e,t,a){a.d(t,{A:function(){return m},q:function(){return i}});var l=a(7294),n=a(9960),r="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",s="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function m(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=s+"/"+e.url;break;case"3.1.0":t=r+"/"+e.url}else t=s+"/"+e.url;return l.createElement(n.Z,{to:t,className:"noline"},e.children)}function i(e){return l.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}i.defaultProps={padx:"1ex"}},5897:function(e,t,a){a.r(t),a.d(t,{assets:function(){return y},contentTitle:function(){return p},default:function(){return u},frontMatter:function(){return h},metadata:function(){return x},toc:function(){return E}});var l=a(3117),n=a(102),r=(a(7294),a(3905)),s=a(541),m=a(5514),i=a(6577),c=a(7795),d=a(5549),o=a(7370),f=["components"],h={id:"apis",title:"Overview",description:"The overview of all APIs.",slug:"/apis/"},p=void 0,x={unversionedId:"apis",id:"version-3.2.x/apis",title:"Overview",description:"The overview of all APIs.",source:"@site/versioned_docs/version-3.2.x/api-overview.mdx",sourceDirName:".",slug:"/apis/",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/api-overview.mdx",tags:[],version:"3.2.x",frontMatter:{id:"apis",title:"Overview",description:"The overview of all APIs.",slug:"/apis/"},sidebar:"apis",next:{title:"readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/readme"}},y={},E=[{value:"Classes",id:"classes",level:2},{value:"Functions",id:"functions",level:2}],v={toc:E};function u(e){var t=e.components,a=(0,n.Z)(e,f);return(0,r.kt)("wrapper",(0,l.Z)({},v,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This package is a single-module package. The classes are shown in the following figure:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{className:"mermaid",mdxType:"OverviewSvg"})),(0,r.kt)("p",null,"In most APIs, the ",(0,r.kt)("inlineCode",{parentName:"p"},"string")," formatted arguments accept both ",(0,r.kt)("inlineCode",{parentName:"p"},"str")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"bytes")," objects. If a ",(0,r.kt)("inlineCode",{parentName:"p"},"str")," object is given, its coding will be recognized by the file system encoding, see ",(0,r.kt)("a",{parentName:"p",href:"https://docs.python.org/zh-cn/3/c-api/unicode.html#c.PyUnicode_DecodeFSDefaultAndSize",title:"PyUnicode_DecodeFSDefaultAndSize"},(0,r.kt)("inlineCode",{parentName:"a"},"PyUnicode_DecodeFSDefaultAndSize"),(0,r.kt)(s.Z,{mdxType:"IconExternalLink"})),". If a ",(0,r.kt)("inlineCode",{parentName:"p"},"bytes")," object is given, the contents will be converted to a ",(0,r.kt)("inlineCode",{parentName:"p"},"std::string")," directly. Therefore, if users want to use an argument with a specific encoding, they could use ",(0,r.kt)("inlineCode",{parentName:"p"},"str_argu.encode('...')")," instead of using ",(0,r.kt)("inlineCode",{parentName:"p"},"str_argu")," directly."),(0,r.kt)("h2",{id:"classes"},"Classes"),(0,r.kt)("p",null,"The module contains four classes:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Classes"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegCoder.h#L21",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegDecoder"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg decoder. It could be used for demuxing a video file, and return the extracted frames or GOPs.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegCoder.h#L82",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegEncoder"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg encoder. It is used for writing a video file. The data is encoded frame-by-frame.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegStreamer.h#L49",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegClient"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg decoder designed for pulling and demuxing a remote video stream. This class manages a ",(0,r.kt)("inlineCode",{parentName:"td"},"std::thread"),", and use the thread to synchronize the decoder with the real-time stream.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegStreamer.h#L114",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegServer"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg encoder designed for muxing and pushing a remote video stream. The stream is pushed frame-by-frame. Note that this class is required to be used with an active server.")))),(0,r.kt)("h2",{id:"functions"},"Functions"),(0,r.kt)("p",null,"The following functions are global methods of the module."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Functions"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegPyd.h#L131",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:c.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"setGlobal"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"Used for setting the global configurations of the module.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegPyd.h#L158",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:c.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"readme"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"Readme function. This method is used for printing brief instructions and updating reports of the module.")))))}u.isMDXComponent=!0},6577:function(e,t){t.Z={body:''}},7795:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/393be207.53741153.js b/assets/js/393be207.53741153.js new file mode 100644 index 0000000..4868a8d --- /dev/null +++ b/assets/js/393be207.53741153.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7414],{3123:function(e,t,n){n.r(t),n.d(t,{contentTitle:function(){return c},default:function(){return l},frontMatter:function(){return d},metadata:function(){return m},toc:function(){return u}});var o=n(3117),a=n(102),r=(n(7294),n(3905)),p=["components"],d={title:"Markdown page example"},c="Markdown page example",m={type:"mdx",permalink:"/FFmpeg-Encoder-Decoder-for-Python/markdown-page",source:"@site/src/pages/markdown-page.md",title:"Markdown page example",description:"You don't need React to write simple standalone pages.",frontMatter:{title:"Markdown page example"}},u=[],i={toc:u};function l(e){var t=e.components,n=(0,a.Z)(e,p);return(0,r.kt)("wrapper",(0,o.Z)({},i,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"markdown-page-example"},"Markdown page example"),(0,r.kt)("p",null,"You don't need React to write simple standalone pages."))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/39fecf1d.e347054b.js b/assets/js/39fecf1d.e347054b.js new file mode 100644 index 0000000..763c139 --- /dev/null +++ b/assets/js/39fecf1d.e347054b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[760],{2986:function(e,t,l){var a,c,r,n,i,m,d,h,p,o,s,E,v,f,u,y,z,k,P,b,M,g,R,x,H,O,N,V,w,L,C,A,F,j,T,I,W,S,D,Z,G,B,Q,U,X,q,Y,J,K,_,$,ee,te,le,ae,ce,re,ne,ie,me,de,he,pe,oe,se,Ee,ve,fe,ue,ye,ze,ke,Pe,be,Me,ge,Re,xe,He,Oe,Ne,Ve,we,Le,Ce,Ae,Fe,je,Te,Ie,We,Se,De,Ze,Ge,Be,Qe,Ue,Xe,qe,Ye,Je,Ke,_e,$e,et,tt,lt,at,ct,rt,nt,it,mt,dt,ht,pt,ot,st,Et,vt,ft,ut,yt,zt,kt,Pt,bt,Mt,gt,Rt,xt,Ht,Ot,Nt,Vt,wt,Lt,Ct,At,Ft,jt,Tt,It,Wt,St,Dt,Zt,Gt,Bt,Qt,Ut,Xt,qt,Yt,Jt,Kt,_t,$t,el,tl,ll,al,cl,rl,nl,il,ml,dl,hl,pl,ol,sl,El,vl,fl,ul,yl,zl,kl,Pl,bl,Ml,gl,Rl,xl,Hl,Ol,Nl,Vl,wl,Ll,Cl,Al,Fl,jl,Tl,Il,Wl,Sl,Dl,Zl,Gl,Bl,Ql,Ul,Xl,ql,Yl,Jl,Kl,_l,$l,ea,ta,la,aa,ca,ra,na,ia,ma,da,ha,pa,oa,sa,Ea,va,fa,ua,ya,za,ka,Pa,ba,Ma,ga,Ra,xa,Ha,Oa,Na,Va,wa,La,Ca,Aa,Fa,ja,Ta,Ia,Wa,Sa,Da,Za,Ga,Ba,Qa,Ua,Xa,qa,Ya,Ja,Ka,_a,$a,ec,tc,lc,ac,cc,rc,nc,ic,mc,dc,hc,pc,oc,sc,Ec,vc,fc,uc,yc,zc,kc,Pc,bc,Mc,gc,Rc,xc,Hc,Oc,Nc,Vc,wc,Lc,Cc,Ac,Fc,jc,Tc,Ic,Wc,Sc,Dc,Zc,Gc,Bc,Qc,Uc,Xc,qc,Yc,Jc,Kc,_c,$c,er,tr,lr,ar,cr,rr,nr,ir,mr,dr,hr,pr,or,sr,Er,vr,fr,ur,yr,zr,kr,Pr,br,Mr,gr,Rr,xr,Hr,Or,Nr,Vr,wr,Lr,Cr,Ar,Fr,jr,Tr,Ir,Wr,Sr,Dr,Zr,Gr,Br,Qr,Ur,Xr,qr,Yr,Jr,Kr,_r,$r,en,tn,ln,an,cn,rn,nn,mn,dn,hn,pn,on,sn,En,vn,fn,un,yn,zn,kn,Pn,bn,Mn,gn,Rn,xn,Hn,On,Nn,Vn,wn,Ln,Cn,An,Fn,jn,Tn,In,Wn,Sn,Dn,Zn,Gn,Bn,Qn,Un,Xn,qn,Yn,Jn,Kn,_n,$n,ei,ti,li,ai,ci,ri,ni,ii,mi,di,hi,pi,oi,si,Ei,vi,fi,ui,yi,zi,ki,Pi,bi,Mi,gi,Ri,xi,Hi,Oi,Ni,Vi,wi,Li,Ci,Ai,Fi,ji,Ti,Ii,Wi,Si,Di,Zi,Gi,Bi,Qi,Ui,Xi,qi,Yi,Ji,Ki,_i,$i,em,tm,lm,am,cm,rm,nm,im,mm,dm,hm,pm,om,sm,Em,vm,fm,um,ym,zm,km,Pm,bm,Mm,gm,Rm,xm,Hm,Om,Nm,Vm,wm,Lm,Cm,Am,Fm,jm,Tm,Im,Wm,Sm,Dm,Zm,Gm,Bm,Qm,Um,Xm,qm,Ym,Jm,Km,_m,$m,ed,td,ld,ad,cd,rd,nd,id,md,dd,hd,pd,od,sd,Ed,vd,fd,ud,yd,zd,kd,Pd,bd,Md,gd,Rd,xd,Hd,Od,Nd,Vd,wd,Ld,Cd,Ad,Fd,jd,Td,Id,Wd,Sd,Dd,Zd,Gd,Bd,Qd,Ud,Xd,qd,Yd,Jd,Kd,_d,$d,eh,th,lh,ah,ch,rh,nh,ih,mh,dh,hh,ph,oh,sh,Eh,vh,fh,uh,yh,zh,kh,Ph,bh,Mh,gh,Rh,xh,Hh,Oh,Nh,Vh,wh,Lh,Ch,Ah,Fh,jh,Th,Ih,Wh,Sh,Dh=l(7294),Zh=["title","titleId"];function Gh(){return Gh=Object.assign||function(e){for(var t=1;t=0||(c[l]=e[l]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(c[l]=e[l])}return c}t.Z=function(e){var t=e.title,l=e.titleId,Qh=Bh(e,Zh);return Dh.createElement("svg",Gh({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:"100%",style:{maxWidth:"624.696px",height:"auto",maxHeight:"281.512px"},viewBox:"0 0 624.696 281.512",id:"graph-div","aria-labelledby":l},Qh),t?Dh.createElement("title",{id:l},t):null,a||(a=Dh.createElement("style",null,"#graph-div .black{fill:#000}#graph-div .sblack{stroke:#000}#graph-div .blue{fill:#00c}#graph-div .red{fill:red}#graph-div .sred{stroke:red}#graph-div .arrow{stroke:none;fill-rule:evenodd;fill-opacity:1}#graph-div .line-1{fill:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .line-3{fill:none;stroke-width:2.292}#graph-div .line-4{stroke-width:.99}#graph-div .clip-1,#graph-div .line-4{fill:none;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .dash-1{fill:none;stroke-width:2.292}#graph-div .dash-1,#graph-div .gbox,#graph-div .line-3,#graph-div .thread-box{stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .clip-1{stroke-width:1.132;stroke:#fff}#graph-div .gbox,#graph-div .thread-box{fill-rule:evenodd;fill:#eee;fill-opacity:1;stroke-width:1.5}#graph-div .thread-box{fill:#ff9;stroke-width:2.292}")),Dh.createElement("defs",null,c||(c=Dh.createElement("clipPath",{id:"k"},Dh.createElement("path",{d:"M19 28h6v50h-6zm0 0"}))),r||(r=Dh.createElement("clipPath",{id:"l"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),n||(n=Dh.createElement("clipPath",{id:"m"},Dh.createElement("path",{d:"M24 28h2v50h-2zm0 0"}))),i||(i=Dh.createElement("clipPath",{id:"n"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),m||(m=Dh.createElement("clipPath",{id:"o"},Dh.createElement("path",{d:"M25 28h2v50h-2zm0 0"}))),d||(d=Dh.createElement("clipPath",{id:"p"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),h||(h=Dh.createElement("clipPath",{id:"q"},Dh.createElement("path",{d:"M26 28h2v50h-2zm0 0"}))),p||(p=Dh.createElement("clipPath",{id:"r"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),o||(o=Dh.createElement("clipPath",{id:"s"},Dh.createElement("path",{d:"M27 28h2v50h-2zm0 0"}))),s||(s=Dh.createElement("clipPath",{id:"t"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),E||(E=Dh.createElement("clipPath",{id:"u"},Dh.createElement("path",{d:"M28 28h2v50h-2zm0 0"}))),v||(v=Dh.createElement("clipPath",{id:"v"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),f||(f=Dh.createElement("clipPath",{id:"w"},Dh.createElement("path",{d:"M29 28h2v50h-2zm0 0"}))),u||(u=Dh.createElement("clipPath",{id:"x"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),y||(y=Dh.createElement("clipPath",{id:"y"},Dh.createElement("path",{d:"M30 28h2v50h-2zm0 0"}))),z||(z=Dh.createElement("clipPath",{id:"z"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),k||(k=Dh.createElement("clipPath",{id:"A"},Dh.createElement("path",{d:"M31 28h2v50h-2zm0 0"}))),P||(P=Dh.createElement("clipPath",{id:"B"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),b||(b=Dh.createElement("clipPath",{id:"C"},Dh.createElement("path",{d:"M32 28h2v50h-2zm0 0"}))),M||(M=Dh.createElement("clipPath",{id:"D"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),g||(g=Dh.createElement("clipPath",{id:"E"},Dh.createElement("path",{d:"M33 28h2v50h-2zm0 0"}))),R||(R=Dh.createElement("clipPath",{id:"F"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),x||(x=Dh.createElement("clipPath",{id:"G"},Dh.createElement("path",{d:"M34 28h2v50h-2zm0 0"}))),H||(H=Dh.createElement("clipPath",{id:"H"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),O||(O=Dh.createElement("clipPath",{id:"I"},Dh.createElement("path",{d:"M35 28h2v50h-2zm0 0"}))),N||(N=Dh.createElement("clipPath",{id:"J"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),V||(V=Dh.createElement("clipPath",{id:"K"},Dh.createElement("path",{d:"M36 28h2v50h-2zm0 0"}))),w||(w=Dh.createElement("clipPath",{id:"L"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),L||(L=Dh.createElement("clipPath",{id:"M"},Dh.createElement("path",{d:"M37 28h2v50h-2zm0 0"}))),C||(C=Dh.createElement("clipPath",{id:"N"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),A||(A=Dh.createElement("clipPath",{id:"O"},Dh.createElement("path",{d:"M38 28h2v50h-2zm0 0"}))),F||(F=Dh.createElement("clipPath",{id:"P"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),j||(j=Dh.createElement("clipPath",{id:"Q"},Dh.createElement("path",{d:"M39 28h2v50h-2zm0 0"}))),T||(T=Dh.createElement("clipPath",{id:"R"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),I||(I=Dh.createElement("clipPath",{id:"S"},Dh.createElement("path",{d:"M40 28h2v50h-2zm0 0"}))),W||(W=Dh.createElement("clipPath",{id:"T"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),S||(S=Dh.createElement("clipPath",{id:"U"},Dh.createElement("path",{d:"M41 28h2v50h-2zm0 0"}))),D||(D=Dh.createElement("clipPath",{id:"V"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Z||(Z=Dh.createElement("clipPath",{id:"W"},Dh.createElement("path",{d:"M42 28h2v50h-2zm0 0"}))),G||(G=Dh.createElement("clipPath",{id:"X"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),B||(B=Dh.createElement("clipPath",{id:"Y"},Dh.createElement("path",{d:"M43 28h2v50h-2zm0 0"}))),Q||(Q=Dh.createElement("clipPath",{id:"Z"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),U||(U=Dh.createElement("clipPath",{id:"aa"},Dh.createElement("path",{d:"M44 28h2v50h-2zm0 0"}))),X||(X=Dh.createElement("clipPath",{id:"ab"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),q||(q=Dh.createElement("clipPath",{id:"ac"},Dh.createElement("path",{d:"M45 28h2v50h-2zm0 0"}))),Y||(Y=Dh.createElement("clipPath",{id:"ad"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),J||(J=Dh.createElement("clipPath",{id:"ae"},Dh.createElement("path",{d:"M45 28h3v50h-3zm0 0"}))),K||(K=Dh.createElement("clipPath",{id:"af"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),_||(_=Dh.createElement("clipPath",{id:"ag"},Dh.createElement("path",{d:"M46 28h3v50h-3zm0 0"}))),$||($=Dh.createElement("clipPath",{id:"ah"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ee||(ee=Dh.createElement("clipPath",{id:"ai"},Dh.createElement("path",{d:"M47 28h3v50h-3zm0 0"}))),te||(te=Dh.createElement("clipPath",{id:"aj"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),le||(le=Dh.createElement("clipPath",{id:"ak"},Dh.createElement("path",{d:"M48 28h2v50h-2zm0 0"}))),ae||(ae=Dh.createElement("clipPath",{id:"al"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ce||(ce=Dh.createElement("clipPath",{id:"am"},Dh.createElement("path",{d:"M49 28h2v50h-2zm0 0"}))),re||(re=Dh.createElement("clipPath",{id:"an"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ne||(ne=Dh.createElement("clipPath",{id:"ao"},Dh.createElement("path",{d:"M50 28h2v50h-2zm0 0"}))),ie||(ie=Dh.createElement("clipPath",{id:"ap"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),me||(me=Dh.createElement("clipPath",{id:"aq"},Dh.createElement("path",{d:"M51 28h2v50h-2zm0 0"}))),de||(de=Dh.createElement("clipPath",{id:"ar"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),he||(he=Dh.createElement("clipPath",{id:"as"},Dh.createElement("path",{d:"M52 28h2v50h-2zm0 0"}))),pe||(pe=Dh.createElement("clipPath",{id:"at"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),oe||(oe=Dh.createElement("clipPath",{id:"au"},Dh.createElement("path",{d:"M53 28h2v50h-2zm0 0"}))),se||(se=Dh.createElement("clipPath",{id:"av"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ee||(Ee=Dh.createElement("clipPath",{id:"aw"},Dh.createElement("path",{d:"M54 28h2v50h-2zm0 0"}))),ve||(ve=Dh.createElement("clipPath",{id:"ax"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),fe||(fe=Dh.createElement("clipPath",{id:"ay"},Dh.createElement("path",{d:"M55 28h2v50h-2zm0 0"}))),ue||(ue=Dh.createElement("clipPath",{id:"az"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ye||(ye=Dh.createElement("clipPath",{id:"aA"},Dh.createElement("path",{d:"M56 28h2v50h-2zm0 0"}))),ze||(ze=Dh.createElement("clipPath",{id:"aB"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ke||(ke=Dh.createElement("clipPath",{id:"aC"},Dh.createElement("path",{d:"M57 28h2v50h-2zm0 0"}))),Pe||(Pe=Dh.createElement("clipPath",{id:"aD"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),be||(be=Dh.createElement("clipPath",{id:"aE"},Dh.createElement("path",{d:"M58 28h2v50h-2zm0 0"}))),Me||(Me=Dh.createElement("clipPath",{id:"aF"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ge||(ge=Dh.createElement("clipPath",{id:"aG"},Dh.createElement("path",{d:"M59 28h2v50h-2zm0 0"}))),Re||(Re=Dh.createElement("clipPath",{id:"aH"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),xe||(xe=Dh.createElement("clipPath",{id:"aI"},Dh.createElement("path",{d:"M60 28h2v50h-2zm0 0"}))),He||(He=Dh.createElement("clipPath",{id:"aJ"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Oe||(Oe=Dh.createElement("clipPath",{id:"aK"},Dh.createElement("path",{d:"M61 28h2v50h-2zm0 0"}))),Ne||(Ne=Dh.createElement("clipPath",{id:"aL"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ve||(Ve=Dh.createElement("clipPath",{id:"aM"},Dh.createElement("path",{d:"M62 28h2v50h-2zm0 0"}))),we||(we=Dh.createElement("clipPath",{id:"aN"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Le||(Le=Dh.createElement("clipPath",{id:"aO"},Dh.createElement("path",{d:"M63 28h2v50h-2zm0 0"}))),Ce||(Ce=Dh.createElement("clipPath",{id:"aP"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ae||(Ae=Dh.createElement("clipPath",{id:"aQ"},Dh.createElement("path",{d:"M64 28h2v50h-2zm0 0"}))),Fe||(Fe=Dh.createElement("clipPath",{id:"aR"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),je||(je=Dh.createElement("clipPath",{id:"aS"},Dh.createElement("path",{d:"M65 28h2v50h-2zm0 0"}))),Te||(Te=Dh.createElement("clipPath",{id:"aT"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ie||(Ie=Dh.createElement("clipPath",{id:"aU"},Dh.createElement("path",{d:"M66 28h2v50h-2zm0 0"}))),We||(We=Dh.createElement("clipPath",{id:"aV"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Se||(Se=Dh.createElement("clipPath",{id:"aW"},Dh.createElement("path",{d:"M67 28h2v50h-2zm0 0"}))),De||(De=Dh.createElement("clipPath",{id:"aX"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ze||(Ze=Dh.createElement("clipPath",{id:"aY"},Dh.createElement("path",{d:"M68 28h2v50h-2zm0 0"}))),Ge||(Ge=Dh.createElement("clipPath",{id:"aZ"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Be||(Be=Dh.createElement("clipPath",{id:"ba"},Dh.createElement("path",{d:"M69 28h2v50h-2zm0 0"}))),Qe||(Qe=Dh.createElement("clipPath",{id:"bb"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ue||(Ue=Dh.createElement("clipPath",{id:"bc"},Dh.createElement("path",{d:"M70 28h2v50h-2zm0 0"}))),Xe||(Xe=Dh.createElement("clipPath",{id:"bd"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),qe||(qe=Dh.createElement("clipPath",{id:"be"},Dh.createElement("path",{d:"M71 28h2v50h-2zm0 0"}))),Ye||(Ye=Dh.createElement("clipPath",{id:"bf"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Je||(Je=Dh.createElement("clipPath",{id:"bg"},Dh.createElement("path",{d:"M72 28h2v50h-2zm0 0"}))),Ke||(Ke=Dh.createElement("clipPath",{id:"bh"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),_e||(_e=Dh.createElement("clipPath",{id:"bi"},Dh.createElement("path",{d:"M73 32h47v46H73zm0 0"}))),$e||($e=Dh.createElement("clipPath",{id:"bj"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),et||(et=Dh.createElement("clipPath",{id:"bk"},Dh.createElement("path",{d:"M73 32h37v37H73zm0 0"}))),tt||(tt=Dh.createElement("clipPath",{id:"bl"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),lt||(lt=Dh.createElement("clipPath",{id:"bm"},Dh.createElement("path",{d:"M73 32h36v36H73zm0 0"}))),at||(at=Dh.createElement("clipPath",{id:"bn"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ct||(ct=Dh.createElement("clipPath",{id:"bo"},Dh.createElement("path",{d:"M73 32h35v35H73zm0 0"}))),rt||(rt=Dh.createElement("clipPath",{id:"bp"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),nt||(nt=Dh.createElement("clipPath",{id:"bq"},Dh.createElement("path",{d:"M73 32h34v34H73zm0 0"}))),it||(it=Dh.createElement("clipPath",{id:"br"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),mt||(mt=Dh.createElement("clipPath",{id:"bs"},Dh.createElement("path",{d:"M73 32h33v33H73zm0 0"}))),dt||(dt=Dh.createElement("clipPath",{id:"bt"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ht||(ht=Dh.createElement("clipPath",{id:"bu"},Dh.createElement("path",{d:"M73 32h32v32H73zm0 0"}))),pt||(pt=Dh.createElement("clipPath",{id:"bv"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ot||(ot=Dh.createElement("clipPath",{id:"bw"},Dh.createElement("path",{d:"M73 32h31v31H73zm0 0"}))),st||(st=Dh.createElement("clipPath",{id:"bx"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Et||(Et=Dh.createElement("clipPath",{id:"by"},Dh.createElement("path",{d:"M73 32h30v30H73zm0 0"}))),vt||(vt=Dh.createElement("clipPath",{id:"bz"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ft||(ft=Dh.createElement("clipPath",{id:"bA"},Dh.createElement("path",{d:"M73 32h29v29H73zm0 0"}))),ut||(ut=Dh.createElement("clipPath",{id:"bB"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),yt||(yt=Dh.createElement("clipPath",{id:"bC"},Dh.createElement("path",{d:"M73 32h28v28H73zm0 0"}))),zt||(zt=Dh.createElement("clipPath",{id:"bD"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),kt||(kt=Dh.createElement("clipPath",{id:"bE"},Dh.createElement("path",{d:"M74 33h26v26H74zm0 0"}))),Pt||(Pt=Dh.createElement("clipPath",{id:"bF"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),bt||(bt=Dh.createElement("clipPath",{id:"bG"},Dh.createElement("path",{d:"M74 33h25v25H74zm0 0"}))),Mt||(Mt=Dh.createElement("clipPath",{id:"bH"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),gt||(gt=Dh.createElement("clipPath",{id:"bI"},Dh.createElement("path",{d:"M75 34h24v24H75zm0 0"}))),Rt||(Rt=Dh.createElement("clipPath",{id:"bJ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),xt||(xt=Dh.createElement("clipPath",{id:"bK"},Dh.createElement("path",{d:"M75 34h23v23H75zm0 0"}))),Ht||(Ht=Dh.createElement("clipPath",{id:"bL"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Ot||(Ot=Dh.createElement("clipPath",{id:"bM"},Dh.createElement("path",{d:"M76 35h22v22H76zm0 0"}))),Nt||(Nt=Dh.createElement("clipPath",{id:"bN"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Vt||(Vt=Dh.createElement("clipPath",{id:"bO"},Dh.createElement("path",{d:"M77 36h20v20H77zm0 0"}))),wt||(wt=Dh.createElement("clipPath",{id:"bP"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Lt||(Lt=Dh.createElement("clipPath",{id:"bQ"},Dh.createElement("path",{d:"M78 37h18v18H78zm0 0"}))),Ct||(Ct=Dh.createElement("clipPath",{id:"bR"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),At||(At=Dh.createElement("clipPath",{id:"bS"},Dh.createElement("path",{d:"M79 38h16v16H79zm0 0"}))),Ft||(Ft=Dh.createElement("clipPath",{id:"bT"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),jt||(jt=Dh.createElement("clipPath",{id:"bU"},Dh.createElement("path",{d:"M80 38h14v15H80zm0 0"}))),Tt||(Tt=Dh.createElement("clipPath",{id:"bV"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),It||(It=Dh.createElement("clipPath",{id:"bW"},Dh.createElement("path",{d:"M80 39h14v14H80zm0 0"}))),Wt||(Wt=Dh.createElement("clipPath",{id:"bX"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),St||(St=Dh.createElement("clipPath",{id:"bY"},Dh.createElement("path",{d:"M80 39h13v13H80zm0 0"}))),Dt||(Dt=Dh.createElement("clipPath",{id:"bZ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Zt||(Zt=Dh.createElement("clipPath",{id:"ca"},Dh.createElement("path",{d:"M81 40h12v12H81zm0 0"}))),Gt||(Gt=Dh.createElement("clipPath",{id:"cb"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Bt||(Bt=Dh.createElement("clipPath",{id:"cc"},Dh.createElement("path",{d:"M81 40h11v11H81zm0 0"}))),Qt||(Qt=Dh.createElement("clipPath",{id:"cd"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Ut||(Ut=Dh.createElement("clipPath",{id:"ce"},Dh.createElement("path",{d:"M82 41h10v10H82zm0 0"}))),Xt||(Xt=Dh.createElement("clipPath",{id:"cf"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),qt||(qt=Dh.createElement("clipPath",{id:"cg"},Dh.createElement("path",{d:"M83 42h8v8h-8zm0 0"}))),Yt||(Yt=Dh.createElement("clipPath",{id:"ch"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Jt||(Jt=Dh.createElement("clipPath",{id:"ci"},Dh.createElement("path",{d:"M84 43h6v6h-6zm0 0"}))),Kt||(Kt=Dh.createElement("clipPath",{id:"cj"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),_t||(_t=Dh.createElement("clipPath",{id:"ck"},Dh.createElement("path",{d:"M85 44h4v4h-4zm0 0"}))),$t||($t=Dh.createElement("clipPath",{id:"cl"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),el||(el=Dh.createElement("clipPath",{id:"cm"},Dh.createElement("path",{d:"M86 44h2v3h-2zm0 0"}))),tl||(tl=Dh.createElement("clipPath",{id:"cn"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ll||(ll=Dh.createElement("clipPath",{id:"co"},Dh.createElement("path",{d:"M86 45h2v2h-2zm0 0"}))),al||(al=Dh.createElement("clipPath",{id:"cp"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),cl||(cl=Dh.createElement("clipPath",{id:"cq"},Dh.createElement("path",{d:"M19 1h101v7H19zm0 0"}))),rl||(rl=Dh.createElement("clipPath",{id:"cr"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),nl||(nl=Dh.createElement("clipPath",{id:"cs"},Dh.createElement("path",{d:"M19 7h101v2H19zm0 0"}))),il||(il=Dh.createElement("clipPath",{id:"ct"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ml||(ml=Dh.createElement("clipPath",{id:"cu"},Dh.createElement("path",{d:"M19 8h101v2H19zm0 0"}))),dl||(dl=Dh.createElement("clipPath",{id:"cv"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),hl||(hl=Dh.createElement("clipPath",{id:"cw"},Dh.createElement("path",{d:"M19 9h101v2H19zm0 0"}))),pl||(pl=Dh.createElement("clipPath",{id:"cx"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ol||(ol=Dh.createElement("clipPath",{id:"cy"},Dh.createElement("path",{d:"M19 10h101v2H19zm0 0"}))),sl||(sl=Dh.createElement("clipPath",{id:"cz"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),El||(El=Dh.createElement("clipPath",{id:"cA"},Dh.createElement("path",{d:"M19 11h101v2H19zm0 0"}))),vl||(vl=Dh.createElement("clipPath",{id:"cB"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),fl||(fl=Dh.createElement("clipPath",{id:"cC"},Dh.createElement("path",{d:"M19 12h101v2H19zm0 0"}))),ul||(ul=Dh.createElement("clipPath",{id:"cD"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),yl||(yl=Dh.createElement("clipPath",{id:"cE"},Dh.createElement("path",{d:"M19 13h101v2H19zm0 0"}))),zl||(zl=Dh.createElement("clipPath",{id:"cF"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),kl||(kl=Dh.createElement("clipPath",{id:"cG"},Dh.createElement("path",{d:"M19 14h101v2H19zm0 0"}))),Pl||(Pl=Dh.createElement("clipPath",{id:"cH"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),bl||(bl=Dh.createElement("clipPath",{id:"cI"},Dh.createElement("path",{d:"M19 15h101v2H19zm0 0"}))),Ml||(Ml=Dh.createElement("clipPath",{id:"cJ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),gl||(gl=Dh.createElement("clipPath",{id:"cK"},Dh.createElement("path",{d:"M19 16h101v2H19zm0 0"}))),Rl||(Rl=Dh.createElement("clipPath",{id:"cL"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),xl||(xl=Dh.createElement("clipPath",{id:"cM"},Dh.createElement("path",{d:"M19 17h101v2H19zm0 0"}))),Hl||(Hl=Dh.createElement("clipPath",{id:"cN"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ol||(Ol=Dh.createElement("clipPath",{id:"cO"},Dh.createElement("path",{d:"M19 18h101v2H19zm0 0"}))),Nl||(Nl=Dh.createElement("clipPath",{id:"cP"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Vl||(Vl=Dh.createElement("clipPath",{id:"cQ"},Dh.createElement("path",{d:"M19 19h101v2H19zm0 0"}))),wl||(wl=Dh.createElement("clipPath",{id:"cR"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ll||(Ll=Dh.createElement("clipPath",{id:"cS"},Dh.createElement("path",{d:"M19 20h101v2H19zm0 0"}))),Cl||(Cl=Dh.createElement("clipPath",{id:"cT"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Al||(Al=Dh.createElement("clipPath",{id:"cU"},Dh.createElement("path",{d:"M19 21h101v2H19zm0 0"}))),Fl||(Fl=Dh.createElement("clipPath",{id:"cV"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),jl||(jl=Dh.createElement("clipPath",{id:"cW"},Dh.createElement("path",{d:"M19 22h101v2H19zm0 0"}))),Tl||(Tl=Dh.createElement("clipPath",{id:"cX"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Il||(Il=Dh.createElement("clipPath",{id:"cY"},Dh.createElement("path",{d:"M19 23h101v2H19zm0 0"}))),Wl||(Wl=Dh.createElement("clipPath",{id:"cZ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Sl||(Sl=Dh.createElement("clipPath",{id:"da"},Dh.createElement("path",{d:"M19 24h101v3H19zm0 0"}))),Dl||(Dl=Dh.createElement("clipPath",{id:"db"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Zl||(Zl=Dh.createElement("clipPath",{id:"dc"},Dh.createElement("path",{d:"M19 26h101v2H19zm0 0"}))),Gl||(Gl=Dh.createElement("clipPath",{id:"dd"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Bl||(Bl=Dh.createElement("clipPath",{id:"de"},Dh.createElement("path",{d:"M19 27h101v2H19zm0 0"}))),Ql||(Ql=Dh.createElement("clipPath",{id:"df"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ul||(Ul=Dh.createElement("clipPath",{id:"dg"},Dh.createElement("path",{d:"M19 28h101v2H19zm0 0"}))),Xl||(Xl=Dh.createElement("clipPath",{id:"dh"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ql||(ql=Dh.createElement("clipPath",{id:"di"},Dh.createElement("path",{d:"M19 29h101v2H19zm0 0"}))),Yl||(Yl=Dh.createElement("clipPath",{id:"dj"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Jl||(Jl=Dh.createElement("clipPath",{id:"dk"},Dh.createElement("path",{d:"M19 30h101v2H19zm0 0"}))),Kl||(Kl=Dh.createElement("clipPath",{id:"dl"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),_l||(_l=Dh.createElement("clipPath",{id:"dm"},Dh.createElement("path",{d:"M19 31h101v2H19zm0 0"}))),$l||($l=Dh.createElement("clipPath",{id:"dn"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ea||(ea=Dh.createElement("clipPath",{id:"do"},Dh.createElement("path",{d:"M19 32h101v2H19zm0 0"}))),ta||(ta=Dh.createElement("clipPath",{id:"dp"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),la||(la=Dh.createElement("clipPath",{id:"dq"},Dh.createElement("path",{d:"M19 33h101v2H19zm0 0"}))),aa||(aa=Dh.createElement("clipPath",{id:"dr"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ca||(ca=Dh.createElement("clipPath",{id:"ds"},Dh.createElement("path",{d:"M19 34h101v2H19zm0 0"}))),ra||(ra=Dh.createElement("clipPath",{id:"dt"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),na||(na=Dh.createElement("clipPath",{id:"du"},Dh.createElement("path",{d:"M19 35h101v2H19zm0 0"}))),ia||(ia=Dh.createElement("clipPath",{id:"dv"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ma||(ma=Dh.createElement("clipPath",{id:"dw"},Dh.createElement("path",{d:"M19 36h101v2H19zm0 0"}))),da||(da=Dh.createElement("clipPath",{id:"dx"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ha||(ha=Dh.createElement("clipPath",{id:"dy"},Dh.createElement("path",{d:"M19 37h101v2H19zm0 0"}))),pa||(pa=Dh.createElement("clipPath",{id:"dz"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),oa||(oa=Dh.createElement("clipPath",{id:"dA"},Dh.createElement("path",{d:"M19 38h101v2H19zm0 0"}))),sa||(sa=Dh.createElement("clipPath",{id:"dB"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ea||(Ea=Dh.createElement("clipPath",{id:"dC"},Dh.createElement("path",{d:"M19 39h101v2H19zm0 0"}))),va||(va=Dh.createElement("clipPath",{id:"dD"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),fa||(fa=Dh.createElement("clipPath",{id:"dE"},Dh.createElement("path",{d:"M19 40h101v2H19zm0 0"}))),ua||(ua=Dh.createElement("clipPath",{id:"dF"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ya||(ya=Dh.createElement("clipPath",{id:"dG"},Dh.createElement("path",{d:"M19 41h101v2H19zm0 0"}))),za||(za=Dh.createElement("clipPath",{id:"dH"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ka||(ka=Dh.createElement("clipPath",{id:"dI"},Dh.createElement("path",{d:"M19 42h101v2H19zm0 0"}))),Pa||(Pa=Dh.createElement("clipPath",{id:"dJ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ba||(ba=Dh.createElement("clipPath",{id:"dK"},Dh.createElement("path",{d:"M19 43h101v2H19zm0 0"}))),Ma||(Ma=Dh.createElement("clipPath",{id:"dL"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ga||(ga=Dh.createElement("clipPath",{id:"dM"},Dh.createElement("path",{d:"M19 44h101v2H19zm0 0"}))),Ra||(Ra=Dh.createElement("clipPath",{id:"dN"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),xa||(xa=Dh.createElement("clipPath",{id:"dO"},Dh.createElement("path",{d:"M19 45h101v2H19zm0 0"}))),Ha||(Ha=Dh.createElement("clipPath",{id:"dP"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Oa||(Oa=Dh.createElement("clipPath",{id:"dQ"},Dh.createElement("path",{d:"M19 46h101v2H19zm0 0"}))),Na||(Na=Dh.createElement("clipPath",{id:"dR"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Va||(Va=Dh.createElement("clipPath",{id:"dS"},Dh.createElement("path",{d:"M19 47h101v2H19zm0 0"}))),wa||(wa=Dh.createElement("clipPath",{id:"dT"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),La||(La=Dh.createElement("clipPath",{id:"dU"},Dh.createElement("path",{d:"M19 48h101v2H19zm0 0"}))),Ca||(Ca=Dh.createElement("clipPath",{id:"dV"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Aa||(Aa=Dh.createElement("clipPath",{id:"dW"},Dh.createElement("path",{d:"M19 49h101v2H19zm0 0"}))),Fa||(Fa=Dh.createElement("clipPath",{id:"dX"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ja||(ja=Dh.createElement("clipPath",{id:"dY"},Dh.createElement("path",{d:"M19 50h101v3H19zm0 0"}))),Ta||(Ta=Dh.createElement("clipPath",{id:"dZ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ia||(Ia=Dh.createElement("clipPath",{id:"ea"},Dh.createElement("path",{d:"M19 52h101v2H19zm0 0"}))),Wa||(Wa=Dh.createElement("clipPath",{id:"eb"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Sa||(Sa=Dh.createElement("clipPath",{id:"ec"},Dh.createElement("path",{d:"M19 53h101v2H19zm0 0"}))),Da||(Da=Dh.createElement("clipPath",{id:"ed"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Za||(Za=Dh.createElement("clipPath",{id:"ee"},Dh.createElement("path",{d:"M19 54h101v2H19zm0 0"}))),Ga||(Ga=Dh.createElement("clipPath",{id:"ef"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ba||(Ba=Dh.createElement("clipPath",{id:"eg"},Dh.createElement("path",{d:"M19 55h101v2H19zm0 0"}))),Qa||(Qa=Dh.createElement("clipPath",{id:"eh"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ua||(Ua=Dh.createElement("clipPath",{id:"ei"},Dh.createElement("path",{d:"M19 56h101v2H19zm0 0"}))),Xa||(Xa=Dh.createElement("clipPath",{id:"ej"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),qa||(qa=Dh.createElement("clipPath",{id:"ek"},Dh.createElement("path",{d:"M19 57h101v2H19zm0 0"}))),Ya||(Ya=Dh.createElement("clipPath",{id:"el"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ja||(Ja=Dh.createElement("clipPath",{id:"em"},Dh.createElement("path",{d:"M19 58h101v2H19zm0 0"}))),Ka||(Ka=Dh.createElement("clipPath",{id:"en"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),_a||(_a=Dh.createElement("clipPath",{id:"eo"},Dh.createElement("path",{d:"M16 26h1v20h-1zm0 0"}))),$a||($a=Dh.createElement("clipPath",{id:"ep"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),ec||(ec=Dh.createElement("clipPath",{id:"eq"},Dh.createElement("path",{d:"M16 26h2v20h-2zm0 0"}))),tc||(tc=Dh.createElement("clipPath",{id:"er"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),lc||(lc=Dh.createElement("clipPath",{id:"es"},Dh.createElement("path",{d:"M17 26h1v20h-1zm0 0"}))),ac||(ac=Dh.createElement("clipPath",{id:"et"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),cc||(cc=Dh.createElement("clipPath",{id:"eu"},Dh.createElement("path",{d:"M17 26h2v20h-2zm0 0"}))),rc||(rc=Dh.createElement("clipPath",{id:"ev"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),nc||(nc=Dh.createElement("clipPath",{id:"ew"},Dh.createElement("path",{d:"M18 26h1v20h-1zm0 0"}))),ic||(ic=Dh.createElement("clipPath",{id:"ex"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),mc||(mc=Dh.createElement("clipPath",{id:"ey"},Dh.createElement("path",{d:"M18 26h2v20h-2zm0 0"}))),dc||(dc=Dh.createElement("clipPath",{id:"ez"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),hc||(hc=Dh.createElement("clipPath",{id:"eA"},Dh.createElement("path",{d:"M19 26h1v20h-1zm0 0"}))),pc||(pc=Dh.createElement("clipPath",{id:"eB"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),oc||(oc=Dh.createElement("clipPath",{id:"eC"},Dh.createElement("path",{d:"M73 59h1v20h-1zm0 0"}))),sc||(sc=Dh.createElement("clipPath",{id:"eD"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),Ec||(Ec=Dh.createElement("clipPath",{id:"eE"},Dh.createElement("path",{d:"M73 59h2v20h-2zm0 0"}))),vc||(vc=Dh.createElement("clipPath",{id:"eF"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),fc||(fc=Dh.createElement("clipPath",{id:"eG"},Dh.createElement("path",{d:"M74 59h1v20h-1zm0 0"}))),uc||(uc=Dh.createElement("clipPath",{id:"eH"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),yc||(yc=Dh.createElement("clipPath",{id:"eI"},Dh.createElement("path",{d:"M74 59h2v20h-2zm0 0"}))),zc||(zc=Dh.createElement("clipPath",{id:"eJ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),kc||(kc=Dh.createElement("clipPath",{id:"eK"},Dh.createElement("path",{d:"M75 59h1v20h-1zm0 0"}))),Pc||(Pc=Dh.createElement("clipPath",{id:"eL"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),bc||(bc=Dh.createElement("clipPath",{id:"eM"},Dh.createElement("path",{d:"M75 59h2v20h-2zm0 0"}))),Mc||(Mc=Dh.createElement("clipPath",{id:"eN"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),gc||(gc=Dh.createElement("clipPath",{id:"eO"},Dh.createElement("path",{d:"M96 63h2v14h-2zm0 0"}))),Rc||(Rc=Dh.createElement("clipPath",{id:"eP"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),xc||(xc=Dh.createElement("clipPath",{id:"eQ"},Dh.createElement("path",{d:"M97 63h1v14h-1zm0 0"}))),Hc||(Hc=Dh.createElement("clipPath",{id:"eR"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Oc||(Oc=Dh.createElement("clipPath",{id:"eS"},Dh.createElement("path",{d:"M97 63h2v14h-2zm0 0"}))),Nc||(Nc=Dh.createElement("clipPath",{id:"eT"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Vc||(Vc=Dh.createElement("clipPath",{id:"eU"},Dh.createElement("path",{d:"M98 63h1v14h-1zm0 0"}))),wc||(wc=Dh.createElement("clipPath",{id:"eV"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Lc||(Lc=Dh.createElement("clipPath",{id:"eW"},Dh.createElement("path",{d:"M98 63h2v14h-2zm0 0"}))),Cc||(Cc=Dh.createElement("clipPath",{id:"eX"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Ac||(Ac=Dh.createElement("clipPath",{id:"eY"},Dh.createElement("path",{d:"M99 63h1v14h-1zm0 0"}))),Fc||(Fc=Dh.createElement("clipPath",{id:"eZ"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),jc||(jc=Dh.createElement("clipPath",{id:"fa"},Dh.createElement("path",{d:"M99 63h2v14h-2zm0 0"}))),Tc||(Tc=Dh.createElement("clipPath",{id:"fb"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Ic||(Ic=Dh.createElement("clipPath",{id:"fc"},Dh.createElement("path",{d:"M100 63h1v14h-1zm0 0"}))),Wc||(Wc=Dh.createElement("clipPath",{id:"fd"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Sc||(Sc=Dh.createElement("clipPath",{id:"fe"},Dh.createElement("path",{d:"M100 63h2v14h-2zm0 0"}))),Dc||(Dc=Dh.createElement("clipPath",{id:"ff"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Zc||(Zc=Dh.createElement("clipPath",{id:"fg"},Dh.createElement("path",{d:"M101 63h1v14h-1zm0 0"}))),Gc||(Gc=Dh.createElement("clipPath",{id:"fh"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Bc||(Bc=Dh.createElement("clipPath",{id:"fi"},Dh.createElement("path",{d:"M101 63h2v14h-2zm0 0"}))),Qc||(Qc=Dh.createElement("clipPath",{id:"fj"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Uc||(Uc=Dh.createElement("clipPath",{id:"fk"},Dh.createElement("path",{d:"M102 63h1v14h-1zm0 0"}))),Xc||(Xc=Dh.createElement("clipPath",{id:"fl"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),qc||(qc=Dh.createElement("clipPath",{id:"fm"},Dh.createElement("path",{d:"M102 63h2v14h-2zm0 0"}))),Yc||(Yc=Dh.createElement("clipPath",{id:"fn"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Jc||(Jc=Dh.createElement("clipPath",{id:"fo"},Dh.createElement("path",{d:"M103 63h1v14h-1zm0 0"}))),Kc||(Kc=Dh.createElement("clipPath",{id:"fp"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),_c||(_c=Dh.createElement("clipPath",{id:"fq"},Dh.createElement("path",{d:"M103 63h2v14h-2zm0 0"}))),$c||($c=Dh.createElement("clipPath",{id:"fr"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),er||(er=Dh.createElement("clipPath",{id:"fs"},Dh.createElement("path",{d:"M104 63h1v14h-1zm0 0"}))),tr||(tr=Dh.createElement("clipPath",{id:"ft"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),lr||(lr=Dh.createElement("clipPath",{id:"fu"},Dh.createElement("path",{d:"M96 52h2v14h-2zm0 0"}))),ar||(ar=Dh.createElement("clipPath",{id:"fv"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),cr||(cr=Dh.createElement("clipPath",{id:"fw"},Dh.createElement("path",{d:"M97 52h1v14h-1zm0 0"}))),rr||(rr=Dh.createElement("clipPath",{id:"fx"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),nr||(nr=Dh.createElement("clipPath",{id:"fy"},Dh.createElement("path",{d:"M97 52h2v14h-2zm0 0"}))),ir||(ir=Dh.createElement("clipPath",{id:"fz"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),mr||(mr=Dh.createElement("clipPath",{id:"fA"},Dh.createElement("path",{d:"M98 52h1v14h-1zm0 0"}))),dr||(dr=Dh.createElement("clipPath",{id:"fB"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),hr||(hr=Dh.createElement("clipPath",{id:"fC"},Dh.createElement("path",{d:"M98 52h2v14h-2zm0 0"}))),pr||(pr=Dh.createElement("clipPath",{id:"fD"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),or||(or=Dh.createElement("clipPath",{id:"fE"},Dh.createElement("path",{d:"M99 52h1v14h-1zm0 0"}))),sr||(sr=Dh.createElement("clipPath",{id:"fF"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Er||(Er=Dh.createElement("clipPath",{id:"fG"},Dh.createElement("path",{d:"M99 52h2v14h-2zm0 0"}))),vr||(vr=Dh.createElement("clipPath",{id:"fH"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),fr||(fr=Dh.createElement("clipPath",{id:"fI"},Dh.createElement("path",{d:"M100 52h1v14h-1zm0 0"}))),ur||(ur=Dh.createElement("clipPath",{id:"fJ"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),yr||(yr=Dh.createElement("clipPath",{id:"fK"},Dh.createElement("path",{d:"M100 52h2v14h-2zm0 0"}))),zr||(zr=Dh.createElement("clipPath",{id:"fL"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),kr||(kr=Dh.createElement("clipPath",{id:"fM"},Dh.createElement("path",{d:"M101 52h1v14h-1zm0 0"}))),Pr||(Pr=Dh.createElement("clipPath",{id:"fN"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),br||(br=Dh.createElement("clipPath",{id:"fO"},Dh.createElement("path",{d:"M101 52h2v14h-2zm0 0"}))),Mr||(Mr=Dh.createElement("clipPath",{id:"fP"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),gr||(gr=Dh.createElement("clipPath",{id:"fQ"},Dh.createElement("path",{d:"M102 52h1v14h-1zm0 0"}))),Rr||(Rr=Dh.createElement("clipPath",{id:"fR"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),xr||(xr=Dh.createElement("clipPath",{id:"fS"},Dh.createElement("path",{d:"M102 52h2v14h-2zm0 0"}))),Hr||(Hr=Dh.createElement("clipPath",{id:"fT"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Or||(Or=Dh.createElement("clipPath",{id:"fU"},Dh.createElement("path",{d:"M103 52h1v14h-1zm0 0"}))),Nr||(Nr=Dh.createElement("clipPath",{id:"fV"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Vr||(Vr=Dh.createElement("clipPath",{id:"fW"},Dh.createElement("path",{d:"M103 52h2v14h-2zm0 0"}))),wr||(wr=Dh.createElement("clipPath",{id:"fX"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Lr||(Lr=Dh.createElement("clipPath",{id:"fY"},Dh.createElement("path",{d:"M104 52h1v14h-1zm0 0"}))),Cr||(Cr=Dh.createElement("clipPath",{id:"fZ"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Ar||(Ar=Dh.createElement("clipPath",{id:"ga"},Dh.createElement("path",{d:"M96 42h2v14h-2zm0 0"}))),Fr||(Fr=Dh.createElement("clipPath",{id:"gb"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),jr||(jr=Dh.createElement("clipPath",{id:"gc"},Dh.createElement("path",{d:"M97 42h1v14h-1zm0 0"}))),Tr||(Tr=Dh.createElement("clipPath",{id:"gd"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Ir||(Ir=Dh.createElement("clipPath",{id:"ge"},Dh.createElement("path",{d:"M97 42h2v14h-2zm0 0"}))),Wr||(Wr=Dh.createElement("clipPath",{id:"gf"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Sr||(Sr=Dh.createElement("clipPath",{id:"gg"},Dh.createElement("path",{d:"M98 42h1v14h-1zm0 0"}))),Dr||(Dr=Dh.createElement("clipPath",{id:"gh"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Zr||(Zr=Dh.createElement("clipPath",{id:"gi"},Dh.createElement("path",{d:"M98 42h2v14h-2zm0 0"}))),Gr||(Gr=Dh.createElement("clipPath",{id:"gj"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Br||(Br=Dh.createElement("clipPath",{id:"gk"},Dh.createElement("path",{d:"M99 42h1v14h-1zm0 0"}))),Qr||(Qr=Dh.createElement("clipPath",{id:"gl"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Ur||(Ur=Dh.createElement("clipPath",{id:"gm"},Dh.createElement("path",{d:"M99 42h2v14h-2zm0 0"}))),Xr||(Xr=Dh.createElement("clipPath",{id:"gn"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),qr||(qr=Dh.createElement("clipPath",{id:"go"},Dh.createElement("path",{d:"M100 42h1v14h-1zm0 0"}))),Yr||(Yr=Dh.createElement("clipPath",{id:"gp"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Jr||(Jr=Dh.createElement("clipPath",{id:"gq"},Dh.createElement("path",{d:"M100 42h2v14h-2zm0 0"}))),Kr||(Kr=Dh.createElement("clipPath",{id:"gr"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),_r||(_r=Dh.createElement("clipPath",{id:"gs"},Dh.createElement("path",{d:"M101 42h1v14h-1zm0 0"}))),$r||($r=Dh.createElement("clipPath",{id:"gt"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),en||(en=Dh.createElement("clipPath",{id:"gu"},Dh.createElement("path",{d:"M101 42h2v14h-2zm0 0"}))),tn||(tn=Dh.createElement("clipPath",{id:"gv"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),ln||(ln=Dh.createElement("clipPath",{id:"gw"},Dh.createElement("path",{d:"M102 42h1v14h-1zm0 0"}))),an||(an=Dh.createElement("clipPath",{id:"gx"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),cn||(cn=Dh.createElement("clipPath",{id:"gy"},Dh.createElement("path",{d:"M102 42h2v14h-2zm0 0"}))),rn||(rn=Dh.createElement("clipPath",{id:"gz"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),nn||(nn=Dh.createElement("clipPath",{id:"gA"},Dh.createElement("path",{d:"M103 42h1v14h-1zm0 0"}))),mn||(mn=Dh.createElement("clipPath",{id:"gB"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),dn||(dn=Dh.createElement("clipPath",{id:"gC"},Dh.createElement("path",{d:"M103 42h2v14h-2zm0 0"}))),hn||(hn=Dh.createElement("clipPath",{id:"gD"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),pn||(pn=Dh.createElement("clipPath",{id:"gE"},Dh.createElement("path",{d:"M104 42h1v14h-1zm0 0"}))),on||(on=Dh.createElement("clipPath",{id:"gF"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Dh.createElement("symbol",{overflow:"visible",id:"a"},Dh.createElement("path",{style:{stroke:"none"},d:"M.547-5.375c0-1.04.05-1.977.156-2.813.102-.832.332-1.578.688-2.234.363-.656.816-1.144 1.359-1.469.54-.32 1.16-.484 1.86-.484.78 0 1.468.203 2.062.61.594.406 1.02 1.027 1.281 1.859.258.836.39 1.976.39 3.422 0 2.343-.359 4.074-1.077 5.187C6.555-.19 5.566.36 4.296.36c-.648 0-1.214-.136-1.702-.406A3.29 3.29 0 0 1 1.39-1.25C1.078-1.781.859-2.398.734-3.11a13.003 13.003 0 0 1-.187-2.265zm1.515-.5c0 1.117.083 2.133.25 3.047.165.906.442 1.562.829 1.969.394.398.859.593 1.39.593.52 0 .953-.175 1.297-.53.352-.364.61-.977.766-1.845.164-.863.25-1.937.25-3.218 0-2-.196-3.477-.578-4.438-.375-.969-1-1.453-1.875-1.453-.774 0-1.356.375-1.75 1.125-.387.742-.579 2.324-.579 4.75zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"b"},Dh.createElement("path",{style:{stroke:"none"},d:"m1.344-9.938-.157-.046-.093-.72.093-.093c.583-.164 1.32-.437 2.22-.812.894-.375 1.534-.66 1.921-.86l.234.078c-.093 2.575-.14 4.118-.14 4.625V-4.5c0 .805.004 1.559.016 2.266.019.71.046 1.125.078 1.25a.603.603 0 0 0 .187.296.83.83 0 0 0 .36.125c.156.024.609.055 1.359.094l.062.078V0l-.062.078A71.305 71.305 0 0 0 4.719 0C4.312 0 3.332.023 1.78.078L1.72 0v-.39l.078-.079c.875-.062 1.375-.11 1.5-.14a.518.518 0 0 0 .281-.157c.07-.07.129-.207.172-.406.04-.207.07-.816.094-1.828l.047-1.547V-8c0-1.707-.008-2.633-.016-2.781 0-.145-.047-.219-.14-.219a.26.26 0 0 0-.11.031 3.865 3.865 0 0 0-.375.156l-.875.376c-.367.156-.71.324-1.031.5zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"c"},Dh.createElement("path",{style:{stroke:"none"},d:"M.406.094.296 0v-.406L3.25-3.531C4.457-4.812 5.238-5.801 5.594-6.5c.363-.707.547-1.363.547-1.969 0-.719-.22-1.312-.657-1.781-.437-.477-1.023-.719-1.75-.719-.48 0-.898.074-1.25.219-.355.148-.593.313-.718.5-.118.18-.29.684-.516 1.516l-.078.078h-.36l-.078-.078c.133-.79.227-1.57.282-2.344.55-.54 1.062-.883 1.53-1.031a4.784 4.784 0 0 1 1.5-.235c.626 0 1.22.121 1.782.36.57.23 1.031.609 1.375 1.14.344.524.516 1.125.516 1.813 0 .523-.102 1.043-.297 1.562a5.666 5.666 0 0 1-.89 1.5c-.387.48-.919 1.059-1.595 1.735L2.204-1.438h3.469c1.062 0 1.945-.039 2.656-.125l.063.079a5.13 5.13 0 0 0-.047.78c0 .294.015.524.047.688l-.063.11A40.318 40.318 0 0 0 6.391.016 143.72 143.72 0 0 0 4.656 0C4.094 0 3.328.004 2.36.016 1.4.036.75.062.406.094zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"d"},Dh.createElement("path",{style:{stroke:"none"},d:"M.922-.203a23.746 23.746 0 0 0-.594-2.5l.047-.125.313-.125.125.062c.207.543.425.993.656 1.344.238.344.578.61 1.015.797.438.188.91.281 1.422.281.645 0 1.156-.133 1.531-.406.383-.27.676-.633.875-1.094.208-.457.313-.976.313-1.562 0-.781-.203-1.39-.61-1.828-.406-.446-.968-.672-1.687-.672-.25 0-.476.027-.672.078a7.39 7.39 0 0 0-.89.297l-.094-.078.187-.97c.477.032.797.048.954.048.687 0 1.226-.239 1.624-.719.407-.488.61-1.066.61-1.734 0-.57-.211-1.055-.625-1.454-.418-.394-.934-.593-1.547-.593-.406 0-.793.086-1.156.25a3.372 3.372 0 0 0-.89.594c-.106.199-.263.593-.47 1.187l-.093.078H.875l-.078-.078.531-2.047c.727-.82 1.723-1.234 2.984-1.234.946 0 1.711.258 2.297.765.594.5.891 1.137.891 1.907 0 .586-.172 1.12-.516 1.609-.343.492-.824.953-1.437 1.39 1.008.118 1.723.419 2.14.907.415.48.625 1.062.625 1.75 0 1.125-.511 2.14-1.53 3.047C5.757-.133 4.581.312 3.25.312c-.406 0-.781-.039-1.125-.109-.344-.062-.746-.2-1.203-.406zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"e"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.89.078 2.829 0v-.375l.063-.078c.863-.02 1.375-.047 1.53-.078.165-.031.286-.094.36-.188.082-.094.14-.316.172-.672.04-.363.063-.754.063-1.171v-.641H3.094a72.74 72.74 0 0 0-2.844.047l-.14-.469c1.019-1.914 2.722-4.68 5.109-8.297l1.234-.5.219.094a60.99 60.99 0 0 0-.094 3.703l-.031 2.484v1.813c.812 0 1.437-.016 1.875-.047l.078.078a9.96 9.96 0 0 0-.016.484c0 .2.008.391.032.579l-.094.078A27.048 27.048 0 0 0 7-3.203h-.453v.578c0 .656.016 1.125.047 1.406.039.274.097.45.172.532.07.074.222.132.453.171.238.043.64.063 1.203.063l.094.078V0l-.079.078A49.913 49.913 0 0 0 5.845 0 45.95 45.95 0 0 0 2.89.078zM1.267-4.328h3.75l.078-6.25c-.563.805-1.274 1.906-2.125 3.312-.856 1.399-1.422 2.375-1.703 2.938zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"f"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.156-.125C1.008-.582.72-1.335.281-2.391L.297-2.5l.312-.188.11.032c.476.886.773 1.39.89 1.515.125.118.399.258.829.422.425.156.878.235 1.359.235.594 0 1.117-.125 1.578-.375A2.36 2.36 0 0 0 6.391-2c.218-.508.328-1.086.328-1.734 0-.625-.11-1.16-.328-1.61a2.207 2.207 0 0 0-1-1.031 3.084 3.084 0 0 0-1.47-.36c-.323 0-.62.048-.89.141a2.504 2.504 0 0 0-.672.328c-.18.137-.386.34-.625.61l-.359-.094.094-1.89c.02-.364.031-.727.031-1.094v-1.563c0-.469-.016-.914-.047-1.344a12.893 12.893 0 0 1-.016-.5l.11-.078c.894.063 1.914.094 3.062.094.875 0 1.922-.031 3.141-.094l.031.078a5.514 5.514 0 0 0-.062.797c0 .125.008.336.031.625l-.078.047a48.79 48.79 0 0 0-2.703-.062c-1.524 0-2.407.007-2.657.015-.085.688-.148 1.906-.187 3.656.477-.351.91-.593 1.297-.718a4.167 4.167 0 0 1 3.094.25c.593.293 1.03.718 1.312 1.281a3.83 3.83 0 0 1 .438 1.797c0 1.187-.493 2.281-1.47 3.281-.98 1-2.234 1.5-3.765 1.5a4.05 4.05 0 0 1-1.015-.11 4.974 4.974 0 0 1-.86-.343zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"g"},Dh.createElement("path",{style:{stroke:"none"},d:"M7.594-12.156v.11c-.637.136-1.367.452-2.188.952-.812.5-1.5 1.18-2.062 2.031-.555.856-.875 1.883-.969 3.079.207-.145.438-.317.688-.516.332-.25.578-.422.734-.516.156-.093.363-.171.625-.234.258-.07.562-.11.906-.11.602 0 1.145.137 1.625.407a2.5 2.5 0 0 1 1.078 1.172c.239.511.36 1.117.36 1.812 0 .98-.243 1.797-.72 2.453-.468.657-.968 1.133-1.5 1.422-.53.281-1.148.422-1.843.422-1.18 0-2.094-.441-2.75-1.328C.93-1.883.61-3.031.61-4.438c0-.937.133-1.835.407-2.703a7.444 7.444 0 0 1 1.25-2.343c.562-.696 1.273-1.317 2.14-1.86.864-.55 1.711-.926 2.547-1.125zm-5.375 8.39c0 .575.082 1.149.25 1.72.164.562.43 1 .797 1.312.375.312.812.468 1.312.468.426 0 .817-.117 1.172-.359.363-.238.64-.613.828-1.125a4.5 4.5 0 0 0 .297-1.625c0-.57-.094-1.082-.281-1.531a2.255 2.255 0 0 0-.828-1.032 2.089 2.089 0 0 0-1.235-.375c-.355 0-.71.086-1.062.25-.356.168-.625.36-.813.579a1.577 1.577 0 0 0-.36.687c-.054.242-.077.586-.077 1.031zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"h"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.188.078 1-.109c.207-.32.645-1.004 1.313-2.047L3.921-4.72l1.515-2.468L6.75-9.454c.281-.5.504-.899.672-1.203l-.094-.078H4.61c-.687 0-1.296.011-1.828.03-.531.024-.844.06-.937.11a.454.454 0 0 0-.203.156c-.043.063-.086.282-.125.657l-.157 1.25-.078.062H.906l-.078-.06.047-2.406c0-.282-.016-.708-.047-1.282L1-12.313c.32.043.977.086 1.969.126.988.042 1.648.062 1.984.062 1.188 0 2.484-.04 3.89-.125l.063.063v.468L7.641-9.484c-.762 1.375-1.637 3-2.625 4.875-.98 1.875-1.7 3.414-2.157 4.609l-.078.078a8.938 8.938 0 0 0-.765-.047c-.262 0-.54.016-.829.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"i"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.953-6.234c-.648-.344-1.14-.739-1.484-1.188-.336-.445-.5-.988-.5-1.625 0-.894.328-1.664.984-2.312.664-.645 1.57-.97 2.719-.97.57 0 1.101.106 1.594.313.5.2.882.5 1.156.907.27.398.406.84.406 1.328 0 .523-.164 1.023-.484 1.5-.313.469-.871.945-1.672 1.422v.078c.687.336 1.195.617 1.531.843.332.231.602.54.813.922.207.387.312.836.312 1.344 0 .7-.203 1.371-.61 2.016A3.88 3.88 0 0 1 6.142-.188a4.45 4.45 0 0 1-2.032.5c-1.03 0-1.882-.289-2.546-.859-.668-.582-1-1.348-1-2.297 0-.781.226-1.445.687-2 .457-.562 1.023-1 1.703-1.312zM5-7.078c.625-.395 1.047-.785 1.266-1.172a2.53 2.53 0 0 0 .343-1.281c0-.676-.195-1.207-.578-1.594-.386-.395-.906-.594-1.562-.594-.617 0-1.133.18-1.547.531-.406.344-.61.829-.61 1.454 0 .468.13.882.391 1.234.27.344 1.035.82 2.297 1.422zM3.672-5.922c-.7.418-1.184.86-1.453 1.328-.274.469-.406 1.008-.406 1.61 0 .836.234 1.492.703 1.968.468.48 1.07.72 1.812.72.508 0 .969-.114 1.375-.345.406-.238.707-.562.906-.968a2.88 2.88 0 0 0 .313-1.329c0-.695-.246-1.238-.734-1.624-.481-.383-1.32-.836-2.516-1.36zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"j"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.172.078v-.172C2.797-.469 4.07-1.18 5-2.234c.938-1.063 1.46-2.36 1.578-3.891-.855 1.023-1.82 1.531-2.89 1.531-.668 0-1.258-.16-1.766-.484-.5-.32-.871-.738-1.11-1.25C.57-6.848.454-7.453.454-8.141c0-1.27.379-2.285 1.14-3.046.77-.77 1.723-1.157 2.86-1.157 1.133 0 2.055.414 2.766 1.235.707.824 1.062 2.011 1.062 3.562a9.63 9.63 0 0 1-.203 1.984c-.125.625-.367 1.274-.719 1.938a7.533 7.533 0 0 1-1.421 1.844 8.763 8.763 0 0 1-2 1.422c-.743.375-1.47.613-2.188.718zm.812-8.781c0 .5.086.996.266 1.484.176.492.445.871.813 1.14.374.274.812.407 1.312.407.688 0 1.238-.234 1.656-.703.426-.469.64-1.164.64-2.094 0-.957-.21-1.742-.624-2.36-.418-.612-.992-.921-1.719-.921-.7 0-1.266.262-1.703.781-.43.512-.64 1.266-.64 2.266zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gG"},Dh.createElement("path",{style:{stroke:"none"},d:"m.688-3.031.078-.063h.437l.063.063c.03.75.066 1.215.109 1.39.05.168.21.344.484.532.27.18.625.324 1.063.437.445.117.894.172 1.344.172.613 0 1.171-.11 1.671-.328.5-.227.883-.563 1.157-1 .27-.445.406-.945.406-1.5 0-.383-.07-.719-.203-1a1.718 1.718 0 0 0-.547-.703c-.23-.176-.5-.305-.813-.39a16.836 16.836 0 0 0-1.359-.282 24.391 24.391 0 0 1-1.375-.25 4.53 4.53 0 0 1-1-.344 2.755 2.755 0 0 1-.812-.61 2.7 2.7 0 0 1-.532-.89 3.392 3.392 0 0 1-.187-1.14c0-1.094.379-1.989 1.14-2.688.758-.707 1.782-1.063 3.063-1.063a8.09 8.09 0 0 1 1.656.188 6.778 6.778 0 0 1 1.657.563l.062.109c-.137.543-.219 1.308-.25 2.297l-.078.078h-.453l-.063-.063c-.011-.707-.031-1.148-.062-1.328-.024-.187-.29-.41-.797-.672a3.499 3.499 0 0 0-1.656-.406c-.5 0-.97.102-1.407.297-.43.2-.757.512-.984.938a2.86 2.86 0 0 0-.328 1.312c0 .344.066.652.203.922.133.262.305.469.516.625.218.156.468.277.75.36.28.073.8.163 1.562.265 1.04.148 1.797.324 2.266.531.468.211.843.543 1.125 1 .289.45.437.992.437 1.625 0 1.25-.511 2.293-1.531 3.125C6.488-.086 5.258.328 3.812.328 2.595.328 1.523.11.61-.328l-.046-.11C.625-.811.663-1.675.688-3.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gH"},Dh.createElement("path",{style:{stroke:"none"},d:"m7.766-1.297-.282.64C6.88-.27 6.336-.02 5.86.094a5.15 5.15 0 0 1-1.28.188c-.7 0-1.368-.136-2-.406-.626-.281-1.138-.75-1.532-1.406-.4-.658-.595-1.447-.595-2.376 0-.614.07-1.164.219-1.656.156-.5.316-.868.484-1.11.164-.238.446-.504.844-.797a6.327 6.327 0 0 1 1.266-.703c.445-.176.93-.265 1.453-.265.695 0 1.312.167 1.843.5.54.335.922.761 1.141 1.28.219.512.328 1.055.328 1.626 0 .187-.011.367-.031.531l-.094.094c-.406.093-.949.156-1.625.187-.668.024-1.11.032-1.328.032H2.141c.007 1.218.312 2.117.906 2.687.601.574 1.336.86 2.203.86.406 0 .797-.067 1.172-.204a7.594 7.594 0 0 0 1.203-.594zM2.14-4.89c.101.024.504.043 1.203.063.707.023 1.234.031 1.578.031.812 0 1.305-.008 1.484-.031.008-.145.016-.254.016-.328 0-.907-.188-1.578-.563-2.016-.367-.445-.87-.672-1.515-.672-.688 0-1.23.25-1.625.75-.387.492-.578 1.227-.578 2.203zm2.453-4.046zM4.484.53zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gI"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.375-8.375.172.11c-.043.343-.07.949-.078 1.812l.656-.828c.219-.282.41-.492.578-.64a1.94 1.94 0 0 1 1.266-.47c.258 0 .504.055.734.157l.063.125a24.423 24.423 0 0 0-.172 2.046h-.39c-.231-.53-.606-.796-1.126-.796-.367 0-.683.117-.953.343a1.68 1.68 0 0 0-.547.875c-.086.344-.125.782-.125 1.313v.984c0 .18.008.61.031 1.297.02.68.04 1.07.063 1.172a.51.51 0 0 0 .125.234c.062.055.133.09.219.11.093.011.515.039 1.265.078l.078.078v.36l-.078.093A35.286 35.286 0 0 0 2.703 0C2.035 0 1.332.023.593.078L.517-.016v-.359l.078-.078c.57-.031.894-.05.969-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468V-5.22c0-.226-.015-.547-.046-.953a7.738 7.738 0 0 0-.063-.75.262.262 0 0 0-.125-.203c-.074-.04-.227-.063-.453-.063l-.75-.015-.078-.063v-.375l.078-.078c1.113-.133 2.055-.351 2.828-.656zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gJ"},Dh.createElement("path",{style:{stroke:"none"},d:"m4.484.156-.546-1.375-.657-1.5-1.797-4.203c-.117-.27-.218-.445-.312-.531A.49.49 0 0 0 .89-7.61a5.961 5.961 0 0 0-.563-.063l-.062-.062v-.375l.078-.079c.82.043 1.472.063 1.953.063.676 0 1.36-.02 2.047-.063l.062.063v.39l-.062.063c-.617.024-.977.07-1.078.14a.29.29 0 0 0-.141.25c0 .18.117.56.36 1.141L4.546-3.47l.844 1.985.89-1.985L7-5.28c.281-.688.46-1.172.547-1.453.082-.29.125-.485.125-.579 0-.113-.07-.19-.203-.234-.125-.05-.45-.094-.969-.125l-.063-.062v-.375l.079-.079c.726.043 1.27.063 1.625.063.312 0 .836-.02 1.578-.063l.078.079v.375l-.078.062c-.344.031-.574.086-.688.156-.117.075-.23.215-.344.422-.105.2-.414.824-.921 1.875l-.844 1.797c-.149.305-.656 1.496-1.531 3.578zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gK"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.047-8.375.156.11a37.64 37.64 0 0 0-.094 2.937v2.047c0 .75.055 1.273.172 1.562.114.293.313.516.594.672.281.156.613.234 1 .234.426 0 .816-.082 1.172-.25a2.3 2.3 0 0 0 .875-.703c.238-.312.375-.52.406-.625.04-.101.067-.398.078-.89l.032-.985v-.953c0-.226-.016-.547-.047-.953-.024-.406-.04-.656-.047-.75a.25.25 0 0 0-.14-.203c-.075-.04-.227-.063-.454-.063l-.734-.015-.079-.063v-.375L6-7.719c1.125-.133 2.066-.351 2.828-.656l.172.11a37.64 37.64 0 0 0-.094 2.937v1.547c0 .086.016.797.047 2.14.008.5.035.809.078.922a.43.43 0 0 0 .203.219c.094.043.36.063.797.063h.25l.078.078v.343l-.078.094A29.642 29.642 0 0 0 8.625 0c-.355 0-.766.02-1.234.063l-.094-.079c.039-.593.07-1.097.094-1.515-.375.293-.797.68-1.266 1.156-.188.18-.453.328-.797.453a3.293 3.293 0 0 1-1.156.188C3.516.266 3.004.16 2.64-.047a1.753 1.753 0 0 1-.782-.86c-.148-.363-.218-.991-.218-1.89v-2.422c0-.226-.012-.547-.032-.953a7.738 7.738 0 0 0-.062-.75.25.25 0 0 0-.14-.203c-.075-.04-.227-.063-.454-.063L.22-7.202l-.08-.064v-.375l.078-.078c1.113-.133 2.054-.351 2.828-.656zm2.094-.563zm.093 9.47zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gL"},Dh.createElement("path",{style:{stroke:"none"},d:"m-.11-11.844-.077-.078v-.36l.062-.077c1.125-.133 2.066-.352 2.828-.657l.172.11c-.063.668-.094 2.015-.094 4.047v2.234c.102-.145.305-.367.61-.672.312-.3.562-.508.75-.625a3.04 3.04 0 0 1 .78-.328c.333-.094.68-.14 1.048-.14.664 0 1.25.167 1.75.5.5.324.867.761 1.11 1.312.237.543.358 1.125.358 1.75 0 .586-.101 1.148-.296 1.687-.2.532-.438.97-.72 1.313-.167.2-.46.45-.874.75-.813.594-1.387.965-1.719 1.11-.324.155-.75.234-1.281.234-.406 0-.777-.059-1.11-.172a4.292 4.292 0 0 1-1.046-.547l-.704.672-.296-.11c.113-1.07.171-2.285.171-3.64v-4.656l-.03-1.688a43.121 43.121 0 0 0-.063-1.36c-.024-.257-.055-.41-.094-.453-.031-.05-.09-.085-.172-.109-.086-.031-.437-.047-1.062-.047zm2.891 6.281v3.297c0 .274.008.454.031.547.032.086.149.215.36.39.207.169.473.313.797.438.332.125.676.188 1.031.188.82 0 1.469-.32 1.938-.969.476-.644.718-1.46.718-2.453 0-.613-.101-1.16-.297-1.64-.199-.477-.496-.844-.89-1.094a2.316 2.316 0 0 0-1.313-.391 2.46 2.46 0 0 0-1.547.516c-.437.343-.714.734-.828 1.171zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gM"},Dh.createElement("path",{style:{stroke:"none"},d:"M.39-3.781v-.125l.407-1.172H5.5v.125l-.422 1.172zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gN"},Dh.createElement("path",{style:{stroke:"none"},d:"M.406-6.906v-.219l.063-.094c.55-.207.992-.394 1.328-.562 0-1.532-.016-2.422-.047-2.672.602-.219 1.098-.445 1.484-.688l.22.188c-.063.367-.138 1.433-.22 3.203.29.012.61.016.954.016.687 0 1.18-.016 1.484-.047l.062.062-.171.735-.063.078a38.136 38.136 0 0 0-1-.016c-.324 0-.746.008-1.266.016l-.046 3.578c0 .824.015 1.367.046 1.625.04.25.145.45.313.594.176.148.437.218.781.218.383 0 .75-.101 1.094-.312l.203.312c-.137.106-.477.399-1.016.875-.304.145-.609.22-.921.22-1.325 0-1.985-.641-1.985-1.923 0-.468.008-.863.031-1.187.008-.102.016-.207.016-.313v-3.64h-.36c-.261 0-.562.011-.906.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gO"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.984-13.016.172.11c-.062.668-.094 2.015-.094 4.047v2.171a33.17 33.17 0 0 0 1.376-1.203c.113-.113.226-.195.343-.25a3.1 3.1 0 0 1 .547-.156 3.137 3.137 0 0 1 2.063.188c.414.18.726.39.937.64.219.242.367.532.453.875.082.344.125.766.125 1.266v1.547c0 .094.016.824.047 2.187.008.555.067.883.172.985.113.105.477.156 1.094.156l.078.078V0l-.078.078A23.962 23.962 0 0 0 8.703 0c-.125 0-.555.023-1.281.078l-.094-.11c.07-.757.11-1.75.11-2.968v-1.156c0-.688-.016-1.18-.047-1.485a1.853 1.853 0 0 0-.297-.843 1.704 1.704 0 0 0-.657-.579 2.234 2.234 0 0 0-.984-.203c-.398 0-.73.059-1 .172-.273.106-.547.29-.828.547-.273.25-.434.465-.484.64-.055.169-.079.5-.079 1v1.563c0 .125.008.54.032 1.235.02.699.039 1.109.062 1.234.031.117.07.2.125.25a.38.38 0 0 0 .188.11c.082.011.406.03.969.062l.078.078v.36l-.079.093a28.22 28.22 0 0 0-4.218 0L.125-.016v-.359l.094-.078c.562-.031.879-.05.953-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.031-.644.047-1.132.047-1.468v-4.547l-.032-1.86A39.741 39.741 0 0 0 1.5-11.25c-.023-.25-.055-.395-.094-.438-.031-.05-.093-.085-.187-.109-.086-.031-.434-.047-1.047-.047l-.078-.078v-.36l.062-.077c1.125-.133 2.067-.352 2.828-.657zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gP"},Dh.createElement("path",{style:{stroke:"none"},d:"m1.86-5.953-.344-.094-.063-.094v-1.078C2.493-8 3.503-8.39 4.484-8.39c.676 0 1.239.133 1.688.391.445.25.77.563.969.938.195.375.296.82.296 1.328L7.391-3.97v2.61c0 .367.023.586.078.656.05.074.11.125.172.156.062.024.18.043.359.063l.5.046.063.079v.343L8.5.063C8.07.03 7.672.015 7.297.015c-.344 0-.766.015-1.266.046l-.125-.124.032-1.422L4.03.016c-.324.132-.68.203-1.062.203-.469 0-.875-.086-1.219-.25A1.843 1.843 0 0 1 .984-.75C.804-1.05.72-1.422.72-1.86c0-.85.27-1.519.812-2 .54-.488 2.008-.906 4.407-1.25 0-.863-.196-1.472-.579-1.827-.386-.352-.902-.532-1.546-.532-.344 0-.657.055-.938.157-.273.093-.43.171-.469.234-.043.062-.203.422-.484 1.078zm4.077 1.375c-1.636.281-2.656.586-3.062.906-.406.313-.61.797-.61 1.453 0 .918.454 1.375 1.36 1.375.781 0 1.55-.453 2.313-1.36zm-1.484-4.36zM4.266.533zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gQ"},Dh.createElement("path",{style:{stroke:"none"},d:"M5.922-11.922v-.36l.062-.077c1.125-.133 2.067-.352 2.829-.657l.171.11c-.062.668-.093 2.015-.093 4.047v5.75c0 .593.007 1.117.03 1.562.02.438.056.7.11.781a.51.51 0 0 0 .25.204c.125.054.469.105 1.031.156l.079.062v.328l-.079.094A23.292 23.292 0 0 0 8.829.016c-.312 0-.762.02-1.344.062l-.093-.11c.007-.57.015-.972.015-1.202 0-.032.004-.141.016-.329-.324.231-.649.493-.969.782-.48.418-.793.683-.937.797-.274.132-.653.203-1.141.203-.813 0-1.508-.2-2.078-.594a3.353 3.353 0 0 1-1.203-1.531 5.221 5.221 0 0 1-.36-1.907c0-.664.125-1.3.375-1.906.25-.613.602-1.062 1.063-1.343.457-.282.957-.57 1.5-.875.539-.301 1.082-.454 1.625-.454.738 0 1.445.184 2.125.547L7.39-9.797a46.85 46.85 0 0 0-.063-1.422c-.023-.27-.055-.426-.094-.469-.03-.05-.09-.085-.171-.109-.086-.031-.438-.047-1.063-.047zm1.5 5.578a4.05 4.05 0 0 0-1.219-.937 2.95 2.95 0 0 0-1.328-.328c-.492 0-.95.136-1.375.406-.43.273-.734.668-.922 1.187a5.01 5.01 0 0 0-.281 1.704c0 1.03.258 1.859.781 2.484.52.617 1.172.922 1.953.922.426 0 .805-.098 1.14-.297.333-.195.602-.461.813-.797.22-.332.344-.664.375-1 .04-.332.063-.941.063-1.828zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gR"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.25-8.156a.98.98 0 0 1 .734.312c.207.2.313.446.313.735 0 .293-.106.543-.313.75a.998.998 0 0 1-.734.296 1.04 1.04 0 0 1-.75-.296 1.04 1.04 0 0 1-.297-.75c0-.301.098-.551.297-.75.207-.196.457-.297.75-.297zm0 6.219c.281 0 .523.101.734.296a1 1 0 0 1 .313.75c0 .293-.106.543-.313.75a1.01 1.01 0 0 1-.734.297c-.293 0-.543-.101-.75-.297a1.04 1.04 0 0 1-.297-.75c0-.289.098-.535.297-.734.207-.207.457-.313.75-.313zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gT"},Dh.createElement("path",{style:{stroke:"none"},d:"M4.14.172 3.345-3.5 1.64-10.734c-.137-.57-.278-.891-.422-.954-.149-.07-.465-.14-.953-.203l-.063-.062v-.39l.063-.079a34.96 34.96 0 0 0 2.25.078c.488 0 1.195-.023 2.125-.078l.078.078v.39l-.063.063c-.656.032-1.054.07-1.187.11-.125.043-.188.136-.188.281 0 .125.055.516.172 1.172.113.648.219 1.18.313 1.594l1.39 6.093 2.172-5.406A151.008 151.008 0 0 0 9-12.547h.563c.468 1.469.953 2.899 1.453 4.281l2.062 5.735 1.5-5.25c.145-.551.328-1.274.547-2.172.227-.895.344-1.41.344-1.547 0-.164-.074-.266-.219-.297-.148-.039-.57-.07-1.266-.094l-.078-.078v-.375l.078-.078c1 .055 1.598.078 1.797.078.188 0 .797-.023 1.828-.078l.078.078v.39l-.078.063c-.336.012-.558.043-.672.094a.885.885 0 0 0-.28.235c-.087.093-.204.39-.36.89l-.5 1.64-.906 2.954c-.125.43-.368 1.297-.72 2.61l-.968 3.64h-.89a226.578 226.578 0 0 0-1.516-4.36l-2-5.421-1.75 4.328-.953 2.468a79.63 79.63 0 0 0-.578 1.594L5.03.171zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gU"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.531-12.313c.27 0 .504.102.703.297.196.2.297.434.297.704a.963.963 0 0 1-.297.703.992.992 0 0 1-.703.28.98.98 0 0 1-.703-.28.948.948 0 0 1-.297-.704.96.96 0 0 1 .297-.703.963.963 0 0 1 .703-.296zm.75 3.938.172.11c-.074.773-.11 1.75-.11 2.937v1.984c0 .125.009.54.032 1.235.031.699.055 1.109.078 1.234.031.117.07.2.125.25a.38.38 0 0 0 .188.11c.082.011.398.03.953.062l.078.078v.36l-.063.093A28.861 28.861 0 0 0 .5.078L.422-.016v-.359L.5-.453c.57-.031.895-.05.969-.063a.418.418 0 0 0 .187-.109.599.599 0 0 0 .11-.266c.02-.113.039-.488.062-1.125.031-.644.047-1.132.047-1.468V-5.22c0-.226-.012-.547-.031-.953a7.738 7.738 0 0 0-.063-.75.25.25 0 0 0-.14-.203c-.075-.04-.22-.063-.438-.063l-.75-.015-.078-.063v-.375l.078-.078c1.113-.133 2.055-.351 2.828-.656zM2.594.531zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gV"},Dh.createElement("path",{style:{stroke:"none"},d:"m16.531-12.39.078.062v.437l-.062.063c-.649.023-1.047.058-1.203.11-.156.042-.266.116-.328.218-.063.105-.102.32-.11.64-.011.313-.027 1.204-.047 2.672v4.063c0 .586.004 1.246.016 1.984.02.743.055 1.172.11 1.297.062.117.163.2.312.25.144.055.562.09 1.25.11l.062.062v.438l-.078.062a44.373 44.373 0 0 0-2.5-.078c-.48 0-1.297.023-2.453.078L11.5.016v-.422l.078-.078c.645-.02 1.047-.051 1.203-.094a.557.557 0 0 0 .328-.235c.063-.101.098-.316.11-.64.008-.32.023-1.211.047-2.672v-6.453l-3.032 6.344a78.996 78.996 0 0 0-2 4.484h-.343a43.197 43.197 0 0 0-.813-1.813l-4.187-8.734v6.14c0 .587.004 1.25.015 2 .008.743.047 1.173.11 1.298a.593.593 0 0 0 .312.265c.145.055.563.086 1.25.094l.063.063v.421l-.079.094L4 .047A28.812 28.812 0 0 0 2.5 0C2.312 0 1.613.023.406.078L.328 0v-.422L.406-.5c.645-.008 1.04-.035 1.188-.078a.536.536 0 0 0 .328-.25c.07-.113.113-.32.125-.625.008-.3.02-1.203.031-2.703v-4.016c0-.531-.008-1.176-.015-1.937-.012-.77-.047-1.211-.11-1.329a.491.491 0 0 0-.297-.265c-.148-.063-.562-.102-1.25-.125l-.078-.063v-.421l.078-.079c.406.032.953.047 1.64.047.645 0 1.208-.015 1.688-.047a56.553 56.553 0 0 0 1.422 3.079L8.484-2.47l3-6.265c.813-1.696 1.36-2.914 1.641-3.657.563.032 1.117.047 1.672.047.488 0 1.066-.015 1.734-.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gW"},Dh.createElement("path",{style:{stroke:"none"},d:"m3-8.375.172.11c-.031.398-.055.913-.063 1.546.47-.383.91-.773 1.329-1.172.125-.113.238-.195.343-.25a3.1 3.1 0 0 1 .547-.156 3.137 3.137 0 0 1 2.063.188c.425.18.742.39.953.64.219.242.363.532.437.875.082.344.125.766.125 1.266v1.547c0 .094.016.824.047 2.187.008.555.07.883.188.985.113.105.476.156 1.093.156l.063.078V0l-.063.078A24.663 24.663 0 0 0 8.72 0c-.156 0-.586.023-1.281.078l-.11-.11c.07-.757.11-1.75.11-2.968v-1.156c0-.688-.016-1.18-.047-1.485a1.853 1.853 0 0 0-.297-.843 1.552 1.552 0 0 0-.657-.579 2.234 2.234 0 0 0-.984-.203 2.87 2.87 0 0 0-.781.094 2.563 2.563 0 0 0-.734.375 3.086 3.086 0 0 0-.594.531 1.252 1.252 0 0 0-.235.47c-.023.148-.03.452-.03.921v1.531c0 .125.007.54.03 1.235.02.699.04 1.109.063 1.234.031.117.07.2.125.25.062.055.129.09.203.11.07.011.39.03.953.062l.078.078v.36l-.078.093a28.22 28.22 0 0 0-4.219 0L.156-.016v-.359l.078-.078c.563-.031.88-.05.954-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468V-5.22c0-.226-.015-.547-.046-.953-.024-.406-.04-.656-.047-.75a.25.25 0 0 0-.141-.203c-.074-.04-.227-.063-.453-.063l-.735-.015-.078-.063v-.375l.063-.078C1.297-7.852 2.238-8.07 3-8.375zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gX"},Dh.createElement("path",{style:{stroke:"none"},d:"m.375-12.36.063-.062a51.36 51.36 0 0 0 2.5.078c.664 0 1.562-.02 2.687-.062.414-.008.719-.016.906-.016 1.477 0 2.485.274 3.016.813.531.53.797 1.168.797 1.906 0 .492-.133.976-.39 1.453-.263.469-.65.875-1.157 1.219-.5.336-1.195.586-2.078.75.164.23.46.625.89 1.187l1.25 1.657c.407.542.836 1.12 1.297 1.734.469.605.77.95.906 1.031.133.074.25.121.344.14.094.012.242.016.453.016l.079.079v.406l-.079.078a9.242 9.242 0 0 0-1-.047c-.418 0-.87.016-1.359.047C9.094-.441 8.453-1.29 7.578-2.5a49.06 49.06 0 0 0-3.094-3.922l.094-.266c.3.024.54.032.719.032 1.008 0 1.8-.242 2.375-.735.57-.488.86-1.16.86-2.015 0-.781-.262-1.367-.782-1.766-.512-.394-1.203-.594-2.078-.594-.617 0-1.2.09-1.75.266-.086.125-.125 1.227-.125 3.297v4.062l.015 1.72c0 .655.016 1.085.047 1.28.032.188.07.32.125.391.051.063.157.117.313.156.164.043.555.074 1.172.094l.078.063V0l-.078.078c-.024 0-.54-.023-1.547-.062C3.516.004 3.192 0 2.953 0 2.773 0 1.938.023.438.078L.374 0v-.438L.438-.5c.539-.02.898-.047 1.078-.078.187-.04.312-.086.375-.14.062-.052.109-.165.14-.345.04-.187.067-.593.078-1.218l.016-1.86v-4.062l-.031-1.719c0-.664-.016-1.094-.047-1.281-.024-.195-.063-.328-.125-.39-.055-.071-.156-.13-.313-.173-.156-.039-.546-.07-1.171-.093l-.063-.063zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gY"},Dh.createElement("path",{style:{stroke:"none"},d:"m9.688-7.766.078.157c-.243.367-.391.605-.454.718H7.688c.156.325.234.664.234 1.016 0 .418-.094.824-.281 1.219a2.935 2.935 0 0 1-.797 1A4.082 4.082 0 0 1 5.687-3c-.43.156-.917.234-1.468.234h-.407c-.343.282-.57.493-.671.625A.72.72 0 0 0 3-1.734c0 .261.113.445.344.546.238.106.734.157 1.484.157l1.969-.032c.613 0 1.086.079 1.422.235.332.148.597.406.797.781.207.375.312.774.312 1.203 0 .645-.21 1.285-.625 1.922-.418.645-1.023 1.133-1.812 1.469-.793.332-1.637.5-2.532.5-.511 0-.992-.059-1.437-.172a3.654 3.654 0 0 1-1.188-.5 2.657 2.657 0 0 1-.812-.89 2.33 2.33 0 0 1-.297-1.126A2.424 2.424 0 0 1 1.094.906l1.594-.89c-.512-.157-.836-.313-.97-.47a.824.824 0 0 1-.202-.562c0-.218.07-.476.218-.78l1.422-1.032c-.836-.207-1.398-.531-1.687-.969a2.5 2.5 0 0 1-.438-1.422c0-.476.102-.93.313-1.36.207-.425.515-.769.922-1.03a5.557 5.557 0 0 1 1.39-.61c.52-.156.989-.234 1.406-.234.727 0 1.426.242 2.094.719a72.84 72.84 0 0 0 2.532-.032zM2.546-5.734c0 .367.066.75.203 1.156.145.406.375.719.688.937.312.211.664.313 1.062.313.52 0 .969-.164 1.344-.5.383-.344.578-.879.578-1.61 0-.601-.18-1.148-.531-1.64-.344-.488-.829-.734-1.454-.734-.542 0-.996.18-1.359.53-.355.345-.531.86-.531 1.548zM5.125.172c-.95 0-1.496.008-1.64.031-.137.02-.34.117-.61.297a1.976 1.976 0 0 0-.64.719c-.169.3-.25.64-.25 1.015 0 .657.242 1.192.734 1.61.5.414 1.156.625 1.969.625a3.8 3.8 0 0 0 1.703-.39c.53-.25.914-.595 1.156-1.032.25-.43.375-.844.375-1.25 0-.399-.106-.734-.313-1.016a1.283 1.283 0 0 0-.812-.515C6.473.203 5.914.172 5.125.172zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gZ"},Dh.createElement("path",{style:{stroke:"none"},d:"M.594-4.031c0-.696.14-1.367.422-2.016.289-.644.789-1.203 1.5-1.672.718-.468 1.566-.703 2.546-.703 1.227 0 2.227.39 3 1.172.782.773 1.172 1.766 1.172 2.984 0 1.336-.449 2.438-1.343 3.313C7.004-.086 5.937.344 4.687.344c-.824 0-1.558-.219-2.203-.656-.648-.446-1.125-.989-1.437-1.625a4.838 4.838 0 0 1-.453-2.094zm1.672-.594c0 .813.101 1.547.312 2.203.207.649.54 1.168 1 1.563.457.386.977.578 1.563.578.687 0 1.254-.27 1.703-.813.457-.55.687-1.379.687-2.484 0-1.25-.246-2.27-.734-3.063-.492-.8-1.195-1.203-2.11-1.203-.761 0-1.355.278-1.78.828-.43.555-.641 1.352-.641 2.391zm2.656-4.313zM4.797.533zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hp"},Dh.createElement("path",{style:{stroke:"none"},d:"m.64-12.36.079-.062c2.008.043 3.297.063 3.86.063 1.913 0 3.624-.02 5.124-.063l.047.063c-.148.562-.258 1.445-.328 2.64l-.047.078h-.438l-.078-.078c.008-.05.016-.097.016-.14 0-.489-.043-.961-.125-1.422-.367-.156-.875-.258-1.531-.313a21.295 21.295 0 0 0-1.469-.078c-.469 0-1.063.031-1.781.094l-.031 1.406-.032 1.61-.015 1.78a25.52 25.52 0 0 0 1.75.063c.53 0 .976-.015 1.343-.047.364-.039.579-.078.641-.109.063-.04.11-.113.14-.219.032-.113.055-.312.079-.593l.047-.547.062-.063h.406l.063.063c-.012.648-.024 1.293-.031 1.937l.03 1.969-.062.078h-.406l-.062-.078-.063-.531c-.055-.407-.094-.645-.125-.72a.358.358 0 0 0-.156-.202c-.086-.063-.305-.11-.656-.14-.356-.04-.84-.063-1.454-.063-.335 0-.851.015-1.546.046-.032.493-.047 1.31-.047 2.454 0 1.23.015 2.136.047 2.718H5.5c1.426 0 2.316-.015 2.672-.046a3.7 3.7 0 0 0 1.015-.266 10.8 10.8 0 0 0 .266-.938c.125-.488.192-.789.203-.906l.094-.062h.422l.062.062c-.054.25-.105.688-.156 1.313A23.878 23.878 0 0 0 10.016 0l-.063.078a120.71 120.71 0 0 0-4.39-.062L3.171 0c-.563 0-1.149.023-1.75.078L1.359 0v-.297l.063-.078c.344-.176.539-.285.594-.328.05-.05.093-.567.125-1.547.03-.977.046-1.723.046-2.234V-9.72c0-.426-.011-.773-.03-1.047a3.12 3.12 0 0 0-.063-.593.515.515 0 0 0-.094-.235.451.451 0 0 0-.188-.125 2.188 2.188 0 0 0-.437-.078l-.656-.062-.078-.063zm5.016-.703zM5.625.531zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hq"},Dh.createElement("path",{style:{stroke:"none"},d:"m.39.063-.077-.08v-.359l.079-.063a1.4 1.4 0 0 0 .53-.109c.145-.062.313-.187.5-.375.196-.195.548-.601 1.048-1.219L3.89-3.89 3.14-5c-.118-.164-.352-.488-.704-.969a9.603 9.603 0 0 0-.874-1.078c-.231-.25-.403-.398-.516-.453a.724.724 0 0 0-.344-.094c-.055 0-.121.008-.203.016l-.094-.063L.328-8l.078-.094c.594-.062 1.25-.172 1.969-.328.406.336 1.004 1.117 1.797 2.344l.656 1.031.547-.703a69.291 69.291 0 0 0 1.813-2.5c.269.043.488.063.656.063.144 0 .347-.02.61-.063l.077.063v.359l-.078.062a1.715 1.715 0 0 0-.422.094c-.086.043-.246.18-.484.406-.23.23-.543.579-.938 1.047l-.53.64a8.3 8.3 0 0 0-.298.376l-.547.703.329.5c.144.21.492.703 1.046 1.484.563.774.954 1.29 1.172 1.547.227.262.39.418.485.469.101.043.265.063.484.063l.078.062v.36L8.75.061C8.32.02 7.988 0 7.75 0c-.074 0-.45.02-1.125.063A25.964 25.964 0 0 1 5.172-1.97l-.89-1.36c-.607.69-1.416 1.823-2.424 3.394A11.096 11.096 0 0 0 1.141 0C1.023 0 .773.02.39.063zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hr"},Dh.createElement("path",{style:{stroke:"none"},d:"m7.625-.938-.344.579A5.216 5.216 0 0 1 4.75.266c-1.293 0-2.293-.38-3-1.141-.7-.77-1.047-1.758-1.047-2.969 0-.55.055-1.039.172-1.469.125-.437.281-.796.469-1.078.187-.28.39-.5.61-.656.218-.164.593-.394 1.124-.687.531-.301.93-.493 1.203-.579.27-.093.64-.14 1.11-.14.914 0 1.66.172 2.234.515a28.172 28.172 0 0 0-.25 2.22l-.078.062h-.36l-.078-.078c-.023-.489-.054-.817-.093-.985-.043-.176-.278-.36-.704-.547a3.251 3.251 0 0 0-1.359-.296c-.48 0-.906.105-1.281.312-.375.2-.664.527-.86.984-.187.461-.28 1.012-.28 1.657 0 .53.077 1.058.234 1.578.156.511.351.937.593 1.281.25.336.579.605.985.813a3.14 3.14 0 0 0 1.375.296c.32 0 .633-.039.937-.125a6.078 6.078 0 0 0 1.032-.406zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hs"},Dh.createElement("path",{style:{stroke:"none"},d:"M3.828-5.922v1.781l.016 1.72c0 .636.015 1.058.047 1.265.03.21.07.343.125.406.062.063.171.117.328.156.156.043.547.074 1.172.094l.062.063V0l-.062.078A124.336 124.336 0 0 0 2.984 0C2.797 0 1.957.023.47.078L.406 0v-.438L.47-.5c.55-.02.914-.047 1.094-.078.187-.04.304-.086.359-.14.062-.063.113-.18.156-.36.04-.176.063-.57.063-1.188l.015-1.875v-4.062l-.015-1.719c-.012-.664-.032-1.094-.063-1.281-.023-.195-.062-.328-.125-.39-.055-.071-.156-.13-.312-.173-.157-.039-.547-.07-1.172-.093l-.063-.063v-.437l.063-.063c2.488.043 3.941.063 4.36.063 1.394 0 2.82-.02 4.28-.063l.079.063a4.51 4.51 0 0 0-.188 1c-.031.375-.063.902-.094 1.578l-.078.062h-.406l-.063-.062a8.34 8.34 0 0 1-.078-.672 7.097 7.097 0 0 0-.14-.89c-.618-.208-1.461-.313-2.532-.313-.48 0-1.043.039-1.687.11-.063.46-.094 1.573-.094 3.343v1.515c.75.012 1.258.016 1.531.016.489 0 .91-.016 1.266-.047.363-.039.582-.078.656-.11a.353.353 0 0 0 .157-.202c.039-.102.078-.317.109-.64l.062-.47.063-.078h.437l.079.078-.063 1.922c0 .23.004.555.016.969.03.48.046.855.046 1.125l-.078.063h-.437l-.063-.063-.046-.75a2.965 2.965 0 0 0-.079-.64c-.043-.133-.109-.223-.203-.266-.093-.04-.304-.078-.625-.11a13.44 13.44 0 0 0-1.484-.062c-.594 0-1.043.012-1.344.031zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ht"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.234-8.375.172.11c-.043.386-.07.85-.078 1.39l.844-.766c.226-.218.379-.351.453-.406.082-.062.266-.133.547-.219.281-.082.578-.125.89-.125.583 0 1.094.149 1.532.438.437.281.758.68.968 1.187.79-.75 1.254-1.16 1.391-1.234.133-.082.344-.164.625-.25.29-.094.578-.14.86-.14.468 0 .894.105 1.28.312.384.2.692.46.923.781.226.313.359.656.39 1.031.04.375.063.891.063 1.547v.938c0 .094.02.824.062 2.187.008.555.067.883.172.985.113.105.477.156 1.094.156l.062.078V0l-.062.078A24.663 24.663 0 0 0 13.906 0c-.148 0-.574.023-1.281.078l-.11-.11c.07-.757.11-1.75.11-2.968v-1.063c0-.925-.047-1.578-.14-1.953a1.496 1.496 0 0 0-.61-.906c-.313-.238-.695-.36-1.14-.36-.325 0-.622.063-.891.188a2.309 2.309 0 0 0-.75.563c-.219.25-.34.484-.36.703-.023.21-.03.601-.03 1.172v1.093c0 .262.007.747.03 1.454.02.71.04 1.125.063 1.25.031.117.07.199.125.25a.642.642 0 0 0 .203.093c.07.012.39.032.953.063l.078.078v.36l-.078.093a28.22 28.22 0 0 0-4.219 0l-.078-.094v-.359l.078-.078c.563-.031.88-.05.954-.063A.418.418 0 0 0 7-.625a.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468v-1c0-.657-.046-1.16-.14-1.516a1.61 1.61 0 0 0-.578-.906c-.305-.25-.68-.375-1.125-.375a2.3 2.3 0 0 0-.97.203 2.218 2.218 0 0 0-.718.516c-.18.199-.289.386-.328.562-.043.18-.063.559-.063 1.14v1.298c0 .261.008.746.032 1.453.02.71.039 1.125.062 1.25.031.117.07.199.125.25a.642.642 0 0 0 .203.093c.07.012.383.032.938.063l.078.078v.36l-.063.093a28.403 28.403 0 0 0-4.234 0L.375-.016v-.359l.078-.078c.57-.031.895-.05.969-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.031-.644.047-1.132.047-1.468V-5.22c0-.226-.016-.547-.047-.953a7.738 7.738 0 0 0-.063-.75.262.262 0 0 0-.125-.203c-.074-.04-.226-.063-.453-.063l-.75-.015-.078-.063v-.375l.078-.078c1.114-.133 2.055-.351 2.828-.656zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ha"},Dh.createElement("path",{style:{stroke:"none"},d:"m.297-10.984.062-.063c1.29.043 2.036.063 2.235.063.176 0 .922-.02 2.234-.063l.063.063v.39l-.063.047A13.33 13.33 0 0 0 4-10.5c-.2.023-.344.063-.438.125-.085.055-.14.188-.171.406-.024.211-.032.5-.032.875l-.015 1.797v3.453c0 .867.004 1.469.015 1.813l.032 1.344h1.593c1.27 0 2.063-.016 2.375-.047.32-.032.63-.102.922-.22.051-.132.13-.437.235-.905.113-.47.171-.739.171-.813l.079-.062h.375l.062.062c-.043.211-.09.617-.14 1.219A20.766 20.766 0 0 0 9 0l-.063.063C7.946.03 6.649.015 5.047.015L2.766 0C2.242 0 1.71.02 1.172.063L1.109 0v-.266l.063-.078c.32-.164.5-.265.531-.297.031-.039.063-.379.094-1.015.031-.633.047-1.399.047-2.297v-3.344l-.016-1.531c0-.594-.016-.973-.047-1.14-.023-.177-.058-.29-.11-.345-.042-.062-.136-.109-.28-.14-.137-.04-.48-.07-1.032-.094l-.062-.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hb"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.25-10.938c.25 0 .457.09.625.266a.814.814 0 0 1 .266.61.85.85 0 0 1-.266.624.845.845 0 0 1-.625.25.87.87 0 0 1-.625-.25.839.839 0 0 1-.25-.624c0-.239.082-.442.25-.61a.854.854 0 0 1 .625-.265zm.672 3.485.14.11a34.044 34.044 0 0 0-.078 2.593v1.766c0 .117.008.484.032 1.109.02.625.039.992.062 1.094a.5.5 0 0 0 .094.234c.05.043.11.07.172.078.07.012.36.031.86.063l.062.062v.328l-.063.079a28.346 28.346 0 0 0-3.75 0l-.078-.08v-.328l.078-.062c.5-.031.781-.051.844-.063.07-.02.129-.05.172-.094a.469.469 0 0 0 .11-.234c.019-.101.038-.437.062-1 .02-.57.03-1.004.03-1.297V-4.64c0-.207-.01-.488-.03-.843-.024-.364-.04-.586-.047-.672a.21.21 0 0 0-.125-.172c-.063-.04-.2-.063-.407-.063l-.656-.015-.062-.063v-.328l.062-.062c.989-.125 1.828-.32 2.516-.594zM2.312.469zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hc"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.875-7.453.156.11C3-7 2.977-6.587 2.97-6.11l.734-.688c.207-.187.344-.305.406-.36.07-.062.235-.128.485-.202.25-.07.515-.11.797-.11a2.4 2.4 0 0 1 1.359.39c.395.263.688.618.875 1.063.695-.664 1.102-1.035 1.219-1.109a2.86 2.86 0 0 1 .562-.219c.258-.07.516-.11.766-.11.414 0 .797.09 1.14.266.344.18.614.415.813.704.207.28.328.59.36.921.03.336.046.793.046 1.375v.813c0 .094.016.746.047 1.953.008.492.063.781.156.875.102.094.426.14.97.14l.062.063V0l-.063.063A24.265 24.265 0 0 0 12.36 0c-.125 0-.5.02-1.125.063l-.109-.094c.07-.676.11-1.555.11-2.64v-.938c0-.832-.044-1.41-.126-1.735a1.346 1.346 0 0 0-.546-.812 1.607 1.607 0 0 0-1.016-.328 1.91 1.91 0 0 0-.797.171 2.13 2.13 0 0 0-.656.5c-.2.22-.309.43-.328.625-.024.188-.032.54-.032 1.047v.97c0 .23.008.663.032 1.296.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328L8.97.063A28.988 28.988 0 0 0 7.079 0c-.556 0-1.18.02-1.876.063l-.062-.079v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .03-.57.046-1.004.046-1.297v-.89c0-.594-.042-1.047-.125-1.36a1.54 1.54 0 0 0-.53-.812c-.262-.219-.59-.328-.985-.328-.313 0-.602.062-.86.187a2.111 2.111 0 0 0-.64.453c-.156.18-.258.344-.297.5-.043.157-.063.496-.063 1.016v1.156c0 .23.008.664.032 1.297.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328l-.062.079a28.7 28.7 0 0 0-3.766 0l-.062-.08v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .031-.57.047-1.004.047-1.297V-4.64c0-.207-.012-.488-.032-.843a6.31 6.31 0 0 0-.062-.672.21.21 0 0 0-.125-.172c-.063-.04-.195-.063-.39-.063l-.657-.015-.078-.063v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hd"},Dh.createElement("path",{style:{stroke:"none"},d:"M.36-6.14v-.204l.062-.078c.488-.176.883-.344 1.187-.5 0-1.363-.015-2.156-.046-2.375.53-.187.968-.39 1.312-.61l.188.157c-.055.336-.118 1.29-.188 2.86.258.011.54.015.844.015.613 0 1.054-.016 1.328-.047l.047.047-.14.656-.063.078c-.274-.007-.57-.015-.891-.015-.293 0-.668.008-1.125.015l-.047 3.172c0 .742.016 1.227.047 1.453.04.22.133.399.281.532.156.125.383.187.688.187.351 0 .676-.094.969-.281L5-.797c-.125.094-.422.356-.89.781a1.876 1.876 0 0 1-.829.204c-1.18 0-1.765-.57-1.765-1.72 0-.413.007-.769.03-1.062a2.78 2.78 0 0 0 .016-.265v-3.25h-.328c-.23 0-.496.011-.796.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"he"},Dh.createElement("path",{style:{stroke:"none"},d:"m6.906-1.156-.25.562c-.543.356-1.027.586-1.453.688A4.84 4.84 0 0 1 4.078.25a4.521 4.521 0 0 1-1.781-.36C1.734-.36 1.273-.772.922-1.36.578-1.94.406-2.644.406-3.468a5 5 0 0 1 .203-1.484c.133-.438.274-.758.422-.969.145-.219.395-.457.75-.719a4.97 4.97 0 0 1 1.125-.625c.395-.156.82-.234 1.281-.234.625 0 1.176.148 1.657.438.476.292.812.667 1 1.125A3.724 3.724 0 0 1 7.109-4l-.078.078c-.355.086-.836.14-1.437.172-.594.023-.992.031-1.188.031h-2.5c.008 1.074.282 1.867.813 2.375.531.512 1.18.766 1.953.766.363 0 .71-.063 1.047-.188A7.083 7.083 0 0 0 6.78-1.28zm-5-3.188c.094.012.453.028 1.078.047a38.54 38.54 0 0 0 1.391.031c.727 0 1.172-.007 1.328-.03v-.298c0-.8-.168-1.398-.5-1.797-.324-.394-.766-.593-1.328-.593-.625 0-1.11.226-1.453.671-.344.438-.516 1.094-.516 1.97zm2.172-3.593zM3.984.469zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hf"},Dh.createElement("path",{style:{stroke:"none"},d:"M5.266-10.594v-.328L5.328-11c.988-.113 1.828-.305 2.516-.578l.14.094c-.054.605-.078 1.808-.078 3.609v5.11c0 .53.004.995.016 1.39.02.387.05.617.094.688A.58.58 0 0 0 8.25-.5c.113.043.422.086.922.125l.062.063v.296l-.062.079c-.563-.032-1-.047-1.313-.047-.28 0-.683.015-1.203.046L6.563-.03c.019-.508.03-.864.03-1.063v-.297c-.28.211-.57.438-.859.688a18.97 18.97 0 0 1-.828.719c-.242.113-.578.171-1.015.171-.72 0-1.336-.18-1.844-.53a2.96 2.96 0 0 1-1.078-1.36A4.677 4.677 0 0 1 .656-3.39c0-.593.11-1.16.328-1.703.227-.539.547-.937.954-1.187.406-.25.847-.508 1.328-.782.488-.269.968-.406 1.437-.406a3.82 3.82 0 0 1 1.89.5l-.03-1.75a22.84 22.84 0 0 0-.047-1.25c-.024-.238-.047-.379-.079-.422a.278.278 0 0 0-.156-.109c-.074-.02-.39-.031-.953-.031zM6.594-5.64a3.412 3.412 0 0 0-1.078-.828 2.581 2.581 0 0 0-1.172-.297c-.438 0-.852.121-1.235.36-.375.242-.648.593-.812 1.062-.168.461-.25.965-.25 1.516 0 .906.226 1.637.687 2.187.47.555 1.051.829 1.75.829a1.97 1.97 0 0 0 1-.25c.301-.176.547-.41.735-.704.187-.3.297-.597.328-.89.031-.301.047-.848.047-1.64zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hh"},Dh.createElement("path",{style:{stroke:"none"},d:"M.469-11.047c1.312.043 2.144.063 2.5.063.488 0 1.039-.008 1.656-.032.645-.02 1.04-.03 1.188-.03.726 0 1.332.077 1.812.233.477.149.875.422 1.188.829.312.398.468.875.468 1.437 0 .469-.11.922-.328 1.36a3.317 3.317 0 0 1-.922 1.125 3.863 3.863 0 0 1-1.187.656 3.812 3.812 0 0 1-1.25.203 5.86 5.86 0 0 1-1.078-.11l-.125-.484.062-.078c.395.094.711.14.953.14.688 0 1.235-.222 1.64-.671.415-.457.626-1.035.626-1.735 0-.707-.215-1.27-.64-1.687-.43-.426-1.079-.64-1.954-.64-.469 0-.992.09-1.562.265-.043.398-.063 1.367-.063 2.906v5.14c.008.587.024.966.047 1.141.031.168.066.282.11.344.05.055.144.102.28.14.145.044.493.075 1.047.095L5-.392V0l-.063.063A137.057 137.057 0 0 0 2.704 0C2.523 0 1.781.02.47.063L.406 0v-.39L.47-.438c.476-.02.797-.047.953-.079.164-.03.273-.07.328-.125.063-.05.11-.156.14-.312.032-.164.051-.524.063-1.078v-5.266l-.016-1.531c0-.594-.015-.973-.046-1.14-.024-.177-.059-.29-.11-.345-.043-.062-.136-.109-.281-.14-.137-.04-.48-.07-1.031-.094l-.063-.047v-.39zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hi"},Dh.createElement("path",{style:{stroke:"none"},d:"M.531-3.578c0-.625.125-1.223.375-1.797.258-.57.707-1.066 1.344-1.484.633-.426 1.383-.641 2.25-.641 1.094 0 1.984.352 2.672 1.047.687.687 1.031 1.574 1.031 2.656 0 1.188-.398 2.172-1.187 2.953C6.234-.07 5.286.312 4.172.312c-.73 0-1.383-.199-1.953-.593-.574-.395-1-.875-1.281-1.438a4.246 4.246 0 0 1-.407-1.86zm1.485-.547c0 .73.093 1.387.28 1.969.188.574.485 1.039.892 1.39.406.344.867.516 1.39.516.613 0 1.117-.242 1.516-.734.406-.489.61-1.223.61-2.204 0-1.101-.22-2.007-.657-2.718-.438-.707-1.063-1.063-1.875-1.063-.68 0-1.211.246-1.594.735-.375.492-.562 1.195-.562 2.109zm2.359-3.813zM4.265.47zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hj"},Dh.createElement("path",{style:{stroke:"none"},d:"M.797-2.297h.328l.078.063c.008.437.035.812.078 1.125.157.25.43.453.828.609a3.32 3.32 0 0 0 1.172.219c.551 0 .992-.145 1.328-.438.332-.3.5-.656.5-1.062a.901.901 0 0 0-.187-.578c-.117-.164-.297-.301-.547-.407-.242-.113-.672-.242-1.297-.39a28.32 28.32 0 0 1-1.125-.281 1.827 1.827 0 0 1-.61-.36 1.561 1.561 0 0 1-.452-.61 2.063 2.063 0 0 1-.157-.812c0-.695.274-1.254.829-1.672.55-.414 1.242-.625 2.078-.625.343 0 .718.047 1.125.141.414.094.734.188.953.281l.062.11c-.043.21-.07.757-.078 1.64l-.062.063h-.313l-.078-.063c-.023-.32-.055-.547-.094-.672-.031-.125-.125-.257-.281-.406-.148-.156-.36-.281-.64-.375a2.446 2.446 0 0 0-.86-.156c-.324 0-.594.047-.813.14-.21.094-.382.235-.515.422a1.137 1.137 0 0 0-.203.688c0 .2.039.375.125.531.082.156.207.29.375.39.164.095.336.165.515.204l.86.219c.726.18 1.25.336 1.562.468.313.125.551.32.719.579.176.261.266.578.266.953 0 .718-.297 1.34-.891 1.859-.594.52-1.355.781-2.281.781-.336 0-.746-.039-1.235-.11A10.717 10.717 0 0 1 .625-.078L.578-.186l.078-.516c.031-.164.047-.328.047-.485.008-.164.016-.515.016-1.046zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hk"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.672-7.453.156.11a18.16 18.16 0 0 0-.062 1.374c.414-.343.812-.691 1.187-1.047.102-.101.203-.175.297-.218a2.61 2.61 0 0 1 .484-.157 2.867 2.867 0 0 1 1.844.172c.375.157.656.352.844.578.187.22.316.48.39.782.07.304.11.671.11 1.109v1.375c0 .094.016.746.047 1.953.008.492.062.781.156.875.102.094.426.14.969.14l.062.063V0l-.062.063A24.265 24.265 0 0 0 7.75 0c-.137 0-.516.02-1.14.063l-.094-.094c.07-.676.109-1.555.109-2.64v-1.032c0-.613-.016-1.055-.047-1.328a1.665 1.665 0 0 0-.266-.735 1.526 1.526 0 0 0-.593-.515 1.847 1.847 0 0 0-.86-.188c-.273 0-.507.032-.703.094a2.319 2.319 0 0 0-.64.328 2.202 2.202 0 0 0-.532.484 1.1 1.1 0 0 0-.218.407c-.024.125-.032.398-.032.812v1.36c0 .117.008.484.032 1.109.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328L3.97.063a28.7 28.7 0 0 0-3.766 0l-.063-.08v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .03-.57.046-1.004.046-1.297V-4.64c0-.207-.011-.488-.03-.843a6.31 6.31 0 0 0-.063-.672.21.21 0 0 0-.125-.172c-.063-.04-.196-.063-.39-.063l-.657-.015-.078-.063v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hl"},Dh.createElement("path",{style:{stroke:"none"},d:"m4.5-.406.063.062v.328L4.5.063c-.156 0-.46-.012-.906-.032A22.073 22.073 0 0 0 2.328 0C1.766 0 1.141.02.453.063l-.062-.08v-.328l.062-.062c.5-.031.781-.051.844-.063.07-.02.129-.05.172-.094a.469.469 0 0 0 .11-.234c.019-.101.038-.437.062-1 .02-.57.03-1.004.03-1.297V-6.11l-1 .046-.077-.062v-.188l.062-.078 1.016-.53v-.47c0-.52.02-.91.062-1.171.051-.27.141-.52.266-.75.133-.227.36-.516.672-.86.32-.344.601-.625.844-.844.238-.226.445-.379.625-.453.175-.07.382-.11.625-.11.195 0 .41.04.64.11l-.015 1.281-.172.079a1.498 1.498 0 0 0-1.016-.391c-.273 0-.508.059-.703.172-.2.105-.336.289-.406.547-.074.25-.11.668-.11 1.25v1.61h.829c.437 0 .847-.016 1.234-.048l.062.094-.14.688-.063.078c-.156-.008-.261-.016-.312-.016h-1.61v3.14c0 .169.008.555.032 1.157.02.594.039.945.062 1.047.02.105.055.183.11.234.05.043.128.074.234.094.113.023.473.039 1.078.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hm"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.688.156-.72-3.265-1.5-6.438c-.124-.508-.257-.789-.39-.844-.125-.062-.402-.117-.828-.171l-.063-.063v-.344l.063-.078c.75.043 1.41.063 1.984.063.438 0 1.067-.02 1.891-.063l.078.078v.344l-.062.063c-.586.023-.934.054-1.047.093-.117.031-.172.117-.172.25 0 .106.05.45.156 1.031.102.586.195 1.06.281 1.422l1.22 5.407 1.937-4.797c.5-1.27.992-2.602 1.484-4h.5a88.673 88.673 0 0 0 1.297 3.812l1.828 5.094 1.328-4.672c.133-.488.3-1.129.5-1.922.195-.8.297-1.265.297-1.39 0-.133-.07-.22-.203-.25-.125-.04-.496-.067-1.11-.079l-.062-.078v-.343l.063-.063a49.08 49.08 0 0 0 1.593.063c.164 0 .707-.02 1.625-.063l.063.063v.359l-.063.047c-.293.012-.492.043-.594.094a.648.648 0 0 0-.25.203c-.074.086-.18.351-.312.797l-.453 1.453-.813 2.625a76.271 76.271 0 0 0-.625 2.312l-.875 3.25h-.796a166.885 166.885 0 0 0-1.344-3.89L7.813-8.547l-1.547 3.86L5.422-2.5c-.219.574-.39 1.043-.516 1.406L4.47.156zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hn"},Dh.createElement("path",{style:{stroke:"none"},d:"m3-7.453.156.11c-.031.304-.058.84-.078 1.609l.594-.75c.187-.239.351-.426.5-.563a1.765 1.765 0 0 1 1.14-.422 1.5 1.5 0 0 1 .641.14l.063.11a17.39 17.39 0 0 0-.141 1.828h-.36c-.21-.476-.542-.718-1-.718-.324 0-.605.105-.843.312a1.52 1.52 0 0 0-.485.781c-.085.305-.124.696-.124 1.172v.86c0 .156.007.543.03 1.156.02.605.04.953.063 1.047a.67.67 0 0 0 .11.219c.05.042.117.074.203.093.082.012.453.031 1.11.063l.077.062v.328l-.078.079A34.98 34.98 0 0 0 2.406 0 28.7 28.7 0 0 0 .531.063L.47-.017v-.328l.06-.061c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .031-.57.047-1.004.047-1.297V-4.64c0-.207-.012-.488-.032-.843a6.31 6.31 0 0 0-.062-.672.21.21 0 0 0-.125-.172c-.063-.04-.195-.063-.39-.063L.5-6.406.422-6.47v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ho"},Dh.createElement("path",{style:{stroke:"none"},d:"m8.625-6.906.063.14c-.22.325-.356.54-.407.641H6.828c.145.281.219.578.219.89 0 .376-.086.743-.25 1.094a2.67 2.67 0 0 1-.703.891 3.642 3.642 0 0 1-2.344.797h-.36c-.304.242-.5.422-.593.547a.591.591 0 0 0-.125.36c0 .23.101.39.312.484.207.093.645.14 1.313.14l1.75-.015c.55 0 .973.07 1.266.203.289.125.523.359.703.703.187.332.28.687.28 1.062 0 .57-.187 1.14-.562 1.703-.367.57-.902 1.004-1.609 1.297-.7.301-1.45.453-2.25.453-.45 0-.875-.054-1.281-.156a3.288 3.288 0 0 1-1.047-.437 2.392 2.392 0 0 1-.719-.782 2.066 2.066 0 0 1-.265-1.015c0-.188.023-.39.078-.61.062-.21.171-.433.328-.671L2.39.015c-.46-.145-.745-.285-.86-.421a.728.728 0 0 1-.172-.5c0-.196.063-.43.188-.703l1.266-.907c-.743-.187-1.243-.472-1.5-.859a2.192 2.192 0 0 1-.391-1.266c0-.425.086-.828.265-1.203a2.22 2.22 0 0 1 .829-.922c.375-.226.785-.41 1.234-.546a4.539 4.539 0 0 1 1.25-.204c.656 0 1.273.215 1.86.641.945 0 1.702-.008 2.265-.031zm-6.36 1.812c0 .313.063.653.188 1.016.125.367.328.64.61.828.28.188.593.281.937.281a1.72 1.72 0 0 0 1.203-.453c.332-.3.5-.77.5-1.406a2.41 2.41 0 0 0-.469-1.453c-.304-.438-.734-.657-1.296-.657-.47 0-.868.157-1.188.47-.324.304-.484.761-.484 1.374zM4.563.156c-.843 0-1.328.008-1.453.032-.125.019-.308.109-.546.265a1.938 1.938 0 0 0-.579.625c-.148.27-.218.57-.218.906 0 .594.218 1.07.656 1.438.437.375 1.02.562 1.75.562.55 0 1.055-.117 1.516-.343.468-.23.812-.54 1.03-.922.22-.387.329-.758.329-1.11 0-.355-.094-.664-.281-.921a1.076 1.076 0 0 0-.72-.454C5.755.18 5.259.156 4.563.156zm0 0"}))),sn||(sn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 133.946 177.366)"})),En||(En=Dh.createElement("use",{xlinkHref:"#a",x:129.446,y:161.466})),vn||(vn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 176.546 177.366)"})),fn||(fn=Dh.createElement("use",{xlinkHref:"#b",x:171.946,y:161.466})),un||(un=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 219.046 177.366)"})),yn||(yn=Dh.createElement("use",{xlinkHref:"#c",x:214.546,y:161.466})),zn||(zn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 261.546 177.366)"})),kn||(kn=Dh.createElement("use",{xlinkHref:"#d",x:257.046,y:161.466})),Pn||(Pn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.602V0zm0 0",transform:"matrix(1 0 0 -1 304.046 177.366)"})),bn||(bn=Dh.createElement("use",{xlinkHref:"#e",x:299.546,y:161.466})),Mn||(Mn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.198V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 346.546 177.366)"})),gn||(gn=Dh.createElement("use",{xlinkHref:"#f",x:342.046,y:161.466})),Rn||(Rn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.198V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 389.046 177.366)"})),xn||(xn=Dh.createElement("use",{xlinkHref:"#g",x:384.546,y:161.466})),Hn||(Hn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 431.646 177.366)"})),On||(On=Dh.createElement("use",{xlinkHref:"#h",x:427.146,y:161.466})),Nn||(Nn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 474.146 177.366)"})),Vn||(Vn=Dh.createElement("use",{xlinkHref:"#i",x:469.646,y:161.466})),wn||(wn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.597V0zm0 0",transform:"matrix(1 0 0 -1 516.646 177.366)"})),Ln||(Ln=Dh.createElement("use",{xlinkHref:"#j",x:512.146,y:161.466})),Cn||(Cn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 559.146 177.366)"})),An||(An=Dh.createElement("use",{xlinkHref:"#b",x:550.146,y:161.466})),Fn||(Fn=Dh.createElement("use",{xlinkHref:"#a",x:559.236,y:161.466})),jn||(jn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 601.646 177.366)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Tn||(Tn=Dh.createElement("use",{xlinkHref:"#b",x:592.746,y:161.466})),In||(In=Dh.createElement("use",{xlinkHref:"#b",x:601.746,y:161.466}))),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#ddd",fillOpacity:1,strokeWidth:.12,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#ddd",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0c4.2 0 50.602 20.4 50.602 26.602 0 6.2-6.5 6.2-10.703 6.2C39.899 30.2-1.601 19.5 0 0zm0 0",transform:"matrix(1 0 0 -1 76.246 78.766)"}),Dh.createElement("g",{clipPath:"url(#k)"},Dh.createElement("g",{clipPath:"url(#l)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m19.246 77.066.102-49h5.398l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#m)"},Dh.createElement("g",{clipPath:"url(#n)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m24.645 77.066.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#o)"},Dh.createElement("g",{clipPath:"url(#p)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"m25.645 77.066.101-49h.899l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#q)"},Dh.createElement("g",{clipPath:"url(#r)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"m26.547 77.066.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#s)"},Dh.createElement("g",{clipPath:"url(#t)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"m27.547 77.066.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#u)"},Dh.createElement("g",{clipPath:"url(#v)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"m28.547 77.066.098-49h1l-.2 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#w)"},Dh.createElement("g",{clipPath:"url(#x)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m29.445 77.066.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#y)"},Dh.createElement("g",{clipPath:"url(#z)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"m30.445 77.066.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#A)"},Dh.createElement("g",{clipPath:"url(#B)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"m31.445 77.066.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#C)"},Dh.createElement("g",{clipPath:"url(#D)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"m32.445 77.066.102-49h.898l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#E)"},Dh.createElement("g",{clipPath:"url(#F)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"m33.348 77.066.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#G)"},Dh.createElement("g",{clipPath:"url(#H)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"m34.348 77.066.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#I)"},Dh.createElement("g",{clipPath:"url(#J)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"m35.348 77.066.097-49h1l-.199 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#K)"},Dh.createElement("g",{clipPath:"url(#L)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"m36.246 77.066.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#M)"},Dh.createElement("g",{clipPath:"url(#N)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"m37.246 77.066.102-49h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#O)"},Dh.createElement("g",{clipPath:"url(#P)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"m38.246 77.164.102-49.098h1l-.203 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#Q)"},Dh.createElement("g",{clipPath:"url(#R)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"m39.145 77.164.203-49.098h.898l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#S)"},Dh.createElement("g",{clipPath:"url(#T)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"m40.145 77.164.101-49.098h1l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#U)"},Dh.createElement("g",{clipPath:"url(#V)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"m41.145 77.164.101-49.098h1l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#W)"},Dh.createElement("g",{clipPath:"url(#X)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"m42.145 77.164.101-49.098h.899l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#Y)"},Dh.createElement("g",{clipPath:"url(#Z)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"m43.047 77.164.098-49.098h1l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aa)"},Dh.createElement("g",{clipPath:"url(#ab)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"m44.047 77.164.098-49.098h1l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ac)"},Dh.createElement("g",{clipPath:"url(#ad)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"m45.047 77.164.098-49.098h1l-.2 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ae)"},Dh.createElement("g",{clipPath:"url(#af)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"m45.945 77.164.2-49.098h.902l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ag)"},Dh.createElement("g",{clipPath:"url(#ah)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"m46.945 77.164.102-49.098h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ai)"},Dh.createElement("g",{clipPath:"url(#aj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"m47.945 77.164.102-49.098h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ak)"},Dh.createElement("g",{clipPath:"url(#al)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"m48.945 77.164.102-49.098h.898l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#am)"},Dh.createElement("g",{clipPath:"url(#an)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"m49.848 77.164.097-49.098h1l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ao)"},Dh.createElement("g",{clipPath:"url(#ap)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"m50.848 77.164.097-49.098h1l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aq)"},Dh.createElement("g",{clipPath:"url(#ar)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"m51.848 77.164.097-49.098h1l-.199 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#as)"},Dh.createElement("g",{clipPath:"url(#at)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"m52.746 77.164.2-49.098h.902l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#au)"},Dh.createElement("g",{clipPath:"url(#av)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"m53.746 77.164.102-49.098 1 .098-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aw)"},Dh.createElement("g",{clipPath:"url(#ax)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"m54.746 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ay)"},Dh.createElement("g",{clipPath:"url(#az)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"m55.746 77.164.102-49h.898l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aA)"},Dh.createElement("g",{clipPath:"url(#aB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"m56.645 77.164.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aC)"},Dh.createElement("g",{clipPath:"url(#aD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"m57.645 77.164.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aE)"},Dh.createElement("g",{clipPath:"url(#aF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"m58.645 77.164.101-49h1l-.2 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aG)"},Dh.createElement("g",{clipPath:"url(#aH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"m59.547 77.164.2-49h.898l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aI)"},Dh.createElement("g",{clipPath:"url(#aJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"m60.547 77.164.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aK)"},Dh.createElement("g",{clipPath:"url(#aL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"m61.547 77.164.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aM)"},Dh.createElement("g",{clipPath:"url(#aN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"m62.547 77.164.098-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aO)"},Dh.createElement("g",{clipPath:"url(#aP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"m63.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aQ)"},Dh.createElement("g",{clipPath:"url(#aR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"m64.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aS)"},Dh.createElement("g",{clipPath:"url(#aT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"m65.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aU)"},Dh.createElement("g",{clipPath:"url(#aV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"m66.445 77.164.102-49h.898l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aW)"},Dh.createElement("g",{clipPath:"url(#aX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"m67.348 77.164.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aY)"},Dh.createElement("g",{clipPath:"url(#aZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"m68.348 77.164.097-49h1l-.199 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ba)"},Dh.createElement("g",{clipPath:"url(#bb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"m69.246 77.164.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bc)"},Dh.createElement("g",{clipPath:"url(#bd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"m70.246 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#be)"},Dh.createElement("g",{clipPath:"url(#bf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"m71.246 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bg)"},Dh.createElement("g",{clipPath:"url(#bh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m72.246 77.164.102-49h1l-.102 49zm0 0"}))),Wn||(Wn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v17.8l53.699-31.1V-31zm0 0",transform:"matrix(1 0 0 -1 19.446 45.966)"})),Dh.createElement("g",{clipPath:"url(#bi)"},Dh.createElement("g",{clipPath:"url(#bj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M73.145 32.664h46.101v44.402H73.145zm-8.797-9.297h45.199v45.098h-45.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bk)"},Dh.createElement("g",{clipPath:"url(#bl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"M64.348 23.367h45.199v45.098h-45.2zm.398.399h44.3v44.3h-44.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M64.746 23.766h44.3v44.3h-44.3zm.5.5h43.399v43.3H65.246zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bm)"},Dh.createElement("g",{clipPath:"url(#bn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"M65.246 24.266h43.399v43.3H65.246zm.5.5h42.399v42.398H65.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M65.746 24.766h42.399v42.398H65.746zm.399.398h41.5v41.5h-41.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bo)"},Dh.createElement("g",{clipPath:"url(#bp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"M66.145 25.164h41.5v41.5h-41.5zm.5.5h40.601v40.5H66.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M66.645 25.664h40.601v40.5H66.645zm.402.402h39.7v39.7h-39.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bq)"},Dh.createElement("g",{clipPath:"url(#br)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"M67.047 26.066h39.7v39.7h-39.7zm.5.5h38.7v38.7h-38.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M67.547 26.566h38.7v38.7h-38.7zm.5.399h37.8v37.902h-37.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bs)"},Dh.createElement("g",{clipPath:"url(#bt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"M68.047 26.965h37.8v37.902h-37.8zm.398.5h36.903v36.902H68.445zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M68.445 27.465h36.903v36.902H68.445zm.5.5h35.903v35.902H68.945zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bu)"},Dh.createElement("g",{clipPath:"url(#bv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M68.945 27.965h35.903v35.902H68.945zm.5.402h35v35.098h-35zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"M69.445 28.367h35v35.098h-35zm.403.5h34.097v34.098H69.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bw)"},Dh.createElement("g",{clipPath:"url(#bx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M69.848 28.867h34.097v34.098H69.848zm.5.399h33.199v33.3h-33.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"M70.348 29.266h33.199v33.3h-33.2zm.398.5h32.3v32.3h-32.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M70.746 29.766h32.3v32.3h-32.3zm.5.5h31.399v31.3H71.246zm0 0"}))),Dh.createElement("g",{clipPath:"url(#by)"},Dh.createElement("g",{clipPath:"url(#bz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M71.246 30.266h31.399v31.3H71.246zm.5.398h30.399v30.5H71.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M71.746 30.664h30.399v30.5H71.746zm.399.5h29.5v29.5h-29.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bA)"},Dh.createElement("g",{clipPath:"url(#bB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"M72.145 31.164h29.5v29.5h-29.5zm.5.5h28.601v28.5H72.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M72.645 31.664h28.601v28.5H72.645zm.402.402h27.7v27.7h-27.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bC)"},Dh.createElement("g",{clipPath:"url(#bD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"M73.047 32.066h27.7v27.7h-27.7zm.5.5h26.8v26.7h-26.8zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M73.547 32.566h26.8v26.7h-26.8zm.5.5h25.8v25.801h-25.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bE)"},Dh.createElement("g",{clipPath:"url(#bF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M74.047 33.066h25.8v25.801h-25.8zm.398.399h24.903v24.902H74.445zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M74.445 33.465h24.903v24.902H74.445zm.5.5h24v23.902h-24zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bG)"},Dh.createElement("g",{clipPath:"url(#bH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"M74.945 33.965h24v23.902h-24zm.5.402h23v23.098h-23zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bI)"},Dh.createElement("g",{clipPath:"url(#bJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"M75.445 34.367h23v23.098h-23zm.403.5h22.097v22.098H75.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bK)"},Dh.createElement("g",{clipPath:"url(#bL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M75.848 34.867h22.097v22.098H75.848zm.5.5h21.199v21.2h-21.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bM)"},Dh.createElement("g",{clipPath:"url(#bN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M76.348 35.367h21.199v21.2h-21.2zm.398.399h20.3v20.3h-20.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M76.746 35.766h20.3v20.3h-20.3zm.5.5h19.3v19.3h-19.3zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bO)"},Dh.createElement("g",{clipPath:"url(#bP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"M77.246 36.266h19.3v19.3h-19.3zm.5.398h18.399v18.5H77.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M77.746 36.664h18.399v18.5H77.746zm.399.5h17.5v17.5h-17.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bQ)"},Dh.createElement("g",{clipPath:"url(#bR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"M78.145 37.164h17.5v17.5h-17.5zm.5.402h16.601v16.7H78.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M78.645 37.566h16.601v16.7H78.645zm.5.5h15.601v15.7H79.145zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bS)"},Dh.createElement("g",{clipPath:"url(#bT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M79.145 38.066h15.601v15.7H79.145zm.402.5h14.7v14.7h-14.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M79.547 38.566h14.7v14.7h-14.7zm.5.399h13.8v13.902h-13.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bU)"},Dh.createElement("g",{clipPath:"url(#bV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"M80.047 38.965h13.8v13.902h-13.8zm.398.5h12.903v12.902H80.445zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bW)"},Dh.createElement("g",{clipPath:"url(#bX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M80.445 39.465h12.903v12.902H80.445zm.5.5h12v11.902h-12zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bY)"},Dh.createElement("g",{clipPath:"url(#bZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"M80.945 39.965h12v11.902h-12zm.403.402h11.097v11.098H81.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ca)"},Dh.createElement("g",{clipPath:"url(#cb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M81.348 40.367h11.097v11.098H81.348zm.5.5h10.097v10.098H81.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cc)"},Dh.createElement("g",{clipPath:"url(#cd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M81.848 40.867h10.097v10.098H81.848zm.5.5h9.199v9.098h-9.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ce)"},Dh.createElement("g",{clipPath:"url(#cf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"M82.348 41.367h9.199v9.098h-9.2zm.398.399h8.3v8.3h-8.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M82.746 41.766h8.3v8.3h-8.3zm.5.5h7.399v7.3h-7.399zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cg)"},Dh.createElement("g",{clipPath:"url(#ch)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"M83.246 42.266h7.399v7.3h-7.399zm.5.5h6.399v6.398h-6.399zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M83.746 42.766h6.399v6.398h-6.399zm.399.398h5.5v5.5h-5.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ci)"},Dh.createElement("g",{clipPath:"url(#cj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M84.145 43.164h5.5v5.5h-5.5zm.5.5h4.601v4.5h-4.601zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M84.645 43.664h4.601v4.5h-4.601zm.402.402h3.7v3.7h-3.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ck)"},Dh.createElement("g",{clipPath:"url(#cl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"M85.047 44.066h3.7v3.7h-3.7zm.5.5h2.7v2.7h-2.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M85.547 44.566h2.7v2.7h-2.7zm.5.399h1.8v1.902h-1.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cm)"},Dh.createElement("g",{clipPath:"url(#cn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"M86.047 44.965h1.8v1.902h-1.8zm.398.5h.903v.902h-.903zm0 0"}))),Dh.createElement("g",{clipPath:"url(#co)"},Dh.createElement("g",{clipPath:"url(#cp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M86.445 45.465h.903v.902h-.903zm0 0"}))),Sn||(Sn=Dh.createElement("path",{className:"clip-1",d:"M-.001.001v17.7L46.1 44.3V26.6zm0 0",transform:"matrix(1 0 0 -1 73.146 76.966)"})),Dh.createElement("g",{clipPath:"url(#cq)"},Dh.createElement("g",{clipPath:"url(#cr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M19.348 1.566h99.898v5.7H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cs)"},Dh.createElement("g",{clipPath:"url(#ct)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M19.348 7.266h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cu)"},Dh.createElement("g",{clipPath:"url(#cv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"M19.348 8.367h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cw)"},Dh.createElement("g",{clipPath:"url(#cx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M19.348 9.367h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cy)"},Dh.createElement("g",{clipPath:"url(#cz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"M19.348 10.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cA)"},Dh.createElement("g",{clipPath:"url(#cB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M19.348 11.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cC)"},Dh.createElement("g",{clipPath:"url(#cD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"M19.348 12.465h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cE)"},Dh.createElement("g",{clipPath:"url(#cF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M19.348 13.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cG)"},Dh.createElement("g",{clipPath:"url(#cH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"M19.348 14.566h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cI)"},Dh.createElement("g",{clipPath:"url(#cJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M19.348 15.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cK)"},Dh.createElement("g",{clipPath:"url(#cL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"M19.348 16.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cM)"},Dh.createElement("g",{clipPath:"url(#cN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M19.348 17.664h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cO)"},Dh.createElement("g",{clipPath:"url(#cP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M19.348 18.766h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cQ)"},Dh.createElement("g",{clipPath:"url(#cR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"M19.348 19.766h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cS)"},Dh.createElement("g",{clipPath:"url(#cT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M19.348 20.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cU)"},Dh.createElement("g",{clipPath:"url(#cV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"M19.348 21.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cW)"},Dh.createElement("g",{clipPath:"url(#cX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M19.348 22.867h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cY)"},Dh.createElement("g",{clipPath:"url(#cZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M19.348 23.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#da)"},Dh.createElement("g",{clipPath:"url(#db)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M19.348 24.965h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dc)"},Dh.createElement("g",{clipPath:"url(#dd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"M19.348 26.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#de)"},Dh.createElement("g",{clipPath:"url(#df)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M19.348 27.066h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dg)"},Dh.createElement("g",{clipPath:"url(#dh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"M19.348 28.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#di)"},Dh.createElement("g",{clipPath:"url(#dj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M19.348 29.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dk)"},Dh.createElement("g",{clipPath:"url(#dl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M19.348 30.164h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dm)"},Dh.createElement("g",{clipPath:"url(#dn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M19.348 31.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#do)"},Dh.createElement("g",{clipPath:"url(#dp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"M19.348 32.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dq)"},Dh.createElement("g",{clipPath:"url(#dr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"M19.348 33.266h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ds)"},Dh.createElement("g",{clipPath:"url(#dt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M19.348 34.367h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#du)"},Dh.createElement("g",{clipPath:"url(#dv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M19.348 35.367h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dw)"},Dh.createElement("g",{clipPath:"url(#dx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M19.348 36.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dy)"},Dh.createElement("g",{clipPath:"url(#dz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"M19.348 37.465h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dA)"},Dh.createElement("g",{clipPath:"url(#dB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M19.348 38.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dC)"},Dh.createElement("g",{clipPath:"url(#dD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"M19.348 39.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dE)"},Dh.createElement("g",{clipPath:"url(#dF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M19.348 40.566h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dG)"},Dh.createElement("g",{clipPath:"url(#dH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M19.348 41.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dI)"},Dh.createElement("g",{clipPath:"url(#dJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M19.348 42.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dK)"},Dh.createElement("g",{clipPath:"url(#dL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"M19.348 43.664h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dM)"},Dh.createElement("g",{clipPath:"url(#dN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M19.348 44.766h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dO)"},Dh.createElement("g",{clipPath:"url(#dP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"M19.348 45.766h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dQ)"},Dh.createElement("g",{clipPath:"url(#dR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M19.348 46.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dS)"},Dh.createElement("g",{clipPath:"url(#dT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M19.348 47.867h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dU)"},Dh.createElement("g",{clipPath:"url(#dV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"M19.348 48.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dW)"},Dh.createElement("g",{clipPath:"url(#dX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M19.348 49.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dY)"},Dh.createElement("g",{clipPath:"url(#dZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"M19.348 50.965h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ea)"},Dh.createElement("g",{clipPath:"url(#eb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M19.348 52.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ec)"},Dh.createElement("g",{clipPath:"url(#ed)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M19.348 53.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ee)"},Dh.createElement("g",{clipPath:"url(#ef)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M19.348 54.066h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eg)"},Dh.createElement("g",{clipPath:"url(#eh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"M19.348 55.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ei)"},Dh.createElement("g",{clipPath:"url(#ej)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M19.348 56.164h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ek)"},Dh.createElement("g",{clipPath:"url(#el)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"M19.348 57.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#em)"},Dh.createElement("g",{clipPath:"url(#en)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M19.348 58.266h99.898v1.101H19.348zm0 0"}))),Dn||(Dn=Dh.createElement("path",{className:"clip-1",d:"m-.001 0-53.7 31.102 46 26.598L46.1 26.602zm0 0",transform:"matrix(1 0 0 -1 73.146 59.266)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M.002-.001v-10.7",transform:"matrix(1 0 0 -1 37.846 42.366)"}),Zn||(Zn=Dh.createElement("path",{className:"clip-1",d:"m-.001.002-24.598 14.2",transform:"matrix(1 0 0 -1 71.646 65.166)"})),Gn||(Gn=Dh.createElement("path",{className:"clip-1",d:"M0 0v-3.5",transform:"matrix(1 0 0 -1 46.946 47.766)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-3.5m0 3.5-24.5 14.2",transform:"matrix(1 0 0 -1 71.446 61.966)"}),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#39b54a",fillOpacity:1,strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v3.602l3-1.8V-1.8zm0 0",transform:"matrix(1 0 0 -1 40.946 47.766)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .002V-10.6",transform:"matrix(1 0 0 -1 34.746 40.666)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0-.001v-10.7",transform:"matrix(1 0 0 -1 31.746 38.866)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M-.001 0v-10.7",transform:"matrix(1 0 0 -1 28.646 37.066)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0-.001V-10.6",transform:"matrix(1 0 0 -1 25.546 35.366)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v-10.598",transform:"matrix(1 0 0 -1 22.446 33.566)"}),Dh.createElement("g",{clipPath:"url(#eo)"},Dh.createElement("g",{clipPath:"url(#ep)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m16.246 45.965.102-19.598h.297l-.098 19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m16.547 45.965.098-19.598h.3l-.097 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eq)"},Dh.createElement("g",{clipPath:"url(#er)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m16.848 45.965.097-19.598h.2v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#es)"},Dh.createElement("g",{clipPath:"url(#et)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M17.145 45.965V26.367h.3v19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M17.445 45.965V26.367h.301v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eu)"},Dh.createElement("g",{clipPath:"url(#ev)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M17.746 45.965V26.367h.3v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ew)"},Dh.createElement("g",{clipPath:"url(#ex)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M18.047 45.965V26.367h.3l-.1 19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"m18.246 45.965.102-19.598h.297v19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M18.645 45.965V26.367h.3l-.097 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ey)"},Dh.createElement("g",{clipPath:"url(#ez)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"m18.848 45.965.097-19.598h.301l-.101 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eA)"},Dh.createElement("g",{clipPath:"url(#eB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m19.145 45.965.101-19.598h.3l-.1 19.598zm0 0"}))),Bn||(Bn=Dh.createElement("path",{className:"clip-1",d:"M.002.002v17.7l3.097-1.7v-17.8zm0 0",transform:"matrix(1 0 0 -1 16.346 44.166)"})),Dh.createElement("g",{clipPath:"url(#eC)"},Dh.createElement("g",{clipPath:"url(#eD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m73.047 78.867.098-19.703h.3l-.097 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m73.348 78.867.097-19.703h.301l-.101 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m73.645 78.867.101-19.703h.2v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eE)"},Dh.createElement("g",{clipPath:"url(#eF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M73.945 78.867V59.164h.301v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eG)"},Dh.createElement("g",{clipPath:"url(#eH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M74.246 78.867V59.164h.3v19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M74.547 78.867V59.164h.3v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eI)"},Dh.createElement("g",{clipPath:"url(#eJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M74.848 78.867V59.164h.297v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eK)"},Dh.createElement("g",{clipPath:"url(#eL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M75.145 78.867V59.164h.3v19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M75.445 78.867V59.164h.301v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eM)"},Dh.createElement("g",{clipPath:"url(#eN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M75.746 78.867V59.164h.3l-.1 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m75.945 78.867.102-19.703h.3l-.1 19.703zm0 0"}))),Qn||(Qn=Dh.createElement("path",{className:"clip-1",d:"M-.001.001v17.7L3.1 15.9V-1.8zm0 0",transform:"matrix(1 0 0 -1 73.146 76.966)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M.002.002v17.7l3.097-1.7 46 26.598L102.9 11.502V-6.201L59.9-31.1v-3.5zm0 0",transform:"matrix(1 0 0 -1 16.346 44.166)"}),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#000",fillOpacity:1,strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001V31.4l13.6-7.9V-7.8zm0 0",transform:"matrix(1 0 0 -1 93.946 70.966)"}),Dh.createElement("g",{clipPath:"url(#eO)"},Dh.createElement("g",{clipPath:"url(#eP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.945 76.164V63.066h.7v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eQ)"},Dh.createElement("g",{clipPath:"url(#eR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eS)"},Dh.createElement("g",{clipPath:"url(#eT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eU)"},Dh.createElement("g",{clipPath:"url(#eV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eW)"},Dh.createElement("g",{clipPath:"url(#eX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.848 76.164V63.066h.199v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eY)"},Dh.createElement("g",{clipPath:"url(#eZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fa)"},Dh.createElement("g",{clipPath:"url(#fb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fc)"},Dh.createElement("g",{clipPath:"url(#fd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fe)"},Dh.createElement("g",{clipPath:"url(#ff)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.848 76.164V63.066h.199v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fg)"},Dh.createElement("g",{clipPath:"url(#fh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fi)"},Dh.createElement("g",{clipPath:"url(#fj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fk)"},Dh.createElement("g",{clipPath:"url(#fl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fm)"},Dh.createElement("g",{clipPath:"url(#fn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 76.164V63.066h.297v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fo)"},Dh.createElement("g",{clipPath:"url(#fp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 76.164V63.066h.203v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fq)"},Dh.createElement("g",{clipPath:"url(#fr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fs)"},Dh.createElement("g",{clipPath:"url(#ft)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-8.7l-7.5 4.4V4.4zm0 0",transform:"matrix(1 0 0 -1 104.446 67.466)"}),Un||(Un=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 76.166)"})),Xn||(Xn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 74.466)"})),qn||(qn=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 72.666)"})),Yn||(Yn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 70.966)"})),Jn||(Jn=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 69.166)"})),Kn||(Kn=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 67.466)"})),_n||(_n=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 65.766)"})),$n||($n=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 63.966)"})),ei||(ei=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 62.266)"})),ti||(ti=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 60.466)"})),li||(li=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 58.766)"})),ai||(ai=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 56.966)"})),ci||(ci=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 55.266)"})),ri||(ri=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.801",transform:"matrix(1 0 0 -1 105.946 53.566)"})),ni||(ni=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 51.766)"})),ii||(ii=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.801",transform:"matrix(1 0 0 -1 105.946 50.066)"})),Dh.createElement("g",{clipPath:"url(#fu)"},Dh.createElement("g",{clipPath:"url(#fv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.848 65.766v-13.2h.797v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fw)"},Dh.createElement("g",{clipPath:"url(#fx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fy)"},Dh.createElement("g",{clipPath:"url(#fz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fA)"},Dh.createElement("g",{clipPath:"url(#fB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 65.766v-13.2h.2v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.445 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fC)"},Dh.createElement("g",{clipPath:"url(#fD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.746 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fE)"},Dh.createElement("g",{clipPath:"url(#fF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fG)"},Dh.createElement("g",{clipPath:"url(#fH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fI)"},Dh.createElement("g",{clipPath:"url(#fJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 65.766v-13.2h.2v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fK)"},Dh.createElement("g",{clipPath:"url(#fL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.746 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fM)"},Dh.createElement("g",{clipPath:"url(#fN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fO)"},Dh.createElement("g",{clipPath:"url(#fP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fQ)"},Dh.createElement("g",{clipPath:"url(#fR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fS)"},Dh.createElement("g",{clipPath:"url(#fT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 65.766v-13.2h.297v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fU)"},Dh.createElement("g",{clipPath:"url(#fV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 65.766v-13.2h.203v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fW)"},Dh.createElement("g",{clipPath:"url(#fX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fY)"},Dh.createElement("g",{clipPath:"url(#fZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-8.7L-7.5-4.4v8.703zm0 0",transform:"matrix(1 0 0 -1 104.446 56.966)"}),Dh.createElement("g",{clipPath:"url(#ga)"},Dh.createElement("g",{clipPath:"url(#gb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.945 55.266V42.164h.7v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gc)"},Dh.createElement("g",{clipPath:"url(#gd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ge)"},Dh.createElement("g",{clipPath:"url(#gf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gg)"},Dh.createElement("g",{clipPath:"url(#gh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gi)"},Dh.createElement("g",{clipPath:"url(#gj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.848 55.266V42.164h.199v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gk)"},Dh.createElement("g",{clipPath:"url(#gl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gm)"},Dh.createElement("g",{clipPath:"url(#gn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#go)"},Dh.createElement("g",{clipPath:"url(#gp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gq)"},Dh.createElement("g",{clipPath:"url(#gr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.848 55.266V42.164h.199v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gs)"},Dh.createElement("g",{clipPath:"url(#gt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gu)"},Dh.createElement("g",{clipPath:"url(#gv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gw)"},Dh.createElement("g",{clipPath:"url(#gx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gy)"},Dh.createElement("g",{clipPath:"url(#gz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 55.266V42.164h.297v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gA)"},Dh.createElement("g",{clipPath:"url(#gB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 55.266V42.164h.203v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gC)"},Dh.createElement("g",{clipPath:"url(#gD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gE)"},Dh.createElement("g",{clipPath:"url(#gF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v-8.7l-7.5 4.4v8.703zm0 0",transform:"matrix(1 0 0 -1 104.446 46.566)"}),mi||(mi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 48.266)"})),di||(di=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 105.946 46.566)"})),hi||(hi=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 77.966)"})),pi||(pi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 70.066)"})),oi||(oi=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 68.366)"})),si||(si=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 66.566)"})),Ei||(Ei=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 64.866)"})),vi||(vi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 63.066)"})),fi||(fi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 61.366)"})),ui||(ui=Dh.createElement("path",{className:"clip-1",d:"M0 .002v-.8",transform:"matrix(1 0 0 -1 95.446 59.666)"})),yi||(yi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 57.866)"})),zi||(zi=Dh.createElement("path",{className:"clip-1",d:"M0 .002v-.8",transform:"matrix(1 0 0 -1 95.446 56.166)"})),ki||(ki=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 54.366)"})),Pi||(Pi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 52.666)"})),bi||(bi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 50.866)"})),Mi||(Mi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 49.166)"})),gi||(gi=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 95.446 47.466)"})),Ri||(Ri=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 45.666)"})),xi||(xi=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 95.446 43.966)"})),Hi||(Hi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 42.166)"})),Oi||(Oi=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 95.446 40.466)"})),Ni||(Ni=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 71.866)"})),Dh.createElement("g",{className:"black","data-tcolor":"black",style:{fillOpacity:1}},Vi||(Vi=Dh.createElement("use",{xlinkHref:"#gG",x:40.446,y:109.066})),wi||(wi=Dh.createElement("use",{xlinkHref:"#gH",x:49.932,y:109.066})),Li||(Li=Dh.createElement("use",{xlinkHref:"#gI",x:58.536,y:109.066})),Ci||(Ci=Dh.createElement("use",{xlinkHref:"#gJ",x:65.628,y:109.066})),Ai||(Ai=Dh.createElement("use",{xlinkHref:"#gH",x:75.42,y:109.066})),Fi||(Fi=Dh.createElement("use",{xlinkHref:"#gI",x:84.096,y:109.066}))),ji||(ji=Dh.createElement("path",{className:"thread-box sblack","data-tcolor":"sblack",d:"M-.001 0c-4.5 0-9-4.5-9-9v-35.898c0-4.5 4.5-9 9-9h163.5c4.5 0 9 4.5 9 9V-9c0 4.5-4.5 9-9 9zm0 0",transform:"matrix(1 0 0 -1 371.146 32.766)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Ti||(Ti=Dh.createElement("use",{xlinkHref:"#gG",x:378.846,y:66.466})),Ii||(Ii=Dh.createElement("use",{xlinkHref:"#gK",x:388.332,y:66.466})),Wi||(Wi=Dh.createElement("use",{xlinkHref:"#gL",x:399.132,y:66.466})),Si||(Si=Dh.createElement("use",{xlinkHref:"#gM",x:409.032,y:66.466})),Di||(Di=Dh.createElement("use",{xlinkHref:"#gN",x:415.026,y:66.466})),Zi||(Zi=Dh.createElement("use",{xlinkHref:"#gO",x:420.912,y:66.466})),Gi||(Gi=Dh.createElement("use",{xlinkHref:"#gI",x:431.316,y:66.466})),Bi||(Bi=Dh.createElement("use",{xlinkHref:"#gH",x:438.408,y:66.466})),Qi||(Qi=Dh.createElement("use",{xlinkHref:"#gP",x:447.084,y:66.466})),Ui||(Ui=Dh.createElement("use",{xlinkHref:"#gQ",x:456.084,y:66.466})),Xi||(Xi=Dh.createElement("use",{xlinkHref:"#gR",x:467.064,y:66.466})),qi||(qi=Dh.createElement("use",{xlinkHref:"#gS",x:471.654,y:66.466})),Yi||(Yi=Dh.createElement("use",{xlinkHref:"#gT",x:476.154,y:66.466})),Ji||(Ji=Dh.createElement("use",{xlinkHref:"#gI",x:492.858,y:66.466})),Ki||(Ki=Dh.createElement("use",{xlinkHref:"#gU",x:499.95,y:66.466})),_i||(_i=Dh.createElement("use",{xlinkHref:"#gN",x:505.224,y:66.466})),$i||($i=Dh.createElement("use",{xlinkHref:"#gH",x:511.02,y:66.466})),em||(em=Dh.createElement("use",{xlinkHref:"#gI",x:519.696,y:66.466}))),tm||(tm=Dh.createElement("path",{className:"line-1 sblack","data-tcolor":"sblack",d:"M.002 0h117.097v.102H219.9",transform:"matrix(1 0 0 -1 126.846 59.766)"})),lm||(lm=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m362.145 59.664-16.098-5.297v10.7zm0 0"})),am||(am=Dh.createElement("path",{className:"line-4 sblack","data-tcolor":"sblack",d:"M.002.002V-22.9h21.297v-8.098",transform:"matrix(1 0 0 -1 452.846 86.666)"})),cm||(cm=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m474.145 131.965 5-15h-10zm0 0"})),rm||(rm=Dh.createElement("path",{className:"thread-box sblack","data-tcolor":"sblack",d:"M-.001 0C-4.501 0-8.9-4.4-8.9-8.9v-36c0-4.4 4.4-8.9 8.9-8.9h165.6c4.399 0 8.899 4.5 8.899 8.902v36c0 4.5-4.5 8.899-8.899 8.899zm0 0",transform:"matrix(1 0 0 -1 179.146 225.566)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},nm||(nm=Dh.createElement("use",{xlinkHref:"#gV",x:179.246,y:259.266})),im||(im=Dh.createElement("use",{xlinkHref:"#gP",x:196.238,y:259.266})),mm||(mm=Dh.createElement("use",{xlinkHref:"#gU",x:205.328,y:259.266})),dm||(dm=Dh.createElement("use",{xlinkHref:"#gW",x:210.53,y:259.266})),hm||(hm=Dh.createElement("use",{xlinkHref:"#gM",x:221.006,y:259.266})),pm||(pm=Dh.createElement("use",{xlinkHref:"#gN",x:227,y:259.266})),om||(om=Dh.createElement("use",{xlinkHref:"#gO",x:232.796,y:259.266})),sm||(sm=Dh.createElement("use",{xlinkHref:"#gI",x:243.272,y:259.266})),Em||(Em=Dh.createElement("use",{xlinkHref:"#gH",x:250.274,y:259.266})),vm||(vm=Dh.createElement("use",{xlinkHref:"#gP",x:258.95,y:259.266})),fm||(fm=Dh.createElement("use",{xlinkHref:"#gQ",x:267.95,y:259.266})),um||(um=Dh.createElement("use",{xlinkHref:"#gR",x:278.93,y:259.266})),ym||(ym=Dh.createElement("use",{xlinkHref:"#gS",x:283.52,y:259.266})),zm||(zm=Dh.createElement("use",{xlinkHref:"#gX",x:288.11,y:259.266})),km||(km=Dh.createElement("use",{xlinkHref:"#gH",x:300.116,y:259.266})),Pm||(Pm=Dh.createElement("use",{xlinkHref:"#gP",x:308.72,y:259.266})),bm||(bm=Dh.createElement("use",{xlinkHref:"#gQ",x:317.72,y:259.266})),Mm||(Mm=Dh.createElement("use",{xlinkHref:"#gH",x:328.7,y:259.266})),gm||(gm=Dh.createElement("use",{xlinkHref:"#gI",x:337.376,y:259.266}))),Rm||(Rm=Dh.createElement("path",{className:"line-3 sred","data-tcolor":"sred",d:"M0 0h54.3",transform:"matrix(1 0 0 -1 498.246 109.266)"})),xm||(xm=Dh.createElement("path",{className:"arrow red","data-tcolor":"red",d:"M551.746 115.266v-11.899l31.5 5.899zm0 0"})),Hm||(Hm=Dh.createElement("path",{className:"line-4 sblack","data-tcolor":"sblack",d:"M0 0v24.3h-.4v9.602",transform:"matrix(1 0 0 -1 261.946 225.566)"})),Om||(Om=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m261.547 177.367-5 14.899h10zm0 0"})),Nm||(Nm=Dh.createElement("path",{className:"line-3 sred","data-tcolor":"sred",d:"M0 .001h54.3",transform:"matrix(1 0 0 -1 279.946 208.466)"})),Vm||(Vm=Dh.createElement("path",{className:"arrow red","data-tcolor":"red",d:"M333.445 214.465v-11.899l31.602 5.899zm0 0"})),wm||(wm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-.7c-1.5 0-3-.6-4.3-1.5",transform:"matrix(1 0 0 -1 237.746 117.766)"})),Lm||(Lm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c-.5-1.098-.8-2.2-.8-3.301V-4.4",transform:"matrix(1 0 0 -1 229.746 122.566)"})),Cm||(Cm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v-4.5",transform:"matrix(1 0 0 -1 228.946 131.466)"})),Am||(Am=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001V-4.6",transform:"matrix(1 0 0 -1 228.946 140.466)"})),Fm||(Fm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v-4.5",transform:"matrix(1 0 0 -1 228.946 149.566)"})),jm||(jm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002v-4.5",transform:"matrix(1 0 0 -1 228.946 158.666)"})),Tm||(Tm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002v-4.5",transform:"matrix(1 0 0 -1 228.946 167.666)"})),Im||(Im=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002V-4.6",transform:"matrix(1 0 0 -1 228.946 176.666)"})),Wm||(Wm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v-.5c0-1.3.401-2.6 1.1-3.8",transform:"matrix(1 0 0 -1 228.946 185.766)"})),Sm||(Sm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c1.2-.699 2.5-1.1 3.8-1.1h.5",transform:"matrix(1 0 0 -1 233.246 193.266)"})),Dm||(Dm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.6",transform:"matrix(1 0 0 -1 242.046 194.366)"})),Zm||(Zm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 251.146 194.366)"})),Gm||(Gm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 260.146 194.366)"})),Bm||(Bm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 269.246 194.366)"})),Qm||(Qm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 278.246 194.366)"})),Um||(Um=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 287.346 194.366)"})),Xm||(Xm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 296.346 194.366)"})),qm||(qm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.597",transform:"matrix(1 0 0 -1 305.346 194.366)"})),Ym||(Ym=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 314.446 194.366)"})),Jm||(Jm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 323.546 194.366)"})),Km||(Km=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 332.546 194.366)"})),_m||(_m=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 341.546 194.366)"})),$m||($m=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 350.646 194.366)"})),ed||(ed=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001H4.6",transform:"matrix(1 0 0 -1 359.646 194.366)"})),td||(td=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 368.746 194.366)"})),ld||(ld=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 377.746 194.366)"})),ad||(ad=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 386.846 194.366)"})),cd||(cd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 395.846 194.366)"})),rd||(rd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 404.946 194.366)"})),nd||(nd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 413.946 194.366)"})),id||(id=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 423.046 194.366)"})),md||(md=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 432.046 194.366)"})),dd||(dd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.6",transform:"matrix(1 0 0 -1 441.046 194.366)"})),hd||(hd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h.3c1.403 0 2.801.402 4 1.203",transform:"matrix(1 0 0 -1 450.146 194.366)"})),pd||(pd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001C.6 1.1 1 2.4 1 3.6v.7",transform:"matrix(1 0 0 -1 457.546 189.866)"})),od||(od=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v4.6",transform:"matrix(1 0 0 -1 458.546 181.066)"})),sd||(sd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v4.5",transform:"matrix(1 0 0 -1 458.546 171.966)"})),Ed||(Ed=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v4.5",transform:"matrix(1 0 0 -1 458.546 162.966)"})),vd||(vd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001v4.5",transform:"matrix(1 0 0 -1 458.546 153.866)"})),fd||(fd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001v4.5",transform:"matrix(1 0 0 -1 458.546 144.866)"})),ud||(ud=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v4.5",transform:"matrix(1 0 0 -1 458.546 135.766)"})),yd||(yd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v.9c0 1.202-.3 2.4-.9 3.499",transform:"matrix(1 0 0 -1 458.546 126.766)"})),zd||(zd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c-1.198.8-2.698 1.3-4.1 1.3h-.2",transform:"matrix(1 0 0 -1 454.546 119.066)"})),kd||(kd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 445.746 117.766)"})),Pd||(Pd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 436.746 117.766)"})),bd||(bd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 427.646 117.766)"})),Md||(Md=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 418.646 117.766)"})),gd||(gd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 409.546 117.766)"})),Rd||(Rd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 400.546 117.766)"})),xd||(xd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.6",transform:"matrix(1 0 0 -1 391.546 117.766)"})),Hd||(Hd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 382.446 117.766)"})),Od||(Od=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 373.346 117.766)"})),Nd||(Nd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 364.346 117.766)"})),Vd||(Vd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0H-4.6",transform:"matrix(1 0 0 -1 355.346 117.766)"})),wd||(wd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 346.246 117.766)"})),Ld||(Ld=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.6",transform:"matrix(1 0 0 -1 337.246 117.766)"})),Cd||(Cd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 328.146 117.766)"})),Ad||(Ad=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 319.146 117.766)"})),Fd||(Fd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 310.046 117.766)"})),jd||(jd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 301.046 117.766)"})),Td||(Td=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 291.946 117.766)"})),Id||(Id=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 282.946 117.766)"})),Wd||(Wd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 273.846 117.766)"})),Sd||(Sd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 264.846 117.766)"})),Dd||(Dd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 255.746 117.766)"})),Zd||(Zd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 246.746 117.766)"})),Dh.createElement("g",{className:"black","data-tcolor":"black",style:{fillOpacity:1}},Gd||(Gd=Dh.createElement("use",{xlinkHref:"#gX",x:392.546,y:222.366})),Bd||(Bd=Dh.createElement("use",{xlinkHref:"#gH",x:404.552,y:222.366})),Qd||(Qd=Dh.createElement("use",{xlinkHref:"#gP",x:413.156,y:222.366})),Ud||(Ud=Dh.createElement("use",{xlinkHref:"#gQ",x:422.156,y:222.366})),Xd||(Xd=Dh.createElement("use",{xlinkHref:"#gS",x:433.244,y:222.366})),qd||(qd=Dh.createElement("use",{xlinkHref:"#gX",x:437.744,y:222.366})),Yd||(Yd=Dh.createElement("use",{xlinkHref:"#gH",x:449.75,y:222.366})),Jd||(Jd=Dh.createElement("use",{xlinkHref:"#gY",x:458.426,y:222.366})),Kd||(Kd=Dh.createElement("use",{xlinkHref:"#gU",x:468.326,y:222.366})),_d||(_d=Dh.createElement("use",{xlinkHref:"#gZ",x:473.6,y:222.366})),$d||($d=Dh.createElement("use",{xlinkHref:"#gW",x:483.392,y:222.366}))),Dh.createElement("path",{className:"line-2 sblue","data-tcolor":"sblue",d:"M0 .002V-25.9",transform:"matrix(1 0 0 -1 240.246 69.666)",style:{fill:"none",strokeWidth:2.292,strokeLinecap:"butt",strokeLinejoin:"round",strokeOpacity:1,strokeMiterlimit:10,stroke:"#00c"}}),eh||(eh=Dh.createElement("path",{className:"arrow blue","data-tcolor":"blue",d:"M234.348 94.766h11.898l-6 31.5zm0 0"})),Dh.createElement("g",{className:"blue","data-tcolor":"blue",style:{fillOpacity:1}},th||(th=Dh.createElement("use",{xlinkHref:"#ha",x:111.846,y:95.566})),lh||(lh=Dh.createElement("use",{xlinkHref:"#hb",x:121.638,y:95.566})),ah||(ah=Dh.createElement("use",{xlinkHref:"#hc",x:126.23,y:95.566})),ch||(ch=Dh.createElement("use",{xlinkHref:"#hb",x:140.326,y:95.566})),rh||(rh=Dh.createElement("use",{xlinkHref:"#hd",x:145.014,y:95.566})),nh||(nh=Dh.createElement("use",{xlinkHref:"#he",x:150.118,y:95.566})),ih||(ih=Dh.createElement("use",{xlinkHref:"#hf",x:157.798,y:95.566})),mh||(mh=Dh.createElement("use",{xlinkHref:"#hg",x:167.494,y:95.566})),dh||(dh=Dh.createElement("use",{xlinkHref:"#hh",x:171.494,y:95.566})),hh||(hh=Dh.createElement("use",{xlinkHref:"#hi",x:180.598,y:95.566})),ph||(ph=Dh.createElement("use",{xlinkHref:"#hj",x:189.382,y:95.566})),oh||(oh=Dh.createElement("use",{xlinkHref:"#hb",x:196.086,y:95.566})),sh||(sh=Dh.createElement("use",{xlinkHref:"#hd",x:200.774,y:95.566})),Eh||(Eh=Dh.createElement("use",{xlinkHref:"#hb",x:205.878,y:95.566})),vh||(vh=Dh.createElement("use",{xlinkHref:"#hi",x:210.566,y:95.566})),fh||(fh=Dh.createElement("use",{xlinkHref:"#hk",x:219.35,y:95.566})),uh||(uh=Dh.createElement("use",{xlinkHref:"#hi",x:134.446,y:117.066})),yh||(yh=Dh.createElement("use",{xlinkHref:"#hl",x:143.15,y:117.066})),zh||(zh=Dh.createElement("use",{xlinkHref:"#hg",x:148.446,y:117.066})),kh||(kh=Dh.createElement("use",{xlinkHref:"#hm",x:152.446,y:117.066})),Ph||(Ph=Dh.createElement("use",{xlinkHref:"#hn",x:167.15,y:117.066})),bh||(bh=Dh.createElement("use",{xlinkHref:"#hb",x:173.534,y:117.066})),Mh||(Mh=Dh.createElement("use",{xlinkHref:"#hd",x:178.222,y:117.066})),gh||(gh=Dh.createElement("use",{xlinkHref:"#hb",x:183.326,y:117.066})),Rh||(Rh=Dh.createElement("use",{xlinkHref:"#hk",x:188.014,y:117.066})),xh||(xh=Dh.createElement("use",{xlinkHref:"#ho",x:197.214,y:117.066}))),Dh.createElement("path",{className:"obj-box sblack","data-tcolor":"sblack",d:"M-.001 0c-4.5 0-9-4.399-9-8.899v-36c0-4.402 4.5-8.902 9-8.902h106c4.5 0 9 4.5 9 8.902v36c0 4.5-4.5 8.899-9 8.899zm0 0",transform:"matrix(1 0 0 -1 11.146 225.566)",style:{fillRule:"evenodd",fill:"#cff",fillOpacity:1,strokeWidth:2.292,strokeLinecap:"butt",strokeLinejoin:"round",strokeOpacity:1,strokeMiterlimit:10}}),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Hh||(Hh=Dh.createElement("use",{xlinkHref:"#hp",x:10.746,y:259.266})),Oh||(Oh=Dh.createElement("use",{xlinkHref:"#hq",x:21.834,y:259.266})),Nh||(Nh=Dh.createElement("use",{xlinkHref:"#gN",x:31.032,y:259.266})),Vh||(Vh=Dh.createElement("use",{xlinkHref:"#gI",x:36.918,y:259.266})),wh||(wh=Dh.createElement("use",{xlinkHref:"#gP",x:44.01,y:259.266})),Lh||(Lh=Dh.createElement("use",{xlinkHref:"#hr",x:53.01,y:259.266})),Ch||(Ch=Dh.createElement("use",{xlinkHref:"#gN",x:60.984,y:259.266})),Ah||(Ah=Dh.createElement("use",{xlinkHref:"#hs",x:66.87,y:259.266})),Fh||(Fh=Dh.createElement("use",{xlinkHref:"#gI",x:76.878,y:259.266})),jh||(jh=Dh.createElement("use",{xlinkHref:"#gP",x:83.88,y:259.266})),Th||(Th=Dh.createElement("use",{xlinkHref:"#ht",x:92.88,y:259.266})),Ih||(Ih=Dh.createElement("use",{xlinkHref:"#gH",x:108.756,y:259.266}))),Wh||(Wh=Dh.createElement("path",{className:"line-1 sblack","data-tcolor":"sblack",d:"M0 .001h-28.8",transform:"matrix(1 0 0 -1 170.246 252.466)"})),Sh||(Sh=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m126.145 252.465 16.101 5.402v-10.8zm0 0"})))}},8793:function(e,t,l){var a=l(7294),c=l(9960),r=l(1954),n=l(2949);t.Z=function(e){var t=(0,a.useState)(!1),l=t[0],i=t[1];(0,a.useEffect)((function(){i(!0)}),[]);var m,d,h,p=(m=(0,n.I)(),d=m.colorMode,m.setColorMode,"dark"===d?"button--secondary button--outline":"button--secondary");return h=e.index?"button "+p+" button--lg button--index":"button "+p+" button--lg",a.createElement(c.Z,{key:String(l),className:h,to:e.to},e.icon&&a.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},7380:function(e,t,l){l.r(t),l.d(t,{assets:function(){return E},contentTitle:function(){return o},default:function(){return u},frontMatter:function(){return p},metadata:function(){return s},toc:function(){return v}});var a=l(3117),c=l(102),r=(l(7294),l(3905)),n=l(8793),i=l(541),m=l(36),d=l(2986),h=["components"],p={id:"client",title:"Pulling a video stream",sidebar_label:"Client",slug:"/examples/client",description:"Example codes for pulling a stream on the client side."},o=void 0,s={unversionedId:"guides/examples/client",id:"version-3.1.0/guides/examples/client",title:"Pulling a video stream",description:"Example codes for pulling a stream on the client side.",source:"@site/versioned_docs/version-3.1.0/guides/examples/client.mdx",sourceDirName:"guides/examples",slug:"/examples/client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/client",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/examples/client.mdx",tags:[],version:"3.1.0",frontMatter:{id:"client",title:"Pulling a video stream",sidebar_label:"Client",slug:"/examples/client",description:"Example codes for pulling a stream on the client side."},sidebar:"version-3.1.0/docs",previous:{title:"Transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/transcoding"},next:{title:"Server",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/server"}},E={},v=[{value:"Introduction",id:"introduction",level:2},{value:"Codes",id:"codes",level:2},{value:"Examples on Github",id:"examples-on-github",level:2}],f={toc:v};function u(e){var t=e.components,l=(0,c.Z)(e,h);return(0,r.kt)("wrapper",(0,a.Z)({},f,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"The following figure show the theory of ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegClient"),". Assuming that we have a video server from the remote side, the real-time stream is pushed continuously. Even we do not read the online stream, the data flow would not wait for reading. Therefore, we design the following two-thread workflow."),(0,r.kt)("p",null,(0,r.kt)(d.Z,{className:"themeColor",mdxType:"ClientSvg"})),(0,r.kt)("p",null,"When connecting to the remote server, ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient"),' would create a sub-thread ("',(0,r.kt)("em",{parentName:"p"},"writer"),'" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two cursors maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting cursor is kept stepping each time a new frame is received.'),(0,r.kt)("p",null,"The reading events would be triggered by the Python-C-API. When a new reading event comes from the main thread, the reader would lock the current position of the reading cursor, and read several frames from the buffer. After the reading results are collected, the lock would be released, and the reading cursor will be reset to the end of the read frames. When the writer is writing a new frame, the current written position will also be locked by the writer. A locked position would not be updated. For example, during the reading events, if the writting cursor moves to the locked position, the writer will wait until the reading is finished. Because the reading events are merely data-collecting operations, in most cases the reading events would not block the writer. If the writer is blocked for too long, the demuxing of the online stream may fail. So we recommend users to set a rational buffer size. For example, if we always read 5 frames each time, the buffer size is recommended to be double of the reading size, i.e. 10."),(0,r.kt)("h2",{id:"codes"},"Codes"),(0,r.kt)("p",null,"To test the following codes, we recommend users to use ",(0,r.kt)("a",{parentName:"p",href:"https://www.videolan.org/vlc/streaming.html",title:"VLC used for streaming"},"VLC",(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," or ",(0,r.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg",(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," to push a remote stream, because the stream pushing without encoding is not supported by ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," currently. Using VLC or FFMpeg to serve the stream will occupy less system resources."),(0,r.kt)("p",null,"The following example codes would scale the remote frame to 480x360, and resample the frame rate to 5 FPS. The reading size and the buffer size are ",(0,r.kt)("inlineCode",{parentName:"p"},"5")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"12")," respectively."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'{9,15,19,22-24,26-27} title="client.py"',"{9,15,19,22-24,26-27}":!0,title:'"client.py"'},"import os, sys\nimport time\nimport mpegCoder\nmpegCoder.setGlobal(dumpLevel=2) # show full log.\n\nif __name__ == '__main__':\n d = mpegCoder.MpegClient() # create the handle.\n d.setParameter(widthDst=480, heightDst=360, dstFrameRate=(5,1), readSize=5, cacheSize=12) # do basic settings.\n success = d.FFmpegSetup('rtsp://localhost:8554/video') # connect with the server.\n print(d)\n\n if not success: # exit the program if the server is not available. You could delete this checking and see what will happen.\n exit()\n\n d.start() # start the sub-thread for demuxing the stream.\n\n time.sleep(5) # wait for getting some frames.\n print('Get slept')\n p = d.ExtractFrame() # extract some frames from current cache.\n print(p.shape) # show information of extracted frames.\n\n for i in range(10): # wait for 50 seconds.\n time.sleep(5)\n p = d.ExtractFrame() # extract some frames from current cache.\n \n d.terminate() # shut down the current sub-thread. You could call start() and let it restart.\n d.clear() # but here we would like to clear the handle and exit.\n")),(0,r.kt)("p",null,"After configuring the client, the codes contain the following key steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.FFmpegSetup()")," accepts a video stream address. The stream type would be detected from the protocol automacially. Currently, we support ",(0,r.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"ftp"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sftp"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"rtsp"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"rtmp"),". Note that only ",(0,r.kt)("inlineCode",{parentName:"p"},"rtsp")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"rtmp")," should be used for analyzing the real-time stream. The ",(0,r.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"ftp")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"sftp")," protocols are mostly used for data transfer. This method will launch a connect to the remote server.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"When ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.start()"),' is called, the sub-thread "',(0,r.kt)("em",{parentName:"p"},"writer"),'" will be created.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Using ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.ExtractFrame()")," to get the real-time data. The returned frame number is given by ",(0,r.kt)("inlineCode",{parentName:"p"},"readSize")," during the configuration. However, user could override the configurtion by using an argument, for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"ExtractFrame(4)")," would force the reader to read 4 frames.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If the remote stream is closed, ",(0,r.kt)("inlineCode",{parentName:"p"},"d.ExtractFrame()")," would return ",(0,r.kt)("inlineCode",{parentName:"p"},"None"),". However, user would terminate the client in any time. The method ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.terminate()")," would stop the writing thread. But the connection would not be aborted until ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.clear()")," is called."))),(0,r.kt)("h2",{id:"examples-on-github"},"Examples on Github"),(0,r.kt)("p",null,"On Github, we provide the above example as a single branch."),(0,r.kt)("p",null,(0,r.kt)(n.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-check",icon:m.Z,mdxType:"DarkButton"},"Demuxing Checking Program")),(0,r.kt)("p",null,"In addition, we provide another example. This example is a simple video stream player based on ",(0,r.kt)("a",{parentName:"p",href:"https://www.riverbankcomputing.com/software/pyqt",title:"PyQt5"},(0,r.kt)("inlineCode",{parentName:"a"},"PyQt5"),(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."),(0,r.kt)("p",null,(0,r.kt)(n.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-player",icon:m.Z,mdxType:"DarkButton"},"Video Stream Player")))}u.isMDXComponent=!0},36:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/3a1913d6.a9897b0e.js b/assets/js/3a1913d6.a9897b0e.js new file mode 100644 index 0000000..7e6cdc9 --- /dev/null +++ b/assets/js/3a1913d6.a9897b0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7214],{7407:function(e,n,o){o.r(n),o.d(n,{assets:function(){return l},contentTitle:function(){return p},default:function(){return u},frontMatter:function(){return c},metadata:function(){return s},toc:function(){return m}});var t=o(3117),d=o(102),i=(o(7294),o(3905)),r=o(541),a=["components"],c={id:"decoding",title:"Decoding a video",sidebar_label:"Decoding",slug:"/examples/decoding",description:"Example codes for decoding a video."},p=void 0,s={unversionedId:"guides/examples/decoding",id:"version-3.2.x/guides/examples/decoding",title:"Decoding a video",description:"Example codes for decoding a video.",source:"@site/versioned_docs/version-3.2.x/guides/examples/decoding.mdx",sourceDirName:"guides/examples",slug:"/examples/decoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/decoding",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/guides/examples/decoding.mdx",tags:[],version:"3.2.x",frontMatter:{id:"decoding",title:"Decoding a video",sidebar_label:"Decoding",slug:"/examples/decoding",description:"Example codes for decoding a video."},sidebar:"docs",previous:{title:"Examples",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/examples"},next:{title:"Transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/transcoding"}},l={},m=[{value:"Decoder rescaling",id:"decoder-rescaling",level:2}],g={toc:m};function u(e){var n=e.components,o=(0,d.Z)(e,a);return(0,i.kt)("wrapper",(0,t.Z)({},g,o,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The following codes will demux, decode and iterate a video file. The video could be in any valid format. The ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegDecoder")," could recognize the video codec automatically."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:'{7,8} title="decoding.py" showLineNumbers',"{7,8}":!0,title:'"decoding.py"',showLineNumbers:!0},"import mpegCoder\n\nd = mpegCoder.MpegDecoder()\nopened = d.FFmpegSetup('test-video.mp4')\nif opened: # If encoder is not loaded successfully, do not continue.\n gop = True\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\nd.clear() # Close the input video.\n")),(0,i.kt)("p",null,"In each while loop, a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of pictures (GOP)",(0,i.kt)(r.Z,{mdxType:"IconExternalLink"}))," would be extracted. The GOP is a collection of video frames, and also the minimal data unit of the video compression algorithm. In ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", the GOP is arranged as a 4D ",(0,i.kt)("a",{parentName:"p",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(r.Z,{mdxType:"IconExternalLink"})),". The shape ",(0,i.kt)("inlineCode",{parentName:"p"},"(N, H, W, C)")," means frame number, height, width, and channel number respectively. Each frame has been converted to RGB (",(0,i.kt)("inlineCode",{parentName:"p"},"uint8"),") space. If the video reaches its end, the returned ",(0,i.kt)("inlineCode",{parentName:"p"},"gop")," would be ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),"."),(0,i.kt)("h2",{id:"decoder-rescaling"},"Decoder rescaling"),(0,i.kt)("p",null,"Users could configure ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and scale the video frames. For example, the following codes would scale the frame to 720x486, no matter which picture size the video file is."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\nd = mpegCoder.MpegDecoder()\nd.setParameter(widthDst=720, heightDst=486)\nopened = d.FFmpegSetup('test-video.mp4')\n...\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3e94fd6d.b955504b.js b/assets/js/3e94fd6d.b955504b.js new file mode 100644 index 0000000..fc4d456 --- /dev/null +++ b/assets/js/3e94fd6d.b955504b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7660],{8793:function(e,t,n){var a=n(7294),r=n(9960),o=n(1954),i=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],l=t[1];(0,a.useEffect)((function(){l(!0)}),[]);var d,p,m,s=(d=(0,i.I)(),p=d.colorMode,d.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+s+" button--lg button--index":"button "+s+" button--lg",a.createElement(r.Z,{key:String(n),className:m,to:e.to},e.icon&&a.createElement(o.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},4616:function(e,t,n){n.r(t),n.d(t,{assets:function(){return u},contentTitle:function(){return k},default:function(){return f},frontMatter:function(){return c},metadata:function(){return h},toc:function(){return g}});var a=n(3117),r=n(102),o=(n(7294),n(3905)),i=n(8793),l=n(541),d=n(5514),p=n(7225),m=n(866),s=["components"],c={id:"windows",title:"Installation for Windows",sidebar_label:"Windows",slug:"/installation/windows",description:"A tutorial about the installation or compilation of the package for Windows."},k=void 0,h={unversionedId:"guides/install/windows",id:"version-3.1.0/guides/install/windows",title:"Installation for Windows",description:"A tutorial about the installation or compilation of the package for Windows.",source:"@site/versioned_docs/version-3.1.0/guides/install/windows.mdx",sourceDirName:"guides/install",slug:"/installation/windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/windows",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/install/windows.mdx",tags:[],version:"3.1.0",frontMatter:{id:"windows",title:"Installation for Windows",sidebar_label:"Windows",slug:"/installation/windows",description:"A tutorial about the installation or compilation of the package for Windows."},sidebar:"version-3.1.0/docs",previous:{title:"PyPI",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/pypi"},next:{title:"Linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/linux"}},u={},g=[{value:"Install the pre-compiled module",id:"install-the-pre-compiled-module",level:2},{value:"Download mpegCoder",id:"download-mpegcoder",level:3},{value:"Install Numpy",id:"install-numpy",level:3},{value:"Download dependencies",id:"download-dependencies",level:3},{value:"Import",id:"import",level:3},{value:"Compile the module",id:"compile-the-module",level:2}],N={toc:g};function f(e){var t=e.components,n=(0,r.Z)(e,s);return(0,o.kt)("wrapper",(0,a.Z)({},N,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This guide contains steps for installing or compiling the ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," module manually. We recommend users who need to use ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," in a project locally to install the package by this way."),(0,o.kt)("h2",{id:"install-the-pre-compiled-module"},"Install the pre-compiled module"),(0,o.kt)("h3",{id:"download-mpegcoder"},"Download ",(0,o.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,o.kt)("p",null,"First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,o.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,o.kt)("th",{parentName:"tr",align:"center"},"VS"),(0,o.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py39.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"4.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.21.1")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.9.6")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2019 (v142)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 10 21H1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py38.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"4.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.21.1")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.8.10")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2019 (v142)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 10 21H1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py37.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"4.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.21.1")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.7.10")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2019 (v142)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 10 21H1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py36.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"4.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.19.5")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.6.13")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2019 (v142)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 10 21H1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py35.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"4.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.15.2")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.5.5")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2019 (v142)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 10 21H1"))))),(0,o.kt)("p",null,"After extracting the tarball, we could get ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd"),"."),(0,o.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"Note that the above versions only show the environment when building ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". It does not mean that they are the dependencies of running ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". For example, users could use ",(0,o.kt)("inlineCode",{parentName:"p"},"python 3.9.5")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"numpy 1.19.5")," to run ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,o.kt)("h3",{id:"install-numpy"},"Install Numpy"),(0,o.kt)("p",null,"To run ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", you are required to install ",(0,o.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,o.kt)(l.Z,{mdxType:"IconExternalLink"}))," with the correct version first. The best version for each ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," release has been listed before. If your Numpy version is differnt from the best version too much, ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," may not work. Here is the command for installation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"python -m pip install numpy==\n")),(0,o.kt)("h3",{id:"download-dependencies"},"Download dependencies"),(0,o.kt)("p",null,"The pre-compiled dependencies are available on our release page. The dependencies contain several ",(0,o.kt)("inlineCode",{parentName:"p"},".dll")," files. Users also need to download the tarball with the correct FFMpeg version, and extract the files."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/dll-win-ffmpeg_4_4.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"4.4"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"})))))),(0,o.kt)("p",null,"The above files are collected from the officially released FFMpeg shared libraries. Users could also find them ",(0,o.kt)("a",{parentName:"p",href:"https://www.gyan.dev/ffmpeg/builds/#release-section",title:"FFMpeg release"},"here",(0,o.kt)(l.Z,{mdxType:"IconExternalLink"})),"."),(0,o.kt)("h3",{id:"import"},"Import"),(0,o.kt)("p",null,"To import the module, users need to place the ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd")," and the dependencies in the same folder. For example,"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},".\n|---mpegCoder.pyd\n|---avcodec-58.dll\n|---avformat-58.dll\n|---avutil-56.dll\n|---swresample-3.dll\n`---swscale-5.dll\n")),(0,o.kt)("p",null,"After that, users could enter the same folder, and import the module by"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import mpegCoder\n")),(0,o.kt)("h2",{id:"compile-the-module"},"Compile the module"),(0,o.kt)("p",null,"If users need to compile the module by themselves, please follow the instructions on Github:"),(0,o.kt)("p",null,(0,o.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/3.1.0/README.md",icon:m.Z,mdxType:"DarkButton"},"Compile with VS2019")))}f.isMDXComponent=!0},866:function(e,t){t.Z={body:'',width:24,height:24}},7225:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/40837ce5.5564ba48.js b/assets/js/40837ce5.5564ba48.js new file mode 100644 index 0000000..7fae4ca --- /dev/null +++ b/assets/js/40837ce5.5564ba48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3639],{508:function(e,t,a){a.r(t),a.d(t,{assets:function(){return s},contentTitle:function(){return l},default:function(){return h},frontMatter:function(){return p},metadata:function(){return d},toc:function(){return m}});var n=a(3117),o=a(102),r=(a(7294),a(3905)),i=["components"],p={id:"changelog",title:"Changelog",description:"The changelog of this project.",slug:"/changelog"},l=void 0,d={unversionedId:"changelog",id:"version-3.1.0/changelog",title:"Changelog",description:"The changelog of this project.",source:"@site/versioned_docs/version-3.1.0/changelog.mdx",sourceDirName:".",slug:"/changelog",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/changelog",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/changelog.mdx",tags:[],version:"3.1.0",frontMatter:{id:"changelog",title:"Changelog",description:"The changelog of this project.",slug:"/changelog"},sidebar:"version-3.1.0/docs",previous:{title:"Q&A",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/qna"}},s={},m=[{value:"Update Report of mpegCoder",id:"update-report-of-mpegcoder",level:2},{value:"V3.1.0 @ 7/23/2021:",id:"v310--7232021",level:3},{value:"V3.0.0 update report:",id:"v300-update-report",level:3},{value:"V2.05 update report:",id:"v205-update-report",level:3},{value:"V2.01 update report:",id:"v201-update-report",level:3},{value:"V2.0 update report:",id:"v20-update-report",level:3},{value:"V1.8 update report:",id:"v18-update-report",level:3},{value:"V1.7-linux update report:",id:"v17-linux-update-report",level:3},{value:"V1.7 update report:",id:"v17-update-report",level:3},{value:"V1.5 update report:",id:"v15-update-report",level:3},{value:"V1.4 update report:",id:"v14-update-report",level:3},{value:"V1.2 update report:",id:"v12-update-report",level:3},{value:"V1.0 update report:",id:"v10-update-report",level:3}],u={toc:m};function h(e){var t=e.components,a=(0,o.Z)(e,i);return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"This page do not need and will not be translated to other laungages."))),(0,r.kt)("h2",{id:"update-report-of-mpegcoder"},"Update Report of ",(0,r.kt)("inlineCode",{parentName:"h2"},"mpegCoder")),(0,r.kt)("h3",{id:"v310--7232021"},"V3.1.0 @ 7/23/2021:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Support ",(0,r.kt)("inlineCode",{parentName:"p"},"str()")," type for all string arguments.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Support ",(0,r.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"ftp"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sftp")," streams for ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Support ",(0,r.kt)("inlineCode",{parentName:"p"},"nthread")," option for ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegDecoder"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegEncoder"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix a bug caused by the constructor ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegServer()"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Clean up all ",(0,r.kt)("inlineCode",{parentName:"p"},"gcc")," warnings of the source codes.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix typos in docstrings."))),(0,r.kt)("h3",{id:"v300-update-report"},"V3.0.0 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix a severe memory leaking bugs when using ",(0,r.kt)("inlineCode",{parentName:"p"},"AVPacket"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix a bug caused by using ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.terminate()")," when a video is closed by the server.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Support the ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegServer"),". This class is used for serving the online video streams.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Refactor the implementation of the loggings.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Add ",(0,r.kt)("inlineCode",{parentName:"p"},"getParameter()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"setParameter(configDict)")," APIs to ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Move ",(0,r.kt)("inlineCode",{parentName:"p"},"FFMpeg")," depedencies and the ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputStream")," class to the ",(0,r.kt)("inlineCode",{parentName:"p"},"cmpc")," space.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix dependency issues and cpp standard issues.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Upgrade to ",(0,r.kt)("inlineCode",{parentName:"p"},"FFMpeg 4.4")," Version.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Add a quick script for fetching the ",(0,r.kt)("inlineCode",{parentName:"p"},"FFMpeg")," dependencies."))),(0,r.kt)("h3",{id:"v205-update-report"},"V2.05 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix a severe bug that causes the memory leak when using ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient"),".This bug also exists in ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegDecoder"),", but it seems that the bug would not cause memory leak in that case. (Although we have also fixed it now.)")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Upgrade to ",(0,r.kt)("inlineCode",{parentName:"p"},"FFMpeg 4.0")," Version."))),(0,r.kt)("h3",{id:"v201-update-report"},"V2.01 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix a bug that occurs when the first received frame may has a PTS larger than zero.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Enable the project produce the newest ",(0,r.kt)("inlineCode",{parentName:"p"},"FFMpeg 3.4.2")," version and use ",(0,r.kt)("inlineCode",{parentName:"p"},"Python 3.6.4"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"numpy 1.14"),". "))),(0,r.kt)("h3",{id:"v20-update-report"},"V2.0 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Revise the bug of the encoder which may cause the stream duration is shorter than the real duration of the video in some not advanced media players.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Improve the structure of the code and remove some unnecessary codes.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Provide a complete version of client, which could demux the video stream from a server in any network protocol."))),(0,r.kt)("h3",{id:"v18-update-report"},"V1.8 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Provide options ",(0,r.kt)("inlineCode",{parentName:"p"},"(widthDst, heightDst)")," to let ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," could control the output size manually. To ensure the option is valid, we must use the method ",(0,r.kt)("inlineCode",{parentName:"p"},"setParameter")," before ",(0,r.kt)("inlineCode",{parentName:"p"},"FFmpegSetup"),". Now you could use this options to get a rescaled output directly:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"}," d = mpegCoder.MpegDecoder() # initialize\n d.setParameter(widthDst=400, heightDst=300) # noted that these options must be set before 'FFmpegSetup'! \n d.FFmpegSetup(b'i.avi') # the original video size would not influence the output\n print(d) # examine the parameters. You could also get the original video size by 'getParameter'\n d.ExtractFrame(0, 100) # get 100 frames with 400x300\n")),(0,r.kt)("p",{parentName:"li"},"In another example, the set optional parameters could be inherited by encoder, too:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"}," d.setParameter(widthDst=400, heightDst=300) # set optional parameters\n ...\n e.setParameter(decoder=d) # the width/height would inherit from widthDst/heightDst rather than original width/height of the decoder.\n")),(0,r.kt)("p",{parentName:"li"},"Noted that we do not provide ",(0,r.kt)("inlineCode",{parentName:"p"},"widthDst"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"heightDst")," in ",(0,r.kt)("inlineCode",{parentName:"p"},"getParameter"),", because these 2 options are all set by users. There is no need to get them from the video metadata. ")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Optimize some realization of Decoder so that its efficiency could be improved."))),(0,r.kt)("h3",{id:"v17-linux-update-report"},"V1.7-linux update report:"),(0,r.kt)("p",null,"Thanks to God, we succeed in this work!"),(0,r.kt)("p",null,"A new version is avaliable for Linux. To implement this tool, you need to install some libraries firstly:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"python3.5")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"numpy 1.13"))),(0,r.kt)("p",null,"If you want, you could install ",(0,r.kt)("inlineCode",{parentName:"p"},"ffmpeg")," on Linux: Here are some instructions"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Check every pack which ffmpeg needs here: ",(0,r.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu",title:"Dependency of FFmpeg"},"Dependency of FFmpeg"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Use these steps to install ffmpeg instead of provided commands on the above site."))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-Bash"}," $ git clone https://git.ffmpeg.org/ffmpeg.git\n $ cd ffmpeg\n $ ./configure --prefix=host --enable-gpl --enable-libx264 --enable-libx265 --enable-shared --disable-static --disable-doc\n $ make\n $ make install\n")),(0,r.kt)("h3",{id:"v17-update-report"},"V1.7 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Realize the encoder totally.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Provide a global option ",(0,r.kt)("inlineCode",{parentName:"p"},"dumpLevel")," to control the log shown in the screen.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Fix bugs in initialize functions."))),(0,r.kt)("h3",{id:"v15-update-report"},"V1.5 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Provide an incomplete version of encoder, which could encode frames as a video stream that could not be played by player.")),(0,r.kt)("h3",{id:"v14-update-report"},"V1.4 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Fix a severe bug of the decoder, which causes the memory collapsed if decoding a lot of frames.")),(0,r.kt)("h3",{id:"v12-update-report"},"V1.2 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Use numpy array to replace the native pyList, which improves the speed significantly.")),(0,r.kt)("h3",{id:"v10-update-report"},"V1.0 update report:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Provide the decoder which could decode videos in arbitrary formats and arbitrary coding.")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/430c2275.f435afd1.js b/assets/js/430c2275.f435afd1.js new file mode 100644 index 0000000..04248ae --- /dev/null +++ b/assets/js/430c2275.f435afd1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8870],{8793:function(e,t,n){var o=n(7294),i=n(9960),a=n(1954),r=n(2949);t.Z=function(e){var t=(0,o.useState)(!1),n=t[0],l=t[1];(0,o.useEffect)((function(){l(!0)}),[]);var s,p,u,d=(s=(0,r.I)(),p=s.colorMode,s.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return u=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",o.createElement(i.Z,{key:String(n),className:u,to:e.to},e.icon&&o.createElement(a.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},7279:function(e,t,n){n.r(t),n.d(t,{assets:function(){return h},contentTitle:function(){return m},default:function(){return f},frontMatter:function(){return c},metadata:function(){return g},toc:function(){return b}});var o=n(3117),i=n(102),a=(n(7294),n(3905)),r=n(8793),l=n(5514),s=n(541),p=n(3751),u=n(3119),d=["components"],c={id:"qna",title:"Questions and answers",sidebar_label:"Q&A",slug:"/troubleshooting/qna",description:"The questions and answers for mpegCoder."},m=void 0,g={unversionedId:"troubleshooting/qna",id:"version-3.2.x/troubleshooting/qna",title:"Questions and answers",description:"The questions and answers for mpegCoder.",source:"@site/versioned_docs/version-3.2.x/troubleshooting/qna.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/qna",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/qna",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/troubleshooting/qna.mdx",tags:[],version:"3.2.x",frontMatter:{id:"qna",title:"Questions and answers",sidebar_label:"Q&A",slug:"/troubleshooting/qna",description:"The questions and answers for mpegCoder."},sidebar:"docs",previous:{title:"Running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/running"},next:{title:"Changelog",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/changelog"}},h={},b=[{value:"Introduction",id:"introduction",level:2},{value:"The balance between vulnerability and compatibility",id:"the-balance-between-vulnerability-and-compatibility",level:3},{value:"Plan for audio processing",id:"plan-for-audio-processing",level:3},{value:"Plan for no-encoding streaming",id:"plan-for-no-encoding-streaming",level:3},{value:"Commercial plan",id:"commercial-plan",level:3}],k={toc:b};function f(e){var t=e.components,n=(0,i.Z)(e,d);return(0,a.kt)("wrapper",(0,o.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"If you feel like asking more questions, please contact me by the email:"),(0,a.kt)("p",null,(0,a.kt)(r.Z,{to:"mailto:cainmagi@gmail.com",icon:p.Z,mdxType:"DarkButton"},"Contact me")),(0,a.kt)("h3",{id:"the-balance-between-vulnerability-and-compatibility"},"The balance between vulnerability and compatibility"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Is it OK to report a security vulnerability issue?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Sure, because the FFMpeg used in the Linux version is compiled by myself. A good example can be found ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/4"},(0,a.kt)(l.Z,{icon:u.Z,mdxType:"InlineIcon"})," here #4"),". However, there is an exception case. For most dependencies, I can pack them together with the release of ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". But some essenstial libraries, like ",(0,a.kt)("inlineCode",{parentName:"p"},"GLibC")," is impossible to be loaded locally. In this case, the compatibility is more important than the vulnerability. For example, if a newer ",(0,a.kt)("inlineCode",{parentName:"p"},"GlibC")," version can solve a vulnerability issue, but it is only provided in the devel versions of the Debian / Ubuntu releases, I will prefer to preserve the current low version. If I bump into a new version, users with a stable Debian / Ubuntu releases may have to compile ",(0,a.kt)("inlineCode",{parentName:"p"},"GlibC")," before using ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,a.kt)("h3",{id:"plan-for-audio-processing"},"Plan for audio processing"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": The audio processing is not supported by ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.x"),". Will it be implemented future?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Sure. The audio processing would be supported since ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder 4.x"),". But I do not have enough time on this project, so it may take a long time to implement. I am very glad if there is anyone willing to send me a pull request (PR) about this."))),(0,a.kt)("h3",{id:"plan-for-no-encoding-streaming"},"Plan for no-encoding streaming"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": In ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.x"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer")," only support streaming while encoding. Will there be a class for reading a video while pushing it as a stream?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": No. I believe that using the official FFMpeg is a good enough solution. We recommend users to use a server program together with the official ",(0,a.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg",(0,a.kt)(s.Z,{mdxType:"IconExternalLink"}))," streaming features."))),(0,a.kt)("h3",{id:"commercial-plan"},"Commercial plan"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Will there be a commercial plan for ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": No. ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," shares exactly the same license (GPL v3) of FFMpeg. This project is totally open-sourced. Although GPLv3 enables coders to add a commercial plan, such a plan would be a burden for me. I will not concern anything about the commercial plan for this project, even sponsorship."))))}f.isMDXComponent=!0},3751:function(e,t){t.Z={body:'',width:24,height:24}},3119:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/43241b81.b588645e.js b/assets/js/43241b81.b588645e.js new file mode 100644 index 0000000..472b2d4 --- /dev/null +++ b/assets/js/43241b81.b588645e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[4303],{6557:function(e,t,n){n.r(t),n.d(t,{assets:function(){return d},contentTitle:function(){return l},default:function(){return m},frontMatter:function(){return s},metadata:function(){return p},toc:function(){return c}});var i=n(3117),o=n(102),a=(n(7294),n(3905)),r=["components"],s={id:"pypi",title:"Installation from PyPI",sidebar_label:"PyPI",slug:"/installation/pypi",description:"A tutorial about the installation of the package from PyPI."},l=void 0,p={unversionedId:"guides/install/pypi",id:"version-3.1.0/guides/install/pypi",title:"Installation from PyPI",description:"A tutorial about the installation of the package from PyPI.",source:"@site/versioned_docs/version-3.1.0/guides/install/pypi.mdx",sourceDirName:"guides/install",slug:"/installation/pypi",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/pypi",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/install/pypi.mdx",tags:[],version:"3.1.0",frontMatter:{id:"pypi",title:"Installation from PyPI",sidebar_label:"PyPI",slug:"/installation/pypi",description:"A tutorial about the installation of the package from PyPI."},sidebar:"version-3.1.0/docs",previous:{title:"Introduction",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/"},next:{title:"Windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/windows"}},d={},c=[],u={toc:c};function m(e){var t=e.components,n=(0,o.Z)(e,r);return(0,a.kt)("wrapper",(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"To install the pre-compiled package, just run"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"pip install mpegCoder==3.1.0b0\n")),(0,a.kt)("p",null,"The PyPI repository is supported since ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.1.0"),". We support from ",(0,a.kt)("inlineCode",{parentName:"p"},"python 3.5")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"python 3.9"),". To check the details of each pre-compiled version, please view the manual installation guides for ",(0,a.kt)("a",{parentName:"p",href:"./windows"},"Windows")," and ",(0,a.kt)("a",{parentName:"p",href:"./linux"},"Linux"),"."),(0,a.kt)("p",null,"The package installed by this method is shipped with all required dynamic libraries. Users do not need to install any other dependencies in this case. However, if users find that the package could not be imported after the installation, please check the ",(0,a.kt)("a",{parentName:"p",href:"../troubleshooting/installation"},"troubleshooting page")," first."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4608.d6fff1ab.js b/assets/js/4608.d6fff1ab.js new file mode 100644 index 0000000..aa544d7 --- /dev/null +++ b/assets/js/4608.d6fff1ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[4608],{4608:function(e,t,n){n.r(t),n.d(t,{default:function(){return c}});var a=n(7294),o=n(3746),l=n(5999),r=n(833);function c(){return a.createElement(a.Fragment,null,a.createElement(r.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(o.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/483af01e.904dbe68.js b/assets/js/483af01e.904dbe68.js new file mode 100644 index 0000000..08e1de9 --- /dev/null +++ b/assets/js/483af01e.904dbe68.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9011],{7370:function(e,t,a){var l,n,r,s,m,i,c,d,o,f,h,p,x,y,E,v,u,k,N,b,M,H,g,w,z,C,V,T,I,L,F,Z,D,O,P,S,A,j,U,_,R,q,G,B,X,J,W,K,Q,Y,$,ee,te,ae,le,ne,re,se,me,ie,ce,de,oe,fe,he,pe,xe,ye,Ee,ve,ue,ke,Ne,be,Me,He,ge,we,ze,Ce,Ve,Te,Ie,Le,Fe,Ze,De,Oe,Pe,Se,Ae,je=a(7294),Ue=["title","titleId"];function _e(){return _e=Object.assign||function(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}t.Z=function(e){var t=e.title,a=e.titleId,qe=Re(e,Ue);return je.createElement("svg",_e({id:"graph-div",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{maxWidth:"399.5px",height:"auto",maxHeight:"291.5px"},width:"100%",viewBox:"0 0 399.5 291.5","aria-labelledby":a},qe),t?je.createElement("title",{id:a},t):null,l||(l=je.createElement("style",null,"#graph-div .stk-n{stroke:none}#graph-div .font-d{fill:#555;fill-opacity:1}#graph-div .font-e{fill:#333;fill-opacity:1}#graph-div .class-box,#graph-div .d-line,#graph-div .func-box{stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .class-box{fill-rule:evenodd;fill:#ececff;fill-opacity:1;stroke:#9370db}#graph-div .d-line,#graph-div .func-box{stroke:#999}#graph-div .func-box{fill-rule:evenodd;fill:#eee;fill-opacity:1}#graph-div .d-line{fill:none}")),n||(n=je.createElement("defs",null,je.createElement("symbol",{overflow:"visible",id:"a"},je.createElement("path",{className:"stk-n",d:"M1.156-7.719V0h1.235v-4.86c0-1.109.796-2.015 1.812-2.015.89 0 1.422.578 1.422 1.547V0h1.25v-4.86c0-1.109.813-2.015 1.797-2.015.906 0 1.437.578 1.437 1.547V0h1.235v-5.797c0-1.39-.781-2.156-2.235-2.156-1.03 0-1.64.297-2.375 1.187-.453-.828-1.078-1.187-2.078-1.187-1.047 0-1.765.406-2.36 1.328v-1.094zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"b"},je.createElement("path",{className:"stk-n",d:"M.875 3.203h1.219V-.812C2.75-.016 3.469.327 4.469.327c2 0 3.297-1.61 3.297-4.062 0-2.594-1.266-4.22-3.297-4.22-1.063 0-1.969.516-2.453 1.391V-7.72H.875zm3.39-10C5.61-6.797 6.5-5.609 6.5-3.766c0 1.75-.906 2.938-2.234 2.938C2.937-.828 2.094-2 2.094-3.813c0-1.812.86-2.984 2.172-2.984zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"c"},je.createElement("path",{className:"stk-n",d:"M7.625-3.453c.016-1.11-.078-1.813-.281-2.36-.453-1.328-1.657-2.14-3.14-2.14-2.157 0-3.548 1.64-3.548 4.203C.656-1.203 2 .344 4.172.344c1.75 0 3-1 3.297-2.688H6.234C5.891-1.328 5.188-.797 4.22-.797c-.766 0-1.407-.328-1.828-.937-.329-.454-.438-.907-.454-1.72zm-5.64-1c.077-1.422.952-2.36 2.202-2.36s2.125.985 2.11 2.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"d"},je.createElement("path",{className:"stk-n",d:"M6.156-7.719v1.125c-.625-.937-1.375-1.36-2.36-1.36-1.968 0-3.28 1.72-3.28 4.235 0 1.266.328 2.297.968 3.031C2.063-.046 2.875.345 3.688.345c.968 0 1.671-.422 2.343-1.39v.405c0 1.032-.14 1.657-.437 2.094-.328.453-.953.719-1.703.719-.547 0-1.063-.125-1.391-.39-.297-.204-.422-.438-.469-.891H.766c.14 1.453 1.28 2.312 3.062 2.312 1.156 0 2.14-.375 2.656-.984.579-.703.813-1.656.813-3.485v-6.453zm-2.218.89c1.312 0 2.093 1.126 2.093 3.063 0 1.844-.797 2.97-2.093 2.97-1.344 0-2.157-1.141-2.157-3.016 0-1.86.828-3.016 2.157-3.016zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"e"},je.createElement("path",{className:"stk-n",d:"M9.86-7.406c-.438-2.375-1.797-3.516-4.141-3.516-1.453 0-2.61.453-3.407 1.344-.984 1.078-1.5 2.61-1.5 4.344 0 1.75.547 3.28 1.563 4.312C3.188-.062 4.25.344 5.656.344c2.625 0 4.094-1.422 4.422-4.266H8.672c-.125.719-.25 1.172-.469 1.61-.437.937-1.344 1.437-2.531 1.437-2.125 0-3.5-1.703-3.5-4.39 0-2.75 1.297-4.438 3.39-4.438.829 0 1.61.234 2.063.625.438.36.656.828.813 1.672zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"f"},je.createElement("path",{className:"stk-n",d:"M4.078-7.953c-2.187 0-3.484 1.547-3.484 4.14C.594-1.203 1.89.329 4.078.329c2.172 0 3.5-1.547 3.5-4.078 0-2.672-1.281-4.203-3.5-4.203zm0 1.14c1.39 0 2.219 1.125 2.219 3.032 0 1.828-.86 2.969-2.219 2.969-1.36 0-2.203-1.141-2.203-3 0-1.86.844-3 2.203-3zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"g"},je.createElement("path",{className:"stk-n",d:"M7.375-10.734H6.156v3.968c-.531-.78-1.343-1.187-2.375-1.187C1.766-7.953.47-6.343.47-3.891.47-1.266 1.735.344 3.83.344c1.062 0 1.765-.39 2.452-1.36V0h1.094zm-3.39 3.937c1.328 0 2.171 1.172 2.171 3.031 0 1.782-.86 2.954-2.172 2.954-1.343 0-2.25-1.204-2.25-3 0-1.782.907-2.985 2.25-2.985zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"h"},je.createElement("path",{className:"stk-n",d:"M1.063-7.719V0h1.234v-4c0-1.063.25-1.797.812-2.219.407-.328.766-.406 1.657-.422v-1.265a2.946 2.946 0 0 0-.47-.047c-.796 0-1.468.516-2.093 1.64v-1.406zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"w"},je.createElement("path",{className:"stk-n",d:"M7-5.125c-.063-.719-.188-1.188-.469-1.61-.515-.765-1.468-1.218-2.578-1.218-2.078 0-3.422 1.656-3.422 4.219C.531-1.25 1.844.328 3.937.328c1.86 0 3-1.094 3.157-2.984h-1.25C5.656-1.422 5.03-.812 3.969-.812c-1.36 0-2.172-1.094-2.172-2.922 0-1.938.797-3.079 2.14-3.079 1.032 0 1.688.61 1.844 1.688zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"x"},je.createElement("path",{className:"stk-n",d:"M2.266-10.734H1.03V0h1.235zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"y"},je.createElement("path",{className:"stk-n",d:"M7.953-.719c-.125.031-.187.031-.266.031-.421 0-.671-.218-.671-.609v-4.516c0-1.406-.985-2.14-2.891-2.14-1.094 0-1.984.297-2.516.86-.375.405-.546.859-.578 1.655h1.25c.094-.937.64-1.375 1.797-1.375 1.11 0 1.734.407 1.734 1.172v.313c0 .531-.328.734-1.28.86-1.704.202-1.954.25-2.407.437C1.172-3.656.687-2.97.687-1.938.688-.546 1.672.345 3.22.345c.984 0 1.765-.328 2.625-1.14.093.796.468 1.14 1.265 1.14.266 0 .422-.031.844-.14zm-2.14-1.703c0 .406-.125.672-.485 1A2.66 2.66 0 0 1 3.5-.734c-.969 0-1.531-.47-1.531-1.235 0-.812.531-1.218 1.86-1.406 1.312-.188 1.577-.234 1.983-.438zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"z"},je.createElement("path",{className:"stk-n",d:"M6.531-5.563c-.015-1.53-1.031-2.39-2.812-2.39S.766-7.016.766-5.578c0 1.219.625 1.781 2.437 2.219l1.156.28c.844.22 1.188.517 1.188 1.063 0 .735-.719 1.22-1.797 1.22-.625 0-1.188-.173-1.5-.485-.219-.219-.297-.438-.39-1.016H.561C.625-.516 1.625.343 3.642.343c1.937 0 3.187-.952 3.187-2.437 0-1.156-.64-1.812-2.172-2.172L3.47-4.53c-1-.219-1.406-.563-1.406-1.11 0-.718.624-1.171 1.624-1.171.985 0 1.5.421 1.547 1.25zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"D"},je.createElement("path",{className:"stk-n",d:"M3.781-7.719H2.5v-2.125H1.297v2.125H.234v1h1.063V-.89c0 .782.516 1.22 1.484 1.22.313 0 .578-.032 1-.11V-.797a3.266 3.266 0 0 1-.594.047c-.53 0-.687-.156-.687-.672v-5.297h1.281zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"E"},je.createElement("path",{className:"stk-n",d:"M1.11-10.734V0h1.218v-4.266c0-1.562.828-2.609 2.094-2.609 1 0 1.594.578 1.594 1.516V0h1.218v-5.828c0-1.313-.937-2.125-2.421-2.125-1.11 0-1.766.344-2.485 1.281v-4.062zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"i"},je.createElement("path",{className:"stk-n",d:"m7.469 0 3.234-9.61V0h1.375v-11.453h-2.015L6.719-1.484l-3.407-9.97H1.297V0h1.375v-9.61L5.937 0zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"j"},je.createElement("path",{className:"stk-n",d:"M.922 3.422h1.312V-.86C2.922-.016 3.704.359 4.766.359 6.89.36 8.28-1.359 8.28-3.984c0-2.766-1.36-4.5-3.515-4.5-1.141 0-2.094.546-2.625 1.468v-1.218H.92zM4.547-7.25c1.437 0 2.375 1.266 2.375 3.234 0 1.875-.953 3.141-2.375 3.141-1.406 0-2.313-1.25-2.313-3.188 0-1.937.922-3.187 2.313-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"k"},je.createElement("path",{className:"stk-n",d:"M8.125-3.688c.016-1.171-.078-1.921-.281-2.515-.5-1.406-1.782-2.281-3.36-2.281C2.172-8.484.704-6.734.704-4c0 2.719 1.421 4.375 3.75 4.375C6.312.375 7.64-.703 7.968-2.5H6.656C6.281-1.422 5.531-.844 4.5-.844c-.813 0-1.516-.36-1.953-1.015-.344-.485-.469-.954-.485-1.829zM2.109-4.75c.094-1.516 1.032-2.516 2.36-2.516 1.328 0 2.265 1.047 2.25 2.516zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"l"},je.createElement("path",{className:"stk-n",d:"M6.563-8.234v1.187c-.657-.984-1.454-1.437-2.516-1.437-2.094 0-3.5 1.828-3.5 4.515 0 1.344.344 2.453 1.031 3.235.61.687 1.5 1.109 2.36 1.109 1.015 0 1.78-.453 2.5-1.5v.438c0 1.109-.157 1.78-.47 2.234-.359.484-1.03.766-1.827.766-.579 0-1.11-.141-1.47-.407-.312-.218-.452-.468-.515-.968H.812C.954 2.5 2.173 3.421 4.079 3.421c1.234 0 2.297-.39 2.828-1.047.625-.766.875-1.781.875-3.719v-6.89zm-2.375.953c1.406 0 2.25 1.203 2.25 3.265 0 1.97-.86 3.172-2.25 3.172-1.422 0-2.282-1.219-2.282-3.219 0-1.984.875-3.218 2.282-3.218zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"m"},je.createElement("path",{className:"stk-n",d:"M10.516-7.906c-.47-2.532-1.907-3.735-4.422-3.735-1.547 0-2.782.47-3.625 1.422-1.047 1.14-1.61 2.781-1.61 4.64 0 1.86.594 3.5 1.672 4.61.875.906 2 1.344 3.5 1.344 2.797 0 4.375-1.531 4.719-4.547h-1.5c-.125.75-.281 1.25-.5 1.703-.469 1-1.438 1.547-2.703 1.547-2.266 0-3.734-1.828-3.734-4.687 0-2.938 1.39-4.75 3.624-4.75.875 0 1.704.265 2.188.671.469.391.703.891.89 1.782zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"n"},je.createElement("path",{className:"stk-n",d:"M2.422-11.453H1.109V0h1.313zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"o"},je.createElement("path",{className:"stk-n",d:"M2.39-8.234H1.095V0H2.39zm0-3.22H1.079v1.642h1.313zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"p"},je.createElement("path",{className:"stk-n",d:"M1.188-8.234V0H2.5v-4.547c0-1.687.875-2.781 2.219-2.781 1.047 0 1.703.625 1.703 1.61V0h1.312v-6.219c0-1.36-1.046-2.265-2.609-2.265-1.234 0-2.063.5-2.719 1.625v-1.375zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"q"},je.createElement("path",{className:"stk-n",d:"M4.031-8.234h-1.36V-10.5H1.376v2.266H.25v1.062h1.125v6.234c0 .829.563 1.297 1.578 1.297.344 0 .625-.046 1.078-.125V-.844a3.642 3.642 0 0 1-.625.047c-.578 0-.734-.156-.734-.719v-5.656h1.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"r"},je.createElement("path",{className:"stk-n",d:"M1.5 0h4.422c2.875 0 4.656-2.172 4.656-5.734 0-3.547-1.781-5.72-4.656-5.72H1.5zm1.453-1.297v-8.86h2.703c2.266 0 3.469 1.516 3.469 4.423 0 2.921-1.203 4.437-3.469 4.437zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"s"},je.createElement("path",{className:"stk-n",d:"M7.469-5.469c-.063-.765-.203-1.265-.516-1.718C6.422-8 5.406-8.485 4.22-8.485 2-8.484.562-6.72.562-3.984.563-1.328 1.97.359 4.204.359c1.969 0 3.203-1.171 3.36-3.187h-1.33c-.203 1.312-.875 1.969-2 1.969-1.453 0-2.312-1.172-2.312-3.125 0-2.063.844-3.282 2.281-3.282 1.094 0 1.797.641 1.953 1.797zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"t"},je.createElement("path",{className:"stk-n",d:"M4.36-8.484C2.015-8.484.64-6.828.64-4.063.64-1.28 2.017.36 4.36.36 6.671.36 8.077-1.297 8.077-4c0-2.844-1.36-4.484-3.719-4.484zm0 1.218c1.484 0 2.359 1.204 2.359 3.235 0 1.953-.907 3.172-2.36 3.172C2.891-.86 2-2.08 2-4.063c0-1.984.89-3.203 2.36-3.203zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"u"},je.createElement("path",{className:"stk-n",d:"M7.875-11.453H6.562v4.234C6-8.047 5.141-8.484 4.033-8.484 1.89-8.484.5-6.766.5-4.141.5-1.344 1.86.375 4.078.375c1.14 0 1.89-.422 2.625-1.469V0h1.172zM4.25-7.25c1.406 0 2.313 1.25 2.313 3.234 0 1.907-.922 3.157-2.313 3.157-1.438 0-2.39-1.282-2.39-3.204 0-1.906.952-3.187 2.39-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"v"},je.createElement("path",{className:"stk-n",d:"M1.14-8.234V0h1.313v-4.266c0-1.14.266-1.906.86-2.375.437-.328.812-.437 1.78-.453v-1.343a3.67 3.67 0 0 0-.515-.047c-.844 0-1.547.546-2.219 1.75v-1.5zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"A"},je.createElement("path",{className:"stk-n",d:"M9.453-8.094v-.203c0-.656-.187-1.234-.562-1.781-.704-1.047-1.938-1.563-3.625-1.563-2.516 0-4.063 1.266-4.063 3.36 0 1.406.734 2.281 2.234 2.687l2.844.735c1.469.375 2.125.953 2.125 1.843 0 .61-.328 1.25-.828 1.594-.453.313-1.172.484-2.11.484-1.218 0-2.03-.296-2.593-.906-.438-.5-.656-1.062-.656-1.797H.844c.015 1 .203 1.672.61 2.266C2.218-.235 3.577.359 5.39.359 6.75.36 7.859.047 8.594-.53a3.455 3.455 0 0 0 1.265-2.625c0-1.422-.89-2.438-2.453-2.86l-2.86-.765c-1.39-.39-1.89-.828-1.89-1.703 0-1.157 1.031-1.938 2.563-1.938 1.828 0 2.828.828 2.86 2.328zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"B"},je.createElement("path",{className:"stk-n",d:"m4.547 0 3.156-8.234H6.22L3.89-1.563l-2.171-6.67h-1.5L3.125 0zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"C"},je.createElement("path",{className:"stk-n",d:"M2.953-5.219h6.25v-1.297h-6.25v-3.64h6.485v-1.297H1.5V0h8.234v-1.297h-6.78zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"F"},je.createElement("path",{className:"stk-n",d:"M6.953-5.938C6.937-7.563 5.875-8.483 3.97-8.483s-3.156 1-3.156 2.53c0 1.298.671 1.907 2.609 2.376l1.234.297c.89.219 1.266.547 1.266 1.14 0 .782-.766 1.297-1.922 1.297-.672 0-1.266-.203-1.594-.515-.25-.235-.328-.485-.422-1.094H.61C.672-.547 1.734.375 3.891.375c2.062 0 3.39-1.031 3.39-2.61 0-1.234-.687-1.921-2.328-2.312l-1.25-.281c-1.062-.25-1.515-.61-1.515-1.188 0-.765.671-1.25 1.75-1.25 1.03 0 1.593.454 1.64 1.329zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"G"},je.createElement("path",{className:"stk-n",d:"M11.25-6.047H6.469v1.281h3.484v2.454C8.406-1.298 7.47-.938 6.281-.938c-1.093 0-2.14-.437-2.812-1.156-.75-.797-1.219-2.187-1.219-3.61 0-2.796 1.61-4.655 4.016-4.655 1.765 0 3.015.906 3.312 2.375h1.516c-.406-2.313-2.188-3.657-4.813-3.657-1.39 0-2.515.36-3.422 1.094C1.547-9.437.797-7.657.797-5.609.797-2.125 2.953.359 5.984.359c.844 0 2-.265 2.938-.64.719-.313 1.25-.61 2.328-1.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"H"},je.createElement("path",{className:"stk-n",d:"M.922-11.453V0h1.187v-1.063C2.672-.125 3.547.375 4.72.375c2.156 0 3.562-1.781 3.562-4.516 0-2.687-1.344-4.343-3.515-4.343-1.141 0-1.922.421-2.547 1.359v-4.328zm3.61 4.203c1.452 0 2.39 1.266 2.39 3.234 0 1.875-.969 3.157-2.39 3.157-1.391 0-2.313-1.25-2.313-3.204 0-1.921.922-3.187 2.312-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"I"},je.createElement("path",{className:"stk-n",d:"M8.484-.766c-.125.032-.203.032-.296.032-.438 0-.704-.22-.704-.641v-4.828c0-1.5-1.046-2.281-3.078-2.281-1.172 0-2.125.328-2.687.921-.407.422-.578.907-.61 1.766h1.329c.093-1 .687-1.469 1.921-1.469 1.172 0 1.829.438 1.829 1.25v.329c0 .562-.329.796-1.36.921-1.797.22-2.078.266-2.562.47C1.25-3.907.734-3.173.734-2.063.734-.579 1.781.374 3.438.374c1.046 0 1.874-.36 2.796-1.219.11.844.5 1.219 1.344 1.219.297 0 .453-.031.906-.156zM6.188-2.578c0 .437-.125.703-.5 1.062a2.91 2.91 0 0 1-1.954.735c-1.03 0-1.64-.5-1.64-1.313 0-.86.578-1.312 1.984-1.5 1.406-.203 1.688-.265 2.11-.469zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"J"},je.createElement("path",{className:"stk-n",d:"M1.234-8.234V0h1.313v-5.188c0-1.187.86-2.14 1.937-2.14.954 0 1.516.61 1.516 1.64V0h1.328v-5.188c0-1.187.86-2.14 1.922-2.14.969 0 1.531.61 1.531 1.64V0h1.313v-6.172c0-1.484-.828-2.312-2.375-2.312-1.094 0-1.75.328-2.531 1.265-.485-.875-1.157-1.265-2.235-1.265-1.094 0-1.86.437-2.5 1.406v-1.156zm0 0"})))),je.createElement("path",{className:"module-box","data-tstyle":"module-box",d:"M0 0h-198v288h396V0zm0 0",transform:"matrix(1 0 0 -1 199.75 289.75)",style:{fillRule:"evenodd",fill:"#ffffde",fillOpacity:1,strokeWidth:1.5,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#aa3",strokeOpacity:1,strokeMiterlimit:10}}),je.createElement("g",{className:"font-f","data-tstyle":"font-f",style:{fill:"#000",fillOpacity:1}},r||(r=je.createElement("use",{xlinkHref:"#a",x:160.45,y:22.25})),s||(s=je.createElement("use",{xlinkHref:"#b",x:172.945,y:22.25})),m||(m=je.createElement("use",{xlinkHref:"#c",x:181.33,y:22.25})),i||(i=je.createElement("use",{xlinkHref:"#d",x:189.715,y:22.25})),c||(c=je.createElement("use",{xlinkHref:"#e",x:198.1,y:22.25})),d||(d=je.createElement("use",{xlinkHref:"#f",x:208.9,y:22.25})),o||(o=je.createElement("use",{xlinkHref:"#g",x:217.285,y:22.25})),f||(f=je.createElement("use",{xlinkHref:"#c",x:225.67,y:22.25})),h||(h=je.createElement("use",{xlinkHref:"#h",x:234.055,y:22.25}))),p||(p=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M0 0c-1.7 0-3.302-1.698-3.302-3.402v-29.296C-3.302-34.3-1.7-36 0-36h137.3c1.7 0 3.398 1.699 3.398 3.3v29.297c0 1.704-1.699 3.403-3.398 3.403zm0 0",transform:"matrix(1 0 0 -1 215.45 70.95)"})),x||(x=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:243.75,y:94.65}),je.createElement("use",{xlinkHref:"#j",x:257.046,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:265.942,y:94.65}),je.createElement("use",{xlinkHref:"#l",x:274.742,y:94.65}),je.createElement("use",{xlinkHref:"#m",x:283.638,y:94.65}),je.createElement("use",{xlinkHref:"#n",x:295.142,y:94.65}),je.createElement("use",{xlinkHref:"#o",x:298.726,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:302.31,y:94.65}),je.createElement("use",{xlinkHref:"#p",x:311.206,y:94.65}),je.createElement("use",{xlinkHref:"#q",x:320.102,y:94.65}))),y||(y=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 199.75 178.15)"})),E||(E=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.4",transform:"matrix(1 0 0 -1 170.95 178.15)"})),v||(v=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002H-14.4",transform:"matrix(1 0 0 -1 142.15 178.15)"})),u||(u=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 113.35 178.15)"})),k||(k=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.402",transform:"matrix(1 0 0 -1 84.55 178.15)"})),N||(N=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 55.75 178.15)"})),b||(b=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-7.2V7.2",transform:"matrix(1 0 0 -1 26.95 178.15)"})),M||(M=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.402",transform:"matrix(1 0 0 -1 19.75 156.55)"})),H||(H=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.398",transform:"matrix(1 0 0 -1 19.75 127.75)"})),g||(g=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.4",transform:"matrix(1 0 0 -1 19.75 98.95)"})),w||(w=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002V14.4",transform:"matrix(1 0 0 -1 19.75 70.15)"})),z||(z=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002V3.6h10.8",transform:"matrix(1 0 0 -1 19.75 41.35)"})),C||(C=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 44.95 37.75)"})),V||(V=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 73.75 37.75)"})),T||(T=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.4",transform:"matrix(1 0 0 -1 102.55 37.75)"})),I||(I=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0H14.4",transform:"matrix(1 0 0 -1 131.35 37.75)"})),L||(L=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0h14.403",transform:"matrix(1 0 0 -1 160.15 37.75)"})),F||(F=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 188.95 37.75)"})),Z||(Z=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 217.75 37.75)"})),D||(D=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.4",transform:"matrix(1 0 0 -1 246.55 37.75)"})),O||(O=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0H14.4",transform:"matrix(1 0 0 -1 275.35 37.75)"})),P||(P=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0h14.403",transform:"matrix(1 0 0 -1 304.15 37.75)"})),S||(S=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 332.95 37.75)"})),A||(A=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 361.75 37.75)"})),j||(j=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.4",transform:"matrix(1 0 0 -1 379.75 48.55)"})),U||(U=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002V-14.4",transform:"matrix(1 0 0 -1 379.75 77.35)"})),_||(_=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002v-14.403",transform:"matrix(1 0 0 -1 379.75 106.15)"})),R||(R=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.402",transform:"matrix(1 0 0 -1 379.75 134.95)"})),q||(q=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.398",transform:"matrix(1 0 0 -1 379.75 163.75)"})),G||(G=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 365.35 178.15)"})),B||(B=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.402",transform:"matrix(1 0 0 -1 336.55 178.15)"})),X||(X=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 307.75 178.15)"})),J||(J=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.4",transform:"matrix(1 0 0 -1 278.95 178.15)"})),W||(W=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002H-14.4",transform:"matrix(1 0 0 -1 250.15 178.15)"})),K||(K=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 221.35 178.15)"})),Q||(Q=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M.002 0c-1.704 0-3.403-1.698-3.403-3.402v-29.296C-3.4-34.3-1.7-36 .002-36h137.296c1.602 0 3.301 1.699 3.301 3.3v29.297c0 1.704-1.699 3.403-3.3 3.403zm0 0",transform:"matrix(1 0 0 -1 46.85 70.95)"})),Y||(Y=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:65.35,y:94.65}),je.createElement("use",{xlinkHref:"#j",x:78.742,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:87.542,y:94.65}),je.createElement("use",{xlinkHref:"#l",x:96.438,y:94.65}),je.createElement("use",{xlinkHref:"#r",x:105.334,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:116.838,y:94.65}),je.createElement("use",{xlinkHref:"#s",x:125.734,y:94.65}),je.createElement("use",{xlinkHref:"#t",x:133.638,y:94.65}),je.createElement("use",{xlinkHref:"#u",x:142.534,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:151.43,y:94.65}),je.createElement("use",{xlinkHref:"#v",x:160.326,y:94.65}))),$||($=je.createElement("g",{className:"font-d","data-tstyle":"font-d"},je.createElement("use",{xlinkHref:"#w",x:319.35,y:58.95}),je.createElement("use",{xlinkHref:"#x",x:326.94,y:58.95}),je.createElement("use",{xlinkHref:"#y",x:330.24,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:338.625,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:346.215,y:58.95}),je.createElement("use",{xlinkHref:"#c",x:353.805,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:362.1,y:58.95}))),ee||(ee=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M0 0c-1.698 0-3.402-1.698-3.402-3.402v-29.296C-3.402-34.3-1.698-36 .001-36h137.3c1.598 0 3.297 1.699 3.297 3.3v29.297c0 1.704-1.699 3.403-3.296 3.403zm0 0",transform:"matrix(1 0 0 -1 215.55 124.95)"})),te||(te=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:240.65,y:148.65}),je.createElement("use",{xlinkHref:"#j",x:253.946,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:262.842,y:148.65}),je.createElement("use",{xlinkHref:"#l",x:271.738,y:148.65}),je.createElement("use",{xlinkHref:"#A",x:280.634,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:291.226,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:300.122,y:148.65}),je.createElement("use",{xlinkHref:"#B",x:305.914,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:313.514,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:322.314,y:148.65}))),ae||(ae=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M.002 0c-1.704 0-3.403-1.698-3.403-3.402v-29.296C-3.4-34.3-1.7-36 .002-36h137.296c1.704 0 3.403 1.699 3.403 3.3v29.297c0 1.704-1.7 3.403-3.403 3.403zm0 0",transform:"matrix(1 0 0 -1 46.85 124.95)"})),le||(le=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:65.85,y:148.65}),je.createElement("use",{xlinkHref:"#j",x:79.146,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:88.042,y:148.65}),je.createElement("use",{xlinkHref:"#l",x:96.842,y:148.65}),je.createElement("use",{xlinkHref:"#C",x:105.738,y:148.65}),je.createElement("use",{xlinkHref:"#p",x:116.426,y:148.65}),je.createElement("use",{xlinkHref:"#s",x:125.322,y:148.65}),je.createElement("use",{xlinkHref:"#t",x:133.226,y:148.65}),je.createElement("use",{xlinkHref:"#u",x:142.122,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:151.018,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:159.914,y:148.65}))),ne||(ne=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 199.75 278.95)"})),re||(re=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.4",transform:"matrix(1 0 0 -1 170.95 278.95)"})),se||(se=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0H-14.4",transform:"matrix(1 0 0 -1 142.15 278.95)"})),me||(me=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 113.35 278.95)"})),ie||(ie=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.402",transform:"matrix(1 0 0 -1 84.55 278.95)"})),ce||(ce=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 55.75 278.95)"})),de||(de=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-7.2v7.2",transform:"matrix(1 0 0 -1 26.95 278.95)"})),oe||(oe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002v14.403",transform:"matrix(1 0 0 -1 19.75 257.35)"})),fe||(fe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.402",transform:"matrix(1 0 0 -1 19.75 228.55)"})),he||(he=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v3.602h10.8",transform:"matrix(1 0 0 -1 19.75 199.75)"})),pe||(pe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 44.95 196.15)"})),xe||(xe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 73.75 196.15)"})),ye||(ye=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.4",transform:"matrix(1 0 0 -1 102.55 196.15)"})),Ee||(Ee=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002H14.4",transform:"matrix(1 0 0 -1 131.35 196.15)"})),ve||(ve=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002h14.403",transform:"matrix(1 0 0 -1 160.15 196.15)"})),ue||(ue=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 188.95 196.15)"})),ke||(ke=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 217.75 196.15)"})),Ne||(Ne=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.4",transform:"matrix(1 0 0 -1 246.55 196.15)"})),be||(be=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002H14.4",transform:"matrix(1 0 0 -1 275.35 196.15)"})),Me||(Me=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002h14.403",transform:"matrix(1 0 0 -1 304.15 196.15)"})),He||(He=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 332.95 196.15)"})),ge||(ge=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 361.75 196.15)"})),we||(we=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.402",transform:"matrix(1 0 0 -1 379.75 206.95)"})),ze||(ze=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.398",transform:"matrix(1 0 0 -1 379.75 235.75)"})),Ce||(Ce=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.4",transform:"matrix(1 0 0 -1 379.75 264.55)"})),Ve||(Ve=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 365.35 278.95)"})),Te||(Te=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.402",transform:"matrix(1 0 0 -1 336.55 278.95)"})),Ie||(Ie=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 307.75 278.95)"})),Le||(Le=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.4",transform:"matrix(1 0 0 -1 278.95 278.95)"})),Fe||(Fe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0H-14.4",transform:"matrix(1 0 0 -1 250.15 278.95)"})),Ze||(Ze=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 221.35 278.95)"})),De||(De=je.createElement("g",{className:"font-d","data-tstyle":"font-d"},je.createElement("use",{xlinkHref:"#a",x:311.75,y:217.35}),je.createElement("use",{xlinkHref:"#c",x:324.245,y:217.35}),je.createElement("use",{xlinkHref:"#D",x:332.54,y:217.35}),je.createElement("use",{xlinkHref:"#E",x:336.635,y:217.35}),je.createElement("use",{xlinkHref:"#f",x:345.02,y:217.35}),je.createElement("use",{xlinkHref:"#g",x:353.405,y:217.35}),je.createElement("use",{xlinkHref:"#z",x:361.79,y:217.35}))),Oe||(Oe=je.createElement("path",{className:"func-box","data-tstyle":"func-box",d:"M0 0h-72v36H72V0zm0 0",transform:"matrix(1 0 0 -1 115.45 264.55)"})),Pe||(Pe=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#F",x:81.85,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:89.754,y:252.25}),je.createElement("use",{xlinkHref:"#q",x:98.458,y:252.25}),je.createElement("use",{xlinkHref:"#G",x:102.938,y:252.25}),je.createElement("use",{xlinkHref:"#n",x:115.242,y:252.25}),je.createElement("use",{xlinkHref:"#t",x:118.826,y:252.25}),je.createElement("use",{xlinkHref:"#H",x:127.722,y:252.25}),je.createElement("use",{xlinkHref:"#I",x:136.618,y:252.25}),je.createElement("use",{xlinkHref:"#n",x:145.514,y:252.25}))),Se||(Se=je.createElement("path",{className:"func-box","data-tstyle":"func-box",d:"M.002 0h-72v36h144V0zm0 0",transform:"matrix(1 0 0 -1 284.85 264.55)"})),Ae||(Ae=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#v",x:257.95,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:263.054,y:252.25}),je.createElement("use",{xlinkHref:"#I",x:271.95,y:252.25}),je.createElement("use",{xlinkHref:"#u",x:280.846,y:252.25}),je.createElement("use",{xlinkHref:"#J",x:289.742,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:303.038,y:252.25}))))}},5549:function(e,t,a){a.d(t,{A:function(){return m},q:function(){return i}});var l=a(7294),n=a(9960),r="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",s="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function m(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=s+"/"+e.url;break;case"3.1.0":t=r+"/"+e.url}else t=s+"/"+e.url;return l.createElement(n.Z,{to:t,className:"noline"},e.children)}function i(e){return l.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}i.defaultProps={padx:"1ex"}},5220:function(e,t,a){a.r(t),a.d(t,{assets:function(){return y},contentTitle:function(){return p},default:function(){return u},frontMatter:function(){return h},metadata:function(){return x},toc:function(){return E}});var l=a(3117),n=a(102),r=(a(7294),a(3905)),s=a(541),m=a(5514),i=a(6577),c=a(7795),d=a(5549),o=a(7370),f=["components"],h={id:"apis",title:"Overview",description:"The overview of all APIs.",slug:"/apis/"},p=void 0,x={unversionedId:"apis",id:"version-3.1.0/apis",title:"Overview",description:"The overview of all APIs.",source:"@site/versioned_docs/version-3.1.0/api-overview.mdx",sourceDirName:".",slug:"/apis/",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/api-overview.mdx",tags:[],version:"3.1.0",frontMatter:{id:"apis",title:"Overview",description:"The overview of all APIs.",slug:"/apis/"},sidebar:"version-3.1.0/apis",next:{title:"readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/readme"}},y={},E=[{value:"Classes",id:"classes",level:2},{value:"Functions",id:"functions",level:2}],v={toc:E};function u(e){var t=e.components,a=(0,n.Z)(e,f);return(0,r.kt)("wrapper",(0,l.Z)({},v,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This package is a single-module package. The classes are shown in the following figure:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{className:"mermaid",mdxType:"OverviewSvg"})),(0,r.kt)("p",null,"In most APIs, the ",(0,r.kt)("inlineCode",{parentName:"p"},"string")," formatted arguments accept both ",(0,r.kt)("inlineCode",{parentName:"p"},"str")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"bytes")," objects. If a ",(0,r.kt)("inlineCode",{parentName:"p"},"str")," object is given, its coding will be recognized by the file system encoding, see ",(0,r.kt)("a",{parentName:"p",href:"https://docs.python.org/zh-cn/3/c-api/unicode.html#c.PyUnicode_DecodeFSDefaultAndSize",title:"PyUnicode_DecodeFSDefaultAndSize"},(0,r.kt)("inlineCode",{parentName:"a"},"PyUnicode_DecodeFSDefaultAndSize"),(0,r.kt)(s.Z,{mdxType:"IconExternalLink"})),". If a ",(0,r.kt)("inlineCode",{parentName:"p"},"bytes")," object is given, the contents will be converted to a ",(0,r.kt)("inlineCode",{parentName:"p"},"std::string")," directly. Therefore, if users want to use an argument with a specific encoding, they could use ",(0,r.kt)("inlineCode",{parentName:"p"},"str_argu.encode('...')")," instead of using ",(0,r.kt)("inlineCode",{parentName:"p"},"str_argu")," directly."),(0,r.kt)("h2",{id:"classes"},"Classes"),(0,r.kt)("p",null,"The module contains four classes:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Classes"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.1.0",url:"MpegCoder.h#L21",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegDecoder"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg decoder. It could be used for demuxing a video file, and return the extracted frames or GOPs.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.1.0",url:"MpegCoder.h#L82",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegEncoder"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg encoder. It is used for writing a video file. The data is encoded frame-by-frame.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.1.0",url:"MpegStreamer.h#L49",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegClient"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg decoder designed for pulling and demuxing a remote video stream. This class manages a ",(0,r.kt)("inlineCode",{parentName:"td"},"std::thread"),", and use the thread to synchronize the decoder with the real-time stream.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.1.0",url:"MpegStreamer.h#L114",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegServer"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg encoder designed for muxing and pushing a remote video stream. The stream is pushed frame-by-frame. Note that this class is required to be used with an active server.")))),(0,r.kt)("h2",{id:"functions"},"Functions"),(0,r.kt)("p",null,"The following functions are global methods of the module."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Functions"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.1.0",url:"MpegPyd.h#L131",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:c.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"setGlobal"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"Used for setting the global configurations of the module.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.1.0",url:"MpegPyd.h#L158",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:c.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"readme"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"Readme function. This method is used for printing brief instructions and updating reports of the module.")))))}u.isMDXComponent=!0},6577:function(e,t){t.Z={body:''}},7795:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/4eefc1d0.73b04b25.js b/assets/js/4eefc1d0.73b04b25.js new file mode 100644 index 0000000..d33875a --- /dev/null +++ b/assets/js/4eefc1d0.73b04b25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[507],{236:function(e,n,t){t.r(n),t.d(n,{assets:function(){return g},contentTitle:function(){return h},default:function(){return k},frontMatter:function(){return c},metadata:function(){return u},toc:function(){return v}});var r=t(3117),a=t(102),o=(t(7294),t(3905)),i=t(541),s=t(5514),d=t(2895),l=t(5099),p=t(1533),m=["components"],c={id:"server",title:"Pushing a video stream",sidebar_label:"Server",slug:"/examples/server",description:"Example codes for pushing a stream on the server side."},h=void 0,u={unversionedId:"guides/examples/server",id:"version-3.2.x/guides/examples/server",title:"Pushing a video stream",description:"Example codes for pushing a stream on the server side.",source:"@site/versioned_docs/version-3.2.x/guides/examples/server.mdx",sourceDirName:"guides/examples",slug:"/examples/server",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/server",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/guides/examples/server.mdx",tags:[],version:"3.2.x",frontMatter:{id:"server",title:"Pushing a video stream",sidebar_label:"Server",slug:"/examples/server",description:"Example codes for pushing a stream on the server side."},sidebar:"docs",previous:{title:"Client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/client"},next:{title:"Troubleshooting",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/troubleshooting"}},g={},v=[{value:"Preparation",id:"preparation",level:2},{value:"Non-blocking example",id:"non-blocking-example",level:2},{value:"Dual-process example",id:"dual-process-example",level:2}],f={toc:v};function k(e){var n=e.components,t=(0,a.Z)(e,m);return(0,o.kt)("wrapper",(0,r.Z)({},f,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"preparation"},"Preparation"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"ffserver")," has been removed after FFMpeg ",(0,o.kt)("inlineCode",{parentName:"p"},"3.4")," (see the docs ",(0,o.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/ffserver",title:"ffserver"},"here",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"})),"). In other words, FFMpeg could not work without a server program. The same case exists in our ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". Users need to start a server program first. The server program will keeps listening and waiting for any pushed streams. After that, ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," would push the stream to the server by ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegServer"),"."),(0,o.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"It is also supported if you push a stream with ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," and receive the same stream with ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegClient")," in the same time. But we recommend users to run ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient")," on different devices, because the encoder implemented in ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," may occupy a lot of system resources."))),(0,o.kt)("p",null,"We recommend the following video server projects. User could choose one from them according to their requirements."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Project"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Windows"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Linux"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/aler9/rtsp-simple-server",title:"RTSP Simple Server"},"RTSP Simple Server",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/klaxa/mkvserver_mk2/blob/master/Makefile",title:"Matroska Server Mk2"},"Matroska Server Mk2",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://ossrs.net/releases",title:"Simple Realtime Server"},"Simple Realtime Server",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"}))))),(0,o.kt)("p",null,"Take ",(0,o.kt)("em",{parentName:"p"},"RTSP Simple Server")," on Windows as an example. We only need to launch the server program by one command:"),(0,o.kt)("p",null,(0,o.kt)("img",{style:{maxWidth:"800px",width:"100%"},src:p.Z,alt:"Launch the RTSP Simple Server"})),(0,o.kt)("p",null,"When the server is listening, we could use the following addresses for the testings"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"rtsp://localhost:8554/\nrtmp://localhost:1935/\n")),(0,o.kt)("h2",{id:"non-blocking-example"},"Non-blocking example"),(0,o.kt)("p",null,"This example is based on the non-blocking API ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),". Synchronization is an important problem when pushing a stream. If we keeps using ",(0,o.kt)("inlineCode",{parentName:"p"},"ServeFrame()"),", the frames would be sent as many as possible. The newly income frames would override the previous pushed frames. In some cases, the server would be broken, because the server could not accept so many frames."),(0,o.kt)("p",null,"To make the server works properly, we need to push the frames according to the video timestamp. When ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.FFmpegSetup()")," is called, we mark this time point as a starting time. ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," will maintain a timer. Everytime users call ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.getParemeter('waitRef')"),", the method would returns a waiting period, indicating how long the pushed video stream is ahead of the playing time. The waiting period is half of the aforementioned time lag (the unit of the returned value is ",(0,o.kt)("em",{parentName:"p"},"second"),"). If we have pushed too much frames, we need to let the server wait for a while."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python",metastring:'{16,19-20} title="server-non-blocking.py" showLineNumbers',"{16,19-20}":!0,title:'"server-non-blocking.py"',showLineNumbers:!0},"import time\nimport mpegCoder\n\nd = mpegCoder.MpegDecoder()\nopened = d.FFmpegSetup('test-video.mp4')\ne = mpegCoder.MpegServer()\ne.setParameter(configDict=d.getParameter(), codecName='libx264', videoAddress='rtsp://localhost:8554/video') # inherit most of parameters from the decoder.\nopened = opened and e.FFmpegSetup() # Load the pusher.\nif opened: # If the decoder and the pusher are not loaded successfully, do not continue.\n gop = True\n s = 0\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\n if gop is not None:\n for i in gop: # Select every frame.\n e.ServeFrame(i) # Serve current frame.\n s += 1\n if s == 10: # Wait for synchronization for each 10 frames.\n wait = e.getParameter('waitRef')\n time.sleep(wait)\n s = 0\n e.FFmpegClose() # End encoding and pushing, and flush all frames in cache.\nelse:\n print(e)\ne.clear() # Close the pusher.\nd.clear() # Close the decoder.\n")),(0,o.kt)("h2",{id:"dual-process-example"},"Dual-process example"),(0,o.kt)("p",null,"The above example is not an elegant implementation, because ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," occupy the same main thread. When decoder takes a lot of time, there would be an obvious latency. Therefore, we suggest users to split ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," to two different sub-processes. The following codes are implemented by this way. The decoder and the streamer are synchronized by a shared queue. Instead of using ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),", we use ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrameBlock()")," here. Each time this method is called, ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," will check the current playing time first, and ensure that the timestamp of the newly incoming frame is not ahead of the playing time too much. If the time lag between the new frame and the playing time is too long, the method will wait until the time lag becomes small enough."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python",metastring:'{14,21,23,37,43,45} title="server-dual-procs.py" showLineNumbers',"{14,21,23,37,43,45}":!0,title:'"server-dual-procs.py"',showLineNumbers:!0},"import mpegCoder\nimport multiprocessing\n\n\nclass Decoder(multiprocessing.Process):\n def __init__(self, video_name='test-video.mp4', q_o=None, name=None, daemon=None):\n super().__init__(name=name, daemon=daemon)\n self.video_name = video_name\n self.q_o = q_o\n\n def run(self):\n d = mpegCoder.MpegDecoder()\n opened = d.FFmpegSetup(self.video_name)\n self.q_o.put(d.getParameter())\n if opened:\n gop = True\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\n if gop is not None:\n for i in gop: # Select every frame.\n self.q_o.put(i)\n else:\n self.q_o.put(None)\n else:\n print(d)\n d.clear()\n\n\nclass Encoder(multiprocessing.Process):\n def __init__(self, video_addr='rtsp://localhost:8554/video', q_i=None, name=None, daemon=None):\n super().__init__(name=name, daemon=daemon)\n self.video_addr = video_addr\n self.q_i = q_i\n\n def run(self):\n e = mpegCoder.MpegServer()\n config_dict = self.q_i.get() # Get decoder configurations.\n e.setParameter(configDict=config_dict, codecName='libx264', maxBframe=16, videoAddress=self.video_addr)\n opened = e.FFmpegSetup()\n if opened: # If pusher is not loaded successfully, do not continue.\n frame = True\n while frame is not None:\n frame = self.q_i.get() # Get one frame.\n if frame is not None:\n e.ServeFrameBlock(frame) # Encode and serve the current frame.\n e.FFmpegClose() # End encoding, and flush all frames in cache.\n else:\n print(e)\n e.clear()\n\n\nif __name__ == '__main__':\n queue_data = multiprocessing.Queue(maxsize=20)\n proc_dec = Decoder(video_name='test-video.mp4', q_o=queue_data, daemon=True)\n proc_enc = Encoder(video_addr='rtsp://localhost:8554/video', q_i=queue_data, daemon=True)\n proc_dec.start()\n proc_enc.start()\n proc_enc.join()\n proc_dec.join()\n")),(0,o.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"In the above examples, we use ",(0,o.kt)("inlineCode",{parentName:"p"},"configDict")," for ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.setParameter()"),". The input value is a python dict returned by ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder.getParameter()"),". This API is equivalent to using ",(0,o.kt)("inlineCode",{parentName:"p"},"e.setParameter(decoder=d)"),". However, we have to use the equivalent API here, because all classes of ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," could not be pickled."))))}k.isMDXComponent=!0},1533:function(e,n,t){n.Z=t.p+"assets/images/server-dd63ab08f996ce882cf07555a28f9091.png"},2895:function(e,n){n.Z={body:''}},5099:function(e,n){n.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/50d57345.95edf161.js b/assets/js/50d57345.95edf161.js new file mode 100644 index 0000000..38cbdb4 --- /dev/null +++ b/assets/js/50d57345.95edf161.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[5121],{5549:function(e,t,a){a.d(t,{A:function(){return l},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function l(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=d+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},390:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return h},default:function(){return v},frontMatter:function(){return k},metadata:function(){return N},toc:function(){return g}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),d=a(541),l=a(5514),o=a(6577),m=a(2895),p=a(7508),s=a(5549),c=["components"],k={id:"MpegDecoder",title:"MpegDecoder",sidebar_label:"MpegDecoder",slug:"/apis/MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly."},h=void 0,N={unversionedId:"apis/MpegDecoder",id:"version-3.1.0/apis/MpegDecoder",title:"MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly.",source:"@site/versioned_docs/version-3.1.0/apis/MpegDecoder.mdx",sourceDirName:"apis",slug:"/apis/MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegDecoder",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/apis/MpegDecoder.mdx",tags:[],version:"3.1.0",frontMatter:{id:"MpegDecoder",title:"MpegDecoder",sidebar_label:"MpegDecoder",slug:"/apis/MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly."},sidebar:"version-3.1.0/apis",previous:{title:"setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/setGlobal"},next:{title:"MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegEncoder"}},u={},g=[{value:"Arguments",id:"arguments",level:2},{value:"Requires",id:"requires",level:3},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"ExtractFrame",id:"extractframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractFrameByTime",id:"extractframebytime",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractGOP",id:"extractgop",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractGOPByTime",id:"extractgopbytime",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ResetGOPPosition",id:"resetgopposition",level:3},{value:"Requires",id:"requires",level:4},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Scale the decoded frame",id:"scale-the-decoded-frame",level:3},{value:"Use multi-thread decoding",id:"use-multi-thread-decoding",level:3}],f={toc:g};function v(e){var t=e.components,a=(0,r.Z)(e,c);return(0,i.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(s.q,{mdxType:"Splitter"}),(0,i.kt)(s.A,{ver:"3.1.0",url:"MpegCoder.h#L21",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec = mpegCoder.MpegDecoder(videoPath=None)\n")),(0,i.kt)("p",null,"The frame-level video decoder used for demuxing a video file."),(0,i.kt)("p",null,"This decoder instance serves as a video file reader. It supports:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Decoding the video frames into ",(0,i.kt)("a",{parentName:"li",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),"."),(0,i.kt)("li",{parentName:"ul"},"Reading video frames consecutively."),(0,i.kt)("li",{parentName:"ul"},"Setting the reading cursor to any position."),(0,i.kt)("li",{parentName:"ul"},"Scaling the decoded video frames to a specific size.")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," requires users to initialize the decoder before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the decoder is destructed."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("h3",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read. Configuring this value will causes the video to be opened by ",(0,i.kt)("a",{parentName:"td",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". We do not recommend users to set this value when initializing the decoder.")))),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"except")," the default video path. If a video is opened by the decoder, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file readers."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.resetPath(videoPath)\n")),(0,i.kt)("p",null,"Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = dec.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the read video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the read video. This value is determined by the video file.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the read video. This value is determined by the video file.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameCount")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of returned frames in the last frame extraction method.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"coderName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the codec used for decoding the video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"duration")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The total seconds of this video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"estFrameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The estimated total frame number (may be not accurate).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"avgFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The average of the frame rate of the video stream. The unit is FPS.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters. These parameters could serve as ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict")," for ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegEncoder")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegServer"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.setParameter(widthDst=None, heightDst=None, nthread=None)\n")),(0,i.kt)("p",null,"Set the configurations of the decoder. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.FFmpegSetup(videoPath=None)\n")),(0,i.kt)("p",null,"Open the video file, and initialize the decoder. After the decoder initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video is being opened by the decoder now, this video will be closed first, then the new video will be opened."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = dec.ExtractFrame(framePos=0, frameNum=1)\n")),(0,i.kt)("p",null,"Extract several frames at a specific position."),(0,i.kt)("p",null,"This API is recommended to be used when users only want to fetch few frames. The API will seek the starting position defined by ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos"),", then extract the required number of frames."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used as the starting postion. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of frames that require to be extracted.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")," (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum"),"), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframebytime"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrameByTime")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = dec.ExtractFrameByTime(timePos=0, frameNum=1)\n")),(0,i.kt)("p",null,"Extract several frames at a specific position."),(0,i.kt)("p",null,"The functionality of this API is the same as ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()")),". Instead of using a frame index, this method seek the reading cursor by a time point (the unit is ",(0,i.kt)("inlineCode",{parentName:"p"},"second"),")."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used as the starting postion. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of frames that require to be extracted.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")," (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum"),"), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractgop"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractGOP")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ExtractGOP(framePos=-1)\n")),(0,i.kt)("p",null,"Extract a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of Pictures (GOP)",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". The GOP size is determined by the video file. ",(0,i.kt)("del",{parentName:"p"},"Users could use ",(0,i.kt)("a",{parentName:"del",href:"#getparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"getParameter()"))," to find the GOP size.")),(0,i.kt)("p",null,"We recommend to use ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractGOP()")," when a video file needs to be read consecutively. When the returned value is ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),", the read cursor reaches the end of the video."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Each time this method is used with ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos>=0"),", the current reading cursor will be reset by ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos"),"."))),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects, the GOP will be extracted from the current reading cursor position.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"gop")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is the GOP size (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than the GOP size), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractgopbytime"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractGOPByTime")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ExtractGOPByTime(timePos=-1)\n")),(0,i.kt)("p",null,"Extract a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of Pictures",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". Instead of using a frame index, this method uses a time point (the unit is ",(0,i.kt)("inlineCode",{parentName:"p"},"second"),") to seek the starting position."),(0,i.kt)("p",null,"We recommend to use ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractGOPByTime()")," when a video file needs to be read consecutively. When the returned value is ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),", the read cursor reaches the end of the video."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Each time this method is used with ",(0,i.kt)("inlineCode",{parentName:"p"},"timePos>=0"),", the current reading cursor will be reset by ",(0,i.kt)("inlineCode",{parentName:"p"},"timePos"),"."))),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects, the GOP will be extracted from the current reading cursor position.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"gop")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is the GOP size (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than the GOP size), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetgopposition"},(0,i.kt)("inlineCode",{parentName:"h3"},"ResetGOPPosition")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ResetGOPPosition(framePos=-1, timePos=-1)\n")),(0,i.kt)("p",null,"Reset the current reading cursor of ",(0,i.kt)("a",{parentName:"p",href:"#extractgop"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractGOP()"))," and ",(0,i.kt)("a",{parentName:"p",href:"#extractgopbytime"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractGOPByTime()")),". The cursor could be set by either a frame index or a time point (",(0,i.kt)("inlineCode",{parentName:"p"},"second"),"). This method is merely a configuration, and will not return the GOP."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used for seeking the starting position of the GOP. If this value is configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0")," or the ",(0,i.kt)("inlineCode",{parentName:"td"},"framePos")," is configured, it will not take effects.")))),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(dec)\n")),(0,i.kt)("p",null,"Return a brief report of the current decoder status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the decoder status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/decoding"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Decoding")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"scale-the-decoded-frame"},"Scale the decoded frame"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\ndec.setParameter(widthDst=720, heightDst=486)\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-decoding"},"Use multi-thread decoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\ndec.setParameter(nthread=8)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/50f50aa1.026667cf.js b/assets/js/50f50aa1.026667cf.js new file mode 100644 index 0000000..6e3a8d3 --- /dev/null +++ b/assets/js/50f50aa1.026667cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3655],{5549:function(e,t,a){a.d(t,{A:function(){return l},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function l(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=d+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},2035:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return k},default:function(){return v},frontMatter:function(){return h},metadata:function(){return N},toc:function(){return g}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),d=a(541),l=a(5514),o=a(6577),p=a(2895),m=a(7508),c=a(5549),s=["components"],h={id:"MpegEncoder",title:"MpegEncoder",sidebar_label:"MpegEncoder",slug:"/apis/MpegEncoder",description:"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly."},k=void 0,N={unversionedId:"apis/MpegEncoder",id:"apis/MpegEncoder",title:"MpegEncoder",description:"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly.",source:"@site/docs/apis/MpegEncoder.mdx",sourceDirName:"apis",slug:"/apis/MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegEncoder",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/apis/MpegEncoder.mdx",tags:[],version:"current",frontMatter:{id:"MpegEncoder",title:"MpegEncoder",sidebar_label:"MpegEncoder",slug:"/apis/MpegEncoder",description:"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly."},sidebar:"apis",previous:{title:"MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegDecoder"},next:{title:"MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegClient"}},u={},g=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"EncodeFrame",id:"encodeframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"FFmpegClose",id:"ffmpegclose",level:3},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Optimize the video encoding",id:"optimize-the-video-encoding",level:3},{value:"Rescale and resample the video",id:"rescale-and-resample-the-video",level:3},{value:"Use the AV1 encoder",id:"use-the-av1-encoder",level:3},{value:"Use multi-thread encoding",id:"use-multi-thread-encoding",level:3}],f={toc:g};function v(e){var t=e.components,a=(0,r.Z)(e,s);return(0,i.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(c.q,{mdxType:"Splitter"}),(0,i.kt)(c.A,{ver:"3.2.0",url:"MpegCoder.h#L82",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc = mpegCoder.MpegEncoder()\n")),(0,i.kt)("p",null,"The frame-level video encoder used for muxing a video file."),(0,i.kt)("p",null,"This encoder instance serves as a video file writer. It supports:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Encode a 3D ",(0,i.kt)("a",{parentName:"li",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," as a video frame."),(0,i.kt)("li",{parentName:"ul"},"Configure the codec type and the video parameters."),(0,i.kt)("li",{parentName:"ul"},"Scaling the encoded video frames to a specific size.")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," requires users to initialize the encoder before writing frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the encoder is destructed. During the distruction, hitting ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," will cause the written video to break."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("p",null,"This class does not has initialization arguments."),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"including")," the default video path. If a video is opened by the encoder, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file writers."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.resetPath(videoPath)\n")),(0,i.kt)("p",null,"Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be written.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = enc.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the written video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"codecName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the written video (Kb/s). This value determines the output video size directly.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the written video. This value is mainly determined by the user configurations.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the written video. This value is mainly determined by the user configurations.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,i.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,i.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the written video. The unit is FPS.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.setParameter(\n decoder=None, configDict=None, videoPath=None, codecName=None,\n nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None,\n GOPSize=None, maxBframe=None, frameRate=None\n)\n")),(0,i.kt)("p",null,"Set the configurations of the encoder. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"decoder")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"./MpegDecoder"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegDecoder"))," or ",(0,i.kt)("a",{parentName:"td",href:"./MpegClient"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegClient"))),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"When configure this argument, the required configurations will be copied from a decoder or a client. If users also provide duplicated arguments in the same call, these copied parameters have a lower preference than those specified by users. This argument is useful when trancoding a video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"configDict")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"dict")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"An alternative of the argument ",(0,i.kt)("inlineCode",{parentName:"td"},"decoder")," when the parameters need to be passed through different processes. Using ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict=decoder.getParameter()")," is equivalent to using ",(0,i.kt)("inlineCode",{parentName:"td"},"decoder=decoder"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the written video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"codecName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the written video (Kb/s). This value determines the output video size directly.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the written video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the written video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,i.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,i.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,i.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,i.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"tuple")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the written video. This value should be a tuple of two ",(0,i.kt)("inlineCode",{parentName:"td"},"int"),"s: ",(0,i.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". This format is consistent with ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/structAVRational.html",title:"AVRational"},(0,i.kt)("inlineCode",{parentName:"a"},"AVRational"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.FFmpegSetup(videoPath=None)\n")),(0,i.kt)("p",null,"Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the file name and the user configurations set by ",(0,i.kt)("a",{parentName:"p",href:"#setparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"setParameter()")),". If an video is being opened by the encoder now, this video will be closed first, then the new video will be opened with the same configurations."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be written. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"encodeframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"EncodeFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"is_success = enc.EncodeFrame(PyArrayFrame)\n")),(0,i.kt)("p",null,"Encode one frame into the video. Note that in most cases, the frame will not be written to the file instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the file."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,i.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,i.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"is_success")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"bool")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The status of the frame encoding. If the given frame succeeds to be encoded, will return ",(0,i.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,i.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegclose"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegClose")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"enc.FFmpegClose()\n")),(0,i.kt)("p",null,"Close the video file. Calling this method will flush all buffered frames into the file. Then the video tail will be writen to the file. If users does not call this method explicitly, it will be called when ",(0,i.kt)("a",{parentName:"p",href:"#clear"},(0,i.kt)("inlineCode",{parentName:"a"},"clear()"))," is called or when the encoder is destructed."),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(enc)\n")),(0,i.kt)("p",null,"Return a brief report of the current encoder status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the encoder status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/transcoding"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Transcoding")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"optimize-the-video-encoding"},"Optimize the video encoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\n...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(decoder=dec, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16)\n...\n")),(0,i.kt)("h3",{id:"rescale-and-resample-the-video"},"Rescale and resample the video"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(width=1280, height=720, frameRate=(5, 1), codecName='libx265', videoPath='test-video-x265.mp4')\n...\n")),(0,i.kt)("h3",{id:"use-the-av1-encoder"},"Use the AV1 encoder"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(width=1280, height=720, codecName='libsvtav1', videoPath='test-video-av1.mp4')\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-encoding"},"Use multi-thread encoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\nenc = mpegCoder.MpegEncoder()\nenc.setParameter(nthread=8)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/5324cf9c.13ce4d82.js b/assets/js/5324cf9c.13ce4d82.js new file mode 100644 index 0000000..c89c3d6 --- /dev/null +++ b/assets/js/5324cf9c.13ce4d82.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3442],{8793:function(e,t,n){var a=n(7294),r=n(9960),o=n(1954),i=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],l=t[1];(0,a.useEffect)((function(){l(!0)}),[]);var d,p,m,s=(d=(0,i.I)(),p=d.colorMode,d.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+s+" button--lg button--index":"button "+s+" button--lg",a.createElement(r.Z,{key:String(n),className:m,to:e.to},e.icon&&a.createElement(o.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},2456:function(e,t,n){n.r(t),n.d(t,{assets:function(){return u},contentTitle:function(){return k},default:function(){return f},frontMatter:function(){return c},metadata:function(){return h},toc:function(){return g}});var a=n(3117),r=n(102),o=(n(7294),n(3905)),i=n(8793),l=n(541),d=n(5514),p=n(7225),m=n(866),s=["components"],c={id:"windows",title:"Installation for Windows",sidebar_label:"Windows",slug:"/installation/windows",description:"A tutorial about the installation or compilation of the package for Windows."},k=void 0,h={unversionedId:"guides/install/windows",id:"guides/install/windows",title:"Installation for Windows",description:"A tutorial about the installation or compilation of the package for Windows.",source:"@site/docs/guides/install/windows.mdx",sourceDirName:"guides/install",slug:"/installation/windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/windows",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/install/windows.mdx",tags:[],version:"current",frontMatter:{id:"windows",title:"Installation for Windows",sidebar_label:"Windows",slug:"/installation/windows",description:"A tutorial about the installation or compilation of the package for Windows."},sidebar:"docs",previous:{title:"PyPI",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/pypi"},next:{title:"Linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/linux"}},u={},g=[{value:"Install the pre-compiled module",id:"install-the-pre-compiled-module",level:2},{value:"Download mpegCoder",id:"download-mpegcoder",level:3},{value:"Install Numpy",id:"install-numpy",level:3},{value:"Download dependencies",id:"download-dependencies",level:3},{value:"Import",id:"import",level:3},{value:"Compile the module",id:"compile-the-module",level:2}],N={toc:g};function f(e){var t=e.components,n=(0,r.Z)(e,s);return(0,o.kt)("wrapper",(0,a.Z)({},N,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This guide contains steps for installing or compiling the ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," module manually. We recommend users who need to use ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," in a project locally to install the package by this way."),(0,o.kt)("h2",{id:"install-the-pre-compiled-module"},"Install the pre-compiled module"),(0,o.kt)("h3",{id:"download-mpegcoder"},"Download ",(0,o.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,o.kt)("p",null,"First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,o.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,o.kt)("th",{parentName:"tr",align:"center"},"VS"),(0,o.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py310.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.10.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py39.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.9.12")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py38.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.8.13")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py37.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.21.5")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.7.12")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py36.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.19.5")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.6.15")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))))),(0,o.kt)("p",null,"After extracting the tarball, we could get ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd"),"."),(0,o.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"Note that the above versions only show the environment when building ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". It does not mean that they are the dependencies of running ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". For example, users could use ",(0,o.kt)("inlineCode",{parentName:"p"},"python 3.9.5")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"numpy 1.22.0")," to run ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,o.kt)("h3",{id:"install-numpy"},"Install Numpy"),(0,o.kt)("p",null,"To run ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", you are required to install ",(0,o.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,o.kt)(l.Z,{mdxType:"IconExternalLink"}))," with the correct version first. The best version for each ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," release has been listed before. If your Numpy version is differnt from the best version too much, ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," may not work. Here is the command for installation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"python -m pip install numpy==\n")),(0,o.kt)("h3",{id:"download-dependencies"},"Download dependencies"),(0,o.kt)("p",null,"The pre-compiled dependencies are available on our release page. The dependencies contain several ",(0,o.kt)("inlineCode",{parentName:"p"},".dll")," files. Users also need to download the tarball with the correct FFMpeg version, and extract the files."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/dll-win-ffmpeg_5_0.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"5.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"})))))),(0,o.kt)("p",null,"The above files are collected from the officially released FFMpeg shared libraries. Users could also find them ",(0,o.kt)("a",{parentName:"p",href:"https://www.gyan.dev/ffmpeg/builds/#release-section",title:"FFMpeg release"},"here",(0,o.kt)(l.Z,{mdxType:"IconExternalLink"})),"."),(0,o.kt)("h3",{id:"import"},"Import"),(0,o.kt)("p",null,"To import the module, users need to place the ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd")," and the dependencies in the same folder. For example,"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},".\n|---mpegCoder.pyd\n|---avcodec-59.dll\n|---avformat-59.dll\n|---avutil-57.dll\n|---swresample-4.dll\n`---swscale-6.dll\n")),(0,o.kt)("p",null,"After that, users could enter the same folder, and import the module by"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import mpegCoder\n")),(0,o.kt)("h2",{id:"compile-the-module"},"Compile the module"),(0,o.kt)("p",null,"If users need to compile the module by themselves, please follow the instructions on Github:"),(0,o.kt)("p",null,(0,o.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/README.md",icon:m.Z,mdxType:"DarkButton"},"Compile with VS2022")))}f.isMDXComponent=!0},866:function(e,t){t.Z={body:'',width:24,height:24}},7225:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/53ae8f6a.b1dcb240.js b/assets/js/53ae8f6a.b1dcb240.js new file mode 100644 index 0000000..a8eba74 --- /dev/null +++ b/assets/js/53ae8f6a.b1dcb240.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[103],{3790:function(e,t,a){a.r(t),a.d(t,{assets:function(){return c},contentTitle:function(){return u},default:function(){return N},frontMatter:function(){return s},metadata:function(){return h},toc:function(){return k}});var n=a(3117),i=a(102),o=(a(7294),a(3905)),r=a(5514),p=a(3119),l=a(6552),d=a(36),m=["components"],s={id:"changelog",title:"Changelog",description:"The changelog of this project.",slug:"/changelog"},u=void 0,h={unversionedId:"changelog",id:"version-3.2.x/changelog",title:"Changelog",description:"The changelog of this project.",source:"@site/versioned_docs/version-3.2.x/changelog.mdx",sourceDirName:".",slug:"/changelog",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/changelog",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/changelog.mdx",tags:[],version:"3.2.x",frontMatter:{id:"changelog",title:"Changelog",description:"The changelog of this project.",slug:"/changelog"},sidebar:"docs",previous:{title:"Q&A",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/qna"}},c={},k=[{value:"Update Report of mpegCoder",id:"update-report-of-mpegcoder",level:2},{value:"V3.2.4 @ 4/24/2022",id:"v324--4242022",level:3},{value:"V3.2.3 @ 4/22/2022:",id:"v323--4222022",level:3},{value:"V3.2.2 @ 4/22/2022:",id:"v322--4222022",level:3},{value:"V3.2.1 @ 4/22/2022:",id:"v321--4222022",level:3},{value:"V3.2.0 @ 4/8/2022:",id:"v320--482022",level:3},{value:"V3.1.0 @ 7/23/2021:",id:"v310--7232021",level:3},{value:"V3.0.0 update report:",id:"v300-update-report",level:3},{value:"V2.05 update report:",id:"v205-update-report",level:3},{value:"V2.01 update report:",id:"v201-update-report",level:3},{value:"V2.0 update report:",id:"v20-update-report",level:3},{value:"V1.8 update report:",id:"v18-update-report",level:3},{value:"V1.7-linux update report:",id:"v17-linux-update-report",level:3},{value:"V1.7 update report:",id:"v17-update-report",level:3},{value:"V1.5 update report:",id:"v15-update-report",level:3},{value:"V1.4 update report:",id:"v14-update-report",level:3},{value:"V1.2 update report:",id:"v12-update-report",level:3},{value:"V1.0 update report:",id:"v10-update-report",level:3}],g={toc:k};function N(e){var t=e.components,a=(0,i.Z)(e,m);return(0,o.kt)("wrapper",(0,n.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"This page do not need and will not be translated to other laungages."))),(0,o.kt)("h2",{id:"update-report-of-mpegcoder"},"Update Report of ",(0,o.kt)("inlineCode",{parentName:"h2"},"mpegCoder")),(0,o.kt)("h3",{id:"v324--4242022"},"V3.2.4 @ 4/24/2022"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug when ",(0,o.kt)("inlineCode",{parentName:"p"},"tqdm<4.40.0")," is installed. Previously, this problem should not trigger if ",(0,o.kt)("inlineCode",{parentName:"p"},"tqdm>4.40.0")," is installed, or ",(0,o.kt)("inlineCode",{parentName:"p"},"tqdm")," is not installed (",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/5"},(0,o.kt)(r.Z,{icon:p.Z,mdxType:"InlineIcon"})," issue #5"),").")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix the same bug (mentioned by item 1) in the ",(0,o.kt)("inlineCode",{parentName:"p"},"setup.py")," script.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add change logs to ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/3.2.4-pypi"},(0,o.kt)(r.Z,{icon:d.Z,mdxType:"InlineIcon"})," PyPI release branch"),"."))),(0,o.kt)("h3",{id:"v323--4222022"},"V3.2.3 @ 4/22/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Fix a severe bug that causes the dependencies to be downloaded repeatedly.")),(0,o.kt)("h3",{id:"v322--4222022"},"V3.2.2 @ 4/22/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Fix a typo: ",(0,o.kt)("inlineCode",{parentName:"li"},"mpegCoder.__verion__")," ",(0,o.kt)(r.Z,{icon:l.Z,mdxType:"InlineIcon"})," ",(0,o.kt)("inlineCode",{parentName:"li"},"mpegCoder.__version__"),".")),(0,o.kt)("h3",{id:"v321--4222022"},"V3.2.1 @ 4/22/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix an issue caused by the missing dependency ",(0,o.kt)("inlineCode",{parentName:"p"},"libcrypto.so.1.1"),". This fixture is only required by the Linux version.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Format the PyPI release script."))),(0,o.kt)("h3",{id:"v320--482022"},"V3.2.0 @ 4/8/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Upgrade to ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 5.0")," version.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix the const assignment bug caused by the codec configuration method.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(Only for Linux) Upgrade the dependencies of FFMpeg to the newest versions (",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/4"},(0,o.kt)(r.Z,{icon:p.Z,mdxType:"InlineIcon"})," issue #4"),").")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(About PyPI) Change the behavior of the PYPI ",(0,o.kt)("inlineCode",{parentName:"p"},".whl")," release. Now the dependencies will not be packed into ",(0,o.kt)("inlineCode",{parentName:"p"},".whl")," directly. When users ",(0,o.kt)("inlineCode",{parentName:"p"},"import mpegCoder")," for the first time, the dependency will be automatically downloaded. Please ensure that you have the authority to modify the ",(0,o.kt)("inlineCode",{parentName:"p"},"site-packages")," folder when you import ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," for the first time."))),(0,o.kt)("h3",{id:"v310--7232021"},"V3.1.0 @ 7/23/2021:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support ",(0,o.kt)("inlineCode",{parentName:"p"},"str()")," type for all string arguments.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support ",(0,o.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"ftp"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"sftp")," streams for ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support ",(0,o.kt)("inlineCode",{parentName:"p"},"nthread")," option for ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegEncoder"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug caused by the constructor ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer()"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Clean up all ",(0,o.kt)("inlineCode",{parentName:"p"},"gcc")," warnings of the source codes.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix typos in docstrings."))),(0,o.kt)("h3",{id:"v300-update-report"},"V3.0.0 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a severe memory leaking bugs when using ",(0,o.kt)("inlineCode",{parentName:"p"},"AVPacket"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug caused by using ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient.terminate()")," when a video is closed by the server.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support the ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),". This class is used for serving the online video streams.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Refactor the implementation of the loggings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add ",(0,o.kt)("inlineCode",{parentName:"p"},"getParameter()")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"setParameter(configDict)")," APIs to ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Move ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg")," depedencies and the ",(0,o.kt)("inlineCode",{parentName:"p"},"OutputStream")," class to the ",(0,o.kt)("inlineCode",{parentName:"p"},"cmpc")," space.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix dependency issues and cpp standard issues.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Upgrade to ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 4.4")," Version.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add a quick script for fetching the ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg")," dependencies."))),(0,o.kt)("h3",{id:"v205-update-report"},"V2.05 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a severe bug that causes the memory leak when using ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient"),".This bug also exists in ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder"),", but it seems that the bug would not cause memory leak in that case. (Although we have also fixed it now.)")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Upgrade to ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 4.0")," Version."))),(0,o.kt)("h3",{id:"v201-update-report"},"V2.01 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug that occurs when the first received frame may has a PTS larger than zero.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enable the project produce the newest ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 3.4.2")," version and use ",(0,o.kt)("inlineCode",{parentName:"p"},"Python 3.6.4"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"numpy 1.14"),". "))),(0,o.kt)("h3",{id:"v20-update-report"},"V2.0 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Revise the bug of the encoder which may cause the stream duration is shorter than the real duration of the video in some not advanced media players.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Improve the structure of the code and remove some unnecessary codes.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Provide a complete version of client, which could demux the video stream from a server in any network protocol."))),(0,o.kt)("h3",{id:"v18-update-report"},"V1.8 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Provide options ",(0,o.kt)("inlineCode",{parentName:"p"},"(widthDst, heightDst)")," to let ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," could control the output size manually. To ensure the option is valid, we must use the method ",(0,o.kt)("inlineCode",{parentName:"p"},"setParameter")," before ",(0,o.kt)("inlineCode",{parentName:"p"},"FFmpegSetup"),". Now you could use this options to get a rescaled output directly:"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-python"}," d = mpegCoder.MpegDecoder() # initialize\n d.setParameter(widthDst=400, heightDst=300) # noted that these options must be set before 'FFmpegSetup'! \n d.FFmpegSetup(b'i.avi') # the original video size would not influence the output\n print(d) # examine the parameters. You could also get the original video size by 'getParameter'\n d.ExtractFrame(0, 100) # get 100 frames with 400x300\n")),(0,o.kt)("p",{parentName:"li"},"In another example, the set optional parameters could be inherited by encoder, too:"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-python"}," d.setParameter(widthDst=400, heightDst=300) # set optional parameters\n ...\n e.setParameter(decoder=d) # the width/height would inherit from widthDst/heightDst rather than original width/height of the decoder.\n")),(0,o.kt)("p",{parentName:"li"},"Noted that we do not provide ",(0,o.kt)("inlineCode",{parentName:"p"},"widthDst"),"/",(0,o.kt)("inlineCode",{parentName:"p"},"heightDst")," in ",(0,o.kt)("inlineCode",{parentName:"p"},"getParameter"),", because these 2 options are all set by users. There is no need to get them from the video metadata. ")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Optimize some realization of Decoder so that its efficiency could be improved."))),(0,o.kt)("h3",{id:"v17-linux-update-report"},"V1.7-linux update report:"),(0,o.kt)("p",null,"Thanks to God, we succeed in this work!"),(0,o.kt)("p",null,"A new version is avaliable for Linux. To implement this tool, you need to install some libraries firstly:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"python3.5")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"numpy 1.13"))),(0,o.kt)("p",null,"If you want, you could install ",(0,o.kt)("inlineCode",{parentName:"p"},"ffmpeg")," on Linux: Here are some instructions"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Check every pack which ffmpeg needs here: ",(0,o.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu",title:"Dependency of FFmpeg"},"Dependency of FFmpeg"))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Use these steps to install ffmpeg instead of provided commands on the above site."))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-Bash"}," $ git clone https://git.ffmpeg.org/ffmpeg.git\n $ cd ffmpeg\n $ ./configure --prefix=host --enable-gpl --enable-libx264 --enable-libx265 --enable-shared --disable-static --disable-doc\n $ make\n $ make install\n")),(0,o.kt)("h3",{id:"v17-update-report"},"V1.7 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Realize the encoder totally.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Provide a global option ",(0,o.kt)("inlineCode",{parentName:"p"},"dumpLevel")," to control the log shown in the screen.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix bugs in initialize functions."))),(0,o.kt)("h3",{id:"v15-update-report"},"V1.5 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Provide an incomplete version of encoder, which could encode frames as a video stream that could not be played by player.")),(0,o.kt)("h3",{id:"v14-update-report"},"V1.4 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Fix a severe bug of the decoder, which causes the memory collapsed if decoding a lot of frames.")),(0,o.kt)("h3",{id:"v12-update-report"},"V1.2 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Use numpy array to replace the native pyList, which improves the speed significantly.")),(0,o.kt)("h3",{id:"v10-update-report"},"V1.0 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Provide the decoder which could decode videos in arbitrary formats and arbitrary coding.")))}N.isMDXComponent=!0},6552:function(e,t){t.Z={body:''}},36:function(e,t){t.Z={body:''}},3119:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/59f2bb84.8728f294.js b/assets/js/59f2bb84.8728f294.js new file mode 100644 index 0000000..868179c --- /dev/null +++ b/assets/js/59f2bb84.8728f294.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7215],{2986:function(e,t,l){var a,c,r,n,i,m,d,h,p,o,s,E,v,f,u,y,z,k,P,b,M,g,x,R,H,O,N,V,w,L,C,A,F,j,T,I,W,S,D,Z,G,B,Q,U,X,q,Y,J,K,_,$,ee,te,le,ae,ce,re,ne,ie,me,de,he,pe,oe,se,Ee,ve,fe,ue,ye,ze,ke,Pe,be,Me,ge,xe,Re,He,Oe,Ne,Ve,we,Le,Ce,Ae,Fe,je,Te,Ie,We,Se,De,Ze,Ge,Be,Qe,Ue,Xe,qe,Ye,Je,Ke,_e,$e,et,tt,lt,at,ct,rt,nt,it,mt,dt,ht,pt,ot,st,Et,vt,ft,ut,yt,zt,kt,Pt,bt,Mt,gt,xt,Rt,Ht,Ot,Nt,Vt,wt,Lt,Ct,At,Ft,jt,Tt,It,Wt,St,Dt,Zt,Gt,Bt,Qt,Ut,Xt,qt,Yt,Jt,Kt,_t,$t,el,tl,ll,al,cl,rl,nl,il,ml,dl,hl,pl,ol,sl,El,vl,fl,ul,yl,zl,kl,Pl,bl,Ml,gl,xl,Rl,Hl,Ol,Nl,Vl,wl,Ll,Cl,Al,Fl,jl,Tl,Il,Wl,Sl,Dl,Zl,Gl,Bl,Ql,Ul,Xl,ql,Yl,Jl,Kl,_l,$l,ea,ta,la,aa,ca,ra,na,ia,ma,da,ha,pa,oa,sa,Ea,va,fa,ua,ya,za,ka,Pa,ba,Ma,ga,xa,Ra,Ha,Oa,Na,Va,wa,La,Ca,Aa,Fa,ja,Ta,Ia,Wa,Sa,Da,Za,Ga,Ba,Qa,Ua,Xa,qa,Ya,Ja,Ka,_a,$a,ec,tc,lc,ac,cc,rc,nc,ic,mc,dc,hc,pc,oc,sc,Ec,vc,fc,uc,yc,zc,kc,Pc,bc,Mc,gc,xc,Rc,Hc,Oc,Nc,Vc,wc,Lc,Cc,Ac,Fc,jc,Tc,Ic,Wc,Sc,Dc,Zc,Gc,Bc,Qc,Uc,Xc,qc,Yc,Jc,Kc,_c,$c,er,tr,lr,ar,cr,rr,nr,ir,mr,dr,hr,pr,or,sr,Er,vr,fr,ur,yr,zr,kr,Pr,br,Mr,gr,xr,Rr,Hr,Or,Nr,Vr,wr,Lr,Cr,Ar,Fr,jr,Tr,Ir,Wr,Sr,Dr,Zr,Gr,Br,Qr,Ur,Xr,qr,Yr,Jr,Kr,_r,$r,en,tn,ln,an,cn,rn,nn,mn,dn,hn,pn,on,sn,En,vn,fn,un,yn,zn,kn,Pn,bn,Mn,gn,xn,Rn,Hn,On,Nn,Vn,wn,Ln,Cn,An,Fn,jn,Tn,In,Wn,Sn,Dn,Zn,Gn,Bn,Qn,Un,Xn,qn,Yn,Jn,Kn,_n,$n,ei,ti,li,ai,ci,ri,ni,ii,mi,di,hi,pi,oi,si,Ei,vi,fi,ui,yi,zi,ki,Pi,bi,Mi,gi,xi,Ri,Hi,Oi,Ni,Vi,wi,Li,Ci,Ai,Fi,ji,Ti,Ii,Wi,Si,Di,Zi,Gi,Bi,Qi,Ui,Xi,qi,Yi,Ji,Ki,_i,$i,em,tm,lm,am,cm,rm,nm,im,mm,dm,hm,pm,om,sm,Em,vm,fm,um,ym,zm,km,Pm,bm,Mm,gm,xm,Rm,Hm,Om,Nm,Vm,wm,Lm,Cm,Am,Fm,jm,Tm,Im,Wm,Sm,Dm,Zm,Gm,Bm,Qm,Um,Xm,qm,Ym,Jm,Km,_m,$m,ed,td,ld,ad,cd,rd,nd,id,md,dd,hd,pd,od,sd,Ed,vd,fd,ud,yd,zd,kd,Pd,bd,Md,gd,xd,Rd,Hd,Od,Nd,Vd,wd,Ld,Cd,Ad,Fd,jd,Td,Id,Wd,Sd,Dd,Zd,Gd,Bd,Qd,Ud,Xd,qd,Yd,Jd,Kd,_d,$d,eh,th,lh,ah,ch,rh,nh,ih,mh,dh,hh,ph,oh,sh,Eh,vh,fh,uh,yh,zh,kh,Ph,bh,Mh,gh,xh,Rh,Hh,Oh,Nh,Vh,wh,Lh,Ch,Ah,Fh,jh,Th,Ih,Wh,Sh,Dh=l(7294),Zh=["title","titleId"];function Gh(){return Gh=Object.assign||function(e){for(var t=1;t=0||(c[l]=e[l]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(c[l]=e[l])}return c}t.Z=function(e){var t=e.title,l=e.titleId,Qh=Bh(e,Zh);return Dh.createElement("svg",Gh({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:"100%",style:{maxWidth:"624.696px",height:"auto",maxHeight:"281.512px"},viewBox:"0 0 624.696 281.512",id:"graph-div","aria-labelledby":l},Qh),t?Dh.createElement("title",{id:l},t):null,a||(a=Dh.createElement("style",null,"#graph-div .black{fill:#000}#graph-div .sblack{stroke:#000}#graph-div .blue{fill:#00c}#graph-div .red{fill:red}#graph-div .sred{stroke:red}#graph-div .arrow{stroke:none;fill-rule:evenodd;fill-opacity:1}#graph-div .line-1{fill:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .line-3{fill:none;stroke-width:2.292}#graph-div .line-4{stroke-width:.99}#graph-div .clip-1,#graph-div .line-4{fill:none;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .dash-1{fill:none;stroke-width:2.292}#graph-div .dash-1,#graph-div .gbox,#graph-div .line-3,#graph-div .thread-box{stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .clip-1{stroke-width:1.132;stroke:#fff}#graph-div .gbox,#graph-div .thread-box{fill-rule:evenodd;fill:#eee;fill-opacity:1;stroke-width:1.5}#graph-div .thread-box{fill:#ff9;stroke-width:2.292}")),Dh.createElement("defs",null,c||(c=Dh.createElement("clipPath",{id:"k"},Dh.createElement("path",{d:"M19 28h6v50h-6zm0 0"}))),r||(r=Dh.createElement("clipPath",{id:"l"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),n||(n=Dh.createElement("clipPath",{id:"m"},Dh.createElement("path",{d:"M24 28h2v50h-2zm0 0"}))),i||(i=Dh.createElement("clipPath",{id:"n"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),m||(m=Dh.createElement("clipPath",{id:"o"},Dh.createElement("path",{d:"M25 28h2v50h-2zm0 0"}))),d||(d=Dh.createElement("clipPath",{id:"p"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),h||(h=Dh.createElement("clipPath",{id:"q"},Dh.createElement("path",{d:"M26 28h2v50h-2zm0 0"}))),p||(p=Dh.createElement("clipPath",{id:"r"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),o||(o=Dh.createElement("clipPath",{id:"s"},Dh.createElement("path",{d:"M27 28h2v50h-2zm0 0"}))),s||(s=Dh.createElement("clipPath",{id:"t"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),E||(E=Dh.createElement("clipPath",{id:"u"},Dh.createElement("path",{d:"M28 28h2v50h-2zm0 0"}))),v||(v=Dh.createElement("clipPath",{id:"v"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),f||(f=Dh.createElement("clipPath",{id:"w"},Dh.createElement("path",{d:"M29 28h2v50h-2zm0 0"}))),u||(u=Dh.createElement("clipPath",{id:"x"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),y||(y=Dh.createElement("clipPath",{id:"y"},Dh.createElement("path",{d:"M30 28h2v50h-2zm0 0"}))),z||(z=Dh.createElement("clipPath",{id:"z"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),k||(k=Dh.createElement("clipPath",{id:"A"},Dh.createElement("path",{d:"M31 28h2v50h-2zm0 0"}))),P||(P=Dh.createElement("clipPath",{id:"B"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),b||(b=Dh.createElement("clipPath",{id:"C"},Dh.createElement("path",{d:"M32 28h2v50h-2zm0 0"}))),M||(M=Dh.createElement("clipPath",{id:"D"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),g||(g=Dh.createElement("clipPath",{id:"E"},Dh.createElement("path",{d:"M33 28h2v50h-2zm0 0"}))),x||(x=Dh.createElement("clipPath",{id:"F"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),R||(R=Dh.createElement("clipPath",{id:"G"},Dh.createElement("path",{d:"M34 28h2v50h-2zm0 0"}))),H||(H=Dh.createElement("clipPath",{id:"H"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),O||(O=Dh.createElement("clipPath",{id:"I"},Dh.createElement("path",{d:"M35 28h2v50h-2zm0 0"}))),N||(N=Dh.createElement("clipPath",{id:"J"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),V||(V=Dh.createElement("clipPath",{id:"K"},Dh.createElement("path",{d:"M36 28h2v50h-2zm0 0"}))),w||(w=Dh.createElement("clipPath",{id:"L"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),L||(L=Dh.createElement("clipPath",{id:"M"},Dh.createElement("path",{d:"M37 28h2v50h-2zm0 0"}))),C||(C=Dh.createElement("clipPath",{id:"N"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),A||(A=Dh.createElement("clipPath",{id:"O"},Dh.createElement("path",{d:"M38 28h2v50h-2zm0 0"}))),F||(F=Dh.createElement("clipPath",{id:"P"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),j||(j=Dh.createElement("clipPath",{id:"Q"},Dh.createElement("path",{d:"M39 28h2v50h-2zm0 0"}))),T||(T=Dh.createElement("clipPath",{id:"R"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),I||(I=Dh.createElement("clipPath",{id:"S"},Dh.createElement("path",{d:"M40 28h2v50h-2zm0 0"}))),W||(W=Dh.createElement("clipPath",{id:"T"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),S||(S=Dh.createElement("clipPath",{id:"U"},Dh.createElement("path",{d:"M41 28h2v50h-2zm0 0"}))),D||(D=Dh.createElement("clipPath",{id:"V"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Z||(Z=Dh.createElement("clipPath",{id:"W"},Dh.createElement("path",{d:"M42 28h2v50h-2zm0 0"}))),G||(G=Dh.createElement("clipPath",{id:"X"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),B||(B=Dh.createElement("clipPath",{id:"Y"},Dh.createElement("path",{d:"M43 28h2v50h-2zm0 0"}))),Q||(Q=Dh.createElement("clipPath",{id:"Z"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),U||(U=Dh.createElement("clipPath",{id:"aa"},Dh.createElement("path",{d:"M44 28h2v50h-2zm0 0"}))),X||(X=Dh.createElement("clipPath",{id:"ab"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),q||(q=Dh.createElement("clipPath",{id:"ac"},Dh.createElement("path",{d:"M45 28h2v50h-2zm0 0"}))),Y||(Y=Dh.createElement("clipPath",{id:"ad"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),J||(J=Dh.createElement("clipPath",{id:"ae"},Dh.createElement("path",{d:"M45 28h3v50h-3zm0 0"}))),K||(K=Dh.createElement("clipPath",{id:"af"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),_||(_=Dh.createElement("clipPath",{id:"ag"},Dh.createElement("path",{d:"M46 28h3v50h-3zm0 0"}))),$||($=Dh.createElement("clipPath",{id:"ah"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ee||(ee=Dh.createElement("clipPath",{id:"ai"},Dh.createElement("path",{d:"M47 28h3v50h-3zm0 0"}))),te||(te=Dh.createElement("clipPath",{id:"aj"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),le||(le=Dh.createElement("clipPath",{id:"ak"},Dh.createElement("path",{d:"M48 28h2v50h-2zm0 0"}))),ae||(ae=Dh.createElement("clipPath",{id:"al"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ce||(ce=Dh.createElement("clipPath",{id:"am"},Dh.createElement("path",{d:"M49 28h2v50h-2zm0 0"}))),re||(re=Dh.createElement("clipPath",{id:"an"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ne||(ne=Dh.createElement("clipPath",{id:"ao"},Dh.createElement("path",{d:"M50 28h2v50h-2zm0 0"}))),ie||(ie=Dh.createElement("clipPath",{id:"ap"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),me||(me=Dh.createElement("clipPath",{id:"aq"},Dh.createElement("path",{d:"M51 28h2v50h-2zm0 0"}))),de||(de=Dh.createElement("clipPath",{id:"ar"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),he||(he=Dh.createElement("clipPath",{id:"as"},Dh.createElement("path",{d:"M52 28h2v50h-2zm0 0"}))),pe||(pe=Dh.createElement("clipPath",{id:"at"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),oe||(oe=Dh.createElement("clipPath",{id:"au"},Dh.createElement("path",{d:"M53 28h2v50h-2zm0 0"}))),se||(se=Dh.createElement("clipPath",{id:"av"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ee||(Ee=Dh.createElement("clipPath",{id:"aw"},Dh.createElement("path",{d:"M54 28h2v50h-2zm0 0"}))),ve||(ve=Dh.createElement("clipPath",{id:"ax"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),fe||(fe=Dh.createElement("clipPath",{id:"ay"},Dh.createElement("path",{d:"M55 28h2v50h-2zm0 0"}))),ue||(ue=Dh.createElement("clipPath",{id:"az"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ye||(ye=Dh.createElement("clipPath",{id:"aA"},Dh.createElement("path",{d:"M56 28h2v50h-2zm0 0"}))),ze||(ze=Dh.createElement("clipPath",{id:"aB"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ke||(ke=Dh.createElement("clipPath",{id:"aC"},Dh.createElement("path",{d:"M57 28h2v50h-2zm0 0"}))),Pe||(Pe=Dh.createElement("clipPath",{id:"aD"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),be||(be=Dh.createElement("clipPath",{id:"aE"},Dh.createElement("path",{d:"M58 28h2v50h-2zm0 0"}))),Me||(Me=Dh.createElement("clipPath",{id:"aF"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ge||(ge=Dh.createElement("clipPath",{id:"aG"},Dh.createElement("path",{d:"M59 28h2v50h-2zm0 0"}))),xe||(xe=Dh.createElement("clipPath",{id:"aH"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Re||(Re=Dh.createElement("clipPath",{id:"aI"},Dh.createElement("path",{d:"M60 28h2v50h-2zm0 0"}))),He||(He=Dh.createElement("clipPath",{id:"aJ"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Oe||(Oe=Dh.createElement("clipPath",{id:"aK"},Dh.createElement("path",{d:"M61 28h2v50h-2zm0 0"}))),Ne||(Ne=Dh.createElement("clipPath",{id:"aL"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ve||(Ve=Dh.createElement("clipPath",{id:"aM"},Dh.createElement("path",{d:"M62 28h2v50h-2zm0 0"}))),we||(we=Dh.createElement("clipPath",{id:"aN"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Le||(Le=Dh.createElement("clipPath",{id:"aO"},Dh.createElement("path",{d:"M63 28h2v50h-2zm0 0"}))),Ce||(Ce=Dh.createElement("clipPath",{id:"aP"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ae||(Ae=Dh.createElement("clipPath",{id:"aQ"},Dh.createElement("path",{d:"M64 28h2v50h-2zm0 0"}))),Fe||(Fe=Dh.createElement("clipPath",{id:"aR"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),je||(je=Dh.createElement("clipPath",{id:"aS"},Dh.createElement("path",{d:"M65 28h2v50h-2zm0 0"}))),Te||(Te=Dh.createElement("clipPath",{id:"aT"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ie||(Ie=Dh.createElement("clipPath",{id:"aU"},Dh.createElement("path",{d:"M66 28h2v50h-2zm0 0"}))),We||(We=Dh.createElement("clipPath",{id:"aV"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Se||(Se=Dh.createElement("clipPath",{id:"aW"},Dh.createElement("path",{d:"M67 28h2v50h-2zm0 0"}))),De||(De=Dh.createElement("clipPath",{id:"aX"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ze||(Ze=Dh.createElement("clipPath",{id:"aY"},Dh.createElement("path",{d:"M68 28h2v50h-2zm0 0"}))),Ge||(Ge=Dh.createElement("clipPath",{id:"aZ"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Be||(Be=Dh.createElement("clipPath",{id:"ba"},Dh.createElement("path",{d:"M69 28h2v50h-2zm0 0"}))),Qe||(Qe=Dh.createElement("clipPath",{id:"bb"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ue||(Ue=Dh.createElement("clipPath",{id:"bc"},Dh.createElement("path",{d:"M70 28h2v50h-2zm0 0"}))),Xe||(Xe=Dh.createElement("clipPath",{id:"bd"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),qe||(qe=Dh.createElement("clipPath",{id:"be"},Dh.createElement("path",{d:"M71 28h2v50h-2zm0 0"}))),Ye||(Ye=Dh.createElement("clipPath",{id:"bf"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Je||(Je=Dh.createElement("clipPath",{id:"bg"},Dh.createElement("path",{d:"M72 28h2v50h-2zm0 0"}))),Ke||(Ke=Dh.createElement("clipPath",{id:"bh"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),_e||(_e=Dh.createElement("clipPath",{id:"bi"},Dh.createElement("path",{d:"M73 32h47v46H73zm0 0"}))),$e||($e=Dh.createElement("clipPath",{id:"bj"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),et||(et=Dh.createElement("clipPath",{id:"bk"},Dh.createElement("path",{d:"M73 32h37v37H73zm0 0"}))),tt||(tt=Dh.createElement("clipPath",{id:"bl"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),lt||(lt=Dh.createElement("clipPath",{id:"bm"},Dh.createElement("path",{d:"M73 32h36v36H73zm0 0"}))),at||(at=Dh.createElement("clipPath",{id:"bn"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ct||(ct=Dh.createElement("clipPath",{id:"bo"},Dh.createElement("path",{d:"M73 32h35v35H73zm0 0"}))),rt||(rt=Dh.createElement("clipPath",{id:"bp"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),nt||(nt=Dh.createElement("clipPath",{id:"bq"},Dh.createElement("path",{d:"M73 32h34v34H73zm0 0"}))),it||(it=Dh.createElement("clipPath",{id:"br"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),mt||(mt=Dh.createElement("clipPath",{id:"bs"},Dh.createElement("path",{d:"M73 32h33v33H73zm0 0"}))),dt||(dt=Dh.createElement("clipPath",{id:"bt"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ht||(ht=Dh.createElement("clipPath",{id:"bu"},Dh.createElement("path",{d:"M73 32h32v32H73zm0 0"}))),pt||(pt=Dh.createElement("clipPath",{id:"bv"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ot||(ot=Dh.createElement("clipPath",{id:"bw"},Dh.createElement("path",{d:"M73 32h31v31H73zm0 0"}))),st||(st=Dh.createElement("clipPath",{id:"bx"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Et||(Et=Dh.createElement("clipPath",{id:"by"},Dh.createElement("path",{d:"M73 32h30v30H73zm0 0"}))),vt||(vt=Dh.createElement("clipPath",{id:"bz"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ft||(ft=Dh.createElement("clipPath",{id:"bA"},Dh.createElement("path",{d:"M73 32h29v29H73zm0 0"}))),ut||(ut=Dh.createElement("clipPath",{id:"bB"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),yt||(yt=Dh.createElement("clipPath",{id:"bC"},Dh.createElement("path",{d:"M73 32h28v28H73zm0 0"}))),zt||(zt=Dh.createElement("clipPath",{id:"bD"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),kt||(kt=Dh.createElement("clipPath",{id:"bE"},Dh.createElement("path",{d:"M74 33h26v26H74zm0 0"}))),Pt||(Pt=Dh.createElement("clipPath",{id:"bF"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),bt||(bt=Dh.createElement("clipPath",{id:"bG"},Dh.createElement("path",{d:"M74 33h25v25H74zm0 0"}))),Mt||(Mt=Dh.createElement("clipPath",{id:"bH"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),gt||(gt=Dh.createElement("clipPath",{id:"bI"},Dh.createElement("path",{d:"M75 34h24v24H75zm0 0"}))),xt||(xt=Dh.createElement("clipPath",{id:"bJ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Rt||(Rt=Dh.createElement("clipPath",{id:"bK"},Dh.createElement("path",{d:"M75 34h23v23H75zm0 0"}))),Ht||(Ht=Dh.createElement("clipPath",{id:"bL"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Ot||(Ot=Dh.createElement("clipPath",{id:"bM"},Dh.createElement("path",{d:"M76 35h22v22H76zm0 0"}))),Nt||(Nt=Dh.createElement("clipPath",{id:"bN"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Vt||(Vt=Dh.createElement("clipPath",{id:"bO"},Dh.createElement("path",{d:"M77 36h20v20H77zm0 0"}))),wt||(wt=Dh.createElement("clipPath",{id:"bP"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Lt||(Lt=Dh.createElement("clipPath",{id:"bQ"},Dh.createElement("path",{d:"M78 37h18v18H78zm0 0"}))),Ct||(Ct=Dh.createElement("clipPath",{id:"bR"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),At||(At=Dh.createElement("clipPath",{id:"bS"},Dh.createElement("path",{d:"M79 38h16v16H79zm0 0"}))),Ft||(Ft=Dh.createElement("clipPath",{id:"bT"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),jt||(jt=Dh.createElement("clipPath",{id:"bU"},Dh.createElement("path",{d:"M80 38h14v15H80zm0 0"}))),Tt||(Tt=Dh.createElement("clipPath",{id:"bV"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),It||(It=Dh.createElement("clipPath",{id:"bW"},Dh.createElement("path",{d:"M80 39h14v14H80zm0 0"}))),Wt||(Wt=Dh.createElement("clipPath",{id:"bX"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),St||(St=Dh.createElement("clipPath",{id:"bY"},Dh.createElement("path",{d:"M80 39h13v13H80zm0 0"}))),Dt||(Dt=Dh.createElement("clipPath",{id:"bZ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Zt||(Zt=Dh.createElement("clipPath",{id:"ca"},Dh.createElement("path",{d:"M81 40h12v12H81zm0 0"}))),Gt||(Gt=Dh.createElement("clipPath",{id:"cb"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Bt||(Bt=Dh.createElement("clipPath",{id:"cc"},Dh.createElement("path",{d:"M81 40h11v11H81zm0 0"}))),Qt||(Qt=Dh.createElement("clipPath",{id:"cd"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Ut||(Ut=Dh.createElement("clipPath",{id:"ce"},Dh.createElement("path",{d:"M82 41h10v10H82zm0 0"}))),Xt||(Xt=Dh.createElement("clipPath",{id:"cf"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),qt||(qt=Dh.createElement("clipPath",{id:"cg"},Dh.createElement("path",{d:"M83 42h8v8h-8zm0 0"}))),Yt||(Yt=Dh.createElement("clipPath",{id:"ch"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Jt||(Jt=Dh.createElement("clipPath",{id:"ci"},Dh.createElement("path",{d:"M84 43h6v6h-6zm0 0"}))),Kt||(Kt=Dh.createElement("clipPath",{id:"cj"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),_t||(_t=Dh.createElement("clipPath",{id:"ck"},Dh.createElement("path",{d:"M85 44h4v4h-4zm0 0"}))),$t||($t=Dh.createElement("clipPath",{id:"cl"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),el||(el=Dh.createElement("clipPath",{id:"cm"},Dh.createElement("path",{d:"M86 44h2v3h-2zm0 0"}))),tl||(tl=Dh.createElement("clipPath",{id:"cn"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ll||(ll=Dh.createElement("clipPath",{id:"co"},Dh.createElement("path",{d:"M86 45h2v2h-2zm0 0"}))),al||(al=Dh.createElement("clipPath",{id:"cp"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),cl||(cl=Dh.createElement("clipPath",{id:"cq"},Dh.createElement("path",{d:"M19 1h101v7H19zm0 0"}))),rl||(rl=Dh.createElement("clipPath",{id:"cr"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),nl||(nl=Dh.createElement("clipPath",{id:"cs"},Dh.createElement("path",{d:"M19 7h101v2H19zm0 0"}))),il||(il=Dh.createElement("clipPath",{id:"ct"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ml||(ml=Dh.createElement("clipPath",{id:"cu"},Dh.createElement("path",{d:"M19 8h101v2H19zm0 0"}))),dl||(dl=Dh.createElement("clipPath",{id:"cv"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),hl||(hl=Dh.createElement("clipPath",{id:"cw"},Dh.createElement("path",{d:"M19 9h101v2H19zm0 0"}))),pl||(pl=Dh.createElement("clipPath",{id:"cx"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ol||(ol=Dh.createElement("clipPath",{id:"cy"},Dh.createElement("path",{d:"M19 10h101v2H19zm0 0"}))),sl||(sl=Dh.createElement("clipPath",{id:"cz"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),El||(El=Dh.createElement("clipPath",{id:"cA"},Dh.createElement("path",{d:"M19 11h101v2H19zm0 0"}))),vl||(vl=Dh.createElement("clipPath",{id:"cB"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),fl||(fl=Dh.createElement("clipPath",{id:"cC"},Dh.createElement("path",{d:"M19 12h101v2H19zm0 0"}))),ul||(ul=Dh.createElement("clipPath",{id:"cD"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),yl||(yl=Dh.createElement("clipPath",{id:"cE"},Dh.createElement("path",{d:"M19 13h101v2H19zm0 0"}))),zl||(zl=Dh.createElement("clipPath",{id:"cF"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),kl||(kl=Dh.createElement("clipPath",{id:"cG"},Dh.createElement("path",{d:"M19 14h101v2H19zm0 0"}))),Pl||(Pl=Dh.createElement("clipPath",{id:"cH"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),bl||(bl=Dh.createElement("clipPath",{id:"cI"},Dh.createElement("path",{d:"M19 15h101v2H19zm0 0"}))),Ml||(Ml=Dh.createElement("clipPath",{id:"cJ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),gl||(gl=Dh.createElement("clipPath",{id:"cK"},Dh.createElement("path",{d:"M19 16h101v2H19zm0 0"}))),xl||(xl=Dh.createElement("clipPath",{id:"cL"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Rl||(Rl=Dh.createElement("clipPath",{id:"cM"},Dh.createElement("path",{d:"M19 17h101v2H19zm0 0"}))),Hl||(Hl=Dh.createElement("clipPath",{id:"cN"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ol||(Ol=Dh.createElement("clipPath",{id:"cO"},Dh.createElement("path",{d:"M19 18h101v2H19zm0 0"}))),Nl||(Nl=Dh.createElement("clipPath",{id:"cP"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Vl||(Vl=Dh.createElement("clipPath",{id:"cQ"},Dh.createElement("path",{d:"M19 19h101v2H19zm0 0"}))),wl||(wl=Dh.createElement("clipPath",{id:"cR"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ll||(Ll=Dh.createElement("clipPath",{id:"cS"},Dh.createElement("path",{d:"M19 20h101v2H19zm0 0"}))),Cl||(Cl=Dh.createElement("clipPath",{id:"cT"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Al||(Al=Dh.createElement("clipPath",{id:"cU"},Dh.createElement("path",{d:"M19 21h101v2H19zm0 0"}))),Fl||(Fl=Dh.createElement("clipPath",{id:"cV"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),jl||(jl=Dh.createElement("clipPath",{id:"cW"},Dh.createElement("path",{d:"M19 22h101v2H19zm0 0"}))),Tl||(Tl=Dh.createElement("clipPath",{id:"cX"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Il||(Il=Dh.createElement("clipPath",{id:"cY"},Dh.createElement("path",{d:"M19 23h101v2H19zm0 0"}))),Wl||(Wl=Dh.createElement("clipPath",{id:"cZ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Sl||(Sl=Dh.createElement("clipPath",{id:"da"},Dh.createElement("path",{d:"M19 24h101v3H19zm0 0"}))),Dl||(Dl=Dh.createElement("clipPath",{id:"db"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Zl||(Zl=Dh.createElement("clipPath",{id:"dc"},Dh.createElement("path",{d:"M19 26h101v2H19zm0 0"}))),Gl||(Gl=Dh.createElement("clipPath",{id:"dd"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Bl||(Bl=Dh.createElement("clipPath",{id:"de"},Dh.createElement("path",{d:"M19 27h101v2H19zm0 0"}))),Ql||(Ql=Dh.createElement("clipPath",{id:"df"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ul||(Ul=Dh.createElement("clipPath",{id:"dg"},Dh.createElement("path",{d:"M19 28h101v2H19zm0 0"}))),Xl||(Xl=Dh.createElement("clipPath",{id:"dh"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ql||(ql=Dh.createElement("clipPath",{id:"di"},Dh.createElement("path",{d:"M19 29h101v2H19zm0 0"}))),Yl||(Yl=Dh.createElement("clipPath",{id:"dj"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Jl||(Jl=Dh.createElement("clipPath",{id:"dk"},Dh.createElement("path",{d:"M19 30h101v2H19zm0 0"}))),Kl||(Kl=Dh.createElement("clipPath",{id:"dl"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),_l||(_l=Dh.createElement("clipPath",{id:"dm"},Dh.createElement("path",{d:"M19 31h101v2H19zm0 0"}))),$l||($l=Dh.createElement("clipPath",{id:"dn"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ea||(ea=Dh.createElement("clipPath",{id:"do"},Dh.createElement("path",{d:"M19 32h101v2H19zm0 0"}))),ta||(ta=Dh.createElement("clipPath",{id:"dp"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),la||(la=Dh.createElement("clipPath",{id:"dq"},Dh.createElement("path",{d:"M19 33h101v2H19zm0 0"}))),aa||(aa=Dh.createElement("clipPath",{id:"dr"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ca||(ca=Dh.createElement("clipPath",{id:"ds"},Dh.createElement("path",{d:"M19 34h101v2H19zm0 0"}))),ra||(ra=Dh.createElement("clipPath",{id:"dt"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),na||(na=Dh.createElement("clipPath",{id:"du"},Dh.createElement("path",{d:"M19 35h101v2H19zm0 0"}))),ia||(ia=Dh.createElement("clipPath",{id:"dv"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ma||(ma=Dh.createElement("clipPath",{id:"dw"},Dh.createElement("path",{d:"M19 36h101v2H19zm0 0"}))),da||(da=Dh.createElement("clipPath",{id:"dx"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ha||(ha=Dh.createElement("clipPath",{id:"dy"},Dh.createElement("path",{d:"M19 37h101v2H19zm0 0"}))),pa||(pa=Dh.createElement("clipPath",{id:"dz"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),oa||(oa=Dh.createElement("clipPath",{id:"dA"},Dh.createElement("path",{d:"M19 38h101v2H19zm0 0"}))),sa||(sa=Dh.createElement("clipPath",{id:"dB"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ea||(Ea=Dh.createElement("clipPath",{id:"dC"},Dh.createElement("path",{d:"M19 39h101v2H19zm0 0"}))),va||(va=Dh.createElement("clipPath",{id:"dD"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),fa||(fa=Dh.createElement("clipPath",{id:"dE"},Dh.createElement("path",{d:"M19 40h101v2H19zm0 0"}))),ua||(ua=Dh.createElement("clipPath",{id:"dF"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ya||(ya=Dh.createElement("clipPath",{id:"dG"},Dh.createElement("path",{d:"M19 41h101v2H19zm0 0"}))),za||(za=Dh.createElement("clipPath",{id:"dH"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ka||(ka=Dh.createElement("clipPath",{id:"dI"},Dh.createElement("path",{d:"M19 42h101v2H19zm0 0"}))),Pa||(Pa=Dh.createElement("clipPath",{id:"dJ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ba||(ba=Dh.createElement("clipPath",{id:"dK"},Dh.createElement("path",{d:"M19 43h101v2H19zm0 0"}))),Ma||(Ma=Dh.createElement("clipPath",{id:"dL"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ga||(ga=Dh.createElement("clipPath",{id:"dM"},Dh.createElement("path",{d:"M19 44h101v2H19zm0 0"}))),xa||(xa=Dh.createElement("clipPath",{id:"dN"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ra||(Ra=Dh.createElement("clipPath",{id:"dO"},Dh.createElement("path",{d:"M19 45h101v2H19zm0 0"}))),Ha||(Ha=Dh.createElement("clipPath",{id:"dP"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Oa||(Oa=Dh.createElement("clipPath",{id:"dQ"},Dh.createElement("path",{d:"M19 46h101v2H19zm0 0"}))),Na||(Na=Dh.createElement("clipPath",{id:"dR"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Va||(Va=Dh.createElement("clipPath",{id:"dS"},Dh.createElement("path",{d:"M19 47h101v2H19zm0 0"}))),wa||(wa=Dh.createElement("clipPath",{id:"dT"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),La||(La=Dh.createElement("clipPath",{id:"dU"},Dh.createElement("path",{d:"M19 48h101v2H19zm0 0"}))),Ca||(Ca=Dh.createElement("clipPath",{id:"dV"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Aa||(Aa=Dh.createElement("clipPath",{id:"dW"},Dh.createElement("path",{d:"M19 49h101v2H19zm0 0"}))),Fa||(Fa=Dh.createElement("clipPath",{id:"dX"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ja||(ja=Dh.createElement("clipPath",{id:"dY"},Dh.createElement("path",{d:"M19 50h101v3H19zm0 0"}))),Ta||(Ta=Dh.createElement("clipPath",{id:"dZ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ia||(Ia=Dh.createElement("clipPath",{id:"ea"},Dh.createElement("path",{d:"M19 52h101v2H19zm0 0"}))),Wa||(Wa=Dh.createElement("clipPath",{id:"eb"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Sa||(Sa=Dh.createElement("clipPath",{id:"ec"},Dh.createElement("path",{d:"M19 53h101v2H19zm0 0"}))),Da||(Da=Dh.createElement("clipPath",{id:"ed"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Za||(Za=Dh.createElement("clipPath",{id:"ee"},Dh.createElement("path",{d:"M19 54h101v2H19zm0 0"}))),Ga||(Ga=Dh.createElement("clipPath",{id:"ef"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ba||(Ba=Dh.createElement("clipPath",{id:"eg"},Dh.createElement("path",{d:"M19 55h101v2H19zm0 0"}))),Qa||(Qa=Dh.createElement("clipPath",{id:"eh"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ua||(Ua=Dh.createElement("clipPath",{id:"ei"},Dh.createElement("path",{d:"M19 56h101v2H19zm0 0"}))),Xa||(Xa=Dh.createElement("clipPath",{id:"ej"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),qa||(qa=Dh.createElement("clipPath",{id:"ek"},Dh.createElement("path",{d:"M19 57h101v2H19zm0 0"}))),Ya||(Ya=Dh.createElement("clipPath",{id:"el"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ja||(Ja=Dh.createElement("clipPath",{id:"em"},Dh.createElement("path",{d:"M19 58h101v2H19zm0 0"}))),Ka||(Ka=Dh.createElement("clipPath",{id:"en"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),_a||(_a=Dh.createElement("clipPath",{id:"eo"},Dh.createElement("path",{d:"M16 26h1v20h-1zm0 0"}))),$a||($a=Dh.createElement("clipPath",{id:"ep"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),ec||(ec=Dh.createElement("clipPath",{id:"eq"},Dh.createElement("path",{d:"M16 26h2v20h-2zm0 0"}))),tc||(tc=Dh.createElement("clipPath",{id:"er"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),lc||(lc=Dh.createElement("clipPath",{id:"es"},Dh.createElement("path",{d:"M17 26h1v20h-1zm0 0"}))),ac||(ac=Dh.createElement("clipPath",{id:"et"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),cc||(cc=Dh.createElement("clipPath",{id:"eu"},Dh.createElement("path",{d:"M17 26h2v20h-2zm0 0"}))),rc||(rc=Dh.createElement("clipPath",{id:"ev"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),nc||(nc=Dh.createElement("clipPath",{id:"ew"},Dh.createElement("path",{d:"M18 26h1v20h-1zm0 0"}))),ic||(ic=Dh.createElement("clipPath",{id:"ex"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),mc||(mc=Dh.createElement("clipPath",{id:"ey"},Dh.createElement("path",{d:"M18 26h2v20h-2zm0 0"}))),dc||(dc=Dh.createElement("clipPath",{id:"ez"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),hc||(hc=Dh.createElement("clipPath",{id:"eA"},Dh.createElement("path",{d:"M19 26h1v20h-1zm0 0"}))),pc||(pc=Dh.createElement("clipPath",{id:"eB"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),oc||(oc=Dh.createElement("clipPath",{id:"eC"},Dh.createElement("path",{d:"M73 59h1v20h-1zm0 0"}))),sc||(sc=Dh.createElement("clipPath",{id:"eD"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),Ec||(Ec=Dh.createElement("clipPath",{id:"eE"},Dh.createElement("path",{d:"M73 59h2v20h-2zm0 0"}))),vc||(vc=Dh.createElement("clipPath",{id:"eF"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),fc||(fc=Dh.createElement("clipPath",{id:"eG"},Dh.createElement("path",{d:"M74 59h1v20h-1zm0 0"}))),uc||(uc=Dh.createElement("clipPath",{id:"eH"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),yc||(yc=Dh.createElement("clipPath",{id:"eI"},Dh.createElement("path",{d:"M74 59h2v20h-2zm0 0"}))),zc||(zc=Dh.createElement("clipPath",{id:"eJ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),kc||(kc=Dh.createElement("clipPath",{id:"eK"},Dh.createElement("path",{d:"M75 59h1v20h-1zm0 0"}))),Pc||(Pc=Dh.createElement("clipPath",{id:"eL"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),bc||(bc=Dh.createElement("clipPath",{id:"eM"},Dh.createElement("path",{d:"M75 59h2v20h-2zm0 0"}))),Mc||(Mc=Dh.createElement("clipPath",{id:"eN"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),gc||(gc=Dh.createElement("clipPath",{id:"eO"},Dh.createElement("path",{d:"M96 63h2v14h-2zm0 0"}))),xc||(xc=Dh.createElement("clipPath",{id:"eP"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Rc||(Rc=Dh.createElement("clipPath",{id:"eQ"},Dh.createElement("path",{d:"M97 63h1v14h-1zm0 0"}))),Hc||(Hc=Dh.createElement("clipPath",{id:"eR"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Oc||(Oc=Dh.createElement("clipPath",{id:"eS"},Dh.createElement("path",{d:"M97 63h2v14h-2zm0 0"}))),Nc||(Nc=Dh.createElement("clipPath",{id:"eT"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Vc||(Vc=Dh.createElement("clipPath",{id:"eU"},Dh.createElement("path",{d:"M98 63h1v14h-1zm0 0"}))),wc||(wc=Dh.createElement("clipPath",{id:"eV"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Lc||(Lc=Dh.createElement("clipPath",{id:"eW"},Dh.createElement("path",{d:"M98 63h2v14h-2zm0 0"}))),Cc||(Cc=Dh.createElement("clipPath",{id:"eX"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Ac||(Ac=Dh.createElement("clipPath",{id:"eY"},Dh.createElement("path",{d:"M99 63h1v14h-1zm0 0"}))),Fc||(Fc=Dh.createElement("clipPath",{id:"eZ"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),jc||(jc=Dh.createElement("clipPath",{id:"fa"},Dh.createElement("path",{d:"M99 63h2v14h-2zm0 0"}))),Tc||(Tc=Dh.createElement("clipPath",{id:"fb"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Ic||(Ic=Dh.createElement("clipPath",{id:"fc"},Dh.createElement("path",{d:"M100 63h1v14h-1zm0 0"}))),Wc||(Wc=Dh.createElement("clipPath",{id:"fd"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Sc||(Sc=Dh.createElement("clipPath",{id:"fe"},Dh.createElement("path",{d:"M100 63h2v14h-2zm0 0"}))),Dc||(Dc=Dh.createElement("clipPath",{id:"ff"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Zc||(Zc=Dh.createElement("clipPath",{id:"fg"},Dh.createElement("path",{d:"M101 63h1v14h-1zm0 0"}))),Gc||(Gc=Dh.createElement("clipPath",{id:"fh"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Bc||(Bc=Dh.createElement("clipPath",{id:"fi"},Dh.createElement("path",{d:"M101 63h2v14h-2zm0 0"}))),Qc||(Qc=Dh.createElement("clipPath",{id:"fj"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Uc||(Uc=Dh.createElement("clipPath",{id:"fk"},Dh.createElement("path",{d:"M102 63h1v14h-1zm0 0"}))),Xc||(Xc=Dh.createElement("clipPath",{id:"fl"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),qc||(qc=Dh.createElement("clipPath",{id:"fm"},Dh.createElement("path",{d:"M102 63h2v14h-2zm0 0"}))),Yc||(Yc=Dh.createElement("clipPath",{id:"fn"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Jc||(Jc=Dh.createElement("clipPath",{id:"fo"},Dh.createElement("path",{d:"M103 63h1v14h-1zm0 0"}))),Kc||(Kc=Dh.createElement("clipPath",{id:"fp"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),_c||(_c=Dh.createElement("clipPath",{id:"fq"},Dh.createElement("path",{d:"M103 63h2v14h-2zm0 0"}))),$c||($c=Dh.createElement("clipPath",{id:"fr"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),er||(er=Dh.createElement("clipPath",{id:"fs"},Dh.createElement("path",{d:"M104 63h1v14h-1zm0 0"}))),tr||(tr=Dh.createElement("clipPath",{id:"ft"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),lr||(lr=Dh.createElement("clipPath",{id:"fu"},Dh.createElement("path",{d:"M96 52h2v14h-2zm0 0"}))),ar||(ar=Dh.createElement("clipPath",{id:"fv"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),cr||(cr=Dh.createElement("clipPath",{id:"fw"},Dh.createElement("path",{d:"M97 52h1v14h-1zm0 0"}))),rr||(rr=Dh.createElement("clipPath",{id:"fx"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),nr||(nr=Dh.createElement("clipPath",{id:"fy"},Dh.createElement("path",{d:"M97 52h2v14h-2zm0 0"}))),ir||(ir=Dh.createElement("clipPath",{id:"fz"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),mr||(mr=Dh.createElement("clipPath",{id:"fA"},Dh.createElement("path",{d:"M98 52h1v14h-1zm0 0"}))),dr||(dr=Dh.createElement("clipPath",{id:"fB"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),hr||(hr=Dh.createElement("clipPath",{id:"fC"},Dh.createElement("path",{d:"M98 52h2v14h-2zm0 0"}))),pr||(pr=Dh.createElement("clipPath",{id:"fD"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),or||(or=Dh.createElement("clipPath",{id:"fE"},Dh.createElement("path",{d:"M99 52h1v14h-1zm0 0"}))),sr||(sr=Dh.createElement("clipPath",{id:"fF"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Er||(Er=Dh.createElement("clipPath",{id:"fG"},Dh.createElement("path",{d:"M99 52h2v14h-2zm0 0"}))),vr||(vr=Dh.createElement("clipPath",{id:"fH"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),fr||(fr=Dh.createElement("clipPath",{id:"fI"},Dh.createElement("path",{d:"M100 52h1v14h-1zm0 0"}))),ur||(ur=Dh.createElement("clipPath",{id:"fJ"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),yr||(yr=Dh.createElement("clipPath",{id:"fK"},Dh.createElement("path",{d:"M100 52h2v14h-2zm0 0"}))),zr||(zr=Dh.createElement("clipPath",{id:"fL"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),kr||(kr=Dh.createElement("clipPath",{id:"fM"},Dh.createElement("path",{d:"M101 52h1v14h-1zm0 0"}))),Pr||(Pr=Dh.createElement("clipPath",{id:"fN"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),br||(br=Dh.createElement("clipPath",{id:"fO"},Dh.createElement("path",{d:"M101 52h2v14h-2zm0 0"}))),Mr||(Mr=Dh.createElement("clipPath",{id:"fP"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),gr||(gr=Dh.createElement("clipPath",{id:"fQ"},Dh.createElement("path",{d:"M102 52h1v14h-1zm0 0"}))),xr||(xr=Dh.createElement("clipPath",{id:"fR"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Rr||(Rr=Dh.createElement("clipPath",{id:"fS"},Dh.createElement("path",{d:"M102 52h2v14h-2zm0 0"}))),Hr||(Hr=Dh.createElement("clipPath",{id:"fT"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Or||(Or=Dh.createElement("clipPath",{id:"fU"},Dh.createElement("path",{d:"M103 52h1v14h-1zm0 0"}))),Nr||(Nr=Dh.createElement("clipPath",{id:"fV"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Vr||(Vr=Dh.createElement("clipPath",{id:"fW"},Dh.createElement("path",{d:"M103 52h2v14h-2zm0 0"}))),wr||(wr=Dh.createElement("clipPath",{id:"fX"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Lr||(Lr=Dh.createElement("clipPath",{id:"fY"},Dh.createElement("path",{d:"M104 52h1v14h-1zm0 0"}))),Cr||(Cr=Dh.createElement("clipPath",{id:"fZ"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Ar||(Ar=Dh.createElement("clipPath",{id:"ga"},Dh.createElement("path",{d:"M96 42h2v14h-2zm0 0"}))),Fr||(Fr=Dh.createElement("clipPath",{id:"gb"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),jr||(jr=Dh.createElement("clipPath",{id:"gc"},Dh.createElement("path",{d:"M97 42h1v14h-1zm0 0"}))),Tr||(Tr=Dh.createElement("clipPath",{id:"gd"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Ir||(Ir=Dh.createElement("clipPath",{id:"ge"},Dh.createElement("path",{d:"M97 42h2v14h-2zm0 0"}))),Wr||(Wr=Dh.createElement("clipPath",{id:"gf"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Sr||(Sr=Dh.createElement("clipPath",{id:"gg"},Dh.createElement("path",{d:"M98 42h1v14h-1zm0 0"}))),Dr||(Dr=Dh.createElement("clipPath",{id:"gh"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Zr||(Zr=Dh.createElement("clipPath",{id:"gi"},Dh.createElement("path",{d:"M98 42h2v14h-2zm0 0"}))),Gr||(Gr=Dh.createElement("clipPath",{id:"gj"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Br||(Br=Dh.createElement("clipPath",{id:"gk"},Dh.createElement("path",{d:"M99 42h1v14h-1zm0 0"}))),Qr||(Qr=Dh.createElement("clipPath",{id:"gl"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Ur||(Ur=Dh.createElement("clipPath",{id:"gm"},Dh.createElement("path",{d:"M99 42h2v14h-2zm0 0"}))),Xr||(Xr=Dh.createElement("clipPath",{id:"gn"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),qr||(qr=Dh.createElement("clipPath",{id:"go"},Dh.createElement("path",{d:"M100 42h1v14h-1zm0 0"}))),Yr||(Yr=Dh.createElement("clipPath",{id:"gp"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Jr||(Jr=Dh.createElement("clipPath",{id:"gq"},Dh.createElement("path",{d:"M100 42h2v14h-2zm0 0"}))),Kr||(Kr=Dh.createElement("clipPath",{id:"gr"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),_r||(_r=Dh.createElement("clipPath",{id:"gs"},Dh.createElement("path",{d:"M101 42h1v14h-1zm0 0"}))),$r||($r=Dh.createElement("clipPath",{id:"gt"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),en||(en=Dh.createElement("clipPath",{id:"gu"},Dh.createElement("path",{d:"M101 42h2v14h-2zm0 0"}))),tn||(tn=Dh.createElement("clipPath",{id:"gv"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),ln||(ln=Dh.createElement("clipPath",{id:"gw"},Dh.createElement("path",{d:"M102 42h1v14h-1zm0 0"}))),an||(an=Dh.createElement("clipPath",{id:"gx"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),cn||(cn=Dh.createElement("clipPath",{id:"gy"},Dh.createElement("path",{d:"M102 42h2v14h-2zm0 0"}))),rn||(rn=Dh.createElement("clipPath",{id:"gz"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),nn||(nn=Dh.createElement("clipPath",{id:"gA"},Dh.createElement("path",{d:"M103 42h1v14h-1zm0 0"}))),mn||(mn=Dh.createElement("clipPath",{id:"gB"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),dn||(dn=Dh.createElement("clipPath",{id:"gC"},Dh.createElement("path",{d:"M103 42h2v14h-2zm0 0"}))),hn||(hn=Dh.createElement("clipPath",{id:"gD"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),pn||(pn=Dh.createElement("clipPath",{id:"gE"},Dh.createElement("path",{d:"M104 42h1v14h-1zm0 0"}))),on||(on=Dh.createElement("clipPath",{id:"gF"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Dh.createElement("symbol",{overflow:"visible",id:"a"},Dh.createElement("path",{style:{stroke:"none"},d:"M.547-5.375c0-1.04.05-1.977.156-2.813.102-.832.332-1.578.688-2.234.363-.656.816-1.144 1.359-1.469.54-.32 1.16-.484 1.86-.484.78 0 1.468.203 2.062.61.594.406 1.02 1.027 1.281 1.859.258.836.39 1.976.39 3.422 0 2.343-.359 4.074-1.077 5.187C6.555-.19 5.566.36 4.296.36c-.648 0-1.214-.136-1.702-.406A3.29 3.29 0 0 1 1.39-1.25C1.078-1.781.859-2.398.734-3.11a13.003 13.003 0 0 1-.187-2.265zm1.515-.5c0 1.117.083 2.133.25 3.047.165.906.442 1.562.829 1.969.394.398.859.593 1.39.593.52 0 .953-.175 1.297-.53.352-.364.61-.977.766-1.845.164-.863.25-1.937.25-3.218 0-2-.196-3.477-.578-4.438-.375-.969-1-1.453-1.875-1.453-.774 0-1.356.375-1.75 1.125-.387.742-.579 2.324-.579 4.75zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"b"},Dh.createElement("path",{style:{stroke:"none"},d:"m1.344-9.938-.157-.046-.093-.72.093-.093c.583-.164 1.32-.437 2.22-.812.894-.375 1.534-.66 1.921-.86l.234.078c-.093 2.575-.14 4.118-.14 4.625V-4.5c0 .805.004 1.559.016 2.266.019.71.046 1.125.078 1.25a.603.603 0 0 0 .187.296.83.83 0 0 0 .36.125c.156.024.609.055 1.359.094l.062.078V0l-.062.078A71.305 71.305 0 0 0 4.719 0C4.312 0 3.332.023 1.78.078L1.72 0v-.39l.078-.079c.875-.062 1.375-.11 1.5-.14a.518.518 0 0 0 .281-.157c.07-.07.129-.207.172-.406.04-.207.07-.816.094-1.828l.047-1.547V-8c0-1.707-.008-2.633-.016-2.781 0-.145-.047-.219-.14-.219a.26.26 0 0 0-.11.031 3.865 3.865 0 0 0-.375.156l-.875.376c-.367.156-.71.324-1.031.5zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"c"},Dh.createElement("path",{style:{stroke:"none"},d:"M.406.094.296 0v-.406L3.25-3.531C4.457-4.812 5.238-5.801 5.594-6.5c.363-.707.547-1.363.547-1.969 0-.719-.22-1.312-.657-1.781-.437-.477-1.023-.719-1.75-.719-.48 0-.898.074-1.25.219-.355.148-.593.313-.718.5-.118.18-.29.684-.516 1.516l-.078.078h-.36l-.078-.078c.133-.79.227-1.57.282-2.344.55-.54 1.062-.883 1.53-1.031a4.784 4.784 0 0 1 1.5-.235c.626 0 1.22.121 1.782.36.57.23 1.031.609 1.375 1.14.344.524.516 1.125.516 1.813 0 .523-.102 1.043-.297 1.562a5.666 5.666 0 0 1-.89 1.5c-.387.48-.919 1.059-1.595 1.735L2.204-1.438h3.469c1.062 0 1.945-.039 2.656-.125l.063.079a5.13 5.13 0 0 0-.047.78c0 .294.015.524.047.688l-.063.11A40.318 40.318 0 0 0 6.391.016 143.72 143.72 0 0 0 4.656 0C4.094 0 3.328.004 2.36.016 1.4.036.75.062.406.094zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"d"},Dh.createElement("path",{style:{stroke:"none"},d:"M.922-.203a23.746 23.746 0 0 0-.594-2.5l.047-.125.313-.125.125.062c.207.543.425.993.656 1.344.238.344.578.61 1.015.797.438.188.91.281 1.422.281.645 0 1.156-.133 1.531-.406.383-.27.676-.633.875-1.094.208-.457.313-.976.313-1.562 0-.781-.203-1.39-.61-1.828-.406-.446-.968-.672-1.687-.672-.25 0-.476.027-.672.078a7.39 7.39 0 0 0-.89.297l-.094-.078.187-.97c.477.032.797.048.954.048.687 0 1.226-.239 1.624-.719.407-.488.61-1.066.61-1.734 0-.57-.211-1.055-.625-1.454-.418-.394-.934-.593-1.547-.593-.406 0-.793.086-1.156.25a3.372 3.372 0 0 0-.89.594c-.106.199-.263.593-.47 1.187l-.093.078H.875l-.078-.078.531-2.047c.727-.82 1.723-1.234 2.984-1.234.946 0 1.711.258 2.297.765.594.5.891 1.137.891 1.907 0 .586-.172 1.12-.516 1.609-.343.492-.824.953-1.437 1.39 1.008.118 1.723.419 2.14.907.415.48.625 1.062.625 1.75 0 1.125-.511 2.14-1.53 3.047C5.757-.133 4.581.312 3.25.312c-.406 0-.781-.039-1.125-.109-.344-.062-.746-.2-1.203-.406zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"e"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.89.078 2.829 0v-.375l.063-.078c.863-.02 1.375-.047 1.53-.078.165-.031.286-.094.36-.188.082-.094.14-.316.172-.672.04-.363.063-.754.063-1.171v-.641H3.094a72.74 72.74 0 0 0-2.844.047l-.14-.469c1.019-1.914 2.722-4.68 5.109-8.297l1.234-.5.219.094a60.99 60.99 0 0 0-.094 3.703l-.031 2.484v1.813c.812 0 1.437-.016 1.875-.047l.078.078a9.96 9.96 0 0 0-.016.484c0 .2.008.391.032.579l-.094.078A27.048 27.048 0 0 0 7-3.203h-.453v.578c0 .656.016 1.125.047 1.406.039.274.097.45.172.532.07.074.222.132.453.171.238.043.64.063 1.203.063l.094.078V0l-.079.078A49.913 49.913 0 0 0 5.845 0 45.95 45.95 0 0 0 2.89.078zM1.267-4.328h3.75l.078-6.25c-.563.805-1.274 1.906-2.125 3.312-.856 1.399-1.422 2.375-1.703 2.938zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"f"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.156-.125C1.008-.582.72-1.335.281-2.391L.297-2.5l.312-.188.11.032c.476.886.773 1.39.89 1.515.125.118.399.258.829.422.425.156.878.235 1.359.235.594 0 1.117-.125 1.578-.375A2.36 2.36 0 0 0 6.391-2c.218-.508.328-1.086.328-1.734 0-.625-.11-1.16-.328-1.61a2.207 2.207 0 0 0-1-1.031 3.084 3.084 0 0 0-1.47-.36c-.323 0-.62.048-.89.141a2.504 2.504 0 0 0-.672.328c-.18.137-.386.34-.625.61l-.359-.094.094-1.89c.02-.364.031-.727.031-1.094v-1.563c0-.469-.016-.914-.047-1.344a12.893 12.893 0 0 1-.016-.5l.11-.078c.894.063 1.914.094 3.062.094.875 0 1.922-.031 3.141-.094l.031.078a5.514 5.514 0 0 0-.062.797c0 .125.008.336.031.625l-.078.047a48.79 48.79 0 0 0-2.703-.062c-1.524 0-2.407.007-2.657.015-.085.688-.148 1.906-.187 3.656.477-.351.91-.593 1.297-.718a4.167 4.167 0 0 1 3.094.25c.593.293 1.03.718 1.312 1.281a3.83 3.83 0 0 1 .438 1.797c0 1.187-.493 2.281-1.47 3.281-.98 1-2.234 1.5-3.765 1.5a4.05 4.05 0 0 1-1.015-.11 4.974 4.974 0 0 1-.86-.343zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"g"},Dh.createElement("path",{style:{stroke:"none"},d:"M7.594-12.156v.11c-.637.136-1.367.452-2.188.952-.812.5-1.5 1.18-2.062 2.031-.555.856-.875 1.883-.969 3.079.207-.145.438-.317.688-.516.332-.25.578-.422.734-.516.156-.093.363-.171.625-.234.258-.07.562-.11.906-.11.602 0 1.145.137 1.625.407a2.5 2.5 0 0 1 1.078 1.172c.239.511.36 1.117.36 1.812 0 .98-.243 1.797-.72 2.453-.468.657-.968 1.133-1.5 1.422-.53.281-1.148.422-1.843.422-1.18 0-2.094-.441-2.75-1.328C.93-1.883.61-3.031.61-4.438c0-.937.133-1.835.407-2.703a7.444 7.444 0 0 1 1.25-2.343c.562-.696 1.273-1.317 2.14-1.86.864-.55 1.711-.926 2.547-1.125zm-5.375 8.39c0 .575.082 1.149.25 1.72.164.562.43 1 .797 1.312.375.312.812.468 1.312.468.426 0 .817-.117 1.172-.359.363-.238.64-.613.828-1.125a4.5 4.5 0 0 0 .297-1.625c0-.57-.094-1.082-.281-1.531a2.255 2.255 0 0 0-.828-1.032 2.089 2.089 0 0 0-1.235-.375c-.355 0-.71.086-1.062.25-.356.168-.625.36-.813.579a1.577 1.577 0 0 0-.36.687c-.054.242-.077.586-.077 1.031zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"h"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.188.078 1-.109c.207-.32.645-1.004 1.313-2.047L3.921-4.72l1.515-2.468L6.75-9.454c.281-.5.504-.899.672-1.203l-.094-.078H4.61c-.687 0-1.296.011-1.828.03-.531.024-.844.06-.937.11a.454.454 0 0 0-.203.156c-.043.063-.086.282-.125.657l-.157 1.25-.078.062H.906l-.078-.06.047-2.406c0-.282-.016-.708-.047-1.282L1-12.313c.32.043.977.086 1.969.126.988.042 1.648.062 1.984.062 1.188 0 2.484-.04 3.89-.125l.063.063v.468L7.641-9.484c-.762 1.375-1.637 3-2.625 4.875-.98 1.875-1.7 3.414-2.157 4.609l-.078.078a8.938 8.938 0 0 0-.765-.047c-.262 0-.54.016-.829.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"i"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.953-6.234c-.648-.344-1.14-.739-1.484-1.188-.336-.445-.5-.988-.5-1.625 0-.894.328-1.664.984-2.312.664-.645 1.57-.97 2.719-.97.57 0 1.101.106 1.594.313.5.2.882.5 1.156.907.27.398.406.84.406 1.328 0 .523-.164 1.023-.484 1.5-.313.469-.871.945-1.672 1.422v.078c.687.336 1.195.617 1.531.843.332.231.602.54.813.922.207.387.312.836.312 1.344 0 .7-.203 1.371-.61 2.016A3.88 3.88 0 0 1 6.142-.188a4.45 4.45 0 0 1-2.032.5c-1.03 0-1.882-.289-2.546-.859-.668-.582-1-1.348-1-2.297 0-.781.226-1.445.687-2 .457-.562 1.023-1 1.703-1.312zM5-7.078c.625-.395 1.047-.785 1.266-1.172a2.53 2.53 0 0 0 .343-1.281c0-.676-.195-1.207-.578-1.594-.386-.395-.906-.594-1.562-.594-.617 0-1.133.18-1.547.531-.406.344-.61.829-.61 1.454 0 .468.13.882.391 1.234.27.344 1.035.82 2.297 1.422zM3.672-5.922c-.7.418-1.184.86-1.453 1.328-.274.469-.406 1.008-.406 1.61 0 .836.234 1.492.703 1.968.468.48 1.07.72 1.812.72.508 0 .969-.114 1.375-.345.406-.238.707-.562.906-.968a2.88 2.88 0 0 0 .313-1.329c0-.695-.246-1.238-.734-1.624-.481-.383-1.32-.836-2.516-1.36zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"j"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.172.078v-.172C2.797-.469 4.07-1.18 5-2.234c.938-1.063 1.46-2.36 1.578-3.891-.855 1.023-1.82 1.531-2.89 1.531-.668 0-1.258-.16-1.766-.484-.5-.32-.871-.738-1.11-1.25C.57-6.848.454-7.453.454-8.141c0-1.27.379-2.285 1.14-3.046.77-.77 1.723-1.157 2.86-1.157 1.133 0 2.055.414 2.766 1.235.707.824 1.062 2.011 1.062 3.562a9.63 9.63 0 0 1-.203 1.984c-.125.625-.367 1.274-.719 1.938a7.533 7.533 0 0 1-1.421 1.844 8.763 8.763 0 0 1-2 1.422c-.743.375-1.47.613-2.188.718zm.812-8.781c0 .5.086.996.266 1.484.176.492.445.871.813 1.14.374.274.812.407 1.312.407.688 0 1.238-.234 1.656-.703.426-.469.64-1.164.64-2.094 0-.957-.21-1.742-.624-2.36-.418-.612-.992-.921-1.719-.921-.7 0-1.266.262-1.703.781-.43.512-.64 1.266-.64 2.266zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gG"},Dh.createElement("path",{style:{stroke:"none"},d:"m.688-3.031.078-.063h.437l.063.063c.03.75.066 1.215.109 1.39.05.168.21.344.484.532.27.18.625.324 1.063.437.445.117.894.172 1.344.172.613 0 1.171-.11 1.671-.328.5-.227.883-.563 1.157-1 .27-.445.406-.945.406-1.5 0-.383-.07-.719-.203-1a1.718 1.718 0 0 0-.547-.703c-.23-.176-.5-.305-.813-.39a16.836 16.836 0 0 0-1.359-.282 24.391 24.391 0 0 1-1.375-.25 4.53 4.53 0 0 1-1-.344 2.755 2.755 0 0 1-.812-.61 2.7 2.7 0 0 1-.532-.89 3.392 3.392 0 0 1-.187-1.14c0-1.094.379-1.989 1.14-2.688.758-.707 1.782-1.063 3.063-1.063a8.09 8.09 0 0 1 1.656.188 6.778 6.778 0 0 1 1.657.563l.062.109c-.137.543-.219 1.308-.25 2.297l-.078.078h-.453l-.063-.063c-.011-.707-.031-1.148-.062-1.328-.024-.187-.29-.41-.797-.672a3.499 3.499 0 0 0-1.656-.406c-.5 0-.97.102-1.407.297-.43.2-.757.512-.984.938a2.86 2.86 0 0 0-.328 1.312c0 .344.066.652.203.922.133.262.305.469.516.625.218.156.468.277.75.36.28.073.8.163 1.562.265 1.04.148 1.797.324 2.266.531.468.211.843.543 1.125 1 .289.45.437.992.437 1.625 0 1.25-.511 2.293-1.531 3.125C6.488-.086 5.258.328 3.812.328 2.595.328 1.523.11.61-.328l-.046-.11C.625-.811.663-1.675.688-3.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gH"},Dh.createElement("path",{style:{stroke:"none"},d:"m7.766-1.297-.282.64C6.88-.27 6.336-.02 5.86.094a5.15 5.15 0 0 1-1.28.188c-.7 0-1.368-.136-2-.406-.626-.281-1.138-.75-1.532-1.406-.4-.658-.595-1.447-.595-2.376 0-.614.07-1.164.219-1.656.156-.5.316-.868.484-1.11.164-.238.446-.504.844-.797a6.327 6.327 0 0 1 1.266-.703c.445-.176.93-.265 1.453-.265.695 0 1.312.167 1.843.5.54.335.922.761 1.141 1.28.219.512.328 1.055.328 1.626 0 .187-.011.367-.031.531l-.094.094c-.406.093-.949.156-1.625.187-.668.024-1.11.032-1.328.032H2.141c.007 1.218.312 2.117.906 2.687.601.574 1.336.86 2.203.86.406 0 .797-.067 1.172-.204a7.594 7.594 0 0 0 1.203-.594zM2.14-4.89c.101.024.504.043 1.203.063.707.023 1.234.031 1.578.031.812 0 1.305-.008 1.484-.031.008-.145.016-.254.016-.328 0-.907-.188-1.578-.563-2.016-.367-.445-.87-.672-1.515-.672-.688 0-1.23.25-1.625.75-.387.492-.578 1.227-.578 2.203zm2.453-4.046zM4.484.53zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gI"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.375-8.375.172.11c-.043.343-.07.949-.078 1.812l.656-.828c.219-.282.41-.492.578-.64a1.94 1.94 0 0 1 1.266-.47c.258 0 .504.055.734.157l.063.125a24.423 24.423 0 0 0-.172 2.046h-.39c-.231-.53-.606-.796-1.126-.796-.367 0-.683.117-.953.343a1.68 1.68 0 0 0-.547.875c-.086.344-.125.782-.125 1.313v.984c0 .18.008.61.031 1.297.02.68.04 1.07.063 1.172a.51.51 0 0 0 .125.234c.062.055.133.09.219.11.093.011.515.039 1.265.078l.078.078v.36l-.078.093A35.286 35.286 0 0 0 2.703 0C2.035 0 1.332.023.593.078L.517-.016v-.359l.078-.078c.57-.031.894-.05.969-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468V-5.22c0-.226-.015-.547-.046-.953a7.738 7.738 0 0 0-.063-.75.262.262 0 0 0-.125-.203c-.074-.04-.227-.063-.453-.063l-.75-.015-.078-.063v-.375l.078-.078c1.113-.133 2.055-.351 2.828-.656zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gJ"},Dh.createElement("path",{style:{stroke:"none"},d:"m4.484.156-.546-1.375-.657-1.5-1.797-4.203c-.117-.27-.218-.445-.312-.531A.49.49 0 0 0 .89-7.61a5.961 5.961 0 0 0-.563-.063l-.062-.062v-.375l.078-.079c.82.043 1.472.063 1.953.063.676 0 1.36-.02 2.047-.063l.062.063v.39l-.062.063c-.617.024-.977.07-1.078.14a.29.29 0 0 0-.141.25c0 .18.117.56.36 1.141L4.546-3.47l.844 1.985.89-1.985L7-5.28c.281-.688.46-1.172.547-1.453.082-.29.125-.485.125-.579 0-.113-.07-.19-.203-.234-.125-.05-.45-.094-.969-.125l-.063-.062v-.375l.079-.079c.726.043 1.27.063 1.625.063.312 0 .836-.02 1.578-.063l.078.079v.375l-.078.062c-.344.031-.574.086-.688.156-.117.075-.23.215-.344.422-.105.2-.414.824-.921 1.875l-.844 1.797c-.149.305-.656 1.496-1.531 3.578zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gK"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.047-8.375.156.11a37.64 37.64 0 0 0-.094 2.937v2.047c0 .75.055 1.273.172 1.562.114.293.313.516.594.672.281.156.613.234 1 .234.426 0 .816-.082 1.172-.25a2.3 2.3 0 0 0 .875-.703c.238-.312.375-.52.406-.625.04-.101.067-.398.078-.89l.032-.985v-.953c0-.226-.016-.547-.047-.953-.024-.406-.04-.656-.047-.75a.25.25 0 0 0-.14-.203c-.075-.04-.227-.063-.454-.063l-.734-.015-.079-.063v-.375L6-7.719c1.125-.133 2.066-.351 2.828-.656l.172.11a37.64 37.64 0 0 0-.094 2.937v1.547c0 .086.016.797.047 2.14.008.5.035.809.078.922a.43.43 0 0 0 .203.219c.094.043.36.063.797.063h.25l.078.078v.343l-.078.094A29.642 29.642 0 0 0 8.625 0c-.355 0-.766.02-1.234.063l-.094-.079c.039-.593.07-1.097.094-1.515-.375.293-.797.68-1.266 1.156-.188.18-.453.328-.797.453a3.293 3.293 0 0 1-1.156.188C3.516.266 3.004.16 2.64-.047a1.753 1.753 0 0 1-.782-.86c-.148-.363-.218-.991-.218-1.89v-2.422c0-.226-.012-.547-.032-.953a7.738 7.738 0 0 0-.062-.75.25.25 0 0 0-.14-.203c-.075-.04-.227-.063-.454-.063L.22-7.202l-.08-.064v-.375l.078-.078c1.113-.133 2.054-.351 2.828-.656zm2.094-.563zm.093 9.47zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gL"},Dh.createElement("path",{style:{stroke:"none"},d:"m-.11-11.844-.077-.078v-.36l.062-.077c1.125-.133 2.066-.352 2.828-.657l.172.11c-.063.668-.094 2.015-.094 4.047v2.234c.102-.145.305-.367.61-.672.312-.3.562-.508.75-.625a3.04 3.04 0 0 1 .78-.328c.333-.094.68-.14 1.048-.14.664 0 1.25.167 1.75.5.5.324.867.761 1.11 1.312.237.543.358 1.125.358 1.75 0 .586-.101 1.148-.296 1.687-.2.532-.438.97-.72 1.313-.167.2-.46.45-.874.75-.813.594-1.387.965-1.719 1.11-.324.155-.75.234-1.281.234-.406 0-.777-.059-1.11-.172a4.292 4.292 0 0 1-1.046-.547l-.704.672-.296-.11c.113-1.07.171-2.285.171-3.64v-4.656l-.03-1.688a43.121 43.121 0 0 0-.063-1.36c-.024-.257-.055-.41-.094-.453-.031-.05-.09-.085-.172-.109-.086-.031-.437-.047-1.062-.047zm2.891 6.281v3.297c0 .274.008.454.031.547.032.086.149.215.36.39.207.169.473.313.797.438.332.125.676.188 1.031.188.82 0 1.469-.32 1.938-.969.476-.644.718-1.46.718-2.453 0-.613-.101-1.16-.297-1.64-.199-.477-.496-.844-.89-1.094a2.316 2.316 0 0 0-1.313-.391 2.46 2.46 0 0 0-1.547.516c-.437.343-.714.734-.828 1.171zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gM"},Dh.createElement("path",{style:{stroke:"none"},d:"M.39-3.781v-.125l.407-1.172H5.5v.125l-.422 1.172zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gN"},Dh.createElement("path",{style:{stroke:"none"},d:"M.406-6.906v-.219l.063-.094c.55-.207.992-.394 1.328-.562 0-1.532-.016-2.422-.047-2.672.602-.219 1.098-.445 1.484-.688l.22.188c-.063.367-.138 1.433-.22 3.203.29.012.61.016.954.016.687 0 1.18-.016 1.484-.047l.062.062-.171.735-.063.078a38.136 38.136 0 0 0-1-.016c-.324 0-.746.008-1.266.016l-.046 3.578c0 .824.015 1.367.046 1.625.04.25.145.45.313.594.176.148.437.218.781.218.383 0 .75-.101 1.094-.312l.203.312c-.137.106-.477.399-1.016.875-.304.145-.609.22-.921.22-1.325 0-1.985-.641-1.985-1.923 0-.468.008-.863.031-1.187.008-.102.016-.207.016-.313v-3.64h-.36c-.261 0-.562.011-.906.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gO"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.984-13.016.172.11c-.062.668-.094 2.015-.094 4.047v2.171a33.17 33.17 0 0 0 1.376-1.203c.113-.113.226-.195.343-.25a3.1 3.1 0 0 1 .547-.156 3.137 3.137 0 0 1 2.063.188c.414.18.726.39.937.64.219.242.367.532.453.875.082.344.125.766.125 1.266v1.547c0 .094.016.824.047 2.187.008.555.067.883.172.985.113.105.477.156 1.094.156l.078.078V0l-.078.078A23.962 23.962 0 0 0 8.703 0c-.125 0-.555.023-1.281.078l-.094-.11c.07-.757.11-1.75.11-2.968v-1.156c0-.688-.016-1.18-.047-1.485a1.853 1.853 0 0 0-.297-.843 1.704 1.704 0 0 0-.657-.579 2.234 2.234 0 0 0-.984-.203c-.398 0-.73.059-1 .172-.273.106-.547.29-.828.547-.273.25-.434.465-.484.64-.055.169-.079.5-.079 1v1.563c0 .125.008.54.032 1.235.02.699.039 1.109.062 1.234.031.117.07.2.125.25a.38.38 0 0 0 .188.11c.082.011.406.03.969.062l.078.078v.36l-.079.093a28.22 28.22 0 0 0-4.218 0L.125-.016v-.359l.094-.078c.562-.031.879-.05.953-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.031-.644.047-1.132.047-1.468v-4.547l-.032-1.86A39.741 39.741 0 0 0 1.5-11.25c-.023-.25-.055-.395-.094-.438-.031-.05-.093-.085-.187-.109-.086-.031-.434-.047-1.047-.047l-.078-.078v-.36l.062-.077c1.125-.133 2.067-.352 2.828-.657zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gP"},Dh.createElement("path",{style:{stroke:"none"},d:"m1.86-5.953-.344-.094-.063-.094v-1.078C2.493-8 3.503-8.39 4.484-8.39c.676 0 1.239.133 1.688.391.445.25.77.563.969.938.195.375.296.82.296 1.328L7.391-3.97v2.61c0 .367.023.586.078.656.05.074.11.125.172.156.062.024.18.043.359.063l.5.046.063.079v.343L8.5.063C8.07.03 7.672.015 7.297.015c-.344 0-.766.015-1.266.046l-.125-.124.032-1.422L4.03.016c-.324.132-.68.203-1.062.203-.469 0-.875-.086-1.219-.25A1.843 1.843 0 0 1 .984-.75C.804-1.05.72-1.422.72-1.86c0-.85.27-1.519.812-2 .54-.488 2.008-.906 4.407-1.25 0-.863-.196-1.472-.579-1.827-.386-.352-.902-.532-1.546-.532-.344 0-.657.055-.938.157-.273.093-.43.171-.469.234-.043.062-.203.422-.484 1.078zm4.077 1.375c-1.636.281-2.656.586-3.062.906-.406.313-.61.797-.61 1.453 0 .918.454 1.375 1.36 1.375.781 0 1.55-.453 2.313-1.36zm-1.484-4.36zM4.266.533zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gQ"},Dh.createElement("path",{style:{stroke:"none"},d:"M5.922-11.922v-.36l.062-.077c1.125-.133 2.067-.352 2.829-.657l.171.11c-.062.668-.093 2.015-.093 4.047v5.75c0 .593.007 1.117.03 1.562.02.438.056.7.11.781a.51.51 0 0 0 .25.204c.125.054.469.105 1.031.156l.079.062v.328l-.079.094A23.292 23.292 0 0 0 8.829.016c-.312 0-.762.02-1.344.062l-.093-.11c.007-.57.015-.972.015-1.202 0-.032.004-.141.016-.329-.324.231-.649.493-.969.782-.48.418-.793.683-.937.797-.274.132-.653.203-1.141.203-.813 0-1.508-.2-2.078-.594a3.353 3.353 0 0 1-1.203-1.531 5.221 5.221 0 0 1-.36-1.907c0-.664.125-1.3.375-1.906.25-.613.602-1.062 1.063-1.343.457-.282.957-.57 1.5-.875.539-.301 1.082-.454 1.625-.454.738 0 1.445.184 2.125.547L7.39-9.797a46.85 46.85 0 0 0-.063-1.422c-.023-.27-.055-.426-.094-.469-.03-.05-.09-.085-.171-.109-.086-.031-.438-.047-1.063-.047zm1.5 5.578a4.05 4.05 0 0 0-1.219-.937 2.95 2.95 0 0 0-1.328-.328c-.492 0-.95.136-1.375.406-.43.273-.734.668-.922 1.187a5.01 5.01 0 0 0-.281 1.704c0 1.03.258 1.859.781 2.484.52.617 1.172.922 1.953.922.426 0 .805-.098 1.14-.297.333-.195.602-.461.813-.797.22-.332.344-.664.375-1 .04-.332.063-.941.063-1.828zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gR"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.25-8.156a.98.98 0 0 1 .734.312c.207.2.313.446.313.735 0 .293-.106.543-.313.75a.998.998 0 0 1-.734.296 1.04 1.04 0 0 1-.75-.296 1.04 1.04 0 0 1-.297-.75c0-.301.098-.551.297-.75.207-.196.457-.297.75-.297zm0 6.219c.281 0 .523.101.734.296a1 1 0 0 1 .313.75c0 .293-.106.543-.313.75a1.01 1.01 0 0 1-.734.297c-.293 0-.543-.101-.75-.297a1.04 1.04 0 0 1-.297-.75c0-.289.098-.535.297-.734.207-.207.457-.313.75-.313zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gT"},Dh.createElement("path",{style:{stroke:"none"},d:"M4.14.172 3.345-3.5 1.64-10.734c-.137-.57-.278-.891-.422-.954-.149-.07-.465-.14-.953-.203l-.063-.062v-.39l.063-.079a34.96 34.96 0 0 0 2.25.078c.488 0 1.195-.023 2.125-.078l.078.078v.39l-.063.063c-.656.032-1.054.07-1.187.11-.125.043-.188.136-.188.281 0 .125.055.516.172 1.172.113.648.219 1.18.313 1.594l1.39 6.093 2.172-5.406A151.008 151.008 0 0 0 9-12.547h.563c.468 1.469.953 2.899 1.453 4.281l2.062 5.735 1.5-5.25c.145-.551.328-1.274.547-2.172.227-.895.344-1.41.344-1.547 0-.164-.074-.266-.219-.297-.148-.039-.57-.07-1.266-.094l-.078-.078v-.375l.078-.078c1 .055 1.598.078 1.797.078.188 0 .797-.023 1.828-.078l.078.078v.39l-.078.063c-.336.012-.558.043-.672.094a.885.885 0 0 0-.28.235c-.087.093-.204.39-.36.89l-.5 1.64-.906 2.954c-.125.43-.368 1.297-.72 2.61l-.968 3.64h-.89a226.578 226.578 0 0 0-1.516-4.36l-2-5.421-1.75 4.328-.953 2.468a79.63 79.63 0 0 0-.578 1.594L5.03.171zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gU"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.531-12.313c.27 0 .504.102.703.297.196.2.297.434.297.704a.963.963 0 0 1-.297.703.992.992 0 0 1-.703.28.98.98 0 0 1-.703-.28.948.948 0 0 1-.297-.704.96.96 0 0 1 .297-.703.963.963 0 0 1 .703-.296zm.75 3.938.172.11c-.074.773-.11 1.75-.11 2.937v1.984c0 .125.009.54.032 1.235.031.699.055 1.109.078 1.234.031.117.07.2.125.25a.38.38 0 0 0 .188.11c.082.011.398.03.953.062l.078.078v.36l-.063.093A28.861 28.861 0 0 0 .5.078L.422-.016v-.359L.5-.453c.57-.031.895-.05.969-.063a.418.418 0 0 0 .187-.109.599.599 0 0 0 .11-.266c.02-.113.039-.488.062-1.125.031-.644.047-1.132.047-1.468V-5.22c0-.226-.012-.547-.031-.953a7.738 7.738 0 0 0-.063-.75.25.25 0 0 0-.14-.203c-.075-.04-.22-.063-.438-.063l-.75-.015-.078-.063v-.375l.078-.078c1.113-.133 2.055-.351 2.828-.656zM2.594.531zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gV"},Dh.createElement("path",{style:{stroke:"none"},d:"m16.531-12.39.078.062v.437l-.062.063c-.649.023-1.047.058-1.203.11-.156.042-.266.116-.328.218-.063.105-.102.32-.11.64-.011.313-.027 1.204-.047 2.672v4.063c0 .586.004 1.246.016 1.984.02.743.055 1.172.11 1.297.062.117.163.2.312.25.144.055.562.09 1.25.11l.062.062v.438l-.078.062a44.373 44.373 0 0 0-2.5-.078c-.48 0-1.297.023-2.453.078L11.5.016v-.422l.078-.078c.645-.02 1.047-.051 1.203-.094a.557.557 0 0 0 .328-.235c.063-.101.098-.316.11-.64.008-.32.023-1.211.047-2.672v-6.453l-3.032 6.344a78.996 78.996 0 0 0-2 4.484h-.343a43.197 43.197 0 0 0-.813-1.813l-4.187-8.734v6.14c0 .587.004 1.25.015 2 .008.743.047 1.173.11 1.298a.593.593 0 0 0 .312.265c.145.055.563.086 1.25.094l.063.063v.421l-.079.094L4 .047A28.812 28.812 0 0 0 2.5 0C2.312 0 1.613.023.406.078L.328 0v-.422L.406-.5c.645-.008 1.04-.035 1.188-.078a.536.536 0 0 0 .328-.25c.07-.113.113-.32.125-.625.008-.3.02-1.203.031-2.703v-4.016c0-.531-.008-1.176-.015-1.937-.012-.77-.047-1.211-.11-1.329a.491.491 0 0 0-.297-.265c-.148-.063-.562-.102-1.25-.125l-.078-.063v-.421l.078-.079c.406.032.953.047 1.64.047.645 0 1.208-.015 1.688-.047a56.553 56.553 0 0 0 1.422 3.079L8.484-2.47l3-6.265c.813-1.696 1.36-2.914 1.641-3.657.563.032 1.117.047 1.672.047.488 0 1.066-.015 1.734-.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gW"},Dh.createElement("path",{style:{stroke:"none"},d:"m3-8.375.172.11c-.031.398-.055.913-.063 1.546.47-.383.91-.773 1.329-1.172.125-.113.238-.195.343-.25a3.1 3.1 0 0 1 .547-.156 3.137 3.137 0 0 1 2.063.188c.425.18.742.39.953.64.219.242.363.532.437.875.082.344.125.766.125 1.266v1.547c0 .094.016.824.047 2.187.008.555.07.883.188.985.113.105.476.156 1.093.156l.063.078V0l-.063.078A24.663 24.663 0 0 0 8.72 0c-.156 0-.586.023-1.281.078l-.11-.11c.07-.757.11-1.75.11-2.968v-1.156c0-.688-.016-1.18-.047-1.485a1.853 1.853 0 0 0-.297-.843 1.552 1.552 0 0 0-.657-.579 2.234 2.234 0 0 0-.984-.203 2.87 2.87 0 0 0-.781.094 2.563 2.563 0 0 0-.734.375 3.086 3.086 0 0 0-.594.531 1.252 1.252 0 0 0-.235.47c-.023.148-.03.452-.03.921v1.531c0 .125.007.54.03 1.235.02.699.04 1.109.063 1.234.031.117.07.2.125.25.062.055.129.09.203.11.07.011.39.03.953.062l.078.078v.36l-.078.093a28.22 28.22 0 0 0-4.219 0L.156-.016v-.359l.078-.078c.563-.031.88-.05.954-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468V-5.22c0-.226-.015-.547-.046-.953-.024-.406-.04-.656-.047-.75a.25.25 0 0 0-.141-.203c-.074-.04-.227-.063-.453-.063l-.735-.015-.078-.063v-.375l.063-.078C1.297-7.852 2.238-8.07 3-8.375zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gX"},Dh.createElement("path",{style:{stroke:"none"},d:"m.375-12.36.063-.062a51.36 51.36 0 0 0 2.5.078c.664 0 1.562-.02 2.687-.062.414-.008.719-.016.906-.016 1.477 0 2.485.274 3.016.813.531.53.797 1.168.797 1.906 0 .492-.133.976-.39 1.453-.263.469-.65.875-1.157 1.219-.5.336-1.195.586-2.078.75.164.23.46.625.89 1.187l1.25 1.657c.407.542.836 1.12 1.297 1.734.469.605.77.95.906 1.031.133.074.25.121.344.14.094.012.242.016.453.016l.079.079v.406l-.079.078a9.242 9.242 0 0 0-1-.047c-.418 0-.87.016-1.359.047C9.094-.441 8.453-1.29 7.578-2.5a49.06 49.06 0 0 0-3.094-3.922l.094-.266c.3.024.54.032.719.032 1.008 0 1.8-.242 2.375-.735.57-.488.86-1.16.86-2.015 0-.781-.262-1.367-.782-1.766-.512-.394-1.203-.594-2.078-.594-.617 0-1.2.09-1.75.266-.086.125-.125 1.227-.125 3.297v4.062l.015 1.72c0 .655.016 1.085.047 1.28.032.188.07.32.125.391.051.063.157.117.313.156.164.043.555.074 1.172.094l.078.063V0l-.078.078c-.024 0-.54-.023-1.547-.062C3.516.004 3.192 0 2.953 0 2.773 0 1.938.023.438.078L.374 0v-.438L.438-.5c.539-.02.898-.047 1.078-.078.187-.04.312-.086.375-.14.062-.052.109-.165.14-.345.04-.187.067-.593.078-1.218l.016-1.86v-4.062l-.031-1.719c0-.664-.016-1.094-.047-1.281-.024-.195-.063-.328-.125-.39-.055-.071-.156-.13-.313-.173-.156-.039-.546-.07-1.171-.093l-.063-.063zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gY"},Dh.createElement("path",{style:{stroke:"none"},d:"m9.688-7.766.078.157c-.243.367-.391.605-.454.718H7.688c.156.325.234.664.234 1.016 0 .418-.094.824-.281 1.219a2.935 2.935 0 0 1-.797 1A4.082 4.082 0 0 1 5.687-3c-.43.156-.917.234-1.468.234h-.407c-.343.282-.57.493-.671.625A.72.72 0 0 0 3-1.734c0 .261.113.445.344.546.238.106.734.157 1.484.157l1.969-.032c.613 0 1.086.079 1.422.235.332.148.597.406.797.781.207.375.312.774.312 1.203 0 .645-.21 1.285-.625 1.922-.418.645-1.023 1.133-1.812 1.469-.793.332-1.637.5-2.532.5-.511 0-.992-.059-1.437-.172a3.654 3.654 0 0 1-1.188-.5 2.657 2.657 0 0 1-.812-.89 2.33 2.33 0 0 1-.297-1.126A2.424 2.424 0 0 1 1.094.906l1.594-.89c-.512-.157-.836-.313-.97-.47a.824.824 0 0 1-.202-.562c0-.218.07-.476.218-.78l1.422-1.032c-.836-.207-1.398-.531-1.687-.969a2.5 2.5 0 0 1-.438-1.422c0-.476.102-.93.313-1.36.207-.425.515-.769.922-1.03a5.557 5.557 0 0 1 1.39-.61c.52-.156.989-.234 1.406-.234.727 0 1.426.242 2.094.719a72.84 72.84 0 0 0 2.532-.032zM2.546-5.734c0 .367.066.75.203 1.156.145.406.375.719.688.937.312.211.664.313 1.062.313.52 0 .969-.164 1.344-.5.383-.344.578-.879.578-1.61 0-.601-.18-1.148-.531-1.64-.344-.488-.829-.734-1.454-.734-.542 0-.996.18-1.359.53-.355.345-.531.86-.531 1.548zM5.125.172c-.95 0-1.496.008-1.64.031-.137.02-.34.117-.61.297a1.976 1.976 0 0 0-.64.719c-.169.3-.25.64-.25 1.015 0 .657.242 1.192.734 1.61.5.414 1.156.625 1.969.625a3.8 3.8 0 0 0 1.703-.39c.53-.25.914-.595 1.156-1.032.25-.43.375-.844.375-1.25 0-.399-.106-.734-.313-1.016a1.283 1.283 0 0 0-.812-.515C6.473.203 5.914.172 5.125.172zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gZ"},Dh.createElement("path",{style:{stroke:"none"},d:"M.594-4.031c0-.696.14-1.367.422-2.016.289-.644.789-1.203 1.5-1.672.718-.468 1.566-.703 2.546-.703 1.227 0 2.227.39 3 1.172.782.773 1.172 1.766 1.172 2.984 0 1.336-.449 2.438-1.343 3.313C7.004-.086 5.937.344 4.687.344c-.824 0-1.558-.219-2.203-.656-.648-.446-1.125-.989-1.437-1.625a4.838 4.838 0 0 1-.453-2.094zm1.672-.594c0 .813.101 1.547.312 2.203.207.649.54 1.168 1 1.563.457.386.977.578 1.563.578.687 0 1.254-.27 1.703-.813.457-.55.687-1.379.687-2.484 0-1.25-.246-2.27-.734-3.063-.492-.8-1.195-1.203-2.11-1.203-.761 0-1.355.278-1.78.828-.43.555-.641 1.352-.641 2.391zm2.656-4.313zM4.797.533zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hp"},Dh.createElement("path",{style:{stroke:"none"},d:"m.64-12.36.079-.062c2.008.043 3.297.063 3.86.063 1.913 0 3.624-.02 5.124-.063l.047.063c-.148.562-.258 1.445-.328 2.64l-.047.078h-.438l-.078-.078c.008-.05.016-.097.016-.14 0-.489-.043-.961-.125-1.422-.367-.156-.875-.258-1.531-.313a21.295 21.295 0 0 0-1.469-.078c-.469 0-1.063.031-1.781.094l-.031 1.406-.032 1.61-.015 1.78a25.52 25.52 0 0 0 1.75.063c.53 0 .976-.015 1.343-.047.364-.039.579-.078.641-.109.063-.04.11-.113.14-.219.032-.113.055-.312.079-.593l.047-.547.062-.063h.406l.063.063c-.012.648-.024 1.293-.031 1.937l.03 1.969-.062.078h-.406l-.062-.078-.063-.531c-.055-.407-.094-.645-.125-.72a.358.358 0 0 0-.156-.202c-.086-.063-.305-.11-.656-.14-.356-.04-.84-.063-1.454-.063-.335 0-.851.015-1.546.046-.032.493-.047 1.31-.047 2.454 0 1.23.015 2.136.047 2.718H5.5c1.426 0 2.316-.015 2.672-.046a3.7 3.7 0 0 0 1.015-.266 10.8 10.8 0 0 0 .266-.938c.125-.488.192-.789.203-.906l.094-.062h.422l.062.062c-.054.25-.105.688-.156 1.313A23.878 23.878 0 0 0 10.016 0l-.063.078a120.71 120.71 0 0 0-4.39-.062L3.171 0c-.563 0-1.149.023-1.75.078L1.359 0v-.297l.063-.078c.344-.176.539-.285.594-.328.05-.05.093-.567.125-1.547.03-.977.046-1.723.046-2.234V-9.72c0-.426-.011-.773-.03-1.047a3.12 3.12 0 0 0-.063-.593.515.515 0 0 0-.094-.235.451.451 0 0 0-.188-.125 2.188 2.188 0 0 0-.437-.078l-.656-.062-.078-.063zm5.016-.703zM5.625.531zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hq"},Dh.createElement("path",{style:{stroke:"none"},d:"m.39.063-.077-.08v-.359l.079-.063a1.4 1.4 0 0 0 .53-.109c.145-.062.313-.187.5-.375.196-.195.548-.601 1.048-1.219L3.89-3.89 3.14-5c-.118-.164-.352-.488-.704-.969a9.603 9.603 0 0 0-.874-1.078c-.231-.25-.403-.398-.516-.453a.724.724 0 0 0-.344-.094c-.055 0-.121.008-.203.016l-.094-.063L.328-8l.078-.094c.594-.062 1.25-.172 1.969-.328.406.336 1.004 1.117 1.797 2.344l.656 1.031.547-.703a69.291 69.291 0 0 0 1.813-2.5c.269.043.488.063.656.063.144 0 .347-.02.61-.063l.077.063v.359l-.078.062a1.715 1.715 0 0 0-.422.094c-.086.043-.246.18-.484.406-.23.23-.543.579-.938 1.047l-.53.64a8.3 8.3 0 0 0-.298.376l-.547.703.329.5c.144.21.492.703 1.046 1.484.563.774.954 1.29 1.172 1.547.227.262.39.418.485.469.101.043.265.063.484.063l.078.062v.36L8.75.061C8.32.02 7.988 0 7.75 0c-.074 0-.45.02-1.125.063A25.964 25.964 0 0 1 5.172-1.97l-.89-1.36c-.607.69-1.416 1.823-2.424 3.394A11.096 11.096 0 0 0 1.141 0C1.023 0 .773.02.39.063zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hr"},Dh.createElement("path",{style:{stroke:"none"},d:"m7.625-.938-.344.579A5.216 5.216 0 0 1 4.75.266c-1.293 0-2.293-.38-3-1.141-.7-.77-1.047-1.758-1.047-2.969 0-.55.055-1.039.172-1.469.125-.437.281-.796.469-1.078.187-.28.39-.5.61-.656.218-.164.593-.394 1.124-.687.531-.301.93-.493 1.203-.579.27-.093.64-.14 1.11-.14.914 0 1.66.172 2.234.515a28.172 28.172 0 0 0-.25 2.22l-.078.062h-.36l-.078-.078c-.023-.489-.054-.817-.093-.985-.043-.176-.278-.36-.704-.547a3.251 3.251 0 0 0-1.359-.296c-.48 0-.906.105-1.281.312-.375.2-.664.527-.86.984-.187.461-.28 1.012-.28 1.657 0 .53.077 1.058.234 1.578.156.511.351.937.593 1.281.25.336.579.605.985.813a3.14 3.14 0 0 0 1.375.296c.32 0 .633-.039.937-.125a6.078 6.078 0 0 0 1.032-.406zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hs"},Dh.createElement("path",{style:{stroke:"none"},d:"M3.828-5.922v1.781l.016 1.72c0 .636.015 1.058.047 1.265.03.21.07.343.125.406.062.063.171.117.328.156.156.043.547.074 1.172.094l.062.063V0l-.062.078A124.336 124.336 0 0 0 2.984 0C2.797 0 1.957.023.47.078L.406 0v-.438L.47-.5c.55-.02.914-.047 1.094-.078.187-.04.304-.086.359-.14.062-.063.113-.18.156-.36.04-.176.063-.57.063-1.188l.015-1.875v-4.062l-.015-1.719c-.012-.664-.032-1.094-.063-1.281-.023-.195-.062-.328-.125-.39-.055-.071-.156-.13-.312-.173-.157-.039-.547-.07-1.172-.093l-.063-.063v-.437l.063-.063c2.488.043 3.941.063 4.36.063 1.394 0 2.82-.02 4.28-.063l.079.063a4.51 4.51 0 0 0-.188 1c-.031.375-.063.902-.094 1.578l-.078.062h-.406l-.063-.062a8.34 8.34 0 0 1-.078-.672 7.097 7.097 0 0 0-.14-.89c-.618-.208-1.461-.313-2.532-.313-.48 0-1.043.039-1.687.11-.063.46-.094 1.573-.094 3.343v1.515c.75.012 1.258.016 1.531.016.489 0 .91-.016 1.266-.047.363-.039.582-.078.656-.11a.353.353 0 0 0 .157-.202c.039-.102.078-.317.109-.64l.062-.47.063-.078h.437l.079.078-.063 1.922c0 .23.004.555.016.969.03.48.046.855.046 1.125l-.078.063h-.437l-.063-.063-.046-.75a2.965 2.965 0 0 0-.079-.64c-.043-.133-.109-.223-.203-.266-.093-.04-.304-.078-.625-.11a13.44 13.44 0 0 0-1.484-.062c-.594 0-1.043.012-1.344.031zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ht"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.234-8.375.172.11c-.043.386-.07.85-.078 1.39l.844-.766c.226-.218.379-.351.453-.406.082-.062.266-.133.547-.219.281-.082.578-.125.89-.125.583 0 1.094.149 1.532.438.437.281.758.68.968 1.187.79-.75 1.254-1.16 1.391-1.234.133-.082.344-.164.625-.25.29-.094.578-.14.86-.14.468 0 .894.105 1.28.312.384.2.692.46.923.781.226.313.359.656.39 1.031.04.375.063.891.063 1.547v.938c0 .094.02.824.062 2.187.008.555.067.883.172.985.113.105.477.156 1.094.156l.062.078V0l-.062.078A24.663 24.663 0 0 0 13.906 0c-.148 0-.574.023-1.281.078l-.11-.11c.07-.757.11-1.75.11-2.968v-1.063c0-.925-.047-1.578-.14-1.953a1.496 1.496 0 0 0-.61-.906c-.313-.238-.695-.36-1.14-.36-.325 0-.622.063-.891.188a2.309 2.309 0 0 0-.75.563c-.219.25-.34.484-.36.703-.023.21-.03.601-.03 1.172v1.093c0 .262.007.747.03 1.454.02.71.04 1.125.063 1.25.031.117.07.199.125.25a.642.642 0 0 0 .203.093c.07.012.39.032.953.063l.078.078v.36l-.078.093a28.22 28.22 0 0 0-4.219 0l-.078-.094v-.359l.078-.078c.563-.031.88-.05.954-.063A.418.418 0 0 0 7-.625a.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468v-1c0-.657-.046-1.16-.14-1.516a1.61 1.61 0 0 0-.578-.906c-.305-.25-.68-.375-1.125-.375a2.3 2.3 0 0 0-.97.203 2.218 2.218 0 0 0-.718.516c-.18.199-.289.386-.328.562-.043.18-.063.559-.063 1.14v1.298c0 .261.008.746.032 1.453.02.71.039 1.125.062 1.25.031.117.07.199.125.25a.642.642 0 0 0 .203.093c.07.012.383.032.938.063l.078.078v.36l-.063.093a28.403 28.403 0 0 0-4.234 0L.375-.016v-.359l.078-.078c.57-.031.895-.05.969-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.031-.644.047-1.132.047-1.468V-5.22c0-.226-.016-.547-.047-.953a7.738 7.738 0 0 0-.063-.75.262.262 0 0 0-.125-.203c-.074-.04-.226-.063-.453-.063l-.75-.015-.078-.063v-.375l.078-.078c1.114-.133 2.055-.351 2.828-.656zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ha"},Dh.createElement("path",{style:{stroke:"none"},d:"m.297-10.984.062-.063c1.29.043 2.036.063 2.235.063.176 0 .922-.02 2.234-.063l.063.063v.39l-.063.047A13.33 13.33 0 0 0 4-10.5c-.2.023-.344.063-.438.125-.085.055-.14.188-.171.406-.024.211-.032.5-.032.875l-.015 1.797v3.453c0 .867.004 1.469.015 1.813l.032 1.344h1.593c1.27 0 2.063-.016 2.375-.047.32-.032.63-.102.922-.22.051-.132.13-.437.235-.905.113-.47.171-.739.171-.813l.079-.062h.375l.062.062c-.043.211-.09.617-.14 1.219A20.766 20.766 0 0 0 9 0l-.063.063C7.946.03 6.649.015 5.047.015L2.766 0C2.242 0 1.71.02 1.172.063L1.109 0v-.266l.063-.078c.32-.164.5-.265.531-.297.031-.039.063-.379.094-1.015.031-.633.047-1.399.047-2.297v-3.344l-.016-1.531c0-.594-.016-.973-.047-1.14-.023-.177-.058-.29-.11-.345-.042-.062-.136-.109-.28-.14-.137-.04-.48-.07-1.032-.094l-.062-.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hb"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.25-10.938c.25 0 .457.09.625.266a.814.814 0 0 1 .266.61.85.85 0 0 1-.266.624.845.845 0 0 1-.625.25.87.87 0 0 1-.625-.25.839.839 0 0 1-.25-.624c0-.239.082-.442.25-.61a.854.854 0 0 1 .625-.265zm.672 3.485.14.11a34.044 34.044 0 0 0-.078 2.593v1.766c0 .117.008.484.032 1.109.02.625.039.992.062 1.094a.5.5 0 0 0 .094.234c.05.043.11.07.172.078.07.012.36.031.86.063l.062.062v.328l-.063.079a28.346 28.346 0 0 0-3.75 0l-.078-.08v-.328l.078-.062c.5-.031.781-.051.844-.063.07-.02.129-.05.172-.094a.469.469 0 0 0 .11-.234c.019-.101.038-.437.062-1 .02-.57.03-1.004.03-1.297V-4.64c0-.207-.01-.488-.03-.843-.024-.364-.04-.586-.047-.672a.21.21 0 0 0-.125-.172c-.063-.04-.2-.063-.407-.063l-.656-.015-.062-.063v-.328l.062-.062c.989-.125 1.828-.32 2.516-.594zM2.312.469zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hc"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.875-7.453.156.11C3-7 2.977-6.587 2.97-6.11l.734-.688c.207-.187.344-.305.406-.36.07-.062.235-.128.485-.202.25-.07.515-.11.797-.11a2.4 2.4 0 0 1 1.359.39c.395.263.688.618.875 1.063.695-.664 1.102-1.035 1.219-1.109a2.86 2.86 0 0 1 .562-.219c.258-.07.516-.11.766-.11.414 0 .797.09 1.14.266.344.18.614.415.813.704.207.28.328.59.36.921.03.336.046.793.046 1.375v.813c0 .094.016.746.047 1.953.008.492.063.781.156.875.102.094.426.14.97.14l.062.063V0l-.063.063A24.265 24.265 0 0 0 12.36 0c-.125 0-.5.02-1.125.063l-.109-.094c.07-.676.11-1.555.11-2.64v-.938c0-.832-.044-1.41-.126-1.735a1.346 1.346 0 0 0-.546-.812 1.607 1.607 0 0 0-1.016-.328 1.91 1.91 0 0 0-.797.171 2.13 2.13 0 0 0-.656.5c-.2.22-.309.43-.328.625-.024.188-.032.54-.032 1.047v.97c0 .23.008.663.032 1.296.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328L8.97.063A28.988 28.988 0 0 0 7.079 0c-.556 0-1.18.02-1.876.063l-.062-.079v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .03-.57.046-1.004.046-1.297v-.89c0-.594-.042-1.047-.125-1.36a1.54 1.54 0 0 0-.53-.812c-.262-.219-.59-.328-.985-.328-.313 0-.602.062-.86.187a2.111 2.111 0 0 0-.64.453c-.156.18-.258.344-.297.5-.043.157-.063.496-.063 1.016v1.156c0 .23.008.664.032 1.297.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328l-.062.079a28.7 28.7 0 0 0-3.766 0l-.062-.08v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .031-.57.047-1.004.047-1.297V-4.64c0-.207-.012-.488-.032-.843a6.31 6.31 0 0 0-.062-.672.21.21 0 0 0-.125-.172c-.063-.04-.195-.063-.39-.063l-.657-.015-.078-.063v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hd"},Dh.createElement("path",{style:{stroke:"none"},d:"M.36-6.14v-.204l.062-.078c.488-.176.883-.344 1.187-.5 0-1.363-.015-2.156-.046-2.375.53-.187.968-.39 1.312-.61l.188.157c-.055.336-.118 1.29-.188 2.86.258.011.54.015.844.015.613 0 1.054-.016 1.328-.047l.047.047-.14.656-.063.078c-.274-.007-.57-.015-.891-.015-.293 0-.668.008-1.125.015l-.047 3.172c0 .742.016 1.227.047 1.453.04.22.133.399.281.532.156.125.383.187.688.187.351 0 .676-.094.969-.281L5-.797c-.125.094-.422.356-.89.781a1.876 1.876 0 0 1-.829.204c-1.18 0-1.765-.57-1.765-1.72 0-.413.007-.769.03-1.062a2.78 2.78 0 0 0 .016-.265v-3.25h-.328c-.23 0-.496.011-.796.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"he"},Dh.createElement("path",{style:{stroke:"none"},d:"m6.906-1.156-.25.562c-.543.356-1.027.586-1.453.688A4.84 4.84 0 0 1 4.078.25a4.521 4.521 0 0 1-1.781-.36C1.734-.36 1.273-.772.922-1.36.578-1.94.406-2.644.406-3.468a5 5 0 0 1 .203-1.484c.133-.438.274-.758.422-.969.145-.219.395-.457.75-.719a4.97 4.97 0 0 1 1.125-.625c.395-.156.82-.234 1.281-.234.625 0 1.176.148 1.657.438.476.292.812.667 1 1.125A3.724 3.724 0 0 1 7.109-4l-.078.078c-.355.086-.836.14-1.437.172-.594.023-.992.031-1.188.031h-2.5c.008 1.074.282 1.867.813 2.375.531.512 1.18.766 1.953.766.363 0 .71-.063 1.047-.188A7.083 7.083 0 0 0 6.78-1.28zm-5-3.188c.094.012.453.028 1.078.047a38.54 38.54 0 0 0 1.391.031c.727 0 1.172-.007 1.328-.03v-.298c0-.8-.168-1.398-.5-1.797-.324-.394-.766-.593-1.328-.593-.625 0-1.11.226-1.453.671-.344.438-.516 1.094-.516 1.97zm2.172-3.593zM3.984.469zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hf"},Dh.createElement("path",{style:{stroke:"none"},d:"M5.266-10.594v-.328L5.328-11c.988-.113 1.828-.305 2.516-.578l.14.094c-.054.605-.078 1.808-.078 3.609v5.11c0 .53.004.995.016 1.39.02.387.05.617.094.688A.58.58 0 0 0 8.25-.5c.113.043.422.086.922.125l.062.063v.296l-.062.079c-.563-.032-1-.047-1.313-.047-.28 0-.683.015-1.203.046L6.563-.03c.019-.508.03-.864.03-1.063v-.297c-.28.211-.57.438-.859.688a18.97 18.97 0 0 1-.828.719c-.242.113-.578.171-1.015.171-.72 0-1.336-.18-1.844-.53a2.96 2.96 0 0 1-1.078-1.36A4.677 4.677 0 0 1 .656-3.39c0-.593.11-1.16.328-1.703.227-.539.547-.937.954-1.187.406-.25.847-.508 1.328-.782.488-.269.968-.406 1.437-.406a3.82 3.82 0 0 1 1.89.5l-.03-1.75a22.84 22.84 0 0 0-.047-1.25c-.024-.238-.047-.379-.079-.422a.278.278 0 0 0-.156-.109c-.074-.02-.39-.031-.953-.031zM6.594-5.64a3.412 3.412 0 0 0-1.078-.828 2.581 2.581 0 0 0-1.172-.297c-.438 0-.852.121-1.235.36-.375.242-.648.593-.812 1.062-.168.461-.25.965-.25 1.516 0 .906.226 1.637.687 2.187.47.555 1.051.829 1.75.829a1.97 1.97 0 0 0 1-.25c.301-.176.547-.41.735-.704.187-.3.297-.597.328-.89.031-.301.047-.848.047-1.64zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hh"},Dh.createElement("path",{style:{stroke:"none"},d:"M.469-11.047c1.312.043 2.144.063 2.5.063.488 0 1.039-.008 1.656-.032.645-.02 1.04-.03 1.188-.03.726 0 1.332.077 1.812.233.477.149.875.422 1.188.829.312.398.468.875.468 1.437 0 .469-.11.922-.328 1.36a3.317 3.317 0 0 1-.922 1.125 3.863 3.863 0 0 1-1.187.656 3.812 3.812 0 0 1-1.25.203 5.86 5.86 0 0 1-1.078-.11l-.125-.484.062-.078c.395.094.711.14.953.14.688 0 1.235-.222 1.64-.671.415-.457.626-1.035.626-1.735 0-.707-.215-1.27-.64-1.687-.43-.426-1.079-.64-1.954-.64-.469 0-.992.09-1.562.265-.043.398-.063 1.367-.063 2.906v5.14c.008.587.024.966.047 1.141.031.168.066.282.11.344.05.055.144.102.28.14.145.044.493.075 1.047.095L5-.392V0l-.063.063A137.057 137.057 0 0 0 2.704 0C2.523 0 1.781.02.47.063L.406 0v-.39L.47-.438c.476-.02.797-.047.953-.079.164-.03.273-.07.328-.125.063-.05.11-.156.14-.312.032-.164.051-.524.063-1.078v-5.266l-.016-1.531c0-.594-.015-.973-.046-1.14-.024-.177-.059-.29-.11-.345-.043-.062-.136-.109-.281-.14-.137-.04-.48-.07-1.031-.094l-.063-.047v-.39zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hi"},Dh.createElement("path",{style:{stroke:"none"},d:"M.531-3.578c0-.625.125-1.223.375-1.797.258-.57.707-1.066 1.344-1.484.633-.426 1.383-.641 2.25-.641 1.094 0 1.984.352 2.672 1.047.687.687 1.031 1.574 1.031 2.656 0 1.188-.398 2.172-1.187 2.953C6.234-.07 5.286.312 4.172.312c-.73 0-1.383-.199-1.953-.593-.574-.395-1-.875-1.281-1.438a4.246 4.246 0 0 1-.407-1.86zm1.485-.547c0 .73.093 1.387.28 1.969.188.574.485 1.039.892 1.39.406.344.867.516 1.39.516.613 0 1.117-.242 1.516-.734.406-.489.61-1.223.61-2.204 0-1.101-.22-2.007-.657-2.718-.438-.707-1.063-1.063-1.875-1.063-.68 0-1.211.246-1.594.735-.375.492-.562 1.195-.562 2.109zm2.359-3.813zM4.265.47zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hj"},Dh.createElement("path",{style:{stroke:"none"},d:"M.797-2.297h.328l.078.063c.008.437.035.812.078 1.125.157.25.43.453.828.609a3.32 3.32 0 0 0 1.172.219c.551 0 .992-.145 1.328-.438.332-.3.5-.656.5-1.062a.901.901 0 0 0-.187-.578c-.117-.164-.297-.301-.547-.407-.242-.113-.672-.242-1.297-.39a28.32 28.32 0 0 1-1.125-.281 1.827 1.827 0 0 1-.61-.36 1.561 1.561 0 0 1-.452-.61 2.063 2.063 0 0 1-.157-.812c0-.695.274-1.254.829-1.672.55-.414 1.242-.625 2.078-.625.343 0 .718.047 1.125.141.414.094.734.188.953.281l.062.11c-.043.21-.07.757-.078 1.64l-.062.063h-.313l-.078-.063c-.023-.32-.055-.547-.094-.672-.031-.125-.125-.257-.281-.406-.148-.156-.36-.281-.64-.375a2.446 2.446 0 0 0-.86-.156c-.324 0-.594.047-.813.14-.21.094-.382.235-.515.422a1.137 1.137 0 0 0-.203.688c0 .2.039.375.125.531.082.156.207.29.375.39.164.095.336.165.515.204l.86.219c.726.18 1.25.336 1.562.468.313.125.551.32.719.579.176.261.266.578.266.953 0 .718-.297 1.34-.891 1.859-.594.52-1.355.781-2.281.781-.336 0-.746-.039-1.235-.11A10.717 10.717 0 0 1 .625-.078L.578-.186l.078-.516c.031-.164.047-.328.047-.485.008-.164.016-.515.016-1.046zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hk"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.672-7.453.156.11a18.16 18.16 0 0 0-.062 1.374c.414-.343.812-.691 1.187-1.047.102-.101.203-.175.297-.218a2.61 2.61 0 0 1 .484-.157 2.867 2.867 0 0 1 1.844.172c.375.157.656.352.844.578.187.22.316.48.39.782.07.304.11.671.11 1.109v1.375c0 .094.016.746.047 1.953.008.492.062.781.156.875.102.094.426.14.969.14l.062.063V0l-.062.063A24.265 24.265 0 0 0 7.75 0c-.137 0-.516.02-1.14.063l-.094-.094c.07-.676.109-1.555.109-2.64v-1.032c0-.613-.016-1.055-.047-1.328a1.665 1.665 0 0 0-.266-.735 1.526 1.526 0 0 0-.593-.515 1.847 1.847 0 0 0-.86-.188c-.273 0-.507.032-.703.094a2.319 2.319 0 0 0-.64.328 2.202 2.202 0 0 0-.532.484 1.1 1.1 0 0 0-.218.407c-.024.125-.032.398-.032.812v1.36c0 .117.008.484.032 1.109.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328L3.97.063a28.7 28.7 0 0 0-3.766 0l-.063-.08v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .03-.57.046-1.004.046-1.297V-4.64c0-.207-.011-.488-.03-.843a6.31 6.31 0 0 0-.063-.672.21.21 0 0 0-.125-.172c-.063-.04-.196-.063-.39-.063l-.657-.015-.078-.063v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hl"},Dh.createElement("path",{style:{stroke:"none"},d:"m4.5-.406.063.062v.328L4.5.063c-.156 0-.46-.012-.906-.032A22.073 22.073 0 0 0 2.328 0C1.766 0 1.141.02.453.063l-.062-.08v-.328l.062-.062c.5-.031.781-.051.844-.063.07-.02.129-.05.172-.094a.469.469 0 0 0 .11-.234c.019-.101.038-.437.062-1 .02-.57.03-1.004.03-1.297V-6.11l-1 .046-.077-.062v-.188l.062-.078 1.016-.53v-.47c0-.52.02-.91.062-1.171.051-.27.141-.52.266-.75.133-.227.36-.516.672-.86.32-.344.601-.625.844-.844.238-.226.445-.379.625-.453.175-.07.382-.11.625-.11.195 0 .41.04.64.11l-.015 1.281-.172.079a1.498 1.498 0 0 0-1.016-.391c-.273 0-.508.059-.703.172-.2.105-.336.289-.406.547-.074.25-.11.668-.11 1.25v1.61h.829c.437 0 .847-.016 1.234-.048l.062.094-.14.688-.063.078c-.156-.008-.261-.016-.312-.016h-1.61v3.14c0 .169.008.555.032 1.157.02.594.039.945.062 1.047.02.105.055.183.11.234.05.043.128.074.234.094.113.023.473.039 1.078.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hm"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.688.156-.72-3.265-1.5-6.438c-.124-.508-.257-.789-.39-.844-.125-.062-.402-.117-.828-.171l-.063-.063v-.344l.063-.078c.75.043 1.41.063 1.984.063.438 0 1.067-.02 1.891-.063l.078.078v.344l-.062.063c-.586.023-.934.054-1.047.093-.117.031-.172.117-.172.25 0 .106.05.45.156 1.031.102.586.195 1.06.281 1.422l1.22 5.407 1.937-4.797c.5-1.27.992-2.602 1.484-4h.5a88.673 88.673 0 0 0 1.297 3.812l1.828 5.094 1.328-4.672c.133-.488.3-1.129.5-1.922.195-.8.297-1.265.297-1.39 0-.133-.07-.22-.203-.25-.125-.04-.496-.067-1.11-.079l-.062-.078v-.343l.063-.063a49.08 49.08 0 0 0 1.593.063c.164 0 .707-.02 1.625-.063l.063.063v.359l-.063.047c-.293.012-.492.043-.594.094a.648.648 0 0 0-.25.203c-.074.086-.18.351-.312.797l-.453 1.453-.813 2.625a76.271 76.271 0 0 0-.625 2.312l-.875 3.25h-.796a166.885 166.885 0 0 0-1.344-3.89L7.813-8.547l-1.547 3.86L5.422-2.5c-.219.574-.39 1.043-.516 1.406L4.47.156zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hn"},Dh.createElement("path",{style:{stroke:"none"},d:"m3-7.453.156.11c-.031.304-.058.84-.078 1.609l.594-.75c.187-.239.351-.426.5-.563a1.765 1.765 0 0 1 1.14-.422 1.5 1.5 0 0 1 .641.14l.063.11a17.39 17.39 0 0 0-.141 1.828h-.36c-.21-.476-.542-.718-1-.718-.324 0-.605.105-.843.312a1.52 1.52 0 0 0-.485.781c-.085.305-.124.696-.124 1.172v.86c0 .156.007.543.03 1.156.02.605.04.953.063 1.047a.67.67 0 0 0 .11.219c.05.042.117.074.203.093.082.012.453.031 1.11.063l.077.062v.328l-.078.079A34.98 34.98 0 0 0 2.406 0 28.7 28.7 0 0 0 .531.063L.47-.017v-.328l.06-.061c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .031-.57.047-1.004.047-1.297V-4.64c0-.207-.012-.488-.032-.843a6.31 6.31 0 0 0-.062-.672.21.21 0 0 0-.125-.172c-.063-.04-.195-.063-.39-.063L.5-6.406.422-6.47v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ho"},Dh.createElement("path",{style:{stroke:"none"},d:"m8.625-6.906.063.14c-.22.325-.356.54-.407.641H6.828c.145.281.219.578.219.89 0 .376-.086.743-.25 1.094a2.67 2.67 0 0 1-.703.891 3.642 3.642 0 0 1-2.344.797h-.36c-.304.242-.5.422-.593.547a.591.591 0 0 0-.125.36c0 .23.101.39.312.484.207.093.645.14 1.313.14l1.75-.015c.55 0 .973.07 1.266.203.289.125.523.359.703.703.187.332.28.687.28 1.062 0 .57-.187 1.14-.562 1.703-.367.57-.902 1.004-1.609 1.297-.7.301-1.45.453-2.25.453-.45 0-.875-.054-1.281-.156a3.288 3.288 0 0 1-1.047-.437 2.392 2.392 0 0 1-.719-.782 2.066 2.066 0 0 1-.265-1.015c0-.188.023-.39.078-.61.062-.21.171-.433.328-.671L2.39.015c-.46-.145-.745-.285-.86-.421a.728.728 0 0 1-.172-.5c0-.196.063-.43.188-.703l1.266-.907c-.743-.187-1.243-.472-1.5-.859a2.192 2.192 0 0 1-.391-1.266c0-.425.086-.828.265-1.203a2.22 2.22 0 0 1 .829-.922c.375-.226.785-.41 1.234-.546a4.539 4.539 0 0 1 1.25-.204c.656 0 1.273.215 1.86.641.945 0 1.702-.008 2.265-.031zm-6.36 1.812c0 .313.063.653.188 1.016.125.367.328.64.61.828.28.188.593.281.937.281a1.72 1.72 0 0 0 1.203-.453c.332-.3.5-.77.5-1.406a2.41 2.41 0 0 0-.469-1.453c-.304-.438-.734-.657-1.296-.657-.47 0-.868.157-1.188.47-.324.304-.484.761-.484 1.374zM4.563.156c-.843 0-1.328.008-1.453.032-.125.019-.308.109-.546.265a1.938 1.938 0 0 0-.579.625c-.148.27-.218.57-.218.906 0 .594.218 1.07.656 1.438.437.375 1.02.562 1.75.562.55 0 1.055-.117 1.516-.343.468-.23.812-.54 1.03-.922.22-.387.329-.758.329-1.11 0-.355-.094-.664-.281-.921a1.076 1.076 0 0 0-.72-.454C5.755.18 5.259.156 4.563.156zm0 0"}))),sn||(sn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 133.946 177.366)"})),En||(En=Dh.createElement("use",{xlinkHref:"#a",x:129.446,y:161.466})),vn||(vn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 176.546 177.366)"})),fn||(fn=Dh.createElement("use",{xlinkHref:"#b",x:171.946,y:161.466})),un||(un=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 219.046 177.366)"})),yn||(yn=Dh.createElement("use",{xlinkHref:"#c",x:214.546,y:161.466})),zn||(zn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 261.546 177.366)"})),kn||(kn=Dh.createElement("use",{xlinkHref:"#d",x:257.046,y:161.466})),Pn||(Pn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.602V0zm0 0",transform:"matrix(1 0 0 -1 304.046 177.366)"})),bn||(bn=Dh.createElement("use",{xlinkHref:"#e",x:299.546,y:161.466})),Mn||(Mn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.198V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 346.546 177.366)"})),gn||(gn=Dh.createElement("use",{xlinkHref:"#f",x:342.046,y:161.466})),xn||(xn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.198V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 389.046 177.366)"})),Rn||(Rn=Dh.createElement("use",{xlinkHref:"#g",x:384.546,y:161.466})),Hn||(Hn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 431.646 177.366)"})),On||(On=Dh.createElement("use",{xlinkHref:"#h",x:427.146,y:161.466})),Nn||(Nn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 474.146 177.366)"})),Vn||(Vn=Dh.createElement("use",{xlinkHref:"#i",x:469.646,y:161.466})),wn||(wn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.597V0zm0 0",transform:"matrix(1 0 0 -1 516.646 177.366)"})),Ln||(Ln=Dh.createElement("use",{xlinkHref:"#j",x:512.146,y:161.466})),Cn||(Cn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 559.146 177.366)"})),An||(An=Dh.createElement("use",{xlinkHref:"#b",x:550.146,y:161.466})),Fn||(Fn=Dh.createElement("use",{xlinkHref:"#a",x:559.236,y:161.466})),jn||(jn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 601.646 177.366)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Tn||(Tn=Dh.createElement("use",{xlinkHref:"#b",x:592.746,y:161.466})),In||(In=Dh.createElement("use",{xlinkHref:"#b",x:601.746,y:161.466}))),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#ddd",fillOpacity:1,strokeWidth:.12,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#ddd",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0c4.2 0 50.602 20.4 50.602 26.602 0 6.2-6.5 6.2-10.703 6.2C39.899 30.2-1.601 19.5 0 0zm0 0",transform:"matrix(1 0 0 -1 76.246 78.766)"}),Dh.createElement("g",{clipPath:"url(#k)"},Dh.createElement("g",{clipPath:"url(#l)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m19.246 77.066.102-49h5.398l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#m)"},Dh.createElement("g",{clipPath:"url(#n)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m24.645 77.066.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#o)"},Dh.createElement("g",{clipPath:"url(#p)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"m25.645 77.066.101-49h.899l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#q)"},Dh.createElement("g",{clipPath:"url(#r)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"m26.547 77.066.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#s)"},Dh.createElement("g",{clipPath:"url(#t)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"m27.547 77.066.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#u)"},Dh.createElement("g",{clipPath:"url(#v)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"m28.547 77.066.098-49h1l-.2 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#w)"},Dh.createElement("g",{clipPath:"url(#x)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m29.445 77.066.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#y)"},Dh.createElement("g",{clipPath:"url(#z)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"m30.445 77.066.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#A)"},Dh.createElement("g",{clipPath:"url(#B)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"m31.445 77.066.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#C)"},Dh.createElement("g",{clipPath:"url(#D)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"m32.445 77.066.102-49h.898l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#E)"},Dh.createElement("g",{clipPath:"url(#F)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"m33.348 77.066.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#G)"},Dh.createElement("g",{clipPath:"url(#H)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"m34.348 77.066.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#I)"},Dh.createElement("g",{clipPath:"url(#J)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"m35.348 77.066.097-49h1l-.199 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#K)"},Dh.createElement("g",{clipPath:"url(#L)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"m36.246 77.066.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#M)"},Dh.createElement("g",{clipPath:"url(#N)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"m37.246 77.066.102-49h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#O)"},Dh.createElement("g",{clipPath:"url(#P)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"m38.246 77.164.102-49.098h1l-.203 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#Q)"},Dh.createElement("g",{clipPath:"url(#R)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"m39.145 77.164.203-49.098h.898l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#S)"},Dh.createElement("g",{clipPath:"url(#T)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"m40.145 77.164.101-49.098h1l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#U)"},Dh.createElement("g",{clipPath:"url(#V)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"m41.145 77.164.101-49.098h1l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#W)"},Dh.createElement("g",{clipPath:"url(#X)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"m42.145 77.164.101-49.098h.899l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#Y)"},Dh.createElement("g",{clipPath:"url(#Z)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"m43.047 77.164.098-49.098h1l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aa)"},Dh.createElement("g",{clipPath:"url(#ab)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"m44.047 77.164.098-49.098h1l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ac)"},Dh.createElement("g",{clipPath:"url(#ad)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"m45.047 77.164.098-49.098h1l-.2 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ae)"},Dh.createElement("g",{clipPath:"url(#af)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"m45.945 77.164.2-49.098h.902l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ag)"},Dh.createElement("g",{clipPath:"url(#ah)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"m46.945 77.164.102-49.098h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ai)"},Dh.createElement("g",{clipPath:"url(#aj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"m47.945 77.164.102-49.098h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ak)"},Dh.createElement("g",{clipPath:"url(#al)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"m48.945 77.164.102-49.098h.898l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#am)"},Dh.createElement("g",{clipPath:"url(#an)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"m49.848 77.164.097-49.098h1l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ao)"},Dh.createElement("g",{clipPath:"url(#ap)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"m50.848 77.164.097-49.098h1l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aq)"},Dh.createElement("g",{clipPath:"url(#ar)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"m51.848 77.164.097-49.098h1l-.199 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#as)"},Dh.createElement("g",{clipPath:"url(#at)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"m52.746 77.164.2-49.098h.902l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#au)"},Dh.createElement("g",{clipPath:"url(#av)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"m53.746 77.164.102-49.098 1 .098-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aw)"},Dh.createElement("g",{clipPath:"url(#ax)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"m54.746 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ay)"},Dh.createElement("g",{clipPath:"url(#az)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"m55.746 77.164.102-49h.898l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aA)"},Dh.createElement("g",{clipPath:"url(#aB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"m56.645 77.164.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aC)"},Dh.createElement("g",{clipPath:"url(#aD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"m57.645 77.164.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aE)"},Dh.createElement("g",{clipPath:"url(#aF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"m58.645 77.164.101-49h1l-.2 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aG)"},Dh.createElement("g",{clipPath:"url(#aH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"m59.547 77.164.2-49h.898l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aI)"},Dh.createElement("g",{clipPath:"url(#aJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"m60.547 77.164.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aK)"},Dh.createElement("g",{clipPath:"url(#aL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"m61.547 77.164.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aM)"},Dh.createElement("g",{clipPath:"url(#aN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"m62.547 77.164.098-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aO)"},Dh.createElement("g",{clipPath:"url(#aP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"m63.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aQ)"},Dh.createElement("g",{clipPath:"url(#aR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"m64.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aS)"},Dh.createElement("g",{clipPath:"url(#aT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"m65.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aU)"},Dh.createElement("g",{clipPath:"url(#aV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"m66.445 77.164.102-49h.898l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aW)"},Dh.createElement("g",{clipPath:"url(#aX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"m67.348 77.164.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aY)"},Dh.createElement("g",{clipPath:"url(#aZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"m68.348 77.164.097-49h1l-.199 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ba)"},Dh.createElement("g",{clipPath:"url(#bb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"m69.246 77.164.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bc)"},Dh.createElement("g",{clipPath:"url(#bd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"m70.246 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#be)"},Dh.createElement("g",{clipPath:"url(#bf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"m71.246 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bg)"},Dh.createElement("g",{clipPath:"url(#bh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m72.246 77.164.102-49h1l-.102 49zm0 0"}))),Wn||(Wn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v17.8l53.699-31.1V-31zm0 0",transform:"matrix(1 0 0 -1 19.446 45.966)"})),Dh.createElement("g",{clipPath:"url(#bi)"},Dh.createElement("g",{clipPath:"url(#bj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M73.145 32.664h46.101v44.402H73.145zm-8.797-9.297h45.199v45.098h-45.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bk)"},Dh.createElement("g",{clipPath:"url(#bl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"M64.348 23.367h45.199v45.098h-45.2zm.398.399h44.3v44.3h-44.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M64.746 23.766h44.3v44.3h-44.3zm.5.5h43.399v43.3H65.246zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bm)"},Dh.createElement("g",{clipPath:"url(#bn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"M65.246 24.266h43.399v43.3H65.246zm.5.5h42.399v42.398H65.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M65.746 24.766h42.399v42.398H65.746zm.399.398h41.5v41.5h-41.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bo)"},Dh.createElement("g",{clipPath:"url(#bp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"M66.145 25.164h41.5v41.5h-41.5zm.5.5h40.601v40.5H66.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M66.645 25.664h40.601v40.5H66.645zm.402.402h39.7v39.7h-39.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bq)"},Dh.createElement("g",{clipPath:"url(#br)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"M67.047 26.066h39.7v39.7h-39.7zm.5.5h38.7v38.7h-38.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M67.547 26.566h38.7v38.7h-38.7zm.5.399h37.8v37.902h-37.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bs)"},Dh.createElement("g",{clipPath:"url(#bt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"M68.047 26.965h37.8v37.902h-37.8zm.398.5h36.903v36.902H68.445zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M68.445 27.465h36.903v36.902H68.445zm.5.5h35.903v35.902H68.945zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bu)"},Dh.createElement("g",{clipPath:"url(#bv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M68.945 27.965h35.903v35.902H68.945zm.5.402h35v35.098h-35zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"M69.445 28.367h35v35.098h-35zm.403.5h34.097v34.098H69.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bw)"},Dh.createElement("g",{clipPath:"url(#bx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M69.848 28.867h34.097v34.098H69.848zm.5.399h33.199v33.3h-33.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"M70.348 29.266h33.199v33.3h-33.2zm.398.5h32.3v32.3h-32.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M70.746 29.766h32.3v32.3h-32.3zm.5.5h31.399v31.3H71.246zm0 0"}))),Dh.createElement("g",{clipPath:"url(#by)"},Dh.createElement("g",{clipPath:"url(#bz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M71.246 30.266h31.399v31.3H71.246zm.5.398h30.399v30.5H71.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M71.746 30.664h30.399v30.5H71.746zm.399.5h29.5v29.5h-29.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bA)"},Dh.createElement("g",{clipPath:"url(#bB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"M72.145 31.164h29.5v29.5h-29.5zm.5.5h28.601v28.5H72.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M72.645 31.664h28.601v28.5H72.645zm.402.402h27.7v27.7h-27.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bC)"},Dh.createElement("g",{clipPath:"url(#bD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"M73.047 32.066h27.7v27.7h-27.7zm.5.5h26.8v26.7h-26.8zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M73.547 32.566h26.8v26.7h-26.8zm.5.5h25.8v25.801h-25.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bE)"},Dh.createElement("g",{clipPath:"url(#bF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M74.047 33.066h25.8v25.801h-25.8zm.398.399h24.903v24.902H74.445zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M74.445 33.465h24.903v24.902H74.445zm.5.5h24v23.902h-24zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bG)"},Dh.createElement("g",{clipPath:"url(#bH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"M74.945 33.965h24v23.902h-24zm.5.402h23v23.098h-23zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bI)"},Dh.createElement("g",{clipPath:"url(#bJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"M75.445 34.367h23v23.098h-23zm.403.5h22.097v22.098H75.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bK)"},Dh.createElement("g",{clipPath:"url(#bL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M75.848 34.867h22.097v22.098H75.848zm.5.5h21.199v21.2h-21.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bM)"},Dh.createElement("g",{clipPath:"url(#bN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M76.348 35.367h21.199v21.2h-21.2zm.398.399h20.3v20.3h-20.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M76.746 35.766h20.3v20.3h-20.3zm.5.5h19.3v19.3h-19.3zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bO)"},Dh.createElement("g",{clipPath:"url(#bP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"M77.246 36.266h19.3v19.3h-19.3zm.5.398h18.399v18.5H77.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M77.746 36.664h18.399v18.5H77.746zm.399.5h17.5v17.5h-17.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bQ)"},Dh.createElement("g",{clipPath:"url(#bR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"M78.145 37.164h17.5v17.5h-17.5zm.5.402h16.601v16.7H78.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M78.645 37.566h16.601v16.7H78.645zm.5.5h15.601v15.7H79.145zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bS)"},Dh.createElement("g",{clipPath:"url(#bT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M79.145 38.066h15.601v15.7H79.145zm.402.5h14.7v14.7h-14.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M79.547 38.566h14.7v14.7h-14.7zm.5.399h13.8v13.902h-13.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bU)"},Dh.createElement("g",{clipPath:"url(#bV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"M80.047 38.965h13.8v13.902h-13.8zm.398.5h12.903v12.902H80.445zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bW)"},Dh.createElement("g",{clipPath:"url(#bX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M80.445 39.465h12.903v12.902H80.445zm.5.5h12v11.902h-12zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bY)"},Dh.createElement("g",{clipPath:"url(#bZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"M80.945 39.965h12v11.902h-12zm.403.402h11.097v11.098H81.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ca)"},Dh.createElement("g",{clipPath:"url(#cb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M81.348 40.367h11.097v11.098H81.348zm.5.5h10.097v10.098H81.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cc)"},Dh.createElement("g",{clipPath:"url(#cd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M81.848 40.867h10.097v10.098H81.848zm.5.5h9.199v9.098h-9.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ce)"},Dh.createElement("g",{clipPath:"url(#cf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"M82.348 41.367h9.199v9.098h-9.2zm.398.399h8.3v8.3h-8.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M82.746 41.766h8.3v8.3h-8.3zm.5.5h7.399v7.3h-7.399zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cg)"},Dh.createElement("g",{clipPath:"url(#ch)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"M83.246 42.266h7.399v7.3h-7.399zm.5.5h6.399v6.398h-6.399zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M83.746 42.766h6.399v6.398h-6.399zm.399.398h5.5v5.5h-5.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ci)"},Dh.createElement("g",{clipPath:"url(#cj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M84.145 43.164h5.5v5.5h-5.5zm.5.5h4.601v4.5h-4.601zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M84.645 43.664h4.601v4.5h-4.601zm.402.402h3.7v3.7h-3.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ck)"},Dh.createElement("g",{clipPath:"url(#cl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"M85.047 44.066h3.7v3.7h-3.7zm.5.5h2.7v2.7h-2.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M85.547 44.566h2.7v2.7h-2.7zm.5.399h1.8v1.902h-1.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cm)"},Dh.createElement("g",{clipPath:"url(#cn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"M86.047 44.965h1.8v1.902h-1.8zm.398.5h.903v.902h-.903zm0 0"}))),Dh.createElement("g",{clipPath:"url(#co)"},Dh.createElement("g",{clipPath:"url(#cp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M86.445 45.465h.903v.902h-.903zm0 0"}))),Sn||(Sn=Dh.createElement("path",{className:"clip-1",d:"M-.001.001v17.7L46.1 44.3V26.6zm0 0",transform:"matrix(1 0 0 -1 73.146 76.966)"})),Dh.createElement("g",{clipPath:"url(#cq)"},Dh.createElement("g",{clipPath:"url(#cr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M19.348 1.566h99.898v5.7H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cs)"},Dh.createElement("g",{clipPath:"url(#ct)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M19.348 7.266h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cu)"},Dh.createElement("g",{clipPath:"url(#cv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"M19.348 8.367h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cw)"},Dh.createElement("g",{clipPath:"url(#cx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M19.348 9.367h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cy)"},Dh.createElement("g",{clipPath:"url(#cz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"M19.348 10.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cA)"},Dh.createElement("g",{clipPath:"url(#cB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M19.348 11.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cC)"},Dh.createElement("g",{clipPath:"url(#cD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"M19.348 12.465h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cE)"},Dh.createElement("g",{clipPath:"url(#cF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M19.348 13.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cG)"},Dh.createElement("g",{clipPath:"url(#cH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"M19.348 14.566h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cI)"},Dh.createElement("g",{clipPath:"url(#cJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M19.348 15.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cK)"},Dh.createElement("g",{clipPath:"url(#cL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"M19.348 16.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cM)"},Dh.createElement("g",{clipPath:"url(#cN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M19.348 17.664h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cO)"},Dh.createElement("g",{clipPath:"url(#cP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M19.348 18.766h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cQ)"},Dh.createElement("g",{clipPath:"url(#cR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"M19.348 19.766h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cS)"},Dh.createElement("g",{clipPath:"url(#cT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M19.348 20.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cU)"},Dh.createElement("g",{clipPath:"url(#cV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"M19.348 21.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cW)"},Dh.createElement("g",{clipPath:"url(#cX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M19.348 22.867h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cY)"},Dh.createElement("g",{clipPath:"url(#cZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M19.348 23.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#da)"},Dh.createElement("g",{clipPath:"url(#db)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M19.348 24.965h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dc)"},Dh.createElement("g",{clipPath:"url(#dd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"M19.348 26.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#de)"},Dh.createElement("g",{clipPath:"url(#df)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M19.348 27.066h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dg)"},Dh.createElement("g",{clipPath:"url(#dh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"M19.348 28.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#di)"},Dh.createElement("g",{clipPath:"url(#dj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M19.348 29.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dk)"},Dh.createElement("g",{clipPath:"url(#dl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M19.348 30.164h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dm)"},Dh.createElement("g",{clipPath:"url(#dn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M19.348 31.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#do)"},Dh.createElement("g",{clipPath:"url(#dp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"M19.348 32.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dq)"},Dh.createElement("g",{clipPath:"url(#dr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"M19.348 33.266h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ds)"},Dh.createElement("g",{clipPath:"url(#dt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M19.348 34.367h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#du)"},Dh.createElement("g",{clipPath:"url(#dv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M19.348 35.367h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dw)"},Dh.createElement("g",{clipPath:"url(#dx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M19.348 36.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dy)"},Dh.createElement("g",{clipPath:"url(#dz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"M19.348 37.465h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dA)"},Dh.createElement("g",{clipPath:"url(#dB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M19.348 38.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dC)"},Dh.createElement("g",{clipPath:"url(#dD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"M19.348 39.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dE)"},Dh.createElement("g",{clipPath:"url(#dF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M19.348 40.566h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dG)"},Dh.createElement("g",{clipPath:"url(#dH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M19.348 41.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dI)"},Dh.createElement("g",{clipPath:"url(#dJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M19.348 42.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dK)"},Dh.createElement("g",{clipPath:"url(#dL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"M19.348 43.664h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dM)"},Dh.createElement("g",{clipPath:"url(#dN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M19.348 44.766h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dO)"},Dh.createElement("g",{clipPath:"url(#dP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"M19.348 45.766h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dQ)"},Dh.createElement("g",{clipPath:"url(#dR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M19.348 46.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dS)"},Dh.createElement("g",{clipPath:"url(#dT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M19.348 47.867h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dU)"},Dh.createElement("g",{clipPath:"url(#dV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"M19.348 48.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dW)"},Dh.createElement("g",{clipPath:"url(#dX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M19.348 49.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dY)"},Dh.createElement("g",{clipPath:"url(#dZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"M19.348 50.965h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ea)"},Dh.createElement("g",{clipPath:"url(#eb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M19.348 52.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ec)"},Dh.createElement("g",{clipPath:"url(#ed)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M19.348 53.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ee)"},Dh.createElement("g",{clipPath:"url(#ef)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M19.348 54.066h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eg)"},Dh.createElement("g",{clipPath:"url(#eh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"M19.348 55.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ei)"},Dh.createElement("g",{clipPath:"url(#ej)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M19.348 56.164h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ek)"},Dh.createElement("g",{clipPath:"url(#el)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"M19.348 57.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#em)"},Dh.createElement("g",{clipPath:"url(#en)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M19.348 58.266h99.898v1.101H19.348zm0 0"}))),Dn||(Dn=Dh.createElement("path",{className:"clip-1",d:"m-.001 0-53.7 31.102 46 26.598L46.1 26.602zm0 0",transform:"matrix(1 0 0 -1 73.146 59.266)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M.002-.001v-10.7",transform:"matrix(1 0 0 -1 37.846 42.366)"}),Zn||(Zn=Dh.createElement("path",{className:"clip-1",d:"m-.001.002-24.598 14.2",transform:"matrix(1 0 0 -1 71.646 65.166)"})),Gn||(Gn=Dh.createElement("path",{className:"clip-1",d:"M0 0v-3.5",transform:"matrix(1 0 0 -1 46.946 47.766)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-3.5m0 3.5-24.5 14.2",transform:"matrix(1 0 0 -1 71.446 61.966)"}),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#39b54a",fillOpacity:1,strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v3.602l3-1.8V-1.8zm0 0",transform:"matrix(1 0 0 -1 40.946 47.766)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .002V-10.6",transform:"matrix(1 0 0 -1 34.746 40.666)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0-.001v-10.7",transform:"matrix(1 0 0 -1 31.746 38.866)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M-.001 0v-10.7",transform:"matrix(1 0 0 -1 28.646 37.066)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0-.001V-10.6",transform:"matrix(1 0 0 -1 25.546 35.366)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v-10.598",transform:"matrix(1 0 0 -1 22.446 33.566)"}),Dh.createElement("g",{clipPath:"url(#eo)"},Dh.createElement("g",{clipPath:"url(#ep)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m16.246 45.965.102-19.598h.297l-.098 19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m16.547 45.965.098-19.598h.3l-.097 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eq)"},Dh.createElement("g",{clipPath:"url(#er)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m16.848 45.965.097-19.598h.2v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#es)"},Dh.createElement("g",{clipPath:"url(#et)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M17.145 45.965V26.367h.3v19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M17.445 45.965V26.367h.301v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eu)"},Dh.createElement("g",{clipPath:"url(#ev)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M17.746 45.965V26.367h.3v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ew)"},Dh.createElement("g",{clipPath:"url(#ex)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M18.047 45.965V26.367h.3l-.1 19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"m18.246 45.965.102-19.598h.297v19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M18.645 45.965V26.367h.3l-.097 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ey)"},Dh.createElement("g",{clipPath:"url(#ez)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"m18.848 45.965.097-19.598h.301l-.101 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eA)"},Dh.createElement("g",{clipPath:"url(#eB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m19.145 45.965.101-19.598h.3l-.1 19.598zm0 0"}))),Bn||(Bn=Dh.createElement("path",{className:"clip-1",d:"M.002.002v17.7l3.097-1.7v-17.8zm0 0",transform:"matrix(1 0 0 -1 16.346 44.166)"})),Dh.createElement("g",{clipPath:"url(#eC)"},Dh.createElement("g",{clipPath:"url(#eD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m73.047 78.867.098-19.703h.3l-.097 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m73.348 78.867.097-19.703h.301l-.101 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m73.645 78.867.101-19.703h.2v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eE)"},Dh.createElement("g",{clipPath:"url(#eF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M73.945 78.867V59.164h.301v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eG)"},Dh.createElement("g",{clipPath:"url(#eH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M74.246 78.867V59.164h.3v19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M74.547 78.867V59.164h.3v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eI)"},Dh.createElement("g",{clipPath:"url(#eJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M74.848 78.867V59.164h.297v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eK)"},Dh.createElement("g",{clipPath:"url(#eL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M75.145 78.867V59.164h.3v19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M75.445 78.867V59.164h.301v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eM)"},Dh.createElement("g",{clipPath:"url(#eN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M75.746 78.867V59.164h.3l-.1 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m75.945 78.867.102-19.703h.3l-.1 19.703zm0 0"}))),Qn||(Qn=Dh.createElement("path",{className:"clip-1",d:"M-.001.001v17.7L3.1 15.9V-1.8zm0 0",transform:"matrix(1 0 0 -1 73.146 76.966)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M.002.002v17.7l3.097-1.7 46 26.598L102.9 11.502V-6.201L59.9-31.1v-3.5zm0 0",transform:"matrix(1 0 0 -1 16.346 44.166)"}),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#000",fillOpacity:1,strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001V31.4l13.6-7.9V-7.8zm0 0",transform:"matrix(1 0 0 -1 93.946 70.966)"}),Dh.createElement("g",{clipPath:"url(#eO)"},Dh.createElement("g",{clipPath:"url(#eP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.945 76.164V63.066h.7v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eQ)"},Dh.createElement("g",{clipPath:"url(#eR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eS)"},Dh.createElement("g",{clipPath:"url(#eT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eU)"},Dh.createElement("g",{clipPath:"url(#eV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eW)"},Dh.createElement("g",{clipPath:"url(#eX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.848 76.164V63.066h.199v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eY)"},Dh.createElement("g",{clipPath:"url(#eZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fa)"},Dh.createElement("g",{clipPath:"url(#fb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fc)"},Dh.createElement("g",{clipPath:"url(#fd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fe)"},Dh.createElement("g",{clipPath:"url(#ff)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.848 76.164V63.066h.199v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fg)"},Dh.createElement("g",{clipPath:"url(#fh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fi)"},Dh.createElement("g",{clipPath:"url(#fj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fk)"},Dh.createElement("g",{clipPath:"url(#fl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fm)"},Dh.createElement("g",{clipPath:"url(#fn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 76.164V63.066h.297v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fo)"},Dh.createElement("g",{clipPath:"url(#fp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 76.164V63.066h.203v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fq)"},Dh.createElement("g",{clipPath:"url(#fr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fs)"},Dh.createElement("g",{clipPath:"url(#ft)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-8.7l-7.5 4.4V4.4zm0 0",transform:"matrix(1 0 0 -1 104.446 67.466)"}),Un||(Un=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 76.166)"})),Xn||(Xn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 74.466)"})),qn||(qn=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 72.666)"})),Yn||(Yn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 70.966)"})),Jn||(Jn=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 69.166)"})),Kn||(Kn=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 67.466)"})),_n||(_n=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 65.766)"})),$n||($n=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 63.966)"})),ei||(ei=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 62.266)"})),ti||(ti=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 60.466)"})),li||(li=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 58.766)"})),ai||(ai=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 56.966)"})),ci||(ci=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 55.266)"})),ri||(ri=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.801",transform:"matrix(1 0 0 -1 105.946 53.566)"})),ni||(ni=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 51.766)"})),ii||(ii=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.801",transform:"matrix(1 0 0 -1 105.946 50.066)"})),Dh.createElement("g",{clipPath:"url(#fu)"},Dh.createElement("g",{clipPath:"url(#fv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.848 65.766v-13.2h.797v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fw)"},Dh.createElement("g",{clipPath:"url(#fx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fy)"},Dh.createElement("g",{clipPath:"url(#fz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fA)"},Dh.createElement("g",{clipPath:"url(#fB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 65.766v-13.2h.2v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.445 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fC)"},Dh.createElement("g",{clipPath:"url(#fD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.746 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fE)"},Dh.createElement("g",{clipPath:"url(#fF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fG)"},Dh.createElement("g",{clipPath:"url(#fH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fI)"},Dh.createElement("g",{clipPath:"url(#fJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 65.766v-13.2h.2v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fK)"},Dh.createElement("g",{clipPath:"url(#fL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.746 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fM)"},Dh.createElement("g",{clipPath:"url(#fN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fO)"},Dh.createElement("g",{clipPath:"url(#fP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fQ)"},Dh.createElement("g",{clipPath:"url(#fR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fS)"},Dh.createElement("g",{clipPath:"url(#fT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 65.766v-13.2h.297v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fU)"},Dh.createElement("g",{clipPath:"url(#fV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 65.766v-13.2h.203v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fW)"},Dh.createElement("g",{clipPath:"url(#fX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fY)"},Dh.createElement("g",{clipPath:"url(#fZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-8.7L-7.5-4.4v8.703zm0 0",transform:"matrix(1 0 0 -1 104.446 56.966)"}),Dh.createElement("g",{clipPath:"url(#ga)"},Dh.createElement("g",{clipPath:"url(#gb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.945 55.266V42.164h.7v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gc)"},Dh.createElement("g",{clipPath:"url(#gd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ge)"},Dh.createElement("g",{clipPath:"url(#gf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gg)"},Dh.createElement("g",{clipPath:"url(#gh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gi)"},Dh.createElement("g",{clipPath:"url(#gj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.848 55.266V42.164h.199v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gk)"},Dh.createElement("g",{clipPath:"url(#gl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gm)"},Dh.createElement("g",{clipPath:"url(#gn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#go)"},Dh.createElement("g",{clipPath:"url(#gp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gq)"},Dh.createElement("g",{clipPath:"url(#gr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.848 55.266V42.164h.199v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gs)"},Dh.createElement("g",{clipPath:"url(#gt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gu)"},Dh.createElement("g",{clipPath:"url(#gv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gw)"},Dh.createElement("g",{clipPath:"url(#gx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gy)"},Dh.createElement("g",{clipPath:"url(#gz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 55.266V42.164h.297v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gA)"},Dh.createElement("g",{clipPath:"url(#gB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 55.266V42.164h.203v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gC)"},Dh.createElement("g",{clipPath:"url(#gD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gE)"},Dh.createElement("g",{clipPath:"url(#gF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v-8.7l-7.5 4.4v8.703zm0 0",transform:"matrix(1 0 0 -1 104.446 46.566)"}),mi||(mi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 48.266)"})),di||(di=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 105.946 46.566)"})),hi||(hi=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 77.966)"})),pi||(pi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 70.066)"})),oi||(oi=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 68.366)"})),si||(si=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 66.566)"})),Ei||(Ei=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 64.866)"})),vi||(vi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 63.066)"})),fi||(fi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 61.366)"})),ui||(ui=Dh.createElement("path",{className:"clip-1",d:"M0 .002v-.8",transform:"matrix(1 0 0 -1 95.446 59.666)"})),yi||(yi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 57.866)"})),zi||(zi=Dh.createElement("path",{className:"clip-1",d:"M0 .002v-.8",transform:"matrix(1 0 0 -1 95.446 56.166)"})),ki||(ki=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 54.366)"})),Pi||(Pi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 52.666)"})),bi||(bi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 50.866)"})),Mi||(Mi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 49.166)"})),gi||(gi=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 95.446 47.466)"})),xi||(xi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 45.666)"})),Ri||(Ri=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 95.446 43.966)"})),Hi||(Hi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 42.166)"})),Oi||(Oi=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 95.446 40.466)"})),Ni||(Ni=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 71.866)"})),Dh.createElement("g",{className:"black","data-tcolor":"black",style:{fillOpacity:1}},Vi||(Vi=Dh.createElement("use",{xlinkHref:"#gG",x:40.446,y:109.066})),wi||(wi=Dh.createElement("use",{xlinkHref:"#gH",x:49.932,y:109.066})),Li||(Li=Dh.createElement("use",{xlinkHref:"#gI",x:58.536,y:109.066})),Ci||(Ci=Dh.createElement("use",{xlinkHref:"#gJ",x:65.628,y:109.066})),Ai||(Ai=Dh.createElement("use",{xlinkHref:"#gH",x:75.42,y:109.066})),Fi||(Fi=Dh.createElement("use",{xlinkHref:"#gI",x:84.096,y:109.066}))),ji||(ji=Dh.createElement("path",{className:"thread-box sblack","data-tcolor":"sblack",d:"M-.001 0c-4.5 0-9-4.5-9-9v-35.898c0-4.5 4.5-9 9-9h163.5c4.5 0 9 4.5 9 9V-9c0 4.5-4.5 9-9 9zm0 0",transform:"matrix(1 0 0 -1 371.146 32.766)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Ti||(Ti=Dh.createElement("use",{xlinkHref:"#gG",x:378.846,y:66.466})),Ii||(Ii=Dh.createElement("use",{xlinkHref:"#gK",x:388.332,y:66.466})),Wi||(Wi=Dh.createElement("use",{xlinkHref:"#gL",x:399.132,y:66.466})),Si||(Si=Dh.createElement("use",{xlinkHref:"#gM",x:409.032,y:66.466})),Di||(Di=Dh.createElement("use",{xlinkHref:"#gN",x:415.026,y:66.466})),Zi||(Zi=Dh.createElement("use",{xlinkHref:"#gO",x:420.912,y:66.466})),Gi||(Gi=Dh.createElement("use",{xlinkHref:"#gI",x:431.316,y:66.466})),Bi||(Bi=Dh.createElement("use",{xlinkHref:"#gH",x:438.408,y:66.466})),Qi||(Qi=Dh.createElement("use",{xlinkHref:"#gP",x:447.084,y:66.466})),Ui||(Ui=Dh.createElement("use",{xlinkHref:"#gQ",x:456.084,y:66.466})),Xi||(Xi=Dh.createElement("use",{xlinkHref:"#gR",x:467.064,y:66.466})),qi||(qi=Dh.createElement("use",{xlinkHref:"#gS",x:471.654,y:66.466})),Yi||(Yi=Dh.createElement("use",{xlinkHref:"#gT",x:476.154,y:66.466})),Ji||(Ji=Dh.createElement("use",{xlinkHref:"#gI",x:492.858,y:66.466})),Ki||(Ki=Dh.createElement("use",{xlinkHref:"#gU",x:499.95,y:66.466})),_i||(_i=Dh.createElement("use",{xlinkHref:"#gN",x:505.224,y:66.466})),$i||($i=Dh.createElement("use",{xlinkHref:"#gH",x:511.02,y:66.466})),em||(em=Dh.createElement("use",{xlinkHref:"#gI",x:519.696,y:66.466}))),tm||(tm=Dh.createElement("path",{className:"line-1 sblack","data-tcolor":"sblack",d:"M.002 0h117.097v.102H219.9",transform:"matrix(1 0 0 -1 126.846 59.766)"})),lm||(lm=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m362.145 59.664-16.098-5.297v10.7zm0 0"})),am||(am=Dh.createElement("path",{className:"line-4 sblack","data-tcolor":"sblack",d:"M.002.002V-22.9h21.297v-8.098",transform:"matrix(1 0 0 -1 452.846 86.666)"})),cm||(cm=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m474.145 131.965 5-15h-10zm0 0"})),rm||(rm=Dh.createElement("path",{className:"thread-box sblack","data-tcolor":"sblack",d:"M-.001 0C-4.501 0-8.9-4.4-8.9-8.9v-36c0-4.4 4.4-8.9 8.9-8.9h165.6c4.399 0 8.899 4.5 8.899 8.902v36c0 4.5-4.5 8.899-8.899 8.899zm0 0",transform:"matrix(1 0 0 -1 179.146 225.566)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},nm||(nm=Dh.createElement("use",{xlinkHref:"#gV",x:179.246,y:259.266})),im||(im=Dh.createElement("use",{xlinkHref:"#gP",x:196.238,y:259.266})),mm||(mm=Dh.createElement("use",{xlinkHref:"#gU",x:205.328,y:259.266})),dm||(dm=Dh.createElement("use",{xlinkHref:"#gW",x:210.53,y:259.266})),hm||(hm=Dh.createElement("use",{xlinkHref:"#gM",x:221.006,y:259.266})),pm||(pm=Dh.createElement("use",{xlinkHref:"#gN",x:227,y:259.266})),om||(om=Dh.createElement("use",{xlinkHref:"#gO",x:232.796,y:259.266})),sm||(sm=Dh.createElement("use",{xlinkHref:"#gI",x:243.272,y:259.266})),Em||(Em=Dh.createElement("use",{xlinkHref:"#gH",x:250.274,y:259.266})),vm||(vm=Dh.createElement("use",{xlinkHref:"#gP",x:258.95,y:259.266})),fm||(fm=Dh.createElement("use",{xlinkHref:"#gQ",x:267.95,y:259.266})),um||(um=Dh.createElement("use",{xlinkHref:"#gR",x:278.93,y:259.266})),ym||(ym=Dh.createElement("use",{xlinkHref:"#gS",x:283.52,y:259.266})),zm||(zm=Dh.createElement("use",{xlinkHref:"#gX",x:288.11,y:259.266})),km||(km=Dh.createElement("use",{xlinkHref:"#gH",x:300.116,y:259.266})),Pm||(Pm=Dh.createElement("use",{xlinkHref:"#gP",x:308.72,y:259.266})),bm||(bm=Dh.createElement("use",{xlinkHref:"#gQ",x:317.72,y:259.266})),Mm||(Mm=Dh.createElement("use",{xlinkHref:"#gH",x:328.7,y:259.266})),gm||(gm=Dh.createElement("use",{xlinkHref:"#gI",x:337.376,y:259.266}))),xm||(xm=Dh.createElement("path",{className:"line-3 sred","data-tcolor":"sred",d:"M0 0h54.3",transform:"matrix(1 0 0 -1 498.246 109.266)"})),Rm||(Rm=Dh.createElement("path",{className:"arrow red","data-tcolor":"red",d:"M551.746 115.266v-11.899l31.5 5.899zm0 0"})),Hm||(Hm=Dh.createElement("path",{className:"line-4 sblack","data-tcolor":"sblack",d:"M0 0v24.3h-.4v9.602",transform:"matrix(1 0 0 -1 261.946 225.566)"})),Om||(Om=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m261.547 177.367-5 14.899h10zm0 0"})),Nm||(Nm=Dh.createElement("path",{className:"line-3 sred","data-tcolor":"sred",d:"M0 .001h54.3",transform:"matrix(1 0 0 -1 279.946 208.466)"})),Vm||(Vm=Dh.createElement("path",{className:"arrow red","data-tcolor":"red",d:"M333.445 214.465v-11.899l31.602 5.899zm0 0"})),wm||(wm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-.7c-1.5 0-3-.6-4.3-1.5",transform:"matrix(1 0 0 -1 237.746 117.766)"})),Lm||(Lm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c-.5-1.098-.8-2.2-.8-3.301V-4.4",transform:"matrix(1 0 0 -1 229.746 122.566)"})),Cm||(Cm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v-4.5",transform:"matrix(1 0 0 -1 228.946 131.466)"})),Am||(Am=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001V-4.6",transform:"matrix(1 0 0 -1 228.946 140.466)"})),Fm||(Fm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v-4.5",transform:"matrix(1 0 0 -1 228.946 149.566)"})),jm||(jm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002v-4.5",transform:"matrix(1 0 0 -1 228.946 158.666)"})),Tm||(Tm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002v-4.5",transform:"matrix(1 0 0 -1 228.946 167.666)"})),Im||(Im=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002V-4.6",transform:"matrix(1 0 0 -1 228.946 176.666)"})),Wm||(Wm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v-.5c0-1.3.401-2.6 1.1-3.8",transform:"matrix(1 0 0 -1 228.946 185.766)"})),Sm||(Sm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c1.2-.699 2.5-1.1 3.8-1.1h.5",transform:"matrix(1 0 0 -1 233.246 193.266)"})),Dm||(Dm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.6",transform:"matrix(1 0 0 -1 242.046 194.366)"})),Zm||(Zm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 251.146 194.366)"})),Gm||(Gm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 260.146 194.366)"})),Bm||(Bm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 269.246 194.366)"})),Qm||(Qm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 278.246 194.366)"})),Um||(Um=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 287.346 194.366)"})),Xm||(Xm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 296.346 194.366)"})),qm||(qm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.597",transform:"matrix(1 0 0 -1 305.346 194.366)"})),Ym||(Ym=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 314.446 194.366)"})),Jm||(Jm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 323.546 194.366)"})),Km||(Km=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 332.546 194.366)"})),_m||(_m=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 341.546 194.366)"})),$m||($m=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 350.646 194.366)"})),ed||(ed=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001H4.6",transform:"matrix(1 0 0 -1 359.646 194.366)"})),td||(td=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 368.746 194.366)"})),ld||(ld=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 377.746 194.366)"})),ad||(ad=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 386.846 194.366)"})),cd||(cd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 395.846 194.366)"})),rd||(rd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 404.946 194.366)"})),nd||(nd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 413.946 194.366)"})),id||(id=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 423.046 194.366)"})),md||(md=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 432.046 194.366)"})),dd||(dd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.6",transform:"matrix(1 0 0 -1 441.046 194.366)"})),hd||(hd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h.3c1.403 0 2.801.402 4 1.203",transform:"matrix(1 0 0 -1 450.146 194.366)"})),pd||(pd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001C.6 1.1 1 2.4 1 3.6v.7",transform:"matrix(1 0 0 -1 457.546 189.866)"})),od||(od=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v4.6",transform:"matrix(1 0 0 -1 458.546 181.066)"})),sd||(sd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v4.5",transform:"matrix(1 0 0 -1 458.546 171.966)"})),Ed||(Ed=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v4.5",transform:"matrix(1 0 0 -1 458.546 162.966)"})),vd||(vd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001v4.5",transform:"matrix(1 0 0 -1 458.546 153.866)"})),fd||(fd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001v4.5",transform:"matrix(1 0 0 -1 458.546 144.866)"})),ud||(ud=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v4.5",transform:"matrix(1 0 0 -1 458.546 135.766)"})),yd||(yd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v.9c0 1.202-.3 2.4-.9 3.499",transform:"matrix(1 0 0 -1 458.546 126.766)"})),zd||(zd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c-1.198.8-2.698 1.3-4.1 1.3h-.2",transform:"matrix(1 0 0 -1 454.546 119.066)"})),kd||(kd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 445.746 117.766)"})),Pd||(Pd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 436.746 117.766)"})),bd||(bd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 427.646 117.766)"})),Md||(Md=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 418.646 117.766)"})),gd||(gd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 409.546 117.766)"})),xd||(xd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 400.546 117.766)"})),Rd||(Rd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.6",transform:"matrix(1 0 0 -1 391.546 117.766)"})),Hd||(Hd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 382.446 117.766)"})),Od||(Od=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 373.346 117.766)"})),Nd||(Nd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 364.346 117.766)"})),Vd||(Vd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0H-4.6",transform:"matrix(1 0 0 -1 355.346 117.766)"})),wd||(wd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 346.246 117.766)"})),Ld||(Ld=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.6",transform:"matrix(1 0 0 -1 337.246 117.766)"})),Cd||(Cd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 328.146 117.766)"})),Ad||(Ad=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 319.146 117.766)"})),Fd||(Fd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 310.046 117.766)"})),jd||(jd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 301.046 117.766)"})),Td||(Td=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 291.946 117.766)"})),Id||(Id=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 282.946 117.766)"})),Wd||(Wd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 273.846 117.766)"})),Sd||(Sd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 264.846 117.766)"})),Dd||(Dd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 255.746 117.766)"})),Zd||(Zd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 246.746 117.766)"})),Dh.createElement("g",{className:"black","data-tcolor":"black",style:{fillOpacity:1}},Gd||(Gd=Dh.createElement("use",{xlinkHref:"#gX",x:392.546,y:222.366})),Bd||(Bd=Dh.createElement("use",{xlinkHref:"#gH",x:404.552,y:222.366})),Qd||(Qd=Dh.createElement("use",{xlinkHref:"#gP",x:413.156,y:222.366})),Ud||(Ud=Dh.createElement("use",{xlinkHref:"#gQ",x:422.156,y:222.366})),Xd||(Xd=Dh.createElement("use",{xlinkHref:"#gS",x:433.244,y:222.366})),qd||(qd=Dh.createElement("use",{xlinkHref:"#gX",x:437.744,y:222.366})),Yd||(Yd=Dh.createElement("use",{xlinkHref:"#gH",x:449.75,y:222.366})),Jd||(Jd=Dh.createElement("use",{xlinkHref:"#gY",x:458.426,y:222.366})),Kd||(Kd=Dh.createElement("use",{xlinkHref:"#gU",x:468.326,y:222.366})),_d||(_d=Dh.createElement("use",{xlinkHref:"#gZ",x:473.6,y:222.366})),$d||($d=Dh.createElement("use",{xlinkHref:"#gW",x:483.392,y:222.366}))),Dh.createElement("path",{className:"line-2 sblue","data-tcolor":"sblue",d:"M0 .002V-25.9",transform:"matrix(1 0 0 -1 240.246 69.666)",style:{fill:"none",strokeWidth:2.292,strokeLinecap:"butt",strokeLinejoin:"round",strokeOpacity:1,strokeMiterlimit:10,stroke:"#00c"}}),eh||(eh=Dh.createElement("path",{className:"arrow blue","data-tcolor":"blue",d:"M234.348 94.766h11.898l-6 31.5zm0 0"})),Dh.createElement("g",{className:"blue","data-tcolor":"blue",style:{fillOpacity:1}},th||(th=Dh.createElement("use",{xlinkHref:"#ha",x:111.846,y:95.566})),lh||(lh=Dh.createElement("use",{xlinkHref:"#hb",x:121.638,y:95.566})),ah||(ah=Dh.createElement("use",{xlinkHref:"#hc",x:126.23,y:95.566})),ch||(ch=Dh.createElement("use",{xlinkHref:"#hb",x:140.326,y:95.566})),rh||(rh=Dh.createElement("use",{xlinkHref:"#hd",x:145.014,y:95.566})),nh||(nh=Dh.createElement("use",{xlinkHref:"#he",x:150.118,y:95.566})),ih||(ih=Dh.createElement("use",{xlinkHref:"#hf",x:157.798,y:95.566})),mh||(mh=Dh.createElement("use",{xlinkHref:"#hg",x:167.494,y:95.566})),dh||(dh=Dh.createElement("use",{xlinkHref:"#hh",x:171.494,y:95.566})),hh||(hh=Dh.createElement("use",{xlinkHref:"#hi",x:180.598,y:95.566})),ph||(ph=Dh.createElement("use",{xlinkHref:"#hj",x:189.382,y:95.566})),oh||(oh=Dh.createElement("use",{xlinkHref:"#hb",x:196.086,y:95.566})),sh||(sh=Dh.createElement("use",{xlinkHref:"#hd",x:200.774,y:95.566})),Eh||(Eh=Dh.createElement("use",{xlinkHref:"#hb",x:205.878,y:95.566})),vh||(vh=Dh.createElement("use",{xlinkHref:"#hi",x:210.566,y:95.566})),fh||(fh=Dh.createElement("use",{xlinkHref:"#hk",x:219.35,y:95.566})),uh||(uh=Dh.createElement("use",{xlinkHref:"#hi",x:134.446,y:117.066})),yh||(yh=Dh.createElement("use",{xlinkHref:"#hl",x:143.15,y:117.066})),zh||(zh=Dh.createElement("use",{xlinkHref:"#hg",x:148.446,y:117.066})),kh||(kh=Dh.createElement("use",{xlinkHref:"#hm",x:152.446,y:117.066})),Ph||(Ph=Dh.createElement("use",{xlinkHref:"#hn",x:167.15,y:117.066})),bh||(bh=Dh.createElement("use",{xlinkHref:"#hb",x:173.534,y:117.066})),Mh||(Mh=Dh.createElement("use",{xlinkHref:"#hd",x:178.222,y:117.066})),gh||(gh=Dh.createElement("use",{xlinkHref:"#hb",x:183.326,y:117.066})),xh||(xh=Dh.createElement("use",{xlinkHref:"#hk",x:188.014,y:117.066})),Rh||(Rh=Dh.createElement("use",{xlinkHref:"#ho",x:197.214,y:117.066}))),Dh.createElement("path",{className:"obj-box sblack","data-tcolor":"sblack",d:"M-.001 0c-4.5 0-9-4.399-9-8.899v-36c0-4.402 4.5-8.902 9-8.902h106c4.5 0 9 4.5 9 8.902v36c0 4.5-4.5 8.899-9 8.899zm0 0",transform:"matrix(1 0 0 -1 11.146 225.566)",style:{fillRule:"evenodd",fill:"#cff",fillOpacity:1,strokeWidth:2.292,strokeLinecap:"butt",strokeLinejoin:"round",strokeOpacity:1,strokeMiterlimit:10}}),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Hh||(Hh=Dh.createElement("use",{xlinkHref:"#hp",x:10.746,y:259.266})),Oh||(Oh=Dh.createElement("use",{xlinkHref:"#hq",x:21.834,y:259.266})),Nh||(Nh=Dh.createElement("use",{xlinkHref:"#gN",x:31.032,y:259.266})),Vh||(Vh=Dh.createElement("use",{xlinkHref:"#gI",x:36.918,y:259.266})),wh||(wh=Dh.createElement("use",{xlinkHref:"#gP",x:44.01,y:259.266})),Lh||(Lh=Dh.createElement("use",{xlinkHref:"#hr",x:53.01,y:259.266})),Ch||(Ch=Dh.createElement("use",{xlinkHref:"#gN",x:60.984,y:259.266})),Ah||(Ah=Dh.createElement("use",{xlinkHref:"#hs",x:66.87,y:259.266})),Fh||(Fh=Dh.createElement("use",{xlinkHref:"#gI",x:76.878,y:259.266})),jh||(jh=Dh.createElement("use",{xlinkHref:"#gP",x:83.88,y:259.266})),Th||(Th=Dh.createElement("use",{xlinkHref:"#ht",x:92.88,y:259.266})),Ih||(Ih=Dh.createElement("use",{xlinkHref:"#gH",x:108.756,y:259.266}))),Wh||(Wh=Dh.createElement("path",{className:"line-1 sblack","data-tcolor":"sblack",d:"M0 .001h-28.8",transform:"matrix(1 0 0 -1 170.246 252.466)"})),Sh||(Sh=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m126.145 252.465 16.101 5.402v-10.8zm0 0"})))}},8793:function(e,t,l){var a=l(7294),c=l(9960),r=l(1954),n=l(2949);t.Z=function(e){var t=(0,a.useState)(!1),l=t[0],i=t[1];(0,a.useEffect)((function(){i(!0)}),[]);var m,d,h,p=(m=(0,n.I)(),d=m.colorMode,m.setColorMode,"dark"===d?"button--secondary button--outline":"button--secondary");return h=e.index?"button "+p+" button--lg button--index":"button "+p+" button--lg",a.createElement(c.Z,{key:String(l),className:h,to:e.to},e.icon&&a.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},7128:function(e,t,l){l.r(t),l.d(t,{assets:function(){return E},contentTitle:function(){return o},default:function(){return u},frontMatter:function(){return p},metadata:function(){return s},toc:function(){return v}});var a=l(3117),c=l(102),r=(l(7294),l(3905)),n=l(8793),i=l(541),m=l(36),d=l(2986),h=["components"],p={id:"client",title:"Pulling a video stream",sidebar_label:"Client",slug:"/examples/client",description:"Example codes for pulling a stream on the client side."},o=void 0,s={unversionedId:"guides/examples/client",id:"version-3.2.x/guides/examples/client",title:"Pulling a video stream",description:"Example codes for pulling a stream on the client side.",source:"@site/versioned_docs/version-3.2.x/guides/examples/client.mdx",sourceDirName:"guides/examples",slug:"/examples/client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/client",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/guides/examples/client.mdx",tags:[],version:"3.2.x",frontMatter:{id:"client",title:"Pulling a video stream",sidebar_label:"Client",slug:"/examples/client",description:"Example codes for pulling a stream on the client side."},sidebar:"docs",previous:{title:"Transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/transcoding"},next:{title:"Server",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/server"}},E={},v=[{value:"Introduction",id:"introduction",level:2},{value:"Codes",id:"codes",level:2},{value:"Examples on Github",id:"examples-on-github",level:2}],f={toc:v};function u(e){var t=e.components,l=(0,c.Z)(e,h);return(0,r.kt)("wrapper",(0,a.Z)({},f,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"The following figure show the theory of ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegClient"),". Assuming that we have a video server from the remote side, the real-time stream is pushed continuously. Even we do not read the online stream, the data flow would not wait for reading. Therefore, we design the following two-thread workflow."),(0,r.kt)("p",null,(0,r.kt)(d.Z,{className:"themeColor",mdxType:"ClientSvg"})),(0,r.kt)("p",null,"When connecting to the remote server, ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient"),' would create a sub-thread ("',(0,r.kt)("em",{parentName:"p"},"writer"),'" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two cursors maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting cursor is kept stepping each time a new frame is received.'),(0,r.kt)("p",null,"The reading events would be triggered by the Python-C-API. When a new reading event comes from the main thread, the reader would lock the current position of the reading cursor, and read several frames from the buffer. After the reading results are collected, the lock would be released, and the reading cursor will be reset to the end of the read frames. When the writer is writing a new frame, the current written position will also be locked by the writer. A locked position would not be updated. For example, during the reading events, if the writting cursor moves to the locked position, the writer will wait until the reading is finished. Because the reading events are merely data-collecting operations, in most cases the reading events would not block the writer. If the writer is blocked for too long, the demuxing of the online stream may fail. So we recommend users to set a rational buffer size. For example, if we always read 5 frames each time, the buffer size is recommended to be double of the reading size, i.e. 10."),(0,r.kt)("h2",{id:"codes"},"Codes"),(0,r.kt)("p",null,"To test the following codes, we recommend users to use ",(0,r.kt)("a",{parentName:"p",href:"https://www.videolan.org/vlc/streaming.html",title:"VLC used for streaming"},"VLC",(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," or ",(0,r.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg",(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," to push a remote stream, because the stream pushing without encoding is not supported by ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," currently. Using VLC or FFMpeg to serve the stream will occupy less system resources."),(0,r.kt)("p",null,"The following example codes would scale the remote frame to 480x360, and resample the frame rate to 5 FPS. The reading size and the buffer size are ",(0,r.kt)("inlineCode",{parentName:"p"},"5")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"12")," respectively."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'{9,15,19,22-24,26-27} title="client.py" showLineNumbers',"{9,15,19,22-24,26-27}":!0,title:'"client.py"',showLineNumbers:!0},"import os, sys\nimport time\nimport mpegCoder\nmpegCoder.setGlobal(dumpLevel=2) # show full log.\n\nif __name__ == '__main__':\n d = mpegCoder.MpegClient() # create the handle.\n d.setParameter(widthDst=480, heightDst=360, dstFrameRate=(5,1), readSize=5, cacheSize=12) # do basic settings.\n success = d.FFmpegSetup('rtsp://localhost:8554/video') # connect with the server.\n print(d)\n\n if not success: # exit the program if the server is not available. You could delete this checking and see what will happen.\n exit()\n\n d.start() # start the sub-thread for demuxing the stream.\n\n time.sleep(5) # wait for getting some frames.\n print('Get slept')\n p = d.ExtractFrame() # extract some frames from current cache.\n print(p.shape) # show information of extracted frames.\n\n for i in range(10): # wait for 50 seconds.\n time.sleep(5)\n p = d.ExtractFrame() # extract some frames from current cache.\n \n d.terminate() # shut down the current sub-thread. You could call start() and let it restart.\n d.clear() # but here we would like to clear the handle and exit.\n")),(0,r.kt)("p",null,"After configuring the client, the codes contain the following key steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.FFmpegSetup()")," accepts a video stream address. The stream type would be detected from the protocol automacially. Currently, we support ",(0,r.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"ftp"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sftp"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"rtsp"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"rtmp"),". Note that only ",(0,r.kt)("inlineCode",{parentName:"p"},"rtsp")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"rtmp")," should be used for analyzing the real-time stream. The ",(0,r.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"ftp")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"sftp")," protocols are mostly used for data transfer. This method will launch a connect to the remote server.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"When ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.start()"),' is called, the sub-thread "',(0,r.kt)("em",{parentName:"p"},"writer"),'" will be created.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Using ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.ExtractFrame()")," to get the real-time data. The returned frame number is given by ",(0,r.kt)("inlineCode",{parentName:"p"},"readSize")," during the configuration. However, user could override the configurtion by using an argument, for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"ExtractFrame(4)")," would force the reader to read 4 frames.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If the remote stream is closed, ",(0,r.kt)("inlineCode",{parentName:"p"},"d.ExtractFrame()")," would return ",(0,r.kt)("inlineCode",{parentName:"p"},"None"),". However, user would terminate the client in any time. The method ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.terminate()")," would stop the writing thread. But the connection would not be aborted until ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.clear()")," is called."))),(0,r.kt)("h2",{id:"examples-on-github"},"Examples on Github"),(0,r.kt)("p",null,"On Github, we provide the above example as a single branch."),(0,r.kt)("p",null,(0,r.kt)(n.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-check",icon:m.Z,mdxType:"DarkButton"},"Demuxing Checking Program")),(0,r.kt)("p",null,"In addition, we provide another example. This example is a simple video stream player based on ",(0,r.kt)("a",{parentName:"p",href:"https://www.riverbankcomputing.com/software/pyqt",title:"PyQt5"},(0,r.kt)("inlineCode",{parentName:"a"},"PyQt5"),(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."),(0,r.kt)("p",null,(0,r.kt)(n.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-player",icon:m.Z,mdxType:"DarkButton"},"Video Stream Player")))}u.isMDXComponent=!0},36:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/5b75a116.2c7bff57.js b/assets/js/5b75a116.2c7bff57.js new file mode 100644 index 0000000..2b991d3 --- /dev/null +++ b/assets/js/5b75a116.2c7bff57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[679],{7085:function(e){e.exports=JSON.parse('{"name":"docusaurus-theme-search-algolia","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/5db7c5c4.365ab6af.js b/assets/js/5db7c5c4.365ab6af.js new file mode 100644 index 0000000..9c9c7ad --- /dev/null +++ b/assets/js/5db7c5c4.365ab6af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[1746],{5745:function(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/5f60fafc.506baf66.js b/assets/js/5f60fafc.506baf66.js new file mode 100644 index 0000000..edd1ef1 --- /dev/null +++ b/assets/js/5f60fafc.506baf66.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8767],{6391:function(e){e.exports=JSON.parse('{"pluginId":"default","version":"3.1.0","label":"3.1.0","banner":"unmaintained","badge":true,"className":"docs-version-3.1.0","isLast":false,"docsSidebars":{"version-3.1.0/docs":[{"type":"link","label":"Introduction","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/","docId":"introduction"},{"type":"category","label":"Installation","collapsed":false,"items":[{"type":"link","label":"PyPI","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/pypi","docId":"guides/install/pypi"},{"type":"link","label":"Windows","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/windows","docId":"guides/install/windows"},{"type":"link","label":"Linux","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/linux","docId":"guides/install/linux"},{"type":"link","label":"Legacy","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/legacy","docId":"guides/install/legacy"}],"collapsible":true},{"type":"category","label":"Examples","items":[{"type":"link","label":"Decoding","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/decoding","docId":"guides/examples/decoding"},{"type":"link","label":"Transcoding","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/transcoding","docId":"guides/examples/transcoding"},{"type":"link","label":"Client","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/client","docId":"guides/examples/client"},{"type":"link","label":"Server","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/server","docId":"guides/examples/server"}],"collapsible":true,"collapsed":true},{"type":"category","label":"Troubleshooting","items":[{"type":"link","label":"Installation","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/installation","docId":"troubleshooting/installation"},{"type":"link","label":"Running","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/running","docId":"troubleshooting/running"},{"type":"link","label":"Q&A","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/qna","docId":"troubleshooting/qna"}],"collapsible":true,"collapsed":true},{"type":"link","label":"Changelog","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/changelog","docId":"changelog"}],"version-3.1.0/apis":[{"type":"link","label":"Overview","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/","docId":"apis"},{"type":"link","label":"readme","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/readme","docId":"apis/readme"},{"type":"link","label":"setGlobal","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/setGlobal","docId":"apis/setGlobal"},{"type":"link","label":"MpegDecoder","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegDecoder","docId":"apis/MpegDecoder"},{"type":"link","label":"MpegEncoder","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegEncoder","docId":"apis/MpegEncoder"},{"type":"link","label":"MpegClient","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegClient","docId":"apis/MpegClient"},{"type":"link","label":"MpegServer","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegServer","docId":"apis/MpegServer"}]},"docs":{"apis":{"id":"apis","title":"Overview","description":"The overview of all APIs.","sidebar":"version-3.1.0/apis"},"apis/MpegClient":{"id":"apis/MpegClient","title":"MpegClient","description":"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly.","sidebar":"version-3.1.0/apis"},"apis/MpegDecoder":{"id":"apis/MpegDecoder","title":"MpegDecoder","description":"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly.","sidebar":"version-3.1.0/apis"},"apis/MpegEncoder":{"id":"apis/MpegEncoder","title":"MpegEncoder","description":"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly.","sidebar":"version-3.1.0/apis"},"apis/MpegServer":{"id":"apis/MpegServer","title":"MpegServer","description":"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly.","sidebar":"version-3.1.0/apis"},"apis/readme":{"id":"apis/readme","title":"readme","description":"Use it to see README and some useful instructions.","sidebar":"version-3.1.0/apis"},"apis/setGlobal":{"id":"apis/setGlobal","title":"setGlobal","description":"Set global configurations.","sidebar":"version-3.1.0/apis"},"changelog":{"id":"changelog","title":"Changelog","description":"The changelog of this project.","sidebar":"version-3.1.0/docs"},"guides/examples/client":{"id":"guides/examples/client","title":"Pulling a video stream","description":"Example codes for pulling a stream on the client side.","sidebar":"version-3.1.0/docs"},"guides/examples/decoding":{"id":"guides/examples/decoding","title":"Decoding a video","description":"Example codes for decoding a video.","sidebar":"version-3.1.0/docs"},"guides/examples/server":{"id":"guides/examples/server","title":"Pushing a video stream","description":"Example codes for pushing a stream on the server side.","sidebar":"version-3.1.0/docs"},"guides/examples/transcoding":{"id":"guides/examples/transcoding","title":"Transcoding a video","description":"Example codes for encoding or transcoding a video.","sidebar":"version-3.1.0/docs"},"guides/install/legacy":{"id":"guides/install/legacy","title":"Installation (legacy versions)","description":"Archived legacy pre-compiled versions of mpegCoder.","sidebar":"version-3.1.0/docs"},"guides/install/linux":{"id":"guides/install/linux","title":"Installation for Linux","description":"A tutorial about the installation or compilation of the package for Linux.","sidebar":"version-3.1.0/docs"},"guides/install/pypi":{"id":"guides/install/pypi","title":"Installation from PyPI","description":"A tutorial about the installation of the package from PyPI.","sidebar":"version-3.1.0/docs"},"guides/install/windows":{"id":"guides/install/windows","title":"Installation for Windows","description":"A tutorial about the installation or compilation of the package for Windows.","sidebar":"version-3.1.0/docs"},"introduction":{"id":"introduction","title":"Introduction","description":"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.","sidebar":"version-3.1.0/docs"},"troubleshooting/installation":{"id":"troubleshooting/installation","title":"Troubleshooting for installation","description":"The troubleshooting for installation.","sidebar":"version-3.1.0/docs"},"troubleshooting/qna":{"id":"troubleshooting/qna","title":"Questions and answers","description":"The questions and answers for mpegCoder.","sidebar":"version-3.1.0/docs"},"troubleshooting/running":{"id":"troubleshooting/running","title":"Troubleshooting for running","description":"The troubleshooting for running mpegCoder.","sidebar":"version-3.1.0/docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/6815.cd702bb8.js b/assets/js/6815.cd702bb8.js new file mode 100644 index 0000000..5f3bd62 --- /dev/null +++ b/assets/js/6815.cd702bb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[6815],{6815:function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t,r){var a,c=t.initialState;return{getState:function(){return c},dispatch:function(a,i){var l=function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var J,$,W,Q=null,Y=(J=-1,$=-1,W=void 0,function(e){var t=++J;return Promise.resolve(e).then((function(e){return W&&t<$?W:($=t,W=e,e)}))});function G(e){var t=e.event,r=e.nextState,n=void 0===r?{}:r,o=e.props,a=e.query,i=e.refresh,l=e.store,u=K(e,U);Q&&o.environment.clearTimeout(Q);var s=u.setCollections,f=u.setIsOpen,m=u.setQuery,p=u.setActiveItemId,d=u.setStatus;if(m(a),p(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var h,v=l.getState().collections.map((function(e){return V(V({},e),{},{items:[]})}));d("idle"),s(v),f(null!==(h=n.isOpen)&&void 0!==h?h:o.shouldPanelOpen({state:l.getState()}));var y=M(Y(v).then((function(){return Promise.resolve()})));return l.pendingRequests.add(y)}d("loading"),Q=o.environment.setTimeout((function(){d("stalled")}),o.stallThreshold);var g=M(Y(o.getSources(V({query:a,refresh:i,state:l.getState()},u)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(V({query:a,refresh:i,state:l.getState()},u))).then((function(t){return R(t,e.sourceId)}))}))).then(_).then((function(t){return q(t,e)})).then((function(e){return function(e){var t=e.collections,r=e.props,n=e.state,o=t.reduce((function(e,t){return j(j({},e),{},E({},t.source.sourceId,j(j({},t.source),{},{getItems:function(){return c(t.items)}})))}),{});return c(r.reshape({sources:Object.values(o),sourcesBySourceId:o,state:n})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:l.getState()})}))})))).then((function(e){var r;d("idle"),s(e);var c=o.shouldPanelOpen({state:l.getState()});f(null!==(r=n.isOpen)&&void 0!==r?r:o.openOnFocus&&!a&&c||c);var m=F(l.getState());if(null!==l.getState().activeItemId&&m){var p=m.item,h=m.itemInputValue,v=m.itemUrl,y=m.source;y.onActive(V({event:t,item:p,itemInputValue:h,itemUrl:v,refresh:i,source:y,state:l.getState()},u))}})).finally((function(){d("idle"),Q&&o.environment.clearTimeout(Q)}));return l.pendingRequests.add(g)}var X=["event","props","refresh","store"];function Z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ee(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var ne=["props","refresh","store"],oe=["inputElement","formElement","panelElement"],ae=["inputElement"],ce=["inputElement","maxLength"],ie=["item","source"];function le(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ue(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function me(e){var t=e.props,r=e.refresh,n=e.store,o=fe(e,ne);return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,a=e.panelElement;return ue({onTouchStart:function(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,a].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())},onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},fe(e,oe))},getRootProps:function(e){return ue({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return ue({action:"",noValidate:!0,role:"search",onSubmit:function(a){var c;a.preventDefault(),t.onSubmit(ue({event:a,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(c=e.inputElement)||void 0===c||c.blur()},onReset:function(a){var c;a.preventDefault(),t.onReset(ue({event:a,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(c=e.inputElement)||void 0===c||c.focus()}},fe(e,ae))},getLabelProps:function(e){return ue({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},e)},getInputProps:function(e){function a(e){(t.openOnFocus||Boolean(n.getState().query))&&G(ue({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var c="ontouchstart"in t.environment,i=e||{},l=(i.inputElement,i.maxLength),u=void 0===l?512:l,s=fe(i,ce),f=F(n.getState());return ue({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:null!=f&&f.itemUrl?"go":"search",spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){G(ue({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,a=re(e,X);if("ArrowUp"===t.key||"ArrowDown"===t.key){var c=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},i=function(){var e=F(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,c=e.itemInputValue,i=e.itemUrl,l=e.source;l.onActive(ee({event:t,item:r,itemInputValue:c,itemUrl:i,refresh:n,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?G(ee({event:t,props:r,query:o.getState().query,refresh:n,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),i(),setTimeout(c,0)})):(o.dispatch(t.key,{}),i(),c())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return;t.preventDefault();var l=F(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});G(ee({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},a)).then((function(){m.onSelect(ee({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},a))}))}}}(ue({event:e,props:t,refresh:r,store:n},o))},onFocus:a,onBlur:function(){c||(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())},onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||a(r)}},s)},getPanelProps:function(e){return ue({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){return ue({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},e)},getItemProps:function(e){var a=e.item,c=e.source,i=fe(e,ie);return ue({id:"".concat(t.id,"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=F(n.getState());if(null!==n.getState().activeItemId&&t){var c=t.item,i=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(ue({event:e,item:c,itemInputValue:i,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():G(ue({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(ue({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},i)}}}var pe=[{segment:"autocomplete-core",version:"1.5.2"}];function de(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function he(e){for(var t=1;t=r?null===n?null:0:o}function Oe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(f++),plugins:o,initialState:b({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(v(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return h(e,r)}))).then((function(e){return c(e)})).then((function(e){return e.map((function(e){return b(b({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:b({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}(e,t),n=a(Ee,r,(function(e){var t=e.prevState,n=e.state;r.onStateChange(Pe({prevState:t,state:n,refresh:u},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var r=0,n=e.map((function(e){return l(l({},e),{},{items:c(e.items).map((function(e){return l(l({},e),{},{__autocomplete_id:r++})}))})}));t.dispatch("setCollections",n)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:n}),i=me(Pe({props:r,refresh:u,store:n},o));function u(){return G(Pe({event:new Event("input"),nextState:{isOpen:n.getState().isOpen},props:r,query:n.getState().query,refresh:u,store:n},o))}return r.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,Pe(Pe({},o),{},{refresh:u,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})}}))})),function(e){var t,r=e.metadata,n=e.environment;if(null===(t=n.navigator)||void 0===t?void 0:t.userAgent.includes("Algolia Crawler")){var o=n.document.createElement("meta"),a=n.document.querySelector("head");o.name="algolia:metadata",setTimeout((function(){o.content=JSON.stringify(r),a.appendChild(o)}),0)}}({metadata:ye({plugins:r.plugins,options:e}),environment:r.environment}),Pe(Pe({refresh:u},i),o)}var Ce=r(7294);function ke(e){var t=e.translations,r=(void 0===t?{}:t).searchByText,n=void 0===r?"Search by":r;return Ce.createElement("a",{href:"https://www.algolia.com/ref/docsearch/?utm_source=".concat(window.location.hostname,"&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch"),target:"_blank",rel:"noopener noreferrer"},Ce.createElement("span",{className:"DocSearch-Label"},n),Ce.createElement("svg",{width:"77",height:"19","aria-label":"Algolia",role:"img"},Ce.createElement("path",{d:"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z",fill:"currentColor",fillRule:"evenodd"})))}function Ae(e){return Ce.createElement("svg",{width:"15",height:"15","aria-label":e.ariaLabel,role:"img"},Ce.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function xe(e){var t=e.translations,r=void 0===t?{}:t,n=r.selectText,o=void 0===n?"to select":n,a=r.selectKeyAriaLabel,c=void 0===a?"Enter key":a,i=r.navigateText,l=void 0===i?"to navigate":i,u=r.navigateUpKeyAriaLabel,s=void 0===u?"Arrow up":u,f=r.navigateDownKeyAriaLabel,m=void 0===f?"Arrow down":f,p=r.closeText,d=void 0===p?"to close":p,h=r.closeKeyAriaLabel,v=void 0===h?"Escape key":h,y=r.searchByText,g=void 0===y?"Search by":y;return Ce.createElement(Ce.Fragment,null,Ce.createElement("div",{className:"DocSearch-Logo"},Ce.createElement(ke,{translations:{searchByText:g}})),Ce.createElement("ul",{className:"DocSearch-Commands"},Ce.createElement("li",null,Ce.createElement("span",{className:"DocSearch-Commands-Key"},Ce.createElement(Ae,{ariaLabel:c},Ce.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),Ce.createElement("span",{className:"DocSearch-Label"},o)),Ce.createElement("li",null,Ce.createElement("span",{className:"DocSearch-Commands-Key"},Ce.createElement(Ae,{ariaLabel:m},Ce.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),Ce.createElement("span",{className:"DocSearch-Commands-Key"},Ce.createElement(Ae,{ariaLabel:s},Ce.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),Ce.createElement("span",{className:"DocSearch-Label"},l)),Ce.createElement("li",null,Ce.createElement("span",{className:"DocSearch-Commands-Key"},Ce.createElement(Ae,{ariaLabel:v},Ce.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),Ce.createElement("span",{className:"DocSearch-Label"},d))))}function Ne(e){var t=e.hit,r=e.children;return Ce.createElement("a",{href:t.url},r)}function Re(){return Ce.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},Ce.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function _e(e){var t=e.translations,r=void 0===t?{}:t,n=r.titleText,o=void 0===n?"Unable to fetch results":n,a=r.helpText,c=void 0===a?"You might want to check your network connection.":a;return Ce.createElement("div",{className:"DocSearch-ErrorScreen"},Ce.createElement("div",{className:"DocSearch-Screen-Icon"},Ce.createElement(Re,null)),Ce.createElement("p",{className:"DocSearch-Title"},o),Ce.createElement("p",{className:"DocSearch-Help"},c))}function qe(){return Ce.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},Ce.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}var Te=["translations"];function Le(e){return function(e){if(Array.isArray(e))return Me(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Me(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Me(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Me(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Fe(e){var t=e.translations,r=void 0===t?{}:t,n=He(e,Te),o=r.noResultsText,a=void 0===o?"No results for":o,c=r.suggestedQueryText,i=void 0===c?"Try searching for":c,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return Ce.createElement("div",{className:"DocSearch-NoResults"},Ce.createElement("div",{className:"DocSearch-Screen-Icon"},Ce.createElement(qe,null)),Ce.createElement("p",{className:"DocSearch-Title"},a,' "',Ce.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&Ce.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},Ce.createElement("p",{className:"DocSearch-Help"},i,":"),Ce.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(Le(e),[Ce.createElement("li",{key:t},Ce.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&Ce.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),Ce.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var Ue=function(){return Ce.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},Ce.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Be(e){switch(e.type){case"lvl1":return Ce.createElement(Ue,null);case"content":return Ce.createElement(ze,null);default:return Ce.createElement(Ve,null)}}function Ve(){return Ce.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},Ce.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function ze(){return Ce.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},Ce.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Ke(){return Ce.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},Ce.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},Ce.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),Ce.createElement("path",{d:"M8 17l-6-6 6-6"})))}var Je=["hit","attribute","tagName"];function $e(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function We(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ge(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Xe(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,a=Ye(e,Je);return(0,Ce.createElement)(o,We(We({},a),{},{dangerouslySetInnerHTML:{__html:Ge(t,"_snippetResult.".concat(r,".value"))||Ge(t,r)}}))}function Ze(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,a=[],c=!0,i=!1;try{for(r=r.call(e);!(c=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);c=!0);}catch(l){i=!0,o=l}finally{try{c||null==r.return||r.return()}finally{if(i)throw o}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return et(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return et(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function et(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r|<\/mark>)/g,at=RegExp(ot.source);function ct(e){var t,r,n,o,a,c=e;if(!c.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var i=((c.__docsearch_parent?null===(t=c.__docsearch_parent)||void 0===t||null===(r=t._highlightResult)||void 0===r||null===(n=r.hierarchy)||void 0===n?void 0:n.lvl0:null===(o=e._highlightResult)||void 0===o||null===(a=o.hierarchy)||void 0===a?void 0:a.lvl0)||{}).value;return i&&at.test(i)?i.replace(ot,""):i}function it(){return it=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function ht(e){var t=e.translations,r=void 0===t?{}:t,n=dt(e,mt),o=r.recentSearchesTitle,a=void 0===o?"Recent":o,c=r.noRecentSearchesText,i=void 0===c?"No recent searches":c,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,d=r.removeFavoriteSearchButtonTitle,h=void 0===d?"Remove this search from favorites":d;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:Ce.createElement("div",{className:"DocSearch-StartScreen"},Ce.createElement("p",{className:"DocSearch-Help"},i)):!1===n.hasCollections?null:Ce.createElement("div",{className:"DocSearch-Dropdown-Container"},Ce.createElement(rt,pt({},n,{title:a,collection:n.state.collections[0],renderIcon:function(){return Ce.createElement("div",{className:"DocSearch-Hit-icon"},Ce.createElement(ut,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return Ce.createElement(Ce.Fragment,null,Ce.createElement("div",{className:"DocSearch-Hit-action"},Ce.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},Ce.createElement(st,null))),Ce.createElement("div",{className:"DocSearch-Hit-action"},Ce.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},Ce.createElement(ft,null))))}})),Ce.createElement(rt,pt({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return Ce.createElement("div",{className:"DocSearch-Hit-icon"},Ce.createElement(st,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return Ce.createElement("div",{className:"DocSearch-Hit-action"},Ce.createElement("button",{className:"DocSearch-Hit-action-button",title:h,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},Ce.createElement(ft,null)))}})))}var vt=["translations"];function yt(){return yt=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var bt=Ce.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=gt(e,vt);if("error"===n.state.status)return Ce.createElement(_e,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?Ce.createElement(Fe,yt({},n,{translations:null==r?void 0:r.noResultsScreen})):Ce.createElement(lt,n):Ce.createElement(ht,yt({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function Ot(){return Ce.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},Ce.createElement("g",{fill:"none",fillRule:"evenodd"},Ce.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},Ce.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),Ce.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},Ce.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var St=r(830),jt=["translations"];function Et(){return Et=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pt(e){var t=e.translations,r=void 0===t?{}:t,n=wt(e,jt),o=r.resetButtonTitle,a=void 0===o?"Clear the query":o,c=r.resetButtonAriaLabel,i=void 0===c?"Clear the query":c,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=n.getFormProps({inputElement:n.inputRef.current}).onReset;return Ce.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),Ce.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),Ce.createElement(Ce.Fragment,null,Ce.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:m},Ce.createElement("label",Et({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),Ce.createElement(St.W,null)),Ce.createElement("div",{className:"DocSearch-LoadingIndicator"},Ce.createElement(Ot,null)),Ce.createElement("input",Et({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:64}))),Ce.createElement("button",{type:"reset",title:a,className:"DocSearch-Reset","aria-label":i,hidden:!n.state.query},Ce.createElement(ft,null))),Ce.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var It=["_highlightResult","_snippetResult"];function Dt(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ct(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function kt(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=Ct(t),a=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,Dt(t,It)),c=a.findIndex((function(e){return e.objectID===r.objectID}));c>-1&&a.splice(c,1),a.unshift(r),a=a.slice(0,n),o.setItem(a)},remove:function(e){a=a.filter((function(t){return t.objectID!==e.objectID})),o.setItem(a)},getAll:function(){return a}}}function At(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}");return{get:(e,t,r={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{const r=JSON.stringify(e),n=o()[r];return Promise.all([n||t(),void 0!==n])})).then((([e,t])=>Promise.all([e,t||r.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const a=o();return a[JSON.stringify(e)]=r,n().setItem(t,JSON.stringify(a)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function xt(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>xt({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>xt({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>xt({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>xt({caches:t}).clear()))}}function Nt(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);const c=n(),i=o&&o.miss||(()=>Promise.resolve());return c.then((e=>i(e))).then((()=>c))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function Rt(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function _t(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function qt(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Tt="4.10.3",Lt={WithinQueryParameters:0,WithinHeaders:1};function Mt(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ht={Read:1,Write:2,Any:3},Ft=1,Ut=2,Bt=3,Vt=12e4;function zt(e,t=Ft){return{...e,status:t,lastUpdate:Date.now()}}function Kt(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ht.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ht.Any}}const Jt="GET",$t="POST";function Wt(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(zt(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===Ft||Date.now()-e.lastUpdate>Vt}(e))),n=e.filter((e=>function(e){return e.status===Bt&&Date.now()-e.lastUpdate<=Vt}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Kt(e))):t}}))}function Qt(e,t,r,n){const o=[],a=function(e,t){if(e.method===Jt||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),c=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),i=r.method,l=r.method!==Jt?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Zt(o)};const p={data:a,headers:c,method:i,url:Gt(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},d=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},h={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=d(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",er(n)),e.hostsCache.set(m,zt(m,r.isTimedOut?Bt:Ut))]).then((()=>f(t,l)))},onFail(e){throw d(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,Zt(o))}};return e.requester.send(p).then((e=>((e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e))(e,h)))};return Wt(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Yt(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Gt(e,t,r){const n=Xt(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Xt(e){return Object.keys(e).map((t=>{return qt("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function Zt(e){return e.map((e=>er(e)))}function er(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const tr=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Lt.WithinHeaders?n:{},queryParameters:()=>e===Lt.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Lt.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:a,timeouts:c,userAgent:i,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:a,timeouts:c,userAgent:i,headers:s,queryParameters:u,hosts:l.map((e=>Kt(e))),read(e,t){const r=Mt(t,f.timeouts.read),n=()=>Qt(f,f.hosts.filter((e=>0!=(e.accept&Ht.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Qt(f,f.hosts.filter((e=>0!=(e.accept&Ht.Write))),e,Mt(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ht.Read},{url:`${t}.algolia.net`,accept:Ht.Write}].concat(Rt([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return _t(o,e.methods)},rr=e=>(t,r={})=>_t({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),nr=e=>(t,r)=>{const n=t.map((e=>({...e,params:Xt(e.params||{})})));return e.transporter.read({method:$t,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},or=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...a}=t.params;return rr(e)(t.indexName,{methods:{searchForFacetValues:ir}}).searchForFacetValues(n,o,{...r,...a})}))),ar=e=>(t,r,n)=>e.transporter.read({method:$t,path:qt("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),cr=e=>(t,r)=>e.transporter.read({method:$t,path:qt("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),ir=e=>(t,r,n)=>e.transporter.read({method:$t,path:qt("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),lr=1,ur=2,sr=3;function fr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let a;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===a&&(clearTimeout(o),a=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(a),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(a),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=sr,{debug:(e,t)=>(lr>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(ur>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Nt(),requestsCache:Nt({serializable:!1}),hostsCache:xt({caches:[At({key:`4.10.3-${e}`}),Nt()]}),userAgent:Yt(Tt).add({segment:"Browser",version:"lite"}),authMode:Lt.WithinQueryParameters};var o;return tr({...n,...r,methods:{search:nr,searchForFacetValues:or,multipleQueries:nr,multipleSearchForFacetValues:or,initIndex:e=>t=>rr(e)(t,{methods:{search:cr,searchForFacetValues:ir,findAnswers:ar}})}})}fr.version=Tt;var mr=fr,pr="3.0.0";function dr(){}function hr(e){return e}function vr(e,t){return e.reduce((function(e,r){var n=t(r);return e.hasOwnProperty(n)||(e[n]=[]),e[n].length<5&&e[n].push(r),e}),{})}var yr=["footer","searchBox"];function gr(){return gr=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Pr(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,a=void 0===o?"Search docs":o,c=e.searchParameters,i=e.onClose,l=void 0===i?dr:i,u=e.transformItems,s=void 0===u?hr:u,f=e.hitComponent,m=void 0===f?Ne:f,p=e.resultsFooterComponent,d=void 0===p?function(){return null}:p,h=e.navigator,v=e.initialScrollY,y=void 0===v?0:v,g=e.transformSearchClient,b=void 0===g?hr:g,O=e.disableUserPersonalization,S=void 0!==O&&O,j=e.initialQuery,E=void 0===j?"":j,w=e.translations,P=void 0===w?{}:w,I=e.getMissingResultsUrl,D=P.footer,C=P.searchBox,k=wr(P,yr),A=jr(Ce.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),x=A[0],N=A[1],R=Ce.useRef(null),_=Ce.useRef(null),q=Ce.useRef(null),T=Ce.useRef(null),L=Ce.useRef(null),M=Ce.useRef(10),H=Ce.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,64):"").current,F=Ce.useRef(E||H).current,U=function(e,t,r){return Ce.useMemo((function(){var n=mr(e,t);return n.addAlgoliaAgent("docsearch",pr),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",pr),r(n)}),[e,t,r])}(t,r,b),B=Ce.useRef(kt({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,V=Ce.useRef(kt({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===B.getAll().length?7:4})).current,z=Ce.useCallback((function(e){if(!S){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===B.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&V.add(t)}}),[B,V,S]),K=Ce.useMemo((function(){return De({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:F,context:{searchSuggestions:[]}},navigator:h,onStateChange:function(e){N(e.state)},getSources:function(e){var t=e.query,r=e.state,o=e.setContext,a=e.setStatus;return t?U.search([{query:t,indexName:n,params:Or({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(M.current),"hierarchy.lvl2:".concat(M.current),"hierarchy.lvl3:".concat(M.current),"hierarchy.lvl4:".concat(M.current),"hierarchy.lvl5:".concat(M.current),"hierarchy.lvl6:".concat(M.current),"content:".concat(M.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20},c)}]).catch((function(e){throw"RetryError"===e.name&&a("error"),e})).then((function(e){var t=e.results[0],n=t.hits,a=t.nbHits,c=vr(n,(function(e){return ct(e)}));return r.context.searchSuggestions.length0&&(W(),L.current&&L.current.focus())}),[F,W]),Ce.useEffect((function(){function e(){if(_.current){var e=.01*window.innerHeight;_.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),Ce.createElement("div",gr({ref:R},$({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===x.status&&"DocSearch-Container--Stalled","error"===x.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&l()}}),Ce.createElement("div",{className:"DocSearch-Modal",ref:_},Ce.createElement("header",{className:"DocSearch-SearchBar",ref:q},Ce.createElement(Pt,gr({},K,{state:x,autoFocus:0===F.length,inputRef:L,isFromSelection:Boolean(F)&&F===H,translations:C,onClose:l}))),Ce.createElement("div",{className:"DocSearch-Dropdown",ref:T},Ce.createElement(bt,gr({},K,{indexName:n,state:x,hitComponent:m,resultsFooterComponent:d,disableUserPersonalization:S,recentSearches:V,favoriteSearches:B,inputRef:L,translations:k,getMissingResultsUrl:I,onItemClick:function(e){z(e),l()}}))),Ce.createElement("footer",{className:"DocSearch-Footer"},Ce.createElement(xe,{translations:D}))))}}}]); \ No newline at end of file diff --git a/assets/js/6945.ccf0380a.js b/assets/js/6945.ccf0380a.js new file mode 100644 index 0000000..10de13d --- /dev/null +++ b/assets/js/6945.ccf0380a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[6945],{6945:function(e,c,p){p.r(c)}}]); \ No newline at end of file diff --git a/assets/js/69cb1e83.9e933b99.js b/assets/js/69cb1e83.9e933b99.js new file mode 100644 index 0000000..028f7ee --- /dev/null +++ b/assets/js/69cb1e83.9e933b99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8038],{8793:function(e,t,n){var a=n(7294),i=n(9960),r=n(1954),o=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],l=t[1];(0,a.useEffect)((function(){l(!0)}),[]);var d,p,m,c=(d=(0,o.I)(),p=d.colorMode,d.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+c+" button--lg button--index":"button "+c+" button--lg",a.createElement(i.Z,{key:String(n),className:m,to:e.to},e.icon&&a.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},440:function(e,t,n){n.r(t),n.d(t,{assets:function(){return f},contentTitle:function(){return g},default:function(){return v},frontMatter:function(){return h},metadata:function(){return N},toc:function(){return C}});var a=n(3117),i=n(102),r=(n(7294),n(3905)),o=n(8793),l=n(541),d=n(5514),p=n(7225),m=n(866),c=n(2895),s=n(5099),u=n(6564),k=["components"],h={id:"linux",title:"Installation for Linux",sidebar_label:"Linux",slug:"/installation/linux",description:"A tutorial about the installation or compilation of the package for Linux."},g=void 0,N={unversionedId:"guides/install/linux",id:"guides/install/linux",title:"Installation for Linux",description:"A tutorial about the installation or compilation of the package for Linux.",source:"@site/docs/guides/install/linux.mdx",sourceDirName:"guides/install",slug:"/installation/linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/linux",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/install/linux.mdx",tags:[],version:"current",frontMatter:{id:"linux",title:"Installation for Linux",sidebar_label:"Linux",slug:"/installation/linux",description:"A tutorial about the installation or compilation of the package for Linux."},sidebar:"docs",previous:{title:"Windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/windows"},next:{title:"Legacy",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/legacy"}},f={},C=[{value:"Install the pre-compiled module",id:"install-the-pre-compiled-module",level:2},{value:"Download mpegCoder",id:"download-mpegcoder",level:3},{value:"Install Numpy",id:"install-numpy",level:3},{value:"Download dependencies",id:"download-dependencies",level:3},{value:"Import",id:"import",level:3},{value:"Compile the module",id:"compile-the-module",level:2},{value:"Compile mpegCoder",id:"compile-mpegcoder",level:3},{value:"Compile FFMpeg",id:"compile-ffmpeg",level:3}],b={toc:C};function v(e){var t=e.components,n=(0,i.Z)(e,k);return(0,r.kt)("wrapper",(0,a.Z)({},b,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This guide contains steps for installing or compiling the ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," module manually. We recommend users who need to use ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," in a project locally to install the package by this way."),(0,r.kt)("h2",{id:"install-the-pre-compiled-module"},"Install the pre-compiled module"),(0,r.kt)("h3",{id:"download-mpegcoder"},"Download ",(0,r.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,r.kt)("p",null,"First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,r.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GCC/G++"),(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py310.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.10.4")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py39.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.9.12")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py38.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.8.13")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py37.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.21.5")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.7.13")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0-linux/mpegCoder_3_2_0_Linux_py36.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"5.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.19.5")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.6.15")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 11"))))),(0,r.kt)("p",null,"After extracting the tarball, we could get ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.so"),"."),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Note that the above versions only show the environment when building ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". It does not mean that they are the dependencies of running ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". For example, users could use ",(0,r.kt)("inlineCode",{parentName:"p"},"python 3.9.5")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"numpy 1.22.0")," to run ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,r.kt)("h3",{id:"install-numpy"},"Install Numpy"),(0,r.kt)("p",null,"To run ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", you are required to install ",(0,r.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," with the correct version first. The best version for each ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," release has been listed before. If your Numpy version is differnt from the best version too much, ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," may not work. Here is the command for installation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"python -m pip install numpy==\n")),(0,r.kt)("h3",{id:"download-dependencies"},"Download dependencies"),(0,r.kt)("p",null,"The pre-compiled dependencies are available on our release page. The dependencies contain several ",(0,r.kt)("inlineCode",{parentName:"p"},".so")," files. Users also need to download the tarball with the correct FFMpeg version, and extract the files."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GCC/G++"),(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/so-linux-ffmpeg_5_0.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"5.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"10.2.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian ",(0,r.kt)("inlineCode",{parentName:"td"},"11"))))),(0,r.kt)("p",null,"These files are compiled by myself, because FFMpeg has not released the fully built shared libraries for Linux. To learn how to compile the FFMpeg, please check ",(0,r.kt)("a",{parentName:"p",href:"#compile-the-module"},"the compilation section"),"."),(0,r.kt)("h3",{id:"import"},"Import"),(0,r.kt)("p",null,"Running the pre-compiled ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," requires users to add the required dynamic libraries to your library path. The extracted dependency files should contain two folders:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},".\n|---lib\n`---lib-fix\n")),(0,r.kt)("p",null,"We recommend users to place the two folders in a global domain, for example,"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"/opt/ffmpeg/\n|---lib\n`---lib-fix\n")),(0,r.kt)("p",null,"After that, users could add the following lines to your ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.bashrc")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"export LD_LIBRARY_PATH=/opt/ffmpeg/lib:$LD_LIBRARY_PATH\nexport PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH\nexport PKG_CONFIG_LIBDIR=/opt/ffmpeg/lib/:$PKG_CONFIG_LIBDIR\n")),(0,r.kt)("p",null,"To make the configurations take effects instantly, please run"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"source ~/.bashrc\n")),(0,r.kt)("p",null,"Running the module requires users to install ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc>=2.29"),". Please check the following table and find whether the requirements are fulfilled in your case:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GLibC"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Fulfilled"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Ubuntu bionic (",(0,r.kt)("inlineCode",{parentName:"td"},"18.04"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.27")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:s.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Ubuntu focal (",(0,r.kt)("inlineCode",{parentName:"td"},"20.04"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.31")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:c.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian buster (",(0,r.kt)("inlineCode",{parentName:"td"},"10"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.28")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:s.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian bullseye (",(0,r.kt)("inlineCode",{parentName:"td"},"11"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.31")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:c.Z,mdxType:"InlineIcon"}))))),(0,r.kt)("p",null,"If the ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc>=2.29")," is not provided by your OS, we recommend users to compile and install GLibC by themselves. However, if users want a faster hotfix. Please check the extracted dependencies."),(0,r.kt)("p",null,"Take the above steps as an example, then users could link the provided GLibC to your ",(0,r.kt)("inlineCode",{parentName:"p"},"/lib")," folder."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ln -sf /opt/ffmpeg/lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6\n")),(0,r.kt)("p",null,"After all, users could place ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.so")," in your project folder, and import the module by"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import mpegCoder\n")),(0,r.kt)("h2",{id:"compile-the-module"},"Compile the module"),(0,r.kt)("h3",{id:"compile-mpegcoder"},"Compile ",(0,r.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,r.kt)("p",null,"If users need to compile the module by themselves, please follow the instructions on Github:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/README.md",icon:m.Z,mdxType:"DarkButton"},"Compile with GCC/G++")),(0,r.kt)("h3",{id:"compile-ffmpeg"},"Compile FFMpeg"),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Users are not required for compiling FFMpeg by themselves, because ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," could be compiled with our provided pre-compiled FFMpeg. But in some cases, user may need to built ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," with a specified FFMpeg version."),(0,r.kt)("p",{parentName:"div"},"If users are using their own FFMpeg to compile ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", please check the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/setup.py#L34"},"configuration",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," in the setup file and the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/MpegCoder/MpegBase.h#L11"},"macros",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," in the source codes."))),(0,r.kt)("p",null,"We have provided some scripts for compiling FFMpeg. Please check the following branch:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/deps",icon:u.Z,mdxType:"DarkButton"},"Scripts for compilation")),(0,r.kt)("p",null,"For example, if users want to compile FFMpeg ",(0,r.kt)("inlineCode",{parentName:"p"},"5.0"),", they could run"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"curl -O https://raw.githubusercontent.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/deps/install-ffmpeg-5_0.sh\nchmod +rwx install-ffmpeg-5_0.sh\n./install-ffmpeg-5_0.sh --all --nvcuda\n")),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Note that users may need to modify the scripts according to their own cases. Our script has been only and successfully tested on ",(0,r.kt)("inlineCode",{parentName:"p"},"Ubuntu 22.04"),"+",(0,r.kt)("inlineCode",{parentName:"p"},"GCC 11.2.0")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Debian 11"),"+",(0,r.kt)("inlineCode",{parentName:"p"},"GCC 10.2.1"),"."))))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},5099:function(e,t){t.Z={body:''}},866:function(e,t){t.Z={body:'',width:24,height:24}},7225:function(e,t){t.Z={body:'',width:24,height:24}},6564:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/70bebb30.cff63a83.js b/assets/js/70bebb30.cff63a83.js new file mode 100644 index 0000000..a77caef --- /dev/null +++ b/assets/js/70bebb30.cff63a83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[2935],{8793:function(e,t,n){var a=n(7294),r=n(9960),i=n(1954),o=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],d=t[1];(0,a.useEffect)((function(){d(!0)}),[]);var l,m,p,c=(l=(0,o.I)(),m=l.colorMode,l.setColorMode,"dark"===m?"button--secondary button--outline":"button--secondary");return p=e.index?"button "+c+" button--lg button--index":"button "+c+" button--lg",a.createElement(r.Z,{key:String(n),className:p,to:e.to},e.icon&&a.createElement(i.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},6924:function(e,t,n){n.r(t),n.d(t,{assets:function(){return s},contentTitle:function(){return p},default:function(){return N},frontMatter:function(){return m},metadata:function(){return c},toc:function(){return g}});var a=n(3117),r=n(102),i=(n(7294),n(3905)),o=(n(8793),n(5514)),d=n(7225),l=["components"],m={id:"legacy",title:"Installation (legacy versions)",sidebar_label:"Legacy",slug:"/installation/legacy",description:"Archived legacy pre-compiled versions of mpegCoder."},p=void 0,c={unversionedId:"guides/install/legacy",id:"version-3.2.x/guides/install/legacy",title:"Installation (legacy versions)",description:"Archived legacy pre-compiled versions of mpegCoder.",source:"@site/versioned_docs/version-3.2.x/guides/install/legacy.mdx",sourceDirName:"guides/install",slug:"/installation/legacy",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/legacy",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/guides/install/legacy.mdx",tags:[],version:"3.2.x",frontMatter:{id:"legacy",title:"Installation (legacy versions)",sidebar_label:"Legacy",slug:"/installation/legacy",description:"Archived legacy pre-compiled versions of mpegCoder."},sidebar:"docs",previous:{title:"Linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/linux"},next:{title:"Examples",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/examples"}},s={},g=[],k={toc:g};function N(e){var t=e.components,n=(0,r.Z)(e,l);return(0,i.kt)("wrapper",(0,a.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"The following built are legacy and ",(0,i.kt)("strong",{parentName:"p"},"deprecated")," versions. They are not technically supported now. But they support older FFMpeg versions. Note that not all funcionalities of ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder")," are supported in these versions. They may also contains severe bugs."))),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,i.kt)("th",{parentName:"tr",align:"center"},"OS"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,i.kt)("th",{parentName:"tr",align:"center"},"FFmpeg"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py36.7z",title:"Windows 2.05, Python 3.6"},(0,i.kt)("inlineCode",{parentName:"a"},"2.05"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.6")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.14")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"4.0"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py35.7z",title:"Windows 2.05, Python 3.5"},(0,i.kt)("inlineCode",{parentName:"a"},"2.05"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"4.0"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.01/mpegCoder_2_0_1_Win.7z",title:"Windows 2.01"},(0,i.kt)("inlineCode",{parentName:"a"},"2.01"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.6")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.14")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.4.2"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Linux.7z",title:"Linux, 2.0"},(0,i.kt)("inlineCode",{parentName:"a"},"2.0"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Win.7z",title:"Windows, 2.0"},(0,i.kt)("inlineCode",{parentName:"a"},"2.0"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Linux.7z",title:"Linux, 1.8"},(0,i.kt)("inlineCode",{parentName:"a"},"1.8"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Win.7z",title:"Windows, 1.8"},(0,i.kt)("inlineCode",{parentName:"a"},"1.8"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Linux.7z",title:"Linux, 1.7"},(0,i.kt)("inlineCode",{parentName:"a"},"1.7"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Win.7z",title:"Windows, 1.7"},(0,i.kt)("inlineCode",{parentName:"a"},"1.7"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))))))}N.isMDXComponent=!0},7225:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/71c7941a.2509e699.js b/assets/js/71c7941a.2509e699.js new file mode 100644 index 0000000..3a9cac4 --- /dev/null +++ b/assets/js/71c7941a.2509e699.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3814],{2986:function(e,t,l){var a,c,r,n,i,m,d,h,p,o,s,E,v,f,u,y,z,k,P,b,M,g,x,R,H,O,N,V,w,L,C,A,F,j,T,I,W,S,D,Z,G,B,Q,U,X,q,Y,J,K,_,$,ee,te,le,ae,ce,re,ne,ie,me,de,he,pe,oe,se,Ee,ve,fe,ue,ye,ze,ke,Pe,be,Me,ge,xe,Re,He,Oe,Ne,Ve,we,Le,Ce,Ae,Fe,je,Te,Ie,We,Se,De,Ze,Ge,Be,Qe,Ue,Xe,qe,Ye,Je,Ke,_e,$e,et,tt,lt,at,ct,rt,nt,it,mt,dt,ht,pt,ot,st,Et,vt,ft,ut,yt,zt,kt,Pt,bt,Mt,gt,xt,Rt,Ht,Ot,Nt,Vt,wt,Lt,Ct,At,Ft,jt,Tt,It,Wt,St,Dt,Zt,Gt,Bt,Qt,Ut,Xt,qt,Yt,Jt,Kt,_t,$t,el,tl,ll,al,cl,rl,nl,il,ml,dl,hl,pl,ol,sl,El,vl,fl,ul,yl,zl,kl,Pl,bl,Ml,gl,xl,Rl,Hl,Ol,Nl,Vl,wl,Ll,Cl,Al,Fl,jl,Tl,Il,Wl,Sl,Dl,Zl,Gl,Bl,Ql,Ul,Xl,ql,Yl,Jl,Kl,_l,$l,ea,ta,la,aa,ca,ra,na,ia,ma,da,ha,pa,oa,sa,Ea,va,fa,ua,ya,za,ka,Pa,ba,Ma,ga,xa,Ra,Ha,Oa,Na,Va,wa,La,Ca,Aa,Fa,ja,Ta,Ia,Wa,Sa,Da,Za,Ga,Ba,Qa,Ua,Xa,qa,Ya,Ja,Ka,_a,$a,ec,tc,lc,ac,cc,rc,nc,ic,mc,dc,hc,pc,oc,sc,Ec,vc,fc,uc,yc,zc,kc,Pc,bc,Mc,gc,xc,Rc,Hc,Oc,Nc,Vc,wc,Lc,Cc,Ac,Fc,jc,Tc,Ic,Wc,Sc,Dc,Zc,Gc,Bc,Qc,Uc,Xc,qc,Yc,Jc,Kc,_c,$c,er,tr,lr,ar,cr,rr,nr,ir,mr,dr,hr,pr,or,sr,Er,vr,fr,ur,yr,zr,kr,Pr,br,Mr,gr,xr,Rr,Hr,Or,Nr,Vr,wr,Lr,Cr,Ar,Fr,jr,Tr,Ir,Wr,Sr,Dr,Zr,Gr,Br,Qr,Ur,Xr,qr,Yr,Jr,Kr,_r,$r,en,tn,ln,an,cn,rn,nn,mn,dn,hn,pn,on,sn,En,vn,fn,un,yn,zn,kn,Pn,bn,Mn,gn,xn,Rn,Hn,On,Nn,Vn,wn,Ln,Cn,An,Fn,jn,Tn,In,Wn,Sn,Dn,Zn,Gn,Bn,Qn,Un,Xn,qn,Yn,Jn,Kn,_n,$n,ei,ti,li,ai,ci,ri,ni,ii,mi,di,hi,pi,oi,si,Ei,vi,fi,ui,yi,zi,ki,Pi,bi,Mi,gi,xi,Ri,Hi,Oi,Ni,Vi,wi,Li,Ci,Ai,Fi,ji,Ti,Ii,Wi,Si,Di,Zi,Gi,Bi,Qi,Ui,Xi,qi,Yi,Ji,Ki,_i,$i,em,tm,lm,am,cm,rm,nm,im,mm,dm,hm,pm,om,sm,Em,vm,fm,um,ym,zm,km,Pm,bm,Mm,gm,xm,Rm,Hm,Om,Nm,Vm,wm,Lm,Cm,Am,Fm,jm,Tm,Im,Wm,Sm,Dm,Zm,Gm,Bm,Qm,Um,Xm,qm,Ym,Jm,Km,_m,$m,ed,td,ld,ad,cd,rd,nd,id,md,dd,hd,pd,od,sd,Ed,vd,fd,ud,yd,zd,kd,Pd,bd,Md,gd,xd,Rd,Hd,Od,Nd,Vd,wd,Ld,Cd,Ad,Fd,jd,Td,Id,Wd,Sd,Dd,Zd,Gd,Bd,Qd,Ud,Xd,qd,Yd,Jd,Kd,_d,$d,eh,th,lh,ah,ch,rh,nh,ih,mh,dh,hh,ph,oh,sh,Eh,vh,fh,uh,yh,zh,kh,Ph,bh,Mh,gh,xh,Rh,Hh,Oh,Nh,Vh,wh,Lh,Ch,Ah,Fh,jh,Th,Ih,Wh,Sh,Dh=l(7294),Zh=["title","titleId"];function Gh(){return Gh=Object.assign||function(e){for(var t=1;t=0||(c[l]=e[l]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(c[l]=e[l])}return c}t.Z=function(e){var t=e.title,l=e.titleId,Qh=Bh(e,Zh);return Dh.createElement("svg",Gh({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:"100%",style:{maxWidth:"624.696px",height:"auto",maxHeight:"281.512px"},viewBox:"0 0 624.696 281.512",id:"graph-div","aria-labelledby":l},Qh),t?Dh.createElement("title",{id:l},t):null,a||(a=Dh.createElement("style",null,"#graph-div .black{fill:#000}#graph-div .sblack{stroke:#000}#graph-div .blue{fill:#00c}#graph-div .red{fill:red}#graph-div .sred{stroke:red}#graph-div .arrow{stroke:none;fill-rule:evenodd;fill-opacity:1}#graph-div .line-1{fill:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .line-3{fill:none;stroke-width:2.292}#graph-div .line-4{stroke-width:.99}#graph-div .clip-1,#graph-div .line-4{fill:none;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .dash-1{fill:none;stroke-width:2.292}#graph-div .dash-1,#graph-div .gbox,#graph-div .line-3,#graph-div .thread-box{stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .clip-1{stroke-width:1.132;stroke:#fff}#graph-div .gbox,#graph-div .thread-box{fill-rule:evenodd;fill:#eee;fill-opacity:1;stroke-width:1.5}#graph-div .thread-box{fill:#ff9;stroke-width:2.292}")),Dh.createElement("defs",null,c||(c=Dh.createElement("clipPath",{id:"k"},Dh.createElement("path",{d:"M19 28h6v50h-6zm0 0"}))),r||(r=Dh.createElement("clipPath",{id:"l"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),n||(n=Dh.createElement("clipPath",{id:"m"},Dh.createElement("path",{d:"M24 28h2v50h-2zm0 0"}))),i||(i=Dh.createElement("clipPath",{id:"n"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),m||(m=Dh.createElement("clipPath",{id:"o"},Dh.createElement("path",{d:"M25 28h2v50h-2zm0 0"}))),d||(d=Dh.createElement("clipPath",{id:"p"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),h||(h=Dh.createElement("clipPath",{id:"q"},Dh.createElement("path",{d:"M26 28h2v50h-2zm0 0"}))),p||(p=Dh.createElement("clipPath",{id:"r"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),o||(o=Dh.createElement("clipPath",{id:"s"},Dh.createElement("path",{d:"M27 28h2v50h-2zm0 0"}))),s||(s=Dh.createElement("clipPath",{id:"t"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),E||(E=Dh.createElement("clipPath",{id:"u"},Dh.createElement("path",{d:"M28 28h2v50h-2zm0 0"}))),v||(v=Dh.createElement("clipPath",{id:"v"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),f||(f=Dh.createElement("clipPath",{id:"w"},Dh.createElement("path",{d:"M29 28h2v50h-2zm0 0"}))),u||(u=Dh.createElement("clipPath",{id:"x"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),y||(y=Dh.createElement("clipPath",{id:"y"},Dh.createElement("path",{d:"M30 28h2v50h-2zm0 0"}))),z||(z=Dh.createElement("clipPath",{id:"z"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),k||(k=Dh.createElement("clipPath",{id:"A"},Dh.createElement("path",{d:"M31 28h2v50h-2zm0 0"}))),P||(P=Dh.createElement("clipPath",{id:"B"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),b||(b=Dh.createElement("clipPath",{id:"C"},Dh.createElement("path",{d:"M32 28h2v50h-2zm0 0"}))),M||(M=Dh.createElement("clipPath",{id:"D"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),g||(g=Dh.createElement("clipPath",{id:"E"},Dh.createElement("path",{d:"M33 28h2v50h-2zm0 0"}))),x||(x=Dh.createElement("clipPath",{id:"F"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),R||(R=Dh.createElement("clipPath",{id:"G"},Dh.createElement("path",{d:"M34 28h2v50h-2zm0 0"}))),H||(H=Dh.createElement("clipPath",{id:"H"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),O||(O=Dh.createElement("clipPath",{id:"I"},Dh.createElement("path",{d:"M35 28h2v50h-2zm0 0"}))),N||(N=Dh.createElement("clipPath",{id:"J"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),V||(V=Dh.createElement("clipPath",{id:"K"},Dh.createElement("path",{d:"M36 28h2v50h-2zm0 0"}))),w||(w=Dh.createElement("clipPath",{id:"L"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),L||(L=Dh.createElement("clipPath",{id:"M"},Dh.createElement("path",{d:"M37 28h2v50h-2zm0 0"}))),C||(C=Dh.createElement("clipPath",{id:"N"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),A||(A=Dh.createElement("clipPath",{id:"O"},Dh.createElement("path",{d:"M38 28h2v50h-2zm0 0"}))),F||(F=Dh.createElement("clipPath",{id:"P"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),j||(j=Dh.createElement("clipPath",{id:"Q"},Dh.createElement("path",{d:"M39 28h2v50h-2zm0 0"}))),T||(T=Dh.createElement("clipPath",{id:"R"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),I||(I=Dh.createElement("clipPath",{id:"S"},Dh.createElement("path",{d:"M40 28h2v50h-2zm0 0"}))),W||(W=Dh.createElement("clipPath",{id:"T"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),S||(S=Dh.createElement("clipPath",{id:"U"},Dh.createElement("path",{d:"M41 28h2v50h-2zm0 0"}))),D||(D=Dh.createElement("clipPath",{id:"V"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Z||(Z=Dh.createElement("clipPath",{id:"W"},Dh.createElement("path",{d:"M42 28h2v50h-2zm0 0"}))),G||(G=Dh.createElement("clipPath",{id:"X"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),B||(B=Dh.createElement("clipPath",{id:"Y"},Dh.createElement("path",{d:"M43 28h2v50h-2zm0 0"}))),Q||(Q=Dh.createElement("clipPath",{id:"Z"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),U||(U=Dh.createElement("clipPath",{id:"aa"},Dh.createElement("path",{d:"M44 28h2v50h-2zm0 0"}))),X||(X=Dh.createElement("clipPath",{id:"ab"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),q||(q=Dh.createElement("clipPath",{id:"ac"},Dh.createElement("path",{d:"M45 28h2v50h-2zm0 0"}))),Y||(Y=Dh.createElement("clipPath",{id:"ad"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),J||(J=Dh.createElement("clipPath",{id:"ae"},Dh.createElement("path",{d:"M45 28h3v50h-3zm0 0"}))),K||(K=Dh.createElement("clipPath",{id:"af"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),_||(_=Dh.createElement("clipPath",{id:"ag"},Dh.createElement("path",{d:"M46 28h3v50h-3zm0 0"}))),$||($=Dh.createElement("clipPath",{id:"ah"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ee||(ee=Dh.createElement("clipPath",{id:"ai"},Dh.createElement("path",{d:"M47 28h3v50h-3zm0 0"}))),te||(te=Dh.createElement("clipPath",{id:"aj"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),le||(le=Dh.createElement("clipPath",{id:"ak"},Dh.createElement("path",{d:"M48 28h2v50h-2zm0 0"}))),ae||(ae=Dh.createElement("clipPath",{id:"al"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ce||(ce=Dh.createElement("clipPath",{id:"am"},Dh.createElement("path",{d:"M49 28h2v50h-2zm0 0"}))),re||(re=Dh.createElement("clipPath",{id:"an"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ne||(ne=Dh.createElement("clipPath",{id:"ao"},Dh.createElement("path",{d:"M50 28h2v50h-2zm0 0"}))),ie||(ie=Dh.createElement("clipPath",{id:"ap"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),me||(me=Dh.createElement("clipPath",{id:"aq"},Dh.createElement("path",{d:"M51 28h2v50h-2zm0 0"}))),de||(de=Dh.createElement("clipPath",{id:"ar"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),he||(he=Dh.createElement("clipPath",{id:"as"},Dh.createElement("path",{d:"M52 28h2v50h-2zm0 0"}))),pe||(pe=Dh.createElement("clipPath",{id:"at"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),oe||(oe=Dh.createElement("clipPath",{id:"au"},Dh.createElement("path",{d:"M53 28h2v50h-2zm0 0"}))),se||(se=Dh.createElement("clipPath",{id:"av"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ee||(Ee=Dh.createElement("clipPath",{id:"aw"},Dh.createElement("path",{d:"M54 28h2v50h-2zm0 0"}))),ve||(ve=Dh.createElement("clipPath",{id:"ax"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),fe||(fe=Dh.createElement("clipPath",{id:"ay"},Dh.createElement("path",{d:"M55 28h2v50h-2zm0 0"}))),ue||(ue=Dh.createElement("clipPath",{id:"az"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ye||(ye=Dh.createElement("clipPath",{id:"aA"},Dh.createElement("path",{d:"M56 28h2v50h-2zm0 0"}))),ze||(ze=Dh.createElement("clipPath",{id:"aB"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ke||(ke=Dh.createElement("clipPath",{id:"aC"},Dh.createElement("path",{d:"M57 28h2v50h-2zm0 0"}))),Pe||(Pe=Dh.createElement("clipPath",{id:"aD"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),be||(be=Dh.createElement("clipPath",{id:"aE"},Dh.createElement("path",{d:"M58 28h2v50h-2zm0 0"}))),Me||(Me=Dh.createElement("clipPath",{id:"aF"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),ge||(ge=Dh.createElement("clipPath",{id:"aG"},Dh.createElement("path",{d:"M59 28h2v50h-2zm0 0"}))),xe||(xe=Dh.createElement("clipPath",{id:"aH"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Re||(Re=Dh.createElement("clipPath",{id:"aI"},Dh.createElement("path",{d:"M60 28h2v50h-2zm0 0"}))),He||(He=Dh.createElement("clipPath",{id:"aJ"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Oe||(Oe=Dh.createElement("clipPath",{id:"aK"},Dh.createElement("path",{d:"M61 28h2v50h-2zm0 0"}))),Ne||(Ne=Dh.createElement("clipPath",{id:"aL"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ve||(Ve=Dh.createElement("clipPath",{id:"aM"},Dh.createElement("path",{d:"M62 28h2v50h-2zm0 0"}))),we||(we=Dh.createElement("clipPath",{id:"aN"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Le||(Le=Dh.createElement("clipPath",{id:"aO"},Dh.createElement("path",{d:"M63 28h2v50h-2zm0 0"}))),Ce||(Ce=Dh.createElement("clipPath",{id:"aP"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ae||(Ae=Dh.createElement("clipPath",{id:"aQ"},Dh.createElement("path",{d:"M64 28h2v50h-2zm0 0"}))),Fe||(Fe=Dh.createElement("clipPath",{id:"aR"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),je||(je=Dh.createElement("clipPath",{id:"aS"},Dh.createElement("path",{d:"M65 28h2v50h-2zm0 0"}))),Te||(Te=Dh.createElement("clipPath",{id:"aT"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ie||(Ie=Dh.createElement("clipPath",{id:"aU"},Dh.createElement("path",{d:"M66 28h2v50h-2zm0 0"}))),We||(We=Dh.createElement("clipPath",{id:"aV"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Se||(Se=Dh.createElement("clipPath",{id:"aW"},Dh.createElement("path",{d:"M67 28h2v50h-2zm0 0"}))),De||(De=Dh.createElement("clipPath",{id:"aX"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ze||(Ze=Dh.createElement("clipPath",{id:"aY"},Dh.createElement("path",{d:"M68 28h2v50h-2zm0 0"}))),Ge||(Ge=Dh.createElement("clipPath",{id:"aZ"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Be||(Be=Dh.createElement("clipPath",{id:"ba"},Dh.createElement("path",{d:"M69 28h2v50h-2zm0 0"}))),Qe||(Qe=Dh.createElement("clipPath",{id:"bb"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Ue||(Ue=Dh.createElement("clipPath",{id:"bc"},Dh.createElement("path",{d:"M70 28h2v50h-2zm0 0"}))),Xe||(Xe=Dh.createElement("clipPath",{id:"bd"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),qe||(qe=Dh.createElement("clipPath",{id:"be"},Dh.createElement("path",{d:"M71 28h2v50h-2zm0 0"}))),Ye||(Ye=Dh.createElement("clipPath",{id:"bf"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),Je||(Je=Dh.createElement("clipPath",{id:"bg"},Dh.createElement("path",{d:"M72 28h2v50h-2zm0 0"}))),Ke||(Ke=Dh.createElement("clipPath",{id:"bh"},Dh.createElement("path",{d:"M19.348 45.965v-17.7l53.699 31.102v17.7zm0 0"}))),_e||(_e=Dh.createElement("clipPath",{id:"bi"},Dh.createElement("path",{d:"M73 32h47v46H73zm0 0"}))),$e||($e=Dh.createElement("clipPath",{id:"bj"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),et||(et=Dh.createElement("clipPath",{id:"bk"},Dh.createElement("path",{d:"M73 32h37v37H73zm0 0"}))),tt||(tt=Dh.createElement("clipPath",{id:"bl"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),lt||(lt=Dh.createElement("clipPath",{id:"bm"},Dh.createElement("path",{d:"M73 32h36v36H73zm0 0"}))),at||(at=Dh.createElement("clipPath",{id:"bn"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ct||(ct=Dh.createElement("clipPath",{id:"bo"},Dh.createElement("path",{d:"M73 32h35v35H73zm0 0"}))),rt||(rt=Dh.createElement("clipPath",{id:"bp"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),nt||(nt=Dh.createElement("clipPath",{id:"bq"},Dh.createElement("path",{d:"M73 32h34v34H73zm0 0"}))),it||(it=Dh.createElement("clipPath",{id:"br"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),mt||(mt=Dh.createElement("clipPath",{id:"bs"},Dh.createElement("path",{d:"M73 32h33v33H73zm0 0"}))),dt||(dt=Dh.createElement("clipPath",{id:"bt"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ht||(ht=Dh.createElement("clipPath",{id:"bu"},Dh.createElement("path",{d:"M73 32h32v32H73zm0 0"}))),pt||(pt=Dh.createElement("clipPath",{id:"bv"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ot||(ot=Dh.createElement("clipPath",{id:"bw"},Dh.createElement("path",{d:"M73 32h31v31H73zm0 0"}))),st||(st=Dh.createElement("clipPath",{id:"bx"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Et||(Et=Dh.createElement("clipPath",{id:"by"},Dh.createElement("path",{d:"M73 32h30v30H73zm0 0"}))),vt||(vt=Dh.createElement("clipPath",{id:"bz"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ft||(ft=Dh.createElement("clipPath",{id:"bA"},Dh.createElement("path",{d:"M73 32h29v29H73zm0 0"}))),ut||(ut=Dh.createElement("clipPath",{id:"bB"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),yt||(yt=Dh.createElement("clipPath",{id:"bC"},Dh.createElement("path",{d:"M73 32h28v28H73zm0 0"}))),zt||(zt=Dh.createElement("clipPath",{id:"bD"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),kt||(kt=Dh.createElement("clipPath",{id:"bE"},Dh.createElement("path",{d:"M74 33h26v26H74zm0 0"}))),Pt||(Pt=Dh.createElement("clipPath",{id:"bF"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),bt||(bt=Dh.createElement("clipPath",{id:"bG"},Dh.createElement("path",{d:"M74 33h25v25H74zm0 0"}))),Mt||(Mt=Dh.createElement("clipPath",{id:"bH"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),gt||(gt=Dh.createElement("clipPath",{id:"bI"},Dh.createElement("path",{d:"M75 34h24v24H75zm0 0"}))),xt||(xt=Dh.createElement("clipPath",{id:"bJ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Rt||(Rt=Dh.createElement("clipPath",{id:"bK"},Dh.createElement("path",{d:"M75 34h23v23H75zm0 0"}))),Ht||(Ht=Dh.createElement("clipPath",{id:"bL"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Ot||(Ot=Dh.createElement("clipPath",{id:"bM"},Dh.createElement("path",{d:"M76 35h22v22H76zm0 0"}))),Nt||(Nt=Dh.createElement("clipPath",{id:"bN"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Vt||(Vt=Dh.createElement("clipPath",{id:"bO"},Dh.createElement("path",{d:"M77 36h20v20H77zm0 0"}))),wt||(wt=Dh.createElement("clipPath",{id:"bP"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Lt||(Lt=Dh.createElement("clipPath",{id:"bQ"},Dh.createElement("path",{d:"M78 37h18v18H78zm0 0"}))),Ct||(Ct=Dh.createElement("clipPath",{id:"bR"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),At||(At=Dh.createElement("clipPath",{id:"bS"},Dh.createElement("path",{d:"M79 38h16v16H79zm0 0"}))),Ft||(Ft=Dh.createElement("clipPath",{id:"bT"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),jt||(jt=Dh.createElement("clipPath",{id:"bU"},Dh.createElement("path",{d:"M80 38h14v15H80zm0 0"}))),Tt||(Tt=Dh.createElement("clipPath",{id:"bV"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),It||(It=Dh.createElement("clipPath",{id:"bW"},Dh.createElement("path",{d:"M80 39h14v14H80zm0 0"}))),Wt||(Wt=Dh.createElement("clipPath",{id:"bX"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),St||(St=Dh.createElement("clipPath",{id:"bY"},Dh.createElement("path",{d:"M80 39h13v13H80zm0 0"}))),Dt||(Dt=Dh.createElement("clipPath",{id:"bZ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Zt||(Zt=Dh.createElement("clipPath",{id:"ca"},Dh.createElement("path",{d:"M81 40h12v12H81zm0 0"}))),Gt||(Gt=Dh.createElement("clipPath",{id:"cb"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Bt||(Bt=Dh.createElement("clipPath",{id:"cc"},Dh.createElement("path",{d:"M81 40h11v11H81zm0 0"}))),Qt||(Qt=Dh.createElement("clipPath",{id:"cd"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Ut||(Ut=Dh.createElement("clipPath",{id:"ce"},Dh.createElement("path",{d:"M82 41h10v10H82zm0 0"}))),Xt||(Xt=Dh.createElement("clipPath",{id:"cf"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),qt||(qt=Dh.createElement("clipPath",{id:"cg"},Dh.createElement("path",{d:"M83 42h8v8h-8zm0 0"}))),Yt||(Yt=Dh.createElement("clipPath",{id:"ch"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),Jt||(Jt=Dh.createElement("clipPath",{id:"ci"},Dh.createElement("path",{d:"M84 43h6v6h-6zm0 0"}))),Kt||(Kt=Dh.createElement("clipPath",{id:"cj"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),_t||(_t=Dh.createElement("clipPath",{id:"ck"},Dh.createElement("path",{d:"M85 44h4v4h-4zm0 0"}))),$t||($t=Dh.createElement("clipPath",{id:"cl"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),el||(el=Dh.createElement("clipPath",{id:"cm"},Dh.createElement("path",{d:"M86 44h2v3h-2zm0 0"}))),tl||(tl=Dh.createElement("clipPath",{id:"cn"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),ll||(ll=Dh.createElement("clipPath",{id:"co"},Dh.createElement("path",{d:"M86 45h2v2h-2zm0 0"}))),al||(al=Dh.createElement("clipPath",{id:"cp"},Dh.createElement("path",{d:"M73.047 77.066V59.367l46.098-26.703v17.8zm0 0"}))),cl||(cl=Dh.createElement("clipPath",{id:"cq"},Dh.createElement("path",{d:"M19 1h101v7H19zm0 0"}))),rl||(rl=Dh.createElement("clipPath",{id:"cr"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),nl||(nl=Dh.createElement("clipPath",{id:"cs"},Dh.createElement("path",{d:"M19 7h101v2H19zm0 0"}))),il||(il=Dh.createElement("clipPath",{id:"ct"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ml||(ml=Dh.createElement("clipPath",{id:"cu"},Dh.createElement("path",{d:"M19 8h101v2H19zm0 0"}))),dl||(dl=Dh.createElement("clipPath",{id:"cv"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),hl||(hl=Dh.createElement("clipPath",{id:"cw"},Dh.createElement("path",{d:"M19 9h101v2H19zm0 0"}))),pl||(pl=Dh.createElement("clipPath",{id:"cx"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ol||(ol=Dh.createElement("clipPath",{id:"cy"},Dh.createElement("path",{d:"M19 10h101v2H19zm0 0"}))),sl||(sl=Dh.createElement("clipPath",{id:"cz"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),El||(El=Dh.createElement("clipPath",{id:"cA"},Dh.createElement("path",{d:"M19 11h101v2H19zm0 0"}))),vl||(vl=Dh.createElement("clipPath",{id:"cB"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),fl||(fl=Dh.createElement("clipPath",{id:"cC"},Dh.createElement("path",{d:"M19 12h101v2H19zm0 0"}))),ul||(ul=Dh.createElement("clipPath",{id:"cD"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),yl||(yl=Dh.createElement("clipPath",{id:"cE"},Dh.createElement("path",{d:"M19 13h101v2H19zm0 0"}))),zl||(zl=Dh.createElement("clipPath",{id:"cF"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),kl||(kl=Dh.createElement("clipPath",{id:"cG"},Dh.createElement("path",{d:"M19 14h101v2H19zm0 0"}))),Pl||(Pl=Dh.createElement("clipPath",{id:"cH"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),bl||(bl=Dh.createElement("clipPath",{id:"cI"},Dh.createElement("path",{d:"M19 15h101v2H19zm0 0"}))),Ml||(Ml=Dh.createElement("clipPath",{id:"cJ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),gl||(gl=Dh.createElement("clipPath",{id:"cK"},Dh.createElement("path",{d:"M19 16h101v2H19zm0 0"}))),xl||(xl=Dh.createElement("clipPath",{id:"cL"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Rl||(Rl=Dh.createElement("clipPath",{id:"cM"},Dh.createElement("path",{d:"M19 17h101v2H19zm0 0"}))),Hl||(Hl=Dh.createElement("clipPath",{id:"cN"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ol||(Ol=Dh.createElement("clipPath",{id:"cO"},Dh.createElement("path",{d:"M19 18h101v2H19zm0 0"}))),Nl||(Nl=Dh.createElement("clipPath",{id:"cP"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Vl||(Vl=Dh.createElement("clipPath",{id:"cQ"},Dh.createElement("path",{d:"M19 19h101v2H19zm0 0"}))),wl||(wl=Dh.createElement("clipPath",{id:"cR"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ll||(Ll=Dh.createElement("clipPath",{id:"cS"},Dh.createElement("path",{d:"M19 20h101v2H19zm0 0"}))),Cl||(Cl=Dh.createElement("clipPath",{id:"cT"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Al||(Al=Dh.createElement("clipPath",{id:"cU"},Dh.createElement("path",{d:"M19 21h101v2H19zm0 0"}))),Fl||(Fl=Dh.createElement("clipPath",{id:"cV"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),jl||(jl=Dh.createElement("clipPath",{id:"cW"},Dh.createElement("path",{d:"M19 22h101v2H19zm0 0"}))),Tl||(Tl=Dh.createElement("clipPath",{id:"cX"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Il||(Il=Dh.createElement("clipPath",{id:"cY"},Dh.createElement("path",{d:"M19 23h101v2H19zm0 0"}))),Wl||(Wl=Dh.createElement("clipPath",{id:"cZ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Sl||(Sl=Dh.createElement("clipPath",{id:"da"},Dh.createElement("path",{d:"M19 24h101v3H19zm0 0"}))),Dl||(Dl=Dh.createElement("clipPath",{id:"db"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Zl||(Zl=Dh.createElement("clipPath",{id:"dc"},Dh.createElement("path",{d:"M19 26h101v2H19zm0 0"}))),Gl||(Gl=Dh.createElement("clipPath",{id:"dd"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Bl||(Bl=Dh.createElement("clipPath",{id:"de"},Dh.createElement("path",{d:"M19 27h101v2H19zm0 0"}))),Ql||(Ql=Dh.createElement("clipPath",{id:"df"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ul||(Ul=Dh.createElement("clipPath",{id:"dg"},Dh.createElement("path",{d:"M19 28h101v2H19zm0 0"}))),Xl||(Xl=Dh.createElement("clipPath",{id:"dh"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ql||(ql=Dh.createElement("clipPath",{id:"di"},Dh.createElement("path",{d:"M19 29h101v2H19zm0 0"}))),Yl||(Yl=Dh.createElement("clipPath",{id:"dj"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Jl||(Jl=Dh.createElement("clipPath",{id:"dk"},Dh.createElement("path",{d:"M19 30h101v2H19zm0 0"}))),Kl||(Kl=Dh.createElement("clipPath",{id:"dl"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),_l||(_l=Dh.createElement("clipPath",{id:"dm"},Dh.createElement("path",{d:"M19 31h101v2H19zm0 0"}))),$l||($l=Dh.createElement("clipPath",{id:"dn"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ea||(ea=Dh.createElement("clipPath",{id:"do"},Dh.createElement("path",{d:"M19 32h101v2H19zm0 0"}))),ta||(ta=Dh.createElement("clipPath",{id:"dp"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),la||(la=Dh.createElement("clipPath",{id:"dq"},Dh.createElement("path",{d:"M19 33h101v2H19zm0 0"}))),aa||(aa=Dh.createElement("clipPath",{id:"dr"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ca||(ca=Dh.createElement("clipPath",{id:"ds"},Dh.createElement("path",{d:"M19 34h101v2H19zm0 0"}))),ra||(ra=Dh.createElement("clipPath",{id:"dt"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),na||(na=Dh.createElement("clipPath",{id:"du"},Dh.createElement("path",{d:"M19 35h101v2H19zm0 0"}))),ia||(ia=Dh.createElement("clipPath",{id:"dv"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ma||(ma=Dh.createElement("clipPath",{id:"dw"},Dh.createElement("path",{d:"M19 36h101v2H19zm0 0"}))),da||(da=Dh.createElement("clipPath",{id:"dx"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ha||(ha=Dh.createElement("clipPath",{id:"dy"},Dh.createElement("path",{d:"M19 37h101v2H19zm0 0"}))),pa||(pa=Dh.createElement("clipPath",{id:"dz"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),oa||(oa=Dh.createElement("clipPath",{id:"dA"},Dh.createElement("path",{d:"M19 38h101v2H19zm0 0"}))),sa||(sa=Dh.createElement("clipPath",{id:"dB"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ea||(Ea=Dh.createElement("clipPath",{id:"dC"},Dh.createElement("path",{d:"M19 39h101v2H19zm0 0"}))),va||(va=Dh.createElement("clipPath",{id:"dD"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),fa||(fa=Dh.createElement("clipPath",{id:"dE"},Dh.createElement("path",{d:"M19 40h101v2H19zm0 0"}))),ua||(ua=Dh.createElement("clipPath",{id:"dF"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ya||(ya=Dh.createElement("clipPath",{id:"dG"},Dh.createElement("path",{d:"M19 41h101v2H19zm0 0"}))),za||(za=Dh.createElement("clipPath",{id:"dH"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ka||(ka=Dh.createElement("clipPath",{id:"dI"},Dh.createElement("path",{d:"M19 42h101v2H19zm0 0"}))),Pa||(Pa=Dh.createElement("clipPath",{id:"dJ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ba||(ba=Dh.createElement("clipPath",{id:"dK"},Dh.createElement("path",{d:"M19 43h101v2H19zm0 0"}))),Ma||(Ma=Dh.createElement("clipPath",{id:"dL"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ga||(ga=Dh.createElement("clipPath",{id:"dM"},Dh.createElement("path",{d:"M19 44h101v2H19zm0 0"}))),xa||(xa=Dh.createElement("clipPath",{id:"dN"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ra||(Ra=Dh.createElement("clipPath",{id:"dO"},Dh.createElement("path",{d:"M19 45h101v2H19zm0 0"}))),Ha||(Ha=Dh.createElement("clipPath",{id:"dP"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Oa||(Oa=Dh.createElement("clipPath",{id:"dQ"},Dh.createElement("path",{d:"M19 46h101v2H19zm0 0"}))),Na||(Na=Dh.createElement("clipPath",{id:"dR"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Va||(Va=Dh.createElement("clipPath",{id:"dS"},Dh.createElement("path",{d:"M19 47h101v2H19zm0 0"}))),wa||(wa=Dh.createElement("clipPath",{id:"dT"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),La||(La=Dh.createElement("clipPath",{id:"dU"},Dh.createElement("path",{d:"M19 48h101v2H19zm0 0"}))),Ca||(Ca=Dh.createElement("clipPath",{id:"dV"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Aa||(Aa=Dh.createElement("clipPath",{id:"dW"},Dh.createElement("path",{d:"M19 49h101v2H19zm0 0"}))),Fa||(Fa=Dh.createElement("clipPath",{id:"dX"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),ja||(ja=Dh.createElement("clipPath",{id:"dY"},Dh.createElement("path",{d:"M19 50h101v3H19zm0 0"}))),Ta||(Ta=Dh.createElement("clipPath",{id:"dZ"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ia||(Ia=Dh.createElement("clipPath",{id:"ea"},Dh.createElement("path",{d:"M19 52h101v2H19zm0 0"}))),Wa||(Wa=Dh.createElement("clipPath",{id:"eb"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Sa||(Sa=Dh.createElement("clipPath",{id:"ec"},Dh.createElement("path",{d:"M19 53h101v2H19zm0 0"}))),Da||(Da=Dh.createElement("clipPath",{id:"ed"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Za||(Za=Dh.createElement("clipPath",{id:"ee"},Dh.createElement("path",{d:"M19 54h101v2H19zm0 0"}))),Ga||(Ga=Dh.createElement("clipPath",{id:"ef"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ba||(Ba=Dh.createElement("clipPath",{id:"eg"},Dh.createElement("path",{d:"M19 55h101v2H19zm0 0"}))),Qa||(Qa=Dh.createElement("clipPath",{id:"eh"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ua||(Ua=Dh.createElement("clipPath",{id:"ei"},Dh.createElement("path",{d:"M19 56h101v2H19zm0 0"}))),Xa||(Xa=Dh.createElement("clipPath",{id:"ej"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),qa||(qa=Dh.createElement("clipPath",{id:"ek"},Dh.createElement("path",{d:"M19 57h101v2H19zm0 0"}))),Ya||(Ya=Dh.createElement("clipPath",{id:"el"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),Ja||(Ja=Dh.createElement("clipPath",{id:"em"},Dh.createElement("path",{d:"M19 58h101v2H19zm0 0"}))),Ka||(Ka=Dh.createElement("clipPath",{id:"en"},Dh.createElement("path",{d:"m73.047 59.367-53.7-31.101L65.446 1.664l53.7 31zm0 0"}))),_a||(_a=Dh.createElement("clipPath",{id:"eo"},Dh.createElement("path",{d:"M16 26h1v20h-1zm0 0"}))),$a||($a=Dh.createElement("clipPath",{id:"ep"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),ec||(ec=Dh.createElement("clipPath",{id:"eq"},Dh.createElement("path",{d:"M16 26h2v20h-2zm0 0"}))),tc||(tc=Dh.createElement("clipPath",{id:"er"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),lc||(lc=Dh.createElement("clipPath",{id:"es"},Dh.createElement("path",{d:"M17 26h1v20h-1zm0 0"}))),ac||(ac=Dh.createElement("clipPath",{id:"et"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),cc||(cc=Dh.createElement("clipPath",{id:"eu"},Dh.createElement("path",{d:"M17 26h2v20h-2zm0 0"}))),rc||(rc=Dh.createElement("clipPath",{id:"ev"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),nc||(nc=Dh.createElement("clipPath",{id:"ew"},Dh.createElement("path",{d:"M18 26h1v20h-1zm0 0"}))),ic||(ic=Dh.createElement("clipPath",{id:"ex"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),mc||(mc=Dh.createElement("clipPath",{id:"ey"},Dh.createElement("path",{d:"M18 26h2v20h-2zm0 0"}))),dc||(dc=Dh.createElement("clipPath",{id:"ez"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),hc||(hc=Dh.createElement("clipPath",{id:"eA"},Dh.createElement("path",{d:"M19 26h1v20h-1zm0 0"}))),pc||(pc=Dh.createElement("clipPath",{id:"eB"},Dh.createElement("path",{d:"M16.246 44.266V26.465l3.102 1.8v17.7zm0 0"}))),oc||(oc=Dh.createElement("clipPath",{id:"eC"},Dh.createElement("path",{d:"M73 59h1v20h-1zm0 0"}))),sc||(sc=Dh.createElement("clipPath",{id:"eD"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),Ec||(Ec=Dh.createElement("clipPath",{id:"eE"},Dh.createElement("path",{d:"M73 59h2v20h-2zm0 0"}))),vc||(vc=Dh.createElement("clipPath",{id:"eF"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),fc||(fc=Dh.createElement("clipPath",{id:"eG"},Dh.createElement("path",{d:"M74 59h1v20h-1zm0 0"}))),uc||(uc=Dh.createElement("clipPath",{id:"eH"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),yc||(yc=Dh.createElement("clipPath",{id:"eI"},Dh.createElement("path",{d:"M74 59h2v20h-2zm0 0"}))),zc||(zc=Dh.createElement("clipPath",{id:"eJ"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),kc||(kc=Dh.createElement("clipPath",{id:"eK"},Dh.createElement("path",{d:"M75 59h1v20h-1zm0 0"}))),Pc||(Pc=Dh.createElement("clipPath",{id:"eL"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),bc||(bc=Dh.createElement("clipPath",{id:"eM"},Dh.createElement("path",{d:"M75 59h2v20h-2zm0 0"}))),Mc||(Mc=Dh.createElement("clipPath",{id:"eN"},Dh.createElement("path",{d:"M73.047 77.066V59.367l3.098 1.7v17.8zm0 0"}))),gc||(gc=Dh.createElement("clipPath",{id:"eO"},Dh.createElement("path",{d:"M96 63h2v14h-2zm0 0"}))),xc||(xc=Dh.createElement("clipPath",{id:"eP"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Rc||(Rc=Dh.createElement("clipPath",{id:"eQ"},Dh.createElement("path",{d:"M97 63h1v14h-1zm0 0"}))),Hc||(Hc=Dh.createElement("clipPath",{id:"eR"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Oc||(Oc=Dh.createElement("clipPath",{id:"eS"},Dh.createElement("path",{d:"M97 63h2v14h-2zm0 0"}))),Nc||(Nc=Dh.createElement("clipPath",{id:"eT"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Vc||(Vc=Dh.createElement("clipPath",{id:"eU"},Dh.createElement("path",{d:"M98 63h1v14h-1zm0 0"}))),wc||(wc=Dh.createElement("clipPath",{id:"eV"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Lc||(Lc=Dh.createElement("clipPath",{id:"eW"},Dh.createElement("path",{d:"M98 63h2v14h-2zm0 0"}))),Cc||(Cc=Dh.createElement("clipPath",{id:"eX"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Ac||(Ac=Dh.createElement("clipPath",{id:"eY"},Dh.createElement("path",{d:"M99 63h1v14h-1zm0 0"}))),Fc||(Fc=Dh.createElement("clipPath",{id:"eZ"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),jc||(jc=Dh.createElement("clipPath",{id:"fa"},Dh.createElement("path",{d:"M99 63h2v14h-2zm0 0"}))),Tc||(Tc=Dh.createElement("clipPath",{id:"fb"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Ic||(Ic=Dh.createElement("clipPath",{id:"fc"},Dh.createElement("path",{d:"M100 63h1v14h-1zm0 0"}))),Wc||(Wc=Dh.createElement("clipPath",{id:"fd"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Sc||(Sc=Dh.createElement("clipPath",{id:"fe"},Dh.createElement("path",{d:"M100 63h2v14h-2zm0 0"}))),Dc||(Dc=Dh.createElement("clipPath",{id:"ff"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Zc||(Zc=Dh.createElement("clipPath",{id:"fg"},Dh.createElement("path",{d:"M101 63h1v14h-1zm0 0"}))),Gc||(Gc=Dh.createElement("clipPath",{id:"fh"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Bc||(Bc=Dh.createElement("clipPath",{id:"fi"},Dh.createElement("path",{d:"M101 63h2v14h-2zm0 0"}))),Qc||(Qc=Dh.createElement("clipPath",{id:"fj"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Uc||(Uc=Dh.createElement("clipPath",{id:"fk"},Dh.createElement("path",{d:"M102 63h1v14h-1zm0 0"}))),Xc||(Xc=Dh.createElement("clipPath",{id:"fl"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),qc||(qc=Dh.createElement("clipPath",{id:"fm"},Dh.createElement("path",{d:"M102 63h2v14h-2zm0 0"}))),Yc||(Yc=Dh.createElement("clipPath",{id:"fn"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),Jc||(Jc=Dh.createElement("clipPath",{id:"fo"},Dh.createElement("path",{d:"M103 63h1v14h-1zm0 0"}))),Kc||(Kc=Dh.createElement("clipPath",{id:"fp"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),_c||(_c=Dh.createElement("clipPath",{id:"fq"},Dh.createElement("path",{d:"M103 63h2v14h-2zm0 0"}))),$c||($c=Dh.createElement("clipPath",{id:"fr"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),er||(er=Dh.createElement("clipPath",{id:"fs"},Dh.createElement("path",{d:"M104 63h1v14h-1zm0 0"}))),tr||(tr=Dh.createElement("clipPath",{id:"ft"},Dh.createElement("path",{d:"M104.445 67.465v8.601l-7.5-4.199v-8.8zm0 0"}))),lr||(lr=Dh.createElement("clipPath",{id:"fu"},Dh.createElement("path",{d:"M96 52h2v14h-2zm0 0"}))),ar||(ar=Dh.createElement("clipPath",{id:"fv"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),cr||(cr=Dh.createElement("clipPath",{id:"fw"},Dh.createElement("path",{d:"M97 52h1v14h-1zm0 0"}))),rr||(rr=Dh.createElement("clipPath",{id:"fx"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),nr||(nr=Dh.createElement("clipPath",{id:"fy"},Dh.createElement("path",{d:"M97 52h2v14h-2zm0 0"}))),ir||(ir=Dh.createElement("clipPath",{id:"fz"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),mr||(mr=Dh.createElement("clipPath",{id:"fA"},Dh.createElement("path",{d:"M98 52h1v14h-1zm0 0"}))),dr||(dr=Dh.createElement("clipPath",{id:"fB"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),hr||(hr=Dh.createElement("clipPath",{id:"fC"},Dh.createElement("path",{d:"M98 52h2v14h-2zm0 0"}))),pr||(pr=Dh.createElement("clipPath",{id:"fD"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),or||(or=Dh.createElement("clipPath",{id:"fE"},Dh.createElement("path",{d:"M99 52h1v14h-1zm0 0"}))),sr||(sr=Dh.createElement("clipPath",{id:"fF"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Er||(Er=Dh.createElement("clipPath",{id:"fG"},Dh.createElement("path",{d:"M99 52h2v14h-2zm0 0"}))),vr||(vr=Dh.createElement("clipPath",{id:"fH"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),fr||(fr=Dh.createElement("clipPath",{id:"fI"},Dh.createElement("path",{d:"M100 52h1v14h-1zm0 0"}))),ur||(ur=Dh.createElement("clipPath",{id:"fJ"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),yr||(yr=Dh.createElement("clipPath",{id:"fK"},Dh.createElement("path",{d:"M100 52h2v14h-2zm0 0"}))),zr||(zr=Dh.createElement("clipPath",{id:"fL"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),kr||(kr=Dh.createElement("clipPath",{id:"fM"},Dh.createElement("path",{d:"M101 52h1v14h-1zm0 0"}))),Pr||(Pr=Dh.createElement("clipPath",{id:"fN"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),br||(br=Dh.createElement("clipPath",{id:"fO"},Dh.createElement("path",{d:"M101 52h2v14h-2zm0 0"}))),Mr||(Mr=Dh.createElement("clipPath",{id:"fP"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),gr||(gr=Dh.createElement("clipPath",{id:"fQ"},Dh.createElement("path",{d:"M102 52h1v14h-1zm0 0"}))),xr||(xr=Dh.createElement("clipPath",{id:"fR"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Rr||(Rr=Dh.createElement("clipPath",{id:"fS"},Dh.createElement("path",{d:"M102 52h2v14h-2zm0 0"}))),Hr||(Hr=Dh.createElement("clipPath",{id:"fT"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Or||(Or=Dh.createElement("clipPath",{id:"fU"},Dh.createElement("path",{d:"M103 52h1v14h-1zm0 0"}))),Nr||(Nr=Dh.createElement("clipPath",{id:"fV"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Vr||(Vr=Dh.createElement("clipPath",{id:"fW"},Dh.createElement("path",{d:"M103 52h2v14h-2zm0 0"}))),wr||(wr=Dh.createElement("clipPath",{id:"fX"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Lr||(Lr=Dh.createElement("clipPath",{id:"fY"},Dh.createElement("path",{d:"M104 52h1v14h-1zm0 0"}))),Cr||(Cr=Dh.createElement("clipPath",{id:"fZ"},Dh.createElement("path",{d:"M104.445 57.066v8.7l-7.5-4.301v-8.7zm0 0"}))),Ar||(Ar=Dh.createElement("clipPath",{id:"ga"},Dh.createElement("path",{d:"M96 42h2v14h-2zm0 0"}))),Fr||(Fr=Dh.createElement("clipPath",{id:"gb"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),jr||(jr=Dh.createElement("clipPath",{id:"gc"},Dh.createElement("path",{d:"M97 42h1v14h-1zm0 0"}))),Tr||(Tr=Dh.createElement("clipPath",{id:"gd"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Ir||(Ir=Dh.createElement("clipPath",{id:"ge"},Dh.createElement("path",{d:"M97 42h2v14h-2zm0 0"}))),Wr||(Wr=Dh.createElement("clipPath",{id:"gf"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Sr||(Sr=Dh.createElement("clipPath",{id:"gg"},Dh.createElement("path",{d:"M98 42h1v14h-1zm0 0"}))),Dr||(Dr=Dh.createElement("clipPath",{id:"gh"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Zr||(Zr=Dh.createElement("clipPath",{id:"gi"},Dh.createElement("path",{d:"M98 42h2v14h-2zm0 0"}))),Gr||(Gr=Dh.createElement("clipPath",{id:"gj"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Br||(Br=Dh.createElement("clipPath",{id:"gk"},Dh.createElement("path",{d:"M99 42h1v14h-1zm0 0"}))),Qr||(Qr=Dh.createElement("clipPath",{id:"gl"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Ur||(Ur=Dh.createElement("clipPath",{id:"gm"},Dh.createElement("path",{d:"M99 42h2v14h-2zm0 0"}))),Xr||(Xr=Dh.createElement("clipPath",{id:"gn"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),qr||(qr=Dh.createElement("clipPath",{id:"go"},Dh.createElement("path",{d:"M100 42h1v14h-1zm0 0"}))),Yr||(Yr=Dh.createElement("clipPath",{id:"gp"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Jr||(Jr=Dh.createElement("clipPath",{id:"gq"},Dh.createElement("path",{d:"M100 42h2v14h-2zm0 0"}))),Kr||(Kr=Dh.createElement("clipPath",{id:"gr"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),_r||(_r=Dh.createElement("clipPath",{id:"gs"},Dh.createElement("path",{d:"M101 42h1v14h-1zm0 0"}))),$r||($r=Dh.createElement("clipPath",{id:"gt"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),en||(en=Dh.createElement("clipPath",{id:"gu"},Dh.createElement("path",{d:"M101 42h2v14h-2zm0 0"}))),tn||(tn=Dh.createElement("clipPath",{id:"gv"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),ln||(ln=Dh.createElement("clipPath",{id:"gw"},Dh.createElement("path",{d:"M102 42h1v14h-1zm0 0"}))),an||(an=Dh.createElement("clipPath",{id:"gx"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),cn||(cn=Dh.createElement("clipPath",{id:"gy"},Dh.createElement("path",{d:"M102 42h2v14h-2zm0 0"}))),rn||(rn=Dh.createElement("clipPath",{id:"gz"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),nn||(nn=Dh.createElement("clipPath",{id:"gA"},Dh.createElement("path",{d:"M103 42h1v14h-1zm0 0"}))),mn||(mn=Dh.createElement("clipPath",{id:"gB"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),dn||(dn=Dh.createElement("clipPath",{id:"gC"},Dh.createElement("path",{d:"M103 42h2v14h-2zm0 0"}))),hn||(hn=Dh.createElement("clipPath",{id:"gD"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),pn||(pn=Dh.createElement("clipPath",{id:"gE"},Dh.createElement("path",{d:"M104 42h1v14h-1zm0 0"}))),on||(on=Dh.createElement("clipPath",{id:"gF"},Dh.createElement("path",{d:"M104.445 46.664v8.703l-7.5-4.402v-8.7zm0 0"}))),Dh.createElement("symbol",{overflow:"visible",id:"a"},Dh.createElement("path",{style:{stroke:"none"},d:"M.547-5.375c0-1.04.05-1.977.156-2.813.102-.832.332-1.578.688-2.234.363-.656.816-1.144 1.359-1.469.54-.32 1.16-.484 1.86-.484.78 0 1.468.203 2.062.61.594.406 1.02 1.027 1.281 1.859.258.836.39 1.976.39 3.422 0 2.343-.359 4.074-1.077 5.187C6.555-.19 5.566.36 4.296.36c-.648 0-1.214-.136-1.702-.406A3.29 3.29 0 0 1 1.39-1.25C1.078-1.781.859-2.398.734-3.11a13.003 13.003 0 0 1-.187-2.265zm1.515-.5c0 1.117.083 2.133.25 3.047.165.906.442 1.562.829 1.969.394.398.859.593 1.39.593.52 0 .953-.175 1.297-.53.352-.364.61-.977.766-1.845.164-.863.25-1.937.25-3.218 0-2-.196-3.477-.578-4.438-.375-.969-1-1.453-1.875-1.453-.774 0-1.356.375-1.75 1.125-.387.742-.579 2.324-.579 4.75zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"b"},Dh.createElement("path",{style:{stroke:"none"},d:"m1.344-9.938-.157-.046-.093-.72.093-.093c.583-.164 1.32-.437 2.22-.812.894-.375 1.534-.66 1.921-.86l.234.078c-.093 2.575-.14 4.118-.14 4.625V-4.5c0 .805.004 1.559.016 2.266.019.71.046 1.125.078 1.25a.603.603 0 0 0 .187.296.83.83 0 0 0 .36.125c.156.024.609.055 1.359.094l.062.078V0l-.062.078A71.305 71.305 0 0 0 4.719 0C4.312 0 3.332.023 1.78.078L1.72 0v-.39l.078-.079c.875-.062 1.375-.11 1.5-.14a.518.518 0 0 0 .281-.157c.07-.07.129-.207.172-.406.04-.207.07-.816.094-1.828l.047-1.547V-8c0-1.707-.008-2.633-.016-2.781 0-.145-.047-.219-.14-.219a.26.26 0 0 0-.11.031 3.865 3.865 0 0 0-.375.156l-.875.376c-.367.156-.71.324-1.031.5zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"c"},Dh.createElement("path",{style:{stroke:"none"},d:"M.406.094.296 0v-.406L3.25-3.531C4.457-4.812 5.238-5.801 5.594-6.5c.363-.707.547-1.363.547-1.969 0-.719-.22-1.312-.657-1.781-.437-.477-1.023-.719-1.75-.719-.48 0-.898.074-1.25.219-.355.148-.593.313-.718.5-.118.18-.29.684-.516 1.516l-.078.078h-.36l-.078-.078c.133-.79.227-1.57.282-2.344.55-.54 1.062-.883 1.53-1.031a4.784 4.784 0 0 1 1.5-.235c.626 0 1.22.121 1.782.36.57.23 1.031.609 1.375 1.14.344.524.516 1.125.516 1.813 0 .523-.102 1.043-.297 1.562a5.666 5.666 0 0 1-.89 1.5c-.387.48-.919 1.059-1.595 1.735L2.204-1.438h3.469c1.062 0 1.945-.039 2.656-.125l.063.079a5.13 5.13 0 0 0-.047.78c0 .294.015.524.047.688l-.063.11A40.318 40.318 0 0 0 6.391.016 143.72 143.72 0 0 0 4.656 0C4.094 0 3.328.004 2.36.016 1.4.036.75.062.406.094zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"d"},Dh.createElement("path",{style:{stroke:"none"},d:"M.922-.203a23.746 23.746 0 0 0-.594-2.5l.047-.125.313-.125.125.062c.207.543.425.993.656 1.344.238.344.578.61 1.015.797.438.188.91.281 1.422.281.645 0 1.156-.133 1.531-.406.383-.27.676-.633.875-1.094.208-.457.313-.976.313-1.562 0-.781-.203-1.39-.61-1.828-.406-.446-.968-.672-1.687-.672-.25 0-.476.027-.672.078a7.39 7.39 0 0 0-.89.297l-.094-.078.187-.97c.477.032.797.048.954.048.687 0 1.226-.239 1.624-.719.407-.488.61-1.066.61-1.734 0-.57-.211-1.055-.625-1.454-.418-.394-.934-.593-1.547-.593-.406 0-.793.086-1.156.25a3.372 3.372 0 0 0-.89.594c-.106.199-.263.593-.47 1.187l-.093.078H.875l-.078-.078.531-2.047c.727-.82 1.723-1.234 2.984-1.234.946 0 1.711.258 2.297.765.594.5.891 1.137.891 1.907 0 .586-.172 1.12-.516 1.609-.343.492-.824.953-1.437 1.39 1.008.118 1.723.419 2.14.907.415.48.625 1.062.625 1.75 0 1.125-.511 2.14-1.53 3.047C5.757-.133 4.581.312 3.25.312c-.406 0-.781-.039-1.125-.109-.344-.062-.746-.2-1.203-.406zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"e"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.89.078 2.829 0v-.375l.063-.078c.863-.02 1.375-.047 1.53-.078.165-.031.286-.094.36-.188.082-.094.14-.316.172-.672.04-.363.063-.754.063-1.171v-.641H3.094a72.74 72.74 0 0 0-2.844.047l-.14-.469c1.019-1.914 2.722-4.68 5.109-8.297l1.234-.5.219.094a60.99 60.99 0 0 0-.094 3.703l-.031 2.484v1.813c.812 0 1.437-.016 1.875-.047l.078.078a9.96 9.96 0 0 0-.016.484c0 .2.008.391.032.579l-.094.078A27.048 27.048 0 0 0 7-3.203h-.453v.578c0 .656.016 1.125.047 1.406.039.274.097.45.172.532.07.074.222.132.453.171.238.043.64.063 1.203.063l.094.078V0l-.079.078A49.913 49.913 0 0 0 5.845 0 45.95 45.95 0 0 0 2.89.078zM1.267-4.328h3.75l.078-6.25c-.563.805-1.274 1.906-2.125 3.312-.856 1.399-1.422 2.375-1.703 2.938zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"f"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.156-.125C1.008-.582.72-1.335.281-2.391L.297-2.5l.312-.188.11.032c.476.886.773 1.39.89 1.515.125.118.399.258.829.422.425.156.878.235 1.359.235.594 0 1.117-.125 1.578-.375A2.36 2.36 0 0 0 6.391-2c.218-.508.328-1.086.328-1.734 0-.625-.11-1.16-.328-1.61a2.207 2.207 0 0 0-1-1.031 3.084 3.084 0 0 0-1.47-.36c-.323 0-.62.048-.89.141a2.504 2.504 0 0 0-.672.328c-.18.137-.386.34-.625.61l-.359-.094.094-1.89c.02-.364.031-.727.031-1.094v-1.563c0-.469-.016-.914-.047-1.344a12.893 12.893 0 0 1-.016-.5l.11-.078c.894.063 1.914.094 3.062.094.875 0 1.922-.031 3.141-.094l.031.078a5.514 5.514 0 0 0-.062.797c0 .125.008.336.031.625l-.078.047a48.79 48.79 0 0 0-2.703-.062c-1.524 0-2.407.007-2.657.015-.085.688-.148 1.906-.187 3.656.477-.351.91-.593 1.297-.718a4.167 4.167 0 0 1 3.094.25c.593.293 1.03.718 1.312 1.281a3.83 3.83 0 0 1 .438 1.797c0 1.187-.493 2.281-1.47 3.281-.98 1-2.234 1.5-3.765 1.5a4.05 4.05 0 0 1-1.015-.11 4.974 4.974 0 0 1-.86-.343zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"g"},Dh.createElement("path",{style:{stroke:"none"},d:"M7.594-12.156v.11c-.637.136-1.367.452-2.188.952-.812.5-1.5 1.18-2.062 2.031-.555.856-.875 1.883-.969 3.079.207-.145.438-.317.688-.516.332-.25.578-.422.734-.516.156-.093.363-.171.625-.234.258-.07.562-.11.906-.11.602 0 1.145.137 1.625.407a2.5 2.5 0 0 1 1.078 1.172c.239.511.36 1.117.36 1.812 0 .98-.243 1.797-.72 2.453-.468.657-.968 1.133-1.5 1.422-.53.281-1.148.422-1.843.422-1.18 0-2.094-.441-2.75-1.328C.93-1.883.61-3.031.61-4.438c0-.937.133-1.835.407-2.703a7.444 7.444 0 0 1 1.25-2.343c.562-.696 1.273-1.317 2.14-1.86.864-.55 1.711-.926 2.547-1.125zm-5.375 8.39c0 .575.082 1.149.25 1.72.164.562.43 1 .797 1.312.375.312.812.468 1.312.468.426 0 .817-.117 1.172-.359.363-.238.64-.613.828-1.125a4.5 4.5 0 0 0 .297-1.625c0-.57-.094-1.082-.281-1.531a2.255 2.255 0 0 0-.828-1.032 2.089 2.089 0 0 0-1.235-.375c-.355 0-.71.086-1.062.25-.356.168-.625.36-.813.579a1.577 1.577 0 0 0-.36.687c-.054.242-.077.586-.077 1.031zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"h"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.188.078 1-.109c.207-.32.645-1.004 1.313-2.047L3.921-4.72l1.515-2.468L6.75-9.454c.281-.5.504-.899.672-1.203l-.094-.078H4.61c-.687 0-1.296.011-1.828.03-.531.024-.844.06-.937.11a.454.454 0 0 0-.203.156c-.043.063-.086.282-.125.657l-.157 1.25-.078.062H.906l-.078-.06.047-2.406c0-.282-.016-.708-.047-1.282L1-12.313c.32.043.977.086 1.969.126.988.042 1.648.062 1.984.062 1.188 0 2.484-.04 3.89-.125l.063.063v.468L7.641-9.484c-.762 1.375-1.637 3-2.625 4.875-.98 1.875-1.7 3.414-2.157 4.609l-.078.078a8.938 8.938 0 0 0-.765-.047c-.262 0-.54.016-.829.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"i"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.953-6.234c-.648-.344-1.14-.739-1.484-1.188-.336-.445-.5-.988-.5-1.625 0-.894.328-1.664.984-2.312.664-.645 1.57-.97 2.719-.97.57 0 1.101.106 1.594.313.5.2.882.5 1.156.907.27.398.406.84.406 1.328 0 .523-.164 1.023-.484 1.5-.313.469-.871.945-1.672 1.422v.078c.687.336 1.195.617 1.531.843.332.231.602.54.813.922.207.387.312.836.312 1.344 0 .7-.203 1.371-.61 2.016A3.88 3.88 0 0 1 6.142-.188a4.45 4.45 0 0 1-2.032.5c-1.03 0-1.882-.289-2.546-.859-.668-.582-1-1.348-1-2.297 0-.781.226-1.445.687-2 .457-.562 1.023-1 1.703-1.312zM5-7.078c.625-.395 1.047-.785 1.266-1.172a2.53 2.53 0 0 0 .343-1.281c0-.676-.195-1.207-.578-1.594-.386-.395-.906-.594-1.562-.594-.617 0-1.133.18-1.547.531-.406.344-.61.829-.61 1.454 0 .468.13.882.391 1.234.27.344 1.035.82 2.297 1.422zM3.672-5.922c-.7.418-1.184.86-1.453 1.328-.274.469-.406 1.008-.406 1.61 0 .836.234 1.492.703 1.968.468.48 1.07.72 1.812.72.508 0 .969-.114 1.375-.345.406-.238.707-.562.906-.968a2.88 2.88 0 0 0 .313-1.329c0-.695-.246-1.238-.734-1.624-.481-.383-1.32-.836-2.516-1.36zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"j"},Dh.createElement("path",{style:{stroke:"none"},d:"M1.172.078v-.172C2.797-.469 4.07-1.18 5-2.234c.938-1.063 1.46-2.36 1.578-3.891-.855 1.023-1.82 1.531-2.89 1.531-.668 0-1.258-.16-1.766-.484-.5-.32-.871-.738-1.11-1.25C.57-6.848.454-7.453.454-8.141c0-1.27.379-2.285 1.14-3.046.77-.77 1.723-1.157 2.86-1.157 1.133 0 2.055.414 2.766 1.235.707.824 1.062 2.011 1.062 3.562a9.63 9.63 0 0 1-.203 1.984c-.125.625-.367 1.274-.719 1.938a7.533 7.533 0 0 1-1.421 1.844 8.763 8.763 0 0 1-2 1.422c-.743.375-1.47.613-2.188.718zm.812-8.781c0 .5.086.996.266 1.484.176.492.445.871.813 1.14.374.274.812.407 1.312.407.688 0 1.238-.234 1.656-.703.426-.469.64-1.164.64-2.094 0-.957-.21-1.742-.624-2.36-.418-.612-.992-.921-1.719-.921-.7 0-1.266.262-1.703.781-.43.512-.64 1.266-.64 2.266zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gG"},Dh.createElement("path",{style:{stroke:"none"},d:"m.688-3.031.078-.063h.437l.063.063c.03.75.066 1.215.109 1.39.05.168.21.344.484.532.27.18.625.324 1.063.437.445.117.894.172 1.344.172.613 0 1.171-.11 1.671-.328.5-.227.883-.563 1.157-1 .27-.445.406-.945.406-1.5 0-.383-.07-.719-.203-1a1.718 1.718 0 0 0-.547-.703c-.23-.176-.5-.305-.813-.39a16.836 16.836 0 0 0-1.359-.282 24.391 24.391 0 0 1-1.375-.25 4.53 4.53 0 0 1-1-.344 2.755 2.755 0 0 1-.812-.61 2.7 2.7 0 0 1-.532-.89 3.392 3.392 0 0 1-.187-1.14c0-1.094.379-1.989 1.14-2.688.758-.707 1.782-1.063 3.063-1.063a8.09 8.09 0 0 1 1.656.188 6.778 6.778 0 0 1 1.657.563l.062.109c-.137.543-.219 1.308-.25 2.297l-.078.078h-.453l-.063-.063c-.011-.707-.031-1.148-.062-1.328-.024-.187-.29-.41-.797-.672a3.499 3.499 0 0 0-1.656-.406c-.5 0-.97.102-1.407.297-.43.2-.757.512-.984.938a2.86 2.86 0 0 0-.328 1.312c0 .344.066.652.203.922.133.262.305.469.516.625.218.156.468.277.75.36.28.073.8.163 1.562.265 1.04.148 1.797.324 2.266.531.468.211.843.543 1.125 1 .289.45.437.992.437 1.625 0 1.25-.511 2.293-1.531 3.125C6.488-.086 5.258.328 3.812.328 2.595.328 1.523.11.61-.328l-.046-.11C.625-.811.663-1.675.688-3.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gH"},Dh.createElement("path",{style:{stroke:"none"},d:"m7.766-1.297-.282.64C6.88-.27 6.336-.02 5.86.094a5.15 5.15 0 0 1-1.28.188c-.7 0-1.368-.136-2-.406-.626-.281-1.138-.75-1.532-1.406-.4-.658-.595-1.447-.595-2.376 0-.614.07-1.164.219-1.656.156-.5.316-.868.484-1.11.164-.238.446-.504.844-.797a6.327 6.327 0 0 1 1.266-.703c.445-.176.93-.265 1.453-.265.695 0 1.312.167 1.843.5.54.335.922.761 1.141 1.28.219.512.328 1.055.328 1.626 0 .187-.011.367-.031.531l-.094.094c-.406.093-.949.156-1.625.187-.668.024-1.11.032-1.328.032H2.141c.007 1.218.312 2.117.906 2.687.601.574 1.336.86 2.203.86.406 0 .797-.067 1.172-.204a7.594 7.594 0 0 0 1.203-.594zM2.14-4.89c.101.024.504.043 1.203.063.707.023 1.234.031 1.578.031.812 0 1.305-.008 1.484-.031.008-.145.016-.254.016-.328 0-.907-.188-1.578-.563-2.016-.367-.445-.87-.672-1.515-.672-.688 0-1.23.25-1.625.75-.387.492-.578 1.227-.578 2.203zm2.453-4.046zM4.484.53zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gI"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.375-8.375.172.11c-.043.343-.07.949-.078 1.812l.656-.828c.219-.282.41-.492.578-.64a1.94 1.94 0 0 1 1.266-.47c.258 0 .504.055.734.157l.063.125a24.423 24.423 0 0 0-.172 2.046h-.39c-.231-.53-.606-.796-1.126-.796-.367 0-.683.117-.953.343a1.68 1.68 0 0 0-.547.875c-.086.344-.125.782-.125 1.313v.984c0 .18.008.61.031 1.297.02.68.04 1.07.063 1.172a.51.51 0 0 0 .125.234c.062.055.133.09.219.11.093.011.515.039 1.265.078l.078.078v.36l-.078.093A35.286 35.286 0 0 0 2.703 0C2.035 0 1.332.023.593.078L.517-.016v-.359l.078-.078c.57-.031.894-.05.969-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468V-5.22c0-.226-.015-.547-.046-.953a7.738 7.738 0 0 0-.063-.75.262.262 0 0 0-.125-.203c-.074-.04-.227-.063-.453-.063l-.75-.015-.078-.063v-.375l.078-.078c1.113-.133 2.055-.351 2.828-.656zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gJ"},Dh.createElement("path",{style:{stroke:"none"},d:"m4.484.156-.546-1.375-.657-1.5-1.797-4.203c-.117-.27-.218-.445-.312-.531A.49.49 0 0 0 .89-7.61a5.961 5.961 0 0 0-.563-.063l-.062-.062v-.375l.078-.079c.82.043 1.472.063 1.953.063.676 0 1.36-.02 2.047-.063l.062.063v.39l-.062.063c-.617.024-.977.07-1.078.14a.29.29 0 0 0-.141.25c0 .18.117.56.36 1.141L4.546-3.47l.844 1.985.89-1.985L7-5.28c.281-.688.46-1.172.547-1.453.082-.29.125-.485.125-.579 0-.113-.07-.19-.203-.234-.125-.05-.45-.094-.969-.125l-.063-.062v-.375l.079-.079c.726.043 1.27.063 1.625.063.312 0 .836-.02 1.578-.063l.078.079v.375l-.078.062c-.344.031-.574.086-.688.156-.117.075-.23.215-.344.422-.105.2-.414.824-.921 1.875l-.844 1.797c-.149.305-.656 1.496-1.531 3.578zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gK"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.047-8.375.156.11a37.64 37.64 0 0 0-.094 2.937v2.047c0 .75.055 1.273.172 1.562.114.293.313.516.594.672.281.156.613.234 1 .234.426 0 .816-.082 1.172-.25a2.3 2.3 0 0 0 .875-.703c.238-.312.375-.52.406-.625.04-.101.067-.398.078-.89l.032-.985v-.953c0-.226-.016-.547-.047-.953-.024-.406-.04-.656-.047-.75a.25.25 0 0 0-.14-.203c-.075-.04-.227-.063-.454-.063l-.734-.015-.079-.063v-.375L6-7.719c1.125-.133 2.066-.351 2.828-.656l.172.11a37.64 37.64 0 0 0-.094 2.937v1.547c0 .086.016.797.047 2.14.008.5.035.809.078.922a.43.43 0 0 0 .203.219c.094.043.36.063.797.063h.25l.078.078v.343l-.078.094A29.642 29.642 0 0 0 8.625 0c-.355 0-.766.02-1.234.063l-.094-.079c.039-.593.07-1.097.094-1.515-.375.293-.797.68-1.266 1.156-.188.18-.453.328-.797.453a3.293 3.293 0 0 1-1.156.188C3.516.266 3.004.16 2.64-.047a1.753 1.753 0 0 1-.782-.86c-.148-.363-.218-.991-.218-1.89v-2.422c0-.226-.012-.547-.032-.953a7.738 7.738 0 0 0-.062-.75.25.25 0 0 0-.14-.203c-.075-.04-.227-.063-.454-.063L.22-7.202l-.08-.064v-.375l.078-.078c1.113-.133 2.054-.351 2.828-.656zm2.094-.563zm.093 9.47zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gL"},Dh.createElement("path",{style:{stroke:"none"},d:"m-.11-11.844-.077-.078v-.36l.062-.077c1.125-.133 2.066-.352 2.828-.657l.172.11c-.063.668-.094 2.015-.094 4.047v2.234c.102-.145.305-.367.61-.672.312-.3.562-.508.75-.625a3.04 3.04 0 0 1 .78-.328c.333-.094.68-.14 1.048-.14.664 0 1.25.167 1.75.5.5.324.867.761 1.11 1.312.237.543.358 1.125.358 1.75 0 .586-.101 1.148-.296 1.687-.2.532-.438.97-.72 1.313-.167.2-.46.45-.874.75-.813.594-1.387.965-1.719 1.11-.324.155-.75.234-1.281.234-.406 0-.777-.059-1.11-.172a4.292 4.292 0 0 1-1.046-.547l-.704.672-.296-.11c.113-1.07.171-2.285.171-3.64v-4.656l-.03-1.688a43.121 43.121 0 0 0-.063-1.36c-.024-.257-.055-.41-.094-.453-.031-.05-.09-.085-.172-.109-.086-.031-.437-.047-1.062-.047zm2.891 6.281v3.297c0 .274.008.454.031.547.032.086.149.215.36.39.207.169.473.313.797.438.332.125.676.188 1.031.188.82 0 1.469-.32 1.938-.969.476-.644.718-1.46.718-2.453 0-.613-.101-1.16-.297-1.64-.199-.477-.496-.844-.89-1.094a2.316 2.316 0 0 0-1.313-.391 2.46 2.46 0 0 0-1.547.516c-.437.343-.714.734-.828 1.171zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gM"},Dh.createElement("path",{style:{stroke:"none"},d:"M.39-3.781v-.125l.407-1.172H5.5v.125l-.422 1.172zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gN"},Dh.createElement("path",{style:{stroke:"none"},d:"M.406-6.906v-.219l.063-.094c.55-.207.992-.394 1.328-.562 0-1.532-.016-2.422-.047-2.672.602-.219 1.098-.445 1.484-.688l.22.188c-.063.367-.138 1.433-.22 3.203.29.012.61.016.954.016.687 0 1.18-.016 1.484-.047l.062.062-.171.735-.063.078a38.136 38.136 0 0 0-1-.016c-.324 0-.746.008-1.266.016l-.046 3.578c0 .824.015 1.367.046 1.625.04.25.145.45.313.594.176.148.437.218.781.218.383 0 .75-.101 1.094-.312l.203.312c-.137.106-.477.399-1.016.875-.304.145-.609.22-.921.22-1.325 0-1.985-.641-1.985-1.923 0-.468.008-.863.031-1.187.008-.102.016-.207.016-.313v-3.64h-.36c-.261 0-.562.011-.906.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gO"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.984-13.016.172.11c-.062.668-.094 2.015-.094 4.047v2.171a33.17 33.17 0 0 0 1.376-1.203c.113-.113.226-.195.343-.25a3.1 3.1 0 0 1 .547-.156 3.137 3.137 0 0 1 2.063.188c.414.18.726.39.937.64.219.242.367.532.453.875.082.344.125.766.125 1.266v1.547c0 .094.016.824.047 2.187.008.555.067.883.172.985.113.105.477.156 1.094.156l.078.078V0l-.078.078A23.962 23.962 0 0 0 8.703 0c-.125 0-.555.023-1.281.078l-.094-.11c.07-.757.11-1.75.11-2.968v-1.156c0-.688-.016-1.18-.047-1.485a1.853 1.853 0 0 0-.297-.843 1.704 1.704 0 0 0-.657-.579 2.234 2.234 0 0 0-.984-.203c-.398 0-.73.059-1 .172-.273.106-.547.29-.828.547-.273.25-.434.465-.484.64-.055.169-.079.5-.079 1v1.563c0 .125.008.54.032 1.235.02.699.039 1.109.062 1.234.031.117.07.2.125.25a.38.38 0 0 0 .188.11c.082.011.406.03.969.062l.078.078v.36l-.079.093a28.22 28.22 0 0 0-4.218 0L.125-.016v-.359l.094-.078c.562-.031.879-.05.953-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.031-.644.047-1.132.047-1.468v-4.547l-.032-1.86A39.741 39.741 0 0 0 1.5-11.25c-.023-.25-.055-.395-.094-.438-.031-.05-.093-.085-.187-.109-.086-.031-.434-.047-1.047-.047l-.078-.078v-.36l.062-.077c1.125-.133 2.067-.352 2.828-.657zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gP"},Dh.createElement("path",{style:{stroke:"none"},d:"m1.86-5.953-.344-.094-.063-.094v-1.078C2.493-8 3.503-8.39 4.484-8.39c.676 0 1.239.133 1.688.391.445.25.77.563.969.938.195.375.296.82.296 1.328L7.391-3.97v2.61c0 .367.023.586.078.656.05.074.11.125.172.156.062.024.18.043.359.063l.5.046.063.079v.343L8.5.063C8.07.03 7.672.015 7.297.015c-.344 0-.766.015-1.266.046l-.125-.124.032-1.422L4.03.016c-.324.132-.68.203-1.062.203-.469 0-.875-.086-1.219-.25A1.843 1.843 0 0 1 .984-.75C.804-1.05.72-1.422.72-1.86c0-.85.27-1.519.812-2 .54-.488 2.008-.906 4.407-1.25 0-.863-.196-1.472-.579-1.827-.386-.352-.902-.532-1.546-.532-.344 0-.657.055-.938.157-.273.093-.43.171-.469.234-.043.062-.203.422-.484 1.078zm4.077 1.375c-1.636.281-2.656.586-3.062.906-.406.313-.61.797-.61 1.453 0 .918.454 1.375 1.36 1.375.781 0 1.55-.453 2.313-1.36zm-1.484-4.36zM4.266.533zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gQ"},Dh.createElement("path",{style:{stroke:"none"},d:"M5.922-11.922v-.36l.062-.077c1.125-.133 2.067-.352 2.829-.657l.171.11c-.062.668-.093 2.015-.093 4.047v5.75c0 .593.007 1.117.03 1.562.02.438.056.7.11.781a.51.51 0 0 0 .25.204c.125.054.469.105 1.031.156l.079.062v.328l-.079.094A23.292 23.292 0 0 0 8.829.016c-.312 0-.762.02-1.344.062l-.093-.11c.007-.57.015-.972.015-1.202 0-.032.004-.141.016-.329-.324.231-.649.493-.969.782-.48.418-.793.683-.937.797-.274.132-.653.203-1.141.203-.813 0-1.508-.2-2.078-.594a3.353 3.353 0 0 1-1.203-1.531 5.221 5.221 0 0 1-.36-1.907c0-.664.125-1.3.375-1.906.25-.613.602-1.062 1.063-1.343.457-.282.957-.57 1.5-.875.539-.301 1.082-.454 1.625-.454.738 0 1.445.184 2.125.547L7.39-9.797a46.85 46.85 0 0 0-.063-1.422c-.023-.27-.055-.426-.094-.469-.03-.05-.09-.085-.171-.109-.086-.031-.438-.047-1.063-.047zm1.5 5.578a4.05 4.05 0 0 0-1.219-.937 2.95 2.95 0 0 0-1.328-.328c-.492 0-.95.136-1.375.406-.43.273-.734.668-.922 1.187a5.01 5.01 0 0 0-.281 1.704c0 1.03.258 1.859.781 2.484.52.617 1.172.922 1.953.922.426 0 .805-.098 1.14-.297.333-.195.602-.461.813-.797.22-.332.344-.664.375-1 .04-.332.063-.941.063-1.828zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gR"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.25-8.156a.98.98 0 0 1 .734.312c.207.2.313.446.313.735 0 .293-.106.543-.313.75a.998.998 0 0 1-.734.296 1.04 1.04 0 0 1-.75-.296 1.04 1.04 0 0 1-.297-.75c0-.301.098-.551.297-.75.207-.196.457-.297.75-.297zm0 6.219c.281 0 .523.101.734.296a1 1 0 0 1 .313.75c0 .293-.106.543-.313.75a1.01 1.01 0 0 1-.734.297c-.293 0-.543-.101-.75-.297a1.04 1.04 0 0 1-.297-.75c0-.289.098-.535.297-.734.207-.207.457-.313.75-.313zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gT"},Dh.createElement("path",{style:{stroke:"none"},d:"M4.14.172 3.345-3.5 1.64-10.734c-.137-.57-.278-.891-.422-.954-.149-.07-.465-.14-.953-.203l-.063-.062v-.39l.063-.079a34.96 34.96 0 0 0 2.25.078c.488 0 1.195-.023 2.125-.078l.078.078v.39l-.063.063c-.656.032-1.054.07-1.187.11-.125.043-.188.136-.188.281 0 .125.055.516.172 1.172.113.648.219 1.18.313 1.594l1.39 6.093 2.172-5.406A151.008 151.008 0 0 0 9-12.547h.563c.468 1.469.953 2.899 1.453 4.281l2.062 5.735 1.5-5.25c.145-.551.328-1.274.547-2.172.227-.895.344-1.41.344-1.547 0-.164-.074-.266-.219-.297-.148-.039-.57-.07-1.266-.094l-.078-.078v-.375l.078-.078c1 .055 1.598.078 1.797.078.188 0 .797-.023 1.828-.078l.078.078v.39l-.078.063c-.336.012-.558.043-.672.094a.885.885 0 0 0-.28.235c-.087.093-.204.39-.36.89l-.5 1.64-.906 2.954c-.125.43-.368 1.297-.72 2.61l-.968 3.64h-.89a226.578 226.578 0 0 0-1.516-4.36l-2-5.421-1.75 4.328-.953 2.468a79.63 79.63 0 0 0-.578 1.594L5.03.171zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gU"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.531-12.313c.27 0 .504.102.703.297.196.2.297.434.297.704a.963.963 0 0 1-.297.703.992.992 0 0 1-.703.28.98.98 0 0 1-.703-.28.948.948 0 0 1-.297-.704.96.96 0 0 1 .297-.703.963.963 0 0 1 .703-.296zm.75 3.938.172.11c-.074.773-.11 1.75-.11 2.937v1.984c0 .125.009.54.032 1.235.031.699.055 1.109.078 1.234.031.117.07.2.125.25a.38.38 0 0 0 .188.11c.082.011.398.03.953.062l.078.078v.36l-.063.093A28.861 28.861 0 0 0 .5.078L.422-.016v-.359L.5-.453c.57-.031.895-.05.969-.063a.418.418 0 0 0 .187-.109.599.599 0 0 0 .11-.266c.02-.113.039-.488.062-1.125.031-.644.047-1.132.047-1.468V-5.22c0-.226-.012-.547-.031-.953a7.738 7.738 0 0 0-.063-.75.25.25 0 0 0-.14-.203c-.075-.04-.22-.063-.438-.063l-.75-.015-.078-.063v-.375l.078-.078c1.113-.133 2.055-.351 2.828-.656zM2.594.531zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gV"},Dh.createElement("path",{style:{stroke:"none"},d:"m16.531-12.39.078.062v.437l-.062.063c-.649.023-1.047.058-1.203.11-.156.042-.266.116-.328.218-.063.105-.102.32-.11.64-.011.313-.027 1.204-.047 2.672v4.063c0 .586.004 1.246.016 1.984.02.743.055 1.172.11 1.297.062.117.163.2.312.25.144.055.562.09 1.25.11l.062.062v.438l-.078.062a44.373 44.373 0 0 0-2.5-.078c-.48 0-1.297.023-2.453.078L11.5.016v-.422l.078-.078c.645-.02 1.047-.051 1.203-.094a.557.557 0 0 0 .328-.235c.063-.101.098-.316.11-.64.008-.32.023-1.211.047-2.672v-6.453l-3.032 6.344a78.996 78.996 0 0 0-2 4.484h-.343a43.197 43.197 0 0 0-.813-1.813l-4.187-8.734v6.14c0 .587.004 1.25.015 2 .008.743.047 1.173.11 1.298a.593.593 0 0 0 .312.265c.145.055.563.086 1.25.094l.063.063v.421l-.079.094L4 .047A28.812 28.812 0 0 0 2.5 0C2.312 0 1.613.023.406.078L.328 0v-.422L.406-.5c.645-.008 1.04-.035 1.188-.078a.536.536 0 0 0 .328-.25c.07-.113.113-.32.125-.625.008-.3.02-1.203.031-2.703v-4.016c0-.531-.008-1.176-.015-1.937-.012-.77-.047-1.211-.11-1.329a.491.491 0 0 0-.297-.265c-.148-.063-.562-.102-1.25-.125l-.078-.063v-.421l.078-.079c.406.032.953.047 1.64.047.645 0 1.208-.015 1.688-.047a56.553 56.553 0 0 0 1.422 3.079L8.484-2.47l3-6.265c.813-1.696 1.36-2.914 1.641-3.657.563.032 1.117.047 1.672.047.488 0 1.066-.015 1.734-.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gW"},Dh.createElement("path",{style:{stroke:"none"},d:"m3-8.375.172.11c-.031.398-.055.913-.063 1.546.47-.383.91-.773 1.329-1.172.125-.113.238-.195.343-.25a3.1 3.1 0 0 1 .547-.156 3.137 3.137 0 0 1 2.063.188c.425.18.742.39.953.64.219.242.363.532.437.875.082.344.125.766.125 1.266v1.547c0 .094.016.824.047 2.187.008.555.07.883.188.985.113.105.476.156 1.093.156l.063.078V0l-.063.078A24.663 24.663 0 0 0 8.72 0c-.156 0-.586.023-1.281.078l-.11-.11c.07-.757.11-1.75.11-2.968v-1.156c0-.688-.016-1.18-.047-1.485a1.853 1.853 0 0 0-.297-.843 1.552 1.552 0 0 0-.657-.579 2.234 2.234 0 0 0-.984-.203 2.87 2.87 0 0 0-.781.094 2.563 2.563 0 0 0-.734.375 3.086 3.086 0 0 0-.594.531 1.252 1.252 0 0 0-.235.47c-.023.148-.03.452-.03.921v1.531c0 .125.007.54.03 1.235.02.699.04 1.109.063 1.234.031.117.07.2.125.25.062.055.129.09.203.11.07.011.39.03.953.062l.078.078v.36l-.078.093a28.22 28.22 0 0 0-4.219 0L.156-.016v-.359l.078-.078c.563-.031.88-.05.954-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468V-5.22c0-.226-.015-.547-.046-.953-.024-.406-.04-.656-.047-.75a.25.25 0 0 0-.141-.203c-.074-.04-.227-.063-.453-.063l-.735-.015-.078-.063v-.375l.063-.078C1.297-7.852 2.238-8.07 3-8.375zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gX"},Dh.createElement("path",{style:{stroke:"none"},d:"m.375-12.36.063-.062a51.36 51.36 0 0 0 2.5.078c.664 0 1.562-.02 2.687-.062.414-.008.719-.016.906-.016 1.477 0 2.485.274 3.016.813.531.53.797 1.168.797 1.906 0 .492-.133.976-.39 1.453-.263.469-.65.875-1.157 1.219-.5.336-1.195.586-2.078.75.164.23.46.625.89 1.187l1.25 1.657c.407.542.836 1.12 1.297 1.734.469.605.77.95.906 1.031.133.074.25.121.344.14.094.012.242.016.453.016l.079.079v.406l-.079.078a9.242 9.242 0 0 0-1-.047c-.418 0-.87.016-1.359.047C9.094-.441 8.453-1.29 7.578-2.5a49.06 49.06 0 0 0-3.094-3.922l.094-.266c.3.024.54.032.719.032 1.008 0 1.8-.242 2.375-.735.57-.488.86-1.16.86-2.015 0-.781-.262-1.367-.782-1.766-.512-.394-1.203-.594-2.078-.594-.617 0-1.2.09-1.75.266-.086.125-.125 1.227-.125 3.297v4.062l.015 1.72c0 .655.016 1.085.047 1.28.032.188.07.32.125.391.051.063.157.117.313.156.164.043.555.074 1.172.094l.078.063V0l-.078.078c-.024 0-.54-.023-1.547-.062C3.516.004 3.192 0 2.953 0 2.773 0 1.938.023.438.078L.374 0v-.438L.438-.5c.539-.02.898-.047 1.078-.078.187-.04.312-.086.375-.14.062-.052.109-.165.14-.345.04-.187.067-.593.078-1.218l.016-1.86v-4.062l-.031-1.719c0-.664-.016-1.094-.047-1.281-.024-.195-.063-.328-.125-.39-.055-.071-.156-.13-.313-.173-.156-.039-.546-.07-1.171-.093l-.063-.063zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gY"},Dh.createElement("path",{style:{stroke:"none"},d:"m9.688-7.766.078.157c-.243.367-.391.605-.454.718H7.688c.156.325.234.664.234 1.016 0 .418-.094.824-.281 1.219a2.935 2.935 0 0 1-.797 1A4.082 4.082 0 0 1 5.687-3c-.43.156-.917.234-1.468.234h-.407c-.343.282-.57.493-.671.625A.72.72 0 0 0 3-1.734c0 .261.113.445.344.546.238.106.734.157 1.484.157l1.969-.032c.613 0 1.086.079 1.422.235.332.148.597.406.797.781.207.375.312.774.312 1.203 0 .645-.21 1.285-.625 1.922-.418.645-1.023 1.133-1.812 1.469-.793.332-1.637.5-2.532.5-.511 0-.992-.059-1.437-.172a3.654 3.654 0 0 1-1.188-.5 2.657 2.657 0 0 1-.812-.89 2.33 2.33 0 0 1-.297-1.126A2.424 2.424 0 0 1 1.094.906l1.594-.89c-.512-.157-.836-.313-.97-.47a.824.824 0 0 1-.202-.562c0-.218.07-.476.218-.78l1.422-1.032c-.836-.207-1.398-.531-1.687-.969a2.5 2.5 0 0 1-.438-1.422c0-.476.102-.93.313-1.36.207-.425.515-.769.922-1.03a5.557 5.557 0 0 1 1.39-.61c.52-.156.989-.234 1.406-.234.727 0 1.426.242 2.094.719a72.84 72.84 0 0 0 2.532-.032zM2.546-5.734c0 .367.066.75.203 1.156.145.406.375.719.688.937.312.211.664.313 1.062.313.52 0 .969-.164 1.344-.5.383-.344.578-.879.578-1.61 0-.601-.18-1.148-.531-1.64-.344-.488-.829-.734-1.454-.734-.542 0-.996.18-1.359.53-.355.345-.531.86-.531 1.548zM5.125.172c-.95 0-1.496.008-1.64.031-.137.02-.34.117-.61.297a1.976 1.976 0 0 0-.64.719c-.169.3-.25.64-.25 1.015 0 .657.242 1.192.734 1.61.5.414 1.156.625 1.969.625a3.8 3.8 0 0 0 1.703-.39c.53-.25.914-.595 1.156-1.032.25-.43.375-.844.375-1.25 0-.399-.106-.734-.313-1.016a1.283 1.283 0 0 0-.812-.515C6.473.203 5.914.172 5.125.172zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"gZ"},Dh.createElement("path",{style:{stroke:"none"},d:"M.594-4.031c0-.696.14-1.367.422-2.016.289-.644.789-1.203 1.5-1.672.718-.468 1.566-.703 2.546-.703 1.227 0 2.227.39 3 1.172.782.773 1.172 1.766 1.172 2.984 0 1.336-.449 2.438-1.343 3.313C7.004-.086 5.937.344 4.687.344c-.824 0-1.558-.219-2.203-.656-.648-.446-1.125-.989-1.437-1.625a4.838 4.838 0 0 1-.453-2.094zm1.672-.594c0 .813.101 1.547.312 2.203.207.649.54 1.168 1 1.563.457.386.977.578 1.563.578.687 0 1.254-.27 1.703-.813.457-.55.687-1.379.687-2.484 0-1.25-.246-2.27-.734-3.063-.492-.8-1.195-1.203-2.11-1.203-.761 0-1.355.278-1.78.828-.43.555-.641 1.352-.641 2.391zm2.656-4.313zM4.797.533zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hp"},Dh.createElement("path",{style:{stroke:"none"},d:"m.64-12.36.079-.062c2.008.043 3.297.063 3.86.063 1.913 0 3.624-.02 5.124-.063l.047.063c-.148.562-.258 1.445-.328 2.64l-.047.078h-.438l-.078-.078c.008-.05.016-.097.016-.14 0-.489-.043-.961-.125-1.422-.367-.156-.875-.258-1.531-.313a21.295 21.295 0 0 0-1.469-.078c-.469 0-1.063.031-1.781.094l-.031 1.406-.032 1.61-.015 1.78a25.52 25.52 0 0 0 1.75.063c.53 0 .976-.015 1.343-.047.364-.039.579-.078.641-.109.063-.04.11-.113.14-.219.032-.113.055-.312.079-.593l.047-.547.062-.063h.406l.063.063c-.012.648-.024 1.293-.031 1.937l.03 1.969-.062.078h-.406l-.062-.078-.063-.531c-.055-.407-.094-.645-.125-.72a.358.358 0 0 0-.156-.202c-.086-.063-.305-.11-.656-.14-.356-.04-.84-.063-1.454-.063-.335 0-.851.015-1.546.046-.032.493-.047 1.31-.047 2.454 0 1.23.015 2.136.047 2.718H5.5c1.426 0 2.316-.015 2.672-.046a3.7 3.7 0 0 0 1.015-.266 10.8 10.8 0 0 0 .266-.938c.125-.488.192-.789.203-.906l.094-.062h.422l.062.062c-.054.25-.105.688-.156 1.313A23.878 23.878 0 0 0 10.016 0l-.063.078a120.71 120.71 0 0 0-4.39-.062L3.171 0c-.563 0-1.149.023-1.75.078L1.359 0v-.297l.063-.078c.344-.176.539-.285.594-.328.05-.05.093-.567.125-1.547.03-.977.046-1.723.046-2.234V-9.72c0-.426-.011-.773-.03-1.047a3.12 3.12 0 0 0-.063-.593.515.515 0 0 0-.094-.235.451.451 0 0 0-.188-.125 2.188 2.188 0 0 0-.437-.078l-.656-.062-.078-.063zm5.016-.703zM5.625.531zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hq"},Dh.createElement("path",{style:{stroke:"none"},d:"m.39.063-.077-.08v-.359l.079-.063a1.4 1.4 0 0 0 .53-.109c.145-.062.313-.187.5-.375.196-.195.548-.601 1.048-1.219L3.89-3.89 3.14-5c-.118-.164-.352-.488-.704-.969a9.603 9.603 0 0 0-.874-1.078c-.231-.25-.403-.398-.516-.453a.724.724 0 0 0-.344-.094c-.055 0-.121.008-.203.016l-.094-.063L.328-8l.078-.094c.594-.062 1.25-.172 1.969-.328.406.336 1.004 1.117 1.797 2.344l.656 1.031.547-.703a69.291 69.291 0 0 0 1.813-2.5c.269.043.488.063.656.063.144 0 .347-.02.61-.063l.077.063v.359l-.078.062a1.715 1.715 0 0 0-.422.094c-.086.043-.246.18-.484.406-.23.23-.543.579-.938 1.047l-.53.64a8.3 8.3 0 0 0-.298.376l-.547.703.329.5c.144.21.492.703 1.046 1.484.563.774.954 1.29 1.172 1.547.227.262.39.418.485.469.101.043.265.063.484.063l.078.062v.36L8.75.061C8.32.02 7.988 0 7.75 0c-.074 0-.45.02-1.125.063A25.964 25.964 0 0 1 5.172-1.97l-.89-1.36c-.607.69-1.416 1.823-2.424 3.394A11.096 11.096 0 0 0 1.141 0C1.023 0 .773.02.39.063zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hr"},Dh.createElement("path",{style:{stroke:"none"},d:"m7.625-.938-.344.579A5.216 5.216 0 0 1 4.75.266c-1.293 0-2.293-.38-3-1.141-.7-.77-1.047-1.758-1.047-2.969 0-.55.055-1.039.172-1.469.125-.437.281-.796.469-1.078.187-.28.39-.5.61-.656.218-.164.593-.394 1.124-.687.531-.301.93-.493 1.203-.579.27-.093.64-.14 1.11-.14.914 0 1.66.172 2.234.515a28.172 28.172 0 0 0-.25 2.22l-.078.062h-.36l-.078-.078c-.023-.489-.054-.817-.093-.985-.043-.176-.278-.36-.704-.547a3.251 3.251 0 0 0-1.359-.296c-.48 0-.906.105-1.281.312-.375.2-.664.527-.86.984-.187.461-.28 1.012-.28 1.657 0 .53.077 1.058.234 1.578.156.511.351.937.593 1.281.25.336.579.605.985.813a3.14 3.14 0 0 0 1.375.296c.32 0 .633-.039.937-.125a6.078 6.078 0 0 0 1.032-.406zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hs"},Dh.createElement("path",{style:{stroke:"none"},d:"M3.828-5.922v1.781l.016 1.72c0 .636.015 1.058.047 1.265.03.21.07.343.125.406.062.063.171.117.328.156.156.043.547.074 1.172.094l.062.063V0l-.062.078A124.336 124.336 0 0 0 2.984 0C2.797 0 1.957.023.47.078L.406 0v-.438L.47-.5c.55-.02.914-.047 1.094-.078.187-.04.304-.086.359-.14.062-.063.113-.18.156-.36.04-.176.063-.57.063-1.188l.015-1.875v-4.062l-.015-1.719c-.012-.664-.032-1.094-.063-1.281-.023-.195-.062-.328-.125-.39-.055-.071-.156-.13-.312-.173-.157-.039-.547-.07-1.172-.093l-.063-.063v-.437l.063-.063c2.488.043 3.941.063 4.36.063 1.394 0 2.82-.02 4.28-.063l.079.063a4.51 4.51 0 0 0-.188 1c-.031.375-.063.902-.094 1.578l-.078.062h-.406l-.063-.062a8.34 8.34 0 0 1-.078-.672 7.097 7.097 0 0 0-.14-.89c-.618-.208-1.461-.313-2.532-.313-.48 0-1.043.039-1.687.11-.063.46-.094 1.573-.094 3.343v1.515c.75.012 1.258.016 1.531.016.489 0 .91-.016 1.266-.047.363-.039.582-.078.656-.11a.353.353 0 0 0 .157-.202c.039-.102.078-.317.109-.64l.062-.47.063-.078h.437l.079.078-.063 1.922c0 .23.004.555.016.969.03.48.046.855.046 1.125l-.078.063h-.437l-.063-.063-.046-.75a2.965 2.965 0 0 0-.079-.64c-.043-.133-.109-.223-.203-.266-.093-.04-.304-.078-.625-.11a13.44 13.44 0 0 0-1.484-.062c-.594 0-1.043.012-1.344.031zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ht"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.234-8.375.172.11c-.043.386-.07.85-.078 1.39l.844-.766c.226-.218.379-.351.453-.406.082-.062.266-.133.547-.219.281-.082.578-.125.89-.125.583 0 1.094.149 1.532.438.437.281.758.68.968 1.187.79-.75 1.254-1.16 1.391-1.234.133-.082.344-.164.625-.25.29-.094.578-.14.86-.14.468 0 .894.105 1.28.312.384.2.692.46.923.781.226.313.359.656.39 1.031.04.375.063.891.063 1.547v.938c0 .094.02.824.062 2.187.008.555.067.883.172.985.113.105.477.156 1.094.156l.062.078V0l-.062.078A24.663 24.663 0 0 0 13.906 0c-.148 0-.574.023-1.281.078l-.11-.11c.07-.757.11-1.75.11-2.968v-1.063c0-.925-.047-1.578-.14-1.953a1.496 1.496 0 0 0-.61-.906c-.313-.238-.695-.36-1.14-.36-.325 0-.622.063-.891.188a2.309 2.309 0 0 0-.75.563c-.219.25-.34.484-.36.703-.023.21-.03.601-.03 1.172v1.093c0 .262.007.747.03 1.454.02.71.04 1.125.063 1.25.031.117.07.199.125.25a.642.642 0 0 0 .203.093c.07.012.39.032.953.063l.078.078v.36l-.078.093a28.22 28.22 0 0 0-4.219 0l-.078-.094v-.359l.078-.078c.563-.031.88-.05.954-.063A.418.418 0 0 0 7-.625a.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.03-.644.046-1.132.046-1.468v-1c0-.657-.046-1.16-.14-1.516a1.61 1.61 0 0 0-.578-.906c-.305-.25-.68-.375-1.125-.375a2.3 2.3 0 0 0-.97.203 2.218 2.218 0 0 0-.718.516c-.18.199-.289.386-.328.562-.043.18-.063.559-.063 1.14v1.298c0 .261.008.746.032 1.453.02.71.039 1.125.062 1.25.031.117.07.199.125.25a.642.642 0 0 0 .203.093c.07.012.383.032.938.063l.078.078v.36l-.063.093a28.403 28.403 0 0 0-4.234 0L.375-.016v-.359l.078-.078c.57-.031.895-.05.969-.063a.418.418 0 0 0 .187-.109.498.498 0 0 0 .125-.266c.02-.113.04-.488.063-1.125.031-.644.047-1.132.047-1.468V-5.22c0-.226-.016-.547-.047-.953a7.738 7.738 0 0 0-.063-.75.262.262 0 0 0-.125-.203c-.074-.04-.226-.063-.453-.063l-.75-.015-.078-.063v-.375l.078-.078c1.114-.133 2.055-.351 2.828-.656zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ha"},Dh.createElement("path",{style:{stroke:"none"},d:"m.297-10.984.062-.063c1.29.043 2.036.063 2.235.063.176 0 .922-.02 2.234-.063l.063.063v.39l-.063.047A13.33 13.33 0 0 0 4-10.5c-.2.023-.344.063-.438.125-.085.055-.14.188-.171.406-.024.211-.032.5-.032.875l-.015 1.797v3.453c0 .867.004 1.469.015 1.813l.032 1.344h1.593c1.27 0 2.063-.016 2.375-.047.32-.032.63-.102.922-.22.051-.132.13-.437.235-.905.113-.47.171-.739.171-.813l.079-.062h.375l.062.062c-.043.211-.09.617-.14 1.219A20.766 20.766 0 0 0 9 0l-.063.063C7.946.03 6.649.015 5.047.015L2.766 0C2.242 0 1.71.02 1.172.063L1.109 0v-.266l.063-.078c.32-.164.5-.265.531-.297.031-.039.063-.379.094-1.015.031-.633.047-1.399.047-2.297v-3.344l-.016-1.531c0-.594-.016-.973-.047-1.14-.023-.177-.058-.29-.11-.345-.042-.062-.136-.109-.28-.14-.137-.04-.48-.07-1.032-.094l-.062-.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hb"},Dh.createElement("path",{style:{stroke:"none"},d:"M2.25-10.938c.25 0 .457.09.625.266a.814.814 0 0 1 .266.61.85.85 0 0 1-.266.624.845.845 0 0 1-.625.25.87.87 0 0 1-.625-.25.839.839 0 0 1-.25-.624c0-.239.082-.442.25-.61a.854.854 0 0 1 .625-.265zm.672 3.485.14.11a34.044 34.044 0 0 0-.078 2.593v1.766c0 .117.008.484.032 1.109.02.625.039.992.062 1.094a.5.5 0 0 0 .094.234c.05.043.11.07.172.078.07.012.36.031.86.063l.062.062v.328l-.063.079a28.346 28.346 0 0 0-3.75 0l-.078-.08v-.328l.078-.062c.5-.031.781-.051.844-.063.07-.02.129-.05.172-.094a.469.469 0 0 0 .11-.234c.019-.101.038-.437.062-1 .02-.57.03-1.004.03-1.297V-4.64c0-.207-.01-.488-.03-.843-.024-.364-.04-.586-.047-.672a.21.21 0 0 0-.125-.172c-.063-.04-.2-.063-.407-.063l-.656-.015-.062-.063v-.328l.062-.062c.989-.125 1.828-.32 2.516-.594zM2.312.469zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hc"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.875-7.453.156.11C3-7 2.977-6.587 2.97-6.11l.734-.688c.207-.187.344-.305.406-.36.07-.062.235-.128.485-.202.25-.07.515-.11.797-.11a2.4 2.4 0 0 1 1.359.39c.395.263.688.618.875 1.063.695-.664 1.102-1.035 1.219-1.109a2.86 2.86 0 0 1 .562-.219c.258-.07.516-.11.766-.11.414 0 .797.09 1.14.266.344.18.614.415.813.704.207.28.328.59.36.921.03.336.046.793.046 1.375v.813c0 .094.016.746.047 1.953.008.492.063.781.156.875.102.094.426.14.97.14l.062.063V0l-.063.063A24.265 24.265 0 0 0 12.36 0c-.125 0-.5.02-1.125.063l-.109-.094c.07-.676.11-1.555.11-2.64v-.938c0-.832-.044-1.41-.126-1.735a1.346 1.346 0 0 0-.546-.812 1.607 1.607 0 0 0-1.016-.328 1.91 1.91 0 0 0-.797.171 2.13 2.13 0 0 0-.656.5c-.2.22-.309.43-.328.625-.024.188-.032.54-.032 1.047v.97c0 .23.008.663.032 1.296.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328L8.97.063A28.988 28.988 0 0 0 7.079 0c-.556 0-1.18.02-1.876.063l-.062-.079v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .03-.57.046-1.004.046-1.297v-.89c0-.594-.042-1.047-.125-1.36a1.54 1.54 0 0 0-.53-.812c-.262-.219-.59-.328-.985-.328-.313 0-.602.062-.86.187a2.111 2.111 0 0 0-.64.453c-.156.18-.258.344-.297.5-.043.157-.063.496-.063 1.016v1.156c0 .23.008.664.032 1.297.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328l-.062.079a28.7 28.7 0 0 0-3.766 0l-.062-.08v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .031-.57.047-1.004.047-1.297V-4.64c0-.207-.012-.488-.032-.843a6.31 6.31 0 0 0-.062-.672.21.21 0 0 0-.125-.172c-.063-.04-.195-.063-.39-.063l-.657-.015-.078-.063v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hd"},Dh.createElement("path",{style:{stroke:"none"},d:"M.36-6.14v-.204l.062-.078c.488-.176.883-.344 1.187-.5 0-1.363-.015-2.156-.046-2.375.53-.187.968-.39 1.312-.61l.188.157c-.055.336-.118 1.29-.188 2.86.258.011.54.015.844.015.613 0 1.054-.016 1.328-.047l.047.047-.14.656-.063.078c-.274-.007-.57-.015-.891-.015-.293 0-.668.008-1.125.015l-.047 3.172c0 .742.016 1.227.047 1.453.04.22.133.399.281.532.156.125.383.187.688.187.351 0 .676-.094.969-.281L5-.797c-.125.094-.422.356-.89.781a1.876 1.876 0 0 1-.829.204c-1.18 0-1.765-.57-1.765-1.72 0-.413.007-.769.03-1.062a2.78 2.78 0 0 0 .016-.265v-3.25h-.328c-.23 0-.496.011-.796.03zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"he"},Dh.createElement("path",{style:{stroke:"none"},d:"m6.906-1.156-.25.562c-.543.356-1.027.586-1.453.688A4.84 4.84 0 0 1 4.078.25a4.521 4.521 0 0 1-1.781-.36C1.734-.36 1.273-.772.922-1.36.578-1.94.406-2.644.406-3.468a5 5 0 0 1 .203-1.484c.133-.438.274-.758.422-.969.145-.219.395-.457.75-.719a4.97 4.97 0 0 1 1.125-.625c.395-.156.82-.234 1.281-.234.625 0 1.176.148 1.657.438.476.292.812.667 1 1.125A3.724 3.724 0 0 1 7.109-4l-.078.078c-.355.086-.836.14-1.437.172-.594.023-.992.031-1.188.031h-2.5c.008 1.074.282 1.867.813 2.375.531.512 1.18.766 1.953.766.363 0 .71-.063 1.047-.188A7.083 7.083 0 0 0 6.78-1.28zm-5-3.188c.094.012.453.028 1.078.047a38.54 38.54 0 0 0 1.391.031c.727 0 1.172-.007 1.328-.03v-.298c0-.8-.168-1.398-.5-1.797-.324-.394-.766-.593-1.328-.593-.625 0-1.11.226-1.453.671-.344.438-.516 1.094-.516 1.97zm2.172-3.593zM3.984.469zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hf"},Dh.createElement("path",{style:{stroke:"none"},d:"M5.266-10.594v-.328L5.328-11c.988-.113 1.828-.305 2.516-.578l.14.094c-.054.605-.078 1.808-.078 3.609v5.11c0 .53.004.995.016 1.39.02.387.05.617.094.688A.58.58 0 0 0 8.25-.5c.113.043.422.086.922.125l.062.063v.296l-.062.079c-.563-.032-1-.047-1.313-.047-.28 0-.683.015-1.203.046L6.563-.03c.019-.508.03-.864.03-1.063v-.297c-.28.211-.57.438-.859.688a18.97 18.97 0 0 1-.828.719c-.242.113-.578.171-1.015.171-.72 0-1.336-.18-1.844-.53a2.96 2.96 0 0 1-1.078-1.36A4.677 4.677 0 0 1 .656-3.39c0-.593.11-1.16.328-1.703.227-.539.547-.937.954-1.187.406-.25.847-.508 1.328-.782.488-.269.968-.406 1.437-.406a3.82 3.82 0 0 1 1.89.5l-.03-1.75a22.84 22.84 0 0 0-.047-1.25c-.024-.238-.047-.379-.079-.422a.278.278 0 0 0-.156-.109c-.074-.02-.39-.031-.953-.031zM6.594-5.64a3.412 3.412 0 0 0-1.078-.828 2.581 2.581 0 0 0-1.172-.297c-.438 0-.852.121-1.235.36-.375.242-.648.593-.812 1.062-.168.461-.25.965-.25 1.516 0 .906.226 1.637.687 2.187.47.555 1.051.829 1.75.829a1.97 1.97 0 0 0 1-.25c.301-.176.547-.41.735-.704.187-.3.297-.597.328-.89.031-.301.047-.848.047-1.64zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hh"},Dh.createElement("path",{style:{stroke:"none"},d:"M.469-11.047c1.312.043 2.144.063 2.5.063.488 0 1.039-.008 1.656-.032.645-.02 1.04-.03 1.188-.03.726 0 1.332.077 1.812.233.477.149.875.422 1.188.829.312.398.468.875.468 1.437 0 .469-.11.922-.328 1.36a3.317 3.317 0 0 1-.922 1.125 3.863 3.863 0 0 1-1.187.656 3.812 3.812 0 0 1-1.25.203 5.86 5.86 0 0 1-1.078-.11l-.125-.484.062-.078c.395.094.711.14.953.14.688 0 1.235-.222 1.64-.671.415-.457.626-1.035.626-1.735 0-.707-.215-1.27-.64-1.687-.43-.426-1.079-.64-1.954-.64-.469 0-.992.09-1.562.265-.043.398-.063 1.367-.063 2.906v5.14c.008.587.024.966.047 1.141.031.168.066.282.11.344.05.055.144.102.28.14.145.044.493.075 1.047.095L5-.392V0l-.063.063A137.057 137.057 0 0 0 2.704 0C2.523 0 1.781.02.47.063L.406 0v-.39L.47-.438c.476-.02.797-.047.953-.079.164-.03.273-.07.328-.125.063-.05.11-.156.14-.312.032-.164.051-.524.063-1.078v-5.266l-.016-1.531c0-.594-.015-.973-.046-1.14-.024-.177-.059-.29-.11-.345-.043-.062-.136-.109-.281-.14-.137-.04-.48-.07-1.031-.094l-.063-.047v-.39zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hi"},Dh.createElement("path",{style:{stroke:"none"},d:"M.531-3.578c0-.625.125-1.223.375-1.797.258-.57.707-1.066 1.344-1.484.633-.426 1.383-.641 2.25-.641 1.094 0 1.984.352 2.672 1.047.687.687 1.031 1.574 1.031 2.656 0 1.188-.398 2.172-1.187 2.953C6.234-.07 5.286.312 4.172.312c-.73 0-1.383-.199-1.953-.593-.574-.395-1-.875-1.281-1.438a4.246 4.246 0 0 1-.407-1.86zm1.485-.547c0 .73.093 1.387.28 1.969.188.574.485 1.039.892 1.39.406.344.867.516 1.39.516.613 0 1.117-.242 1.516-.734.406-.489.61-1.223.61-2.204 0-1.101-.22-2.007-.657-2.718-.438-.707-1.063-1.063-1.875-1.063-.68 0-1.211.246-1.594.735-.375.492-.562 1.195-.562 2.109zm2.359-3.813zM4.265.47zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hj"},Dh.createElement("path",{style:{stroke:"none"},d:"M.797-2.297h.328l.078.063c.008.437.035.812.078 1.125.157.25.43.453.828.609a3.32 3.32 0 0 0 1.172.219c.551 0 .992-.145 1.328-.438.332-.3.5-.656.5-1.062a.901.901 0 0 0-.187-.578c-.117-.164-.297-.301-.547-.407-.242-.113-.672-.242-1.297-.39a28.32 28.32 0 0 1-1.125-.281 1.827 1.827 0 0 1-.61-.36 1.561 1.561 0 0 1-.452-.61 2.063 2.063 0 0 1-.157-.812c0-.695.274-1.254.829-1.672.55-.414 1.242-.625 2.078-.625.343 0 .718.047 1.125.141.414.094.734.188.953.281l.062.11c-.043.21-.07.757-.078 1.64l-.062.063h-.313l-.078-.063c-.023-.32-.055-.547-.094-.672-.031-.125-.125-.257-.281-.406-.148-.156-.36-.281-.64-.375a2.446 2.446 0 0 0-.86-.156c-.324 0-.594.047-.813.14-.21.094-.382.235-.515.422a1.137 1.137 0 0 0-.203.688c0 .2.039.375.125.531.082.156.207.29.375.39.164.095.336.165.515.204l.86.219c.726.18 1.25.336 1.562.468.313.125.551.32.719.579.176.261.266.578.266.953 0 .718-.297 1.34-.891 1.859-.594.52-1.355.781-2.281.781-.336 0-.746-.039-1.235-.11A10.717 10.717 0 0 1 .625-.078L.578-.186l.078-.516c.031-.164.047-.328.047-.485.008-.164.016-.515.016-1.046zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hk"},Dh.createElement("path",{style:{stroke:"none"},d:"m2.672-7.453.156.11a18.16 18.16 0 0 0-.062 1.374c.414-.343.812-.691 1.187-1.047.102-.101.203-.175.297-.218a2.61 2.61 0 0 1 .484-.157 2.867 2.867 0 0 1 1.844.172c.375.157.656.352.844.578.187.22.316.48.39.782.07.304.11.671.11 1.109v1.375c0 .094.016.746.047 1.953.008.492.062.781.156.875.102.094.426.14.969.14l.062.063V0l-.062.063A24.265 24.265 0 0 0 7.75 0c-.137 0-.516.02-1.14.063l-.094-.094c.07-.676.109-1.555.109-2.64v-1.032c0-.613-.016-1.055-.047-1.328a1.665 1.665 0 0 0-.266-.735 1.526 1.526 0 0 0-.593-.515 1.847 1.847 0 0 0-.86-.188c-.273 0-.507.032-.703.094a2.319 2.319 0 0 0-.64.328 2.202 2.202 0 0 0-.532.484 1.1 1.1 0 0 0-.218.407c-.024.125-.032.398-.032.812v1.36c0 .117.008.484.032 1.109.02.625.039.992.062 1.094a.656.656 0 0 0 .11.234c.05.043.109.07.171.078.07.012.352.031.844.063l.078.062v.328L3.97.063a28.7 28.7 0 0 0-3.766 0l-.063-.08v-.328l.062-.062c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .03-.57.046-1.004.046-1.297V-4.64c0-.207-.011-.488-.03-.843a6.31 6.31 0 0 0-.063-.672.21.21 0 0 0-.125-.172c-.063-.04-.196-.063-.39-.063l-.657-.015-.078-.063v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hl"},Dh.createElement("path",{style:{stroke:"none"},d:"m4.5-.406.063.062v.328L4.5.063c-.156 0-.46-.012-.906-.032A22.073 22.073 0 0 0 2.328 0C1.766 0 1.141.02.453.063l-.062-.08v-.328l.062-.062c.5-.031.781-.051.844-.063.07-.02.129-.05.172-.094a.469.469 0 0 0 .11-.234c.019-.101.038-.437.062-1 .02-.57.03-1.004.03-1.297V-6.11l-1 .046-.077-.062v-.188l.062-.078 1.016-.53v-.47c0-.52.02-.91.062-1.171.051-.27.141-.52.266-.75.133-.227.36-.516.672-.86.32-.344.601-.625.844-.844.238-.226.445-.379.625-.453.175-.07.382-.11.625-.11.195 0 .41.04.64.11l-.015 1.281-.172.079a1.498 1.498 0 0 0-1.016-.391c-.273 0-.508.059-.703.172-.2.105-.336.289-.406.547-.074.25-.11.668-.11 1.25v1.61h.829c.437 0 .847-.016 1.234-.048l.062.094-.14.688-.063.078c-.156-.008-.261-.016-.312-.016h-1.61v3.14c0 .169.008.555.032 1.157.02.594.039.945.062 1.047.02.105.055.183.11.234.05.043.128.074.234.094.113.023.473.039 1.078.047zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hm"},Dh.createElement("path",{style:{stroke:"none"},d:"m3.688.156-.72-3.265-1.5-6.438c-.124-.508-.257-.789-.39-.844-.125-.062-.402-.117-.828-.171l-.063-.063v-.344l.063-.078c.75.043 1.41.063 1.984.063.438 0 1.067-.02 1.891-.063l.078.078v.344l-.062.063c-.586.023-.934.054-1.047.093-.117.031-.172.117-.172.25 0 .106.05.45.156 1.031.102.586.195 1.06.281 1.422l1.22 5.407 1.937-4.797c.5-1.27.992-2.602 1.484-4h.5a88.673 88.673 0 0 0 1.297 3.812l1.828 5.094 1.328-4.672c.133-.488.3-1.129.5-1.922.195-.8.297-1.265.297-1.39 0-.133-.07-.22-.203-.25-.125-.04-.496-.067-1.11-.079l-.062-.078v-.343l.063-.063a49.08 49.08 0 0 0 1.593.063c.164 0 .707-.02 1.625-.063l.063.063v.359l-.063.047c-.293.012-.492.043-.594.094a.648.648 0 0 0-.25.203c-.074.086-.18.351-.312.797l-.453 1.453-.813 2.625a76.271 76.271 0 0 0-.625 2.312l-.875 3.25h-.796a166.885 166.885 0 0 0-1.344-3.89L7.813-8.547l-1.547 3.86L5.422-2.5c-.219.574-.39 1.043-.516 1.406L4.47.156zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"hn"},Dh.createElement("path",{style:{stroke:"none"},d:"m3-7.453.156.11c-.031.304-.058.84-.078 1.609l.594-.75c.187-.239.351-.426.5-.563a1.765 1.765 0 0 1 1.14-.422 1.5 1.5 0 0 1 .641.14l.063.11a17.39 17.39 0 0 0-.141 1.828h-.36c-.21-.476-.542-.718-1-.718-.324 0-.605.105-.843.312a1.52 1.52 0 0 0-.485.781c-.085.305-.124.696-.124 1.172v.86c0 .156.007.543.03 1.156.02.605.04.953.063 1.047a.67.67 0 0 0 .11.219c.05.042.117.074.203.093.082.012.453.031 1.11.063l.077.062v.328l-.078.079A34.98 34.98 0 0 0 2.406 0 28.7 28.7 0 0 0 .531.063L.47-.017v-.328l.06-.061c.508-.031.797-.051.86-.063a.53.53 0 0 0 .171-.094.382.382 0 0 0 .094-.234c.02-.101.04-.437.063-1 .031-.57.047-1.004.047-1.297V-4.64c0-.207-.012-.488-.032-.843a6.31 6.31 0 0 0-.062-.672.21.21 0 0 0-.125-.172c-.063-.04-.195-.063-.39-.063L.5-6.406.422-6.47v-.328l.062-.062c1-.125 1.836-.32 2.516-.594zm0 0"})),Dh.createElement("symbol",{overflow:"visible",id:"ho"},Dh.createElement("path",{style:{stroke:"none"},d:"m8.625-6.906.063.14c-.22.325-.356.54-.407.641H6.828c.145.281.219.578.219.89 0 .376-.086.743-.25 1.094a2.67 2.67 0 0 1-.703.891 3.642 3.642 0 0 1-2.344.797h-.36c-.304.242-.5.422-.593.547a.591.591 0 0 0-.125.36c0 .23.101.39.312.484.207.093.645.14 1.313.14l1.75-.015c.55 0 .973.07 1.266.203.289.125.523.359.703.703.187.332.28.687.28 1.062 0 .57-.187 1.14-.562 1.703-.367.57-.902 1.004-1.609 1.297-.7.301-1.45.453-2.25.453-.45 0-.875-.054-1.281-.156a3.288 3.288 0 0 1-1.047-.437 2.392 2.392 0 0 1-.719-.782 2.066 2.066 0 0 1-.265-1.015c0-.188.023-.39.078-.61.062-.21.171-.433.328-.671L2.39.015c-.46-.145-.745-.285-.86-.421a.728.728 0 0 1-.172-.5c0-.196.063-.43.188-.703l1.266-.907c-.743-.187-1.243-.472-1.5-.859a2.192 2.192 0 0 1-.391-1.266c0-.425.086-.828.265-1.203a2.22 2.22 0 0 1 .829-.922c.375-.226.785-.41 1.234-.546a4.539 4.539 0 0 1 1.25-.204c.656 0 1.273.215 1.86.641.945 0 1.702-.008 2.265-.031zm-6.36 1.812c0 .313.063.653.188 1.016.125.367.328.64.61.828.28.188.593.281.937.281a1.72 1.72 0 0 0 1.203-.453c.332-.3.5-.77.5-1.406a2.41 2.41 0 0 0-.469-1.453c-.304-.438-.734-.657-1.296-.657-.47 0-.868.157-1.188.47-.324.304-.484.761-.484 1.374zM4.563.156c-.843 0-1.328.008-1.453.032-.125.019-.308.109-.546.265a1.938 1.938 0 0 0-.579.625c-.148.27-.218.57-.218.906 0 .594.218 1.07.656 1.438.437.375 1.02.562 1.75.562.55 0 1.055-.117 1.516-.343.468-.23.812-.54 1.03-.922.22-.387.329-.758.329-1.11 0-.355-.094-.664-.281-.921a1.076 1.076 0 0 0-.72-.454C5.755.18 5.259.156 4.563.156zm0 0"}))),sn||(sn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 133.946 177.366)"})),En||(En=Dh.createElement("use",{xlinkHref:"#a",x:129.446,y:161.466})),vn||(vn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 176.546 177.366)"})),fn||(fn=Dh.createElement("use",{xlinkHref:"#b",x:171.946,y:161.466})),un||(un=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 219.046 177.366)"})),yn||(yn=Dh.createElement("use",{xlinkHref:"#c",x:214.546,y:161.466})),zn||(zn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 261.546 177.366)"})),kn||(kn=Dh.createElement("use",{xlinkHref:"#d",x:257.046,y:161.466})),Pn||(Pn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.3V45.4h42.602V0zm0 0",transform:"matrix(1 0 0 -1 304.046 177.366)"})),bn||(bn=Dh.createElement("use",{xlinkHref:"#e",x:299.546,y:161.466})),Mn||(Mn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.198V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 346.546 177.366)"})),gn||(gn=Dh.createElement("use",{xlinkHref:"#f",x:342.046,y:161.466})),xn||(xn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M0-.001h-21.198V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 389.046 177.366)"})),Rn||(Rn=Dh.createElement("use",{xlinkHref:"#g",x:384.546,y:161.466})),Hn||(Hn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 431.646 177.366)"})),On||(On=Dh.createElement("use",{xlinkHref:"#h",x:427.146,y:161.466})),Nn||(Nn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 474.146 177.366)"})),Vn||(Vn=Dh.createElement("use",{xlinkHref:"#i",x:469.646,y:161.466})),wn||(wn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.297V45.4h42.597V0zm0 0",transform:"matrix(1 0 0 -1 516.646 177.366)"})),Ln||(Ln=Dh.createElement("use",{xlinkHref:"#j",x:512.146,y:161.466})),Cn||(Cn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 559.146 177.366)"})),An||(An=Dh.createElement("use",{xlinkHref:"#b",x:550.146,y:161.466})),Fn||(Fn=Dh.createElement("use",{xlinkHref:"#a",x:559.236,y:161.466})),jn||(jn=Dh.createElement("path",{className:"gbox sblack","data-tcolor":"sblack",d:"M-.001-.001h-21.2V45.4h42.5V0zm0 0",transform:"matrix(1 0 0 -1 601.646 177.366)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Tn||(Tn=Dh.createElement("use",{xlinkHref:"#b",x:592.746,y:161.466})),In||(In=Dh.createElement("use",{xlinkHref:"#b",x:601.746,y:161.466}))),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#ddd",fillOpacity:1,strokeWidth:.12,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#ddd",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0c4.2 0 50.602 20.4 50.602 26.602 0 6.2-6.5 6.2-10.703 6.2C39.899 30.2-1.601 19.5 0 0zm0 0",transform:"matrix(1 0 0 -1 76.246 78.766)"}),Dh.createElement("g",{clipPath:"url(#k)"},Dh.createElement("g",{clipPath:"url(#l)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m19.246 77.066.102-49h5.398l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#m)"},Dh.createElement("g",{clipPath:"url(#n)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m24.645 77.066.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#o)"},Dh.createElement("g",{clipPath:"url(#p)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"m25.645 77.066.101-49h.899l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#q)"},Dh.createElement("g",{clipPath:"url(#r)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"m26.547 77.066.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#s)"},Dh.createElement("g",{clipPath:"url(#t)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"m27.547 77.066.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#u)"},Dh.createElement("g",{clipPath:"url(#v)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"m28.547 77.066.098-49h1l-.2 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#w)"},Dh.createElement("g",{clipPath:"url(#x)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m29.445 77.066.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#y)"},Dh.createElement("g",{clipPath:"url(#z)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"m30.445 77.066.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#A)"},Dh.createElement("g",{clipPath:"url(#B)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"m31.445 77.066.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#C)"},Dh.createElement("g",{clipPath:"url(#D)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"m32.445 77.066.102-49h.898l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#E)"},Dh.createElement("g",{clipPath:"url(#F)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"m33.348 77.066.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#G)"},Dh.createElement("g",{clipPath:"url(#H)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"m34.348 77.066.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#I)"},Dh.createElement("g",{clipPath:"url(#J)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"m35.348 77.066.097-49h1l-.199 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#K)"},Dh.createElement("g",{clipPath:"url(#L)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"m36.246 77.066.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#M)"},Dh.createElement("g",{clipPath:"url(#N)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"m37.246 77.066.102-49h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#O)"},Dh.createElement("g",{clipPath:"url(#P)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"m38.246 77.164.102-49.098h1l-.203 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#Q)"},Dh.createElement("g",{clipPath:"url(#R)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"m39.145 77.164.203-49.098h.898l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#S)"},Dh.createElement("g",{clipPath:"url(#T)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"m40.145 77.164.101-49.098h1l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#U)"},Dh.createElement("g",{clipPath:"url(#V)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"m41.145 77.164.101-49.098h1l-.101 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#W)"},Dh.createElement("g",{clipPath:"url(#X)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"m42.145 77.164.101-49.098h.899l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#Y)"},Dh.createElement("g",{clipPath:"url(#Z)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"m43.047 77.164.098-49.098h1l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aa)"},Dh.createElement("g",{clipPath:"url(#ab)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"m44.047 77.164.098-49.098h1l-.098 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ac)"},Dh.createElement("g",{clipPath:"url(#ad)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"m45.047 77.164.098-49.098h1l-.2 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ae)"},Dh.createElement("g",{clipPath:"url(#af)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"m45.945 77.164.2-49.098h.902l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ag)"},Dh.createElement("g",{clipPath:"url(#ah)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"m46.945 77.164.102-49.098h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ai)"},Dh.createElement("g",{clipPath:"url(#aj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"m47.945 77.164.102-49.098h1l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ak)"},Dh.createElement("g",{clipPath:"url(#al)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"m48.945 77.164.102-49.098h.898l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#am)"},Dh.createElement("g",{clipPath:"url(#an)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"m49.848 77.164.097-49.098h1l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ao)"},Dh.createElement("g",{clipPath:"url(#ap)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"m50.848 77.164.097-49.098h1l-.097 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aq)"},Dh.createElement("g",{clipPath:"url(#ar)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"m51.848 77.164.097-49.098h1l-.199 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#as)"},Dh.createElement("g",{clipPath:"url(#at)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"m52.746 77.164.2-49.098h.902l-.102 49.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#au)"},Dh.createElement("g",{clipPath:"url(#av)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"m53.746 77.164.102-49.098 1 .098-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aw)"},Dh.createElement("g",{clipPath:"url(#ax)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"m54.746 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ay)"},Dh.createElement("g",{clipPath:"url(#az)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"m55.746 77.164.102-49h.898l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aA)"},Dh.createElement("g",{clipPath:"url(#aB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"m56.645 77.164.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aC)"},Dh.createElement("g",{clipPath:"url(#aD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"m57.645 77.164.101-49h1l-.101 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aE)"},Dh.createElement("g",{clipPath:"url(#aF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"m58.645 77.164.101-49h1l-.2 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aG)"},Dh.createElement("g",{clipPath:"url(#aH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"m59.547 77.164.2-49h.898l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aI)"},Dh.createElement("g",{clipPath:"url(#aJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"m60.547 77.164.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aK)"},Dh.createElement("g",{clipPath:"url(#aL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"m61.547 77.164.098-49h1l-.098 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aM)"},Dh.createElement("g",{clipPath:"url(#aN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"m62.547 77.164.098-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aO)"},Dh.createElement("g",{clipPath:"url(#aP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"m63.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aQ)"},Dh.createElement("g",{clipPath:"url(#aR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"m64.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aS)"},Dh.createElement("g",{clipPath:"url(#aT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"m65.445 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aU)"},Dh.createElement("g",{clipPath:"url(#aV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"m66.445 77.164.102-49h.898l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aW)"},Dh.createElement("g",{clipPath:"url(#aX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"m67.348 77.164.097-49h1l-.097 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#aY)"},Dh.createElement("g",{clipPath:"url(#aZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"m68.348 77.164.097-49h1l-.199 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ba)"},Dh.createElement("g",{clipPath:"url(#bb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"m69.246 77.164.2-49h.902l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bc)"},Dh.createElement("g",{clipPath:"url(#bd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"m70.246 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#be)"},Dh.createElement("g",{clipPath:"url(#bf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"m71.246 77.164.102-49h1l-.102 49zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bg)"},Dh.createElement("g",{clipPath:"url(#bh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m72.246 77.164.102-49h1l-.102 49zm0 0"}))),Wn||(Wn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v17.8l53.699-31.1V-31zm0 0",transform:"matrix(1 0 0 -1 19.446 45.966)"})),Dh.createElement("g",{clipPath:"url(#bi)"},Dh.createElement("g",{clipPath:"url(#bj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M73.145 32.664h46.101v44.402H73.145zm-8.797-9.297h45.199v45.098h-45.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bk)"},Dh.createElement("g",{clipPath:"url(#bl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"M64.348 23.367h45.199v45.098h-45.2zm.398.399h44.3v44.3h-44.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M64.746 23.766h44.3v44.3h-44.3zm.5.5h43.399v43.3H65.246zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bm)"},Dh.createElement("g",{clipPath:"url(#bn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"M65.246 24.266h43.399v43.3H65.246zm.5.5h42.399v42.398H65.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M65.746 24.766h42.399v42.398H65.746zm.399.398h41.5v41.5h-41.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bo)"},Dh.createElement("g",{clipPath:"url(#bp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"M66.145 25.164h41.5v41.5h-41.5zm.5.5h40.601v40.5H66.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M66.645 25.664h40.601v40.5H66.645zm.402.402h39.7v39.7h-39.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bq)"},Dh.createElement("g",{clipPath:"url(#br)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"M67.047 26.066h39.7v39.7h-39.7zm.5.5h38.7v38.7h-38.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M67.547 26.566h38.7v38.7h-38.7zm.5.399h37.8v37.902h-37.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bs)"},Dh.createElement("g",{clipPath:"url(#bt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"M68.047 26.965h37.8v37.902h-37.8zm.398.5h36.903v36.902H68.445zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M68.445 27.465h36.903v36.902H68.445zm.5.5h35.903v35.902H68.945zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bu)"},Dh.createElement("g",{clipPath:"url(#bv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M68.945 27.965h35.903v35.902H68.945zm.5.402h35v35.098h-35zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"M69.445 28.367h35v35.098h-35zm.403.5h34.097v34.098H69.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bw)"},Dh.createElement("g",{clipPath:"url(#bx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M69.848 28.867h34.097v34.098H69.848zm.5.399h33.199v33.3h-33.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"M70.348 29.266h33.199v33.3h-33.2zm.398.5h32.3v32.3h-32.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M70.746 29.766h32.3v32.3h-32.3zm.5.5h31.399v31.3H71.246zm0 0"}))),Dh.createElement("g",{clipPath:"url(#by)"},Dh.createElement("g",{clipPath:"url(#bz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M71.246 30.266h31.399v31.3H71.246zm.5.398h30.399v30.5H71.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M71.746 30.664h30.399v30.5H71.746zm.399.5h29.5v29.5h-29.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bA)"},Dh.createElement("g",{clipPath:"url(#bB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"M72.145 31.164h29.5v29.5h-29.5zm.5.5h28.601v28.5H72.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M72.645 31.664h28.601v28.5H72.645zm.402.402h27.7v27.7h-27.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bC)"},Dh.createElement("g",{clipPath:"url(#bD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"M73.047 32.066h27.7v27.7h-27.7zm.5.5h26.8v26.7h-26.8zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M73.547 32.566h26.8v26.7h-26.8zm.5.5h25.8v25.801h-25.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bE)"},Dh.createElement("g",{clipPath:"url(#bF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M74.047 33.066h25.8v25.801h-25.8zm.398.399h24.903v24.902H74.445zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M74.445 33.465h24.903v24.902H74.445zm.5.5h24v23.902h-24zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bG)"},Dh.createElement("g",{clipPath:"url(#bH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"M74.945 33.965h24v23.902h-24zm.5.402h23v23.098h-23zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bI)"},Dh.createElement("g",{clipPath:"url(#bJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"M75.445 34.367h23v23.098h-23zm.403.5h22.097v22.098H75.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bK)"},Dh.createElement("g",{clipPath:"url(#bL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M75.848 34.867h22.097v22.098H75.848zm.5.5h21.199v21.2h-21.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bM)"},Dh.createElement("g",{clipPath:"url(#bN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M76.348 35.367h21.199v21.2h-21.2zm.398.399h20.3v20.3h-20.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M76.746 35.766h20.3v20.3h-20.3zm.5.5h19.3v19.3h-19.3zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bO)"},Dh.createElement("g",{clipPath:"url(#bP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"M77.246 36.266h19.3v19.3h-19.3zm.5.398h18.399v18.5H77.746zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M77.746 36.664h18.399v18.5H77.746zm.399.5h17.5v17.5h-17.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bQ)"},Dh.createElement("g",{clipPath:"url(#bR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"M78.145 37.164h17.5v17.5h-17.5zm.5.402h16.601v16.7H78.645zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M78.645 37.566h16.601v16.7H78.645zm.5.5h15.601v15.7H79.145zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bS)"},Dh.createElement("g",{clipPath:"url(#bT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M79.145 38.066h15.601v15.7H79.145zm.402.5h14.7v14.7h-14.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M79.547 38.566h14.7v14.7h-14.7zm.5.399h13.8v13.902h-13.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bU)"},Dh.createElement("g",{clipPath:"url(#bV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"M80.047 38.965h13.8v13.902h-13.8zm.398.5h12.903v12.902H80.445zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bW)"},Dh.createElement("g",{clipPath:"url(#bX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M80.445 39.465h12.903v12.902H80.445zm.5.5h12v11.902h-12zm0 0"}))),Dh.createElement("g",{clipPath:"url(#bY)"},Dh.createElement("g",{clipPath:"url(#bZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"M80.945 39.965h12v11.902h-12zm.403.402h11.097v11.098H81.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ca)"},Dh.createElement("g",{clipPath:"url(#cb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M81.348 40.367h11.097v11.098H81.348zm.5.5h10.097v10.098H81.848zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cc)"},Dh.createElement("g",{clipPath:"url(#cd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M81.848 40.867h10.097v10.098H81.848zm.5.5h9.199v9.098h-9.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ce)"},Dh.createElement("g",{clipPath:"url(#cf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"M82.348 41.367h9.199v9.098h-9.2zm.398.399h8.3v8.3h-8.3zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M82.746 41.766h8.3v8.3h-8.3zm.5.5h7.399v7.3h-7.399zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cg)"},Dh.createElement("g",{clipPath:"url(#ch)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"M83.246 42.266h7.399v7.3h-7.399zm.5.5h6.399v6.398h-6.399zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M83.746 42.766h6.399v6.398h-6.399zm.399.398h5.5v5.5h-5.5zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ci)"},Dh.createElement("g",{clipPath:"url(#cj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M84.145 43.164h5.5v5.5h-5.5zm.5.5h4.601v4.5h-4.601zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M84.645 43.664h4.601v4.5h-4.601zm.402.402h3.7v3.7h-3.7zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ck)"},Dh.createElement("g",{clipPath:"url(#cl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"M85.047 44.066h3.7v3.7h-3.7zm.5.5h2.7v2.7h-2.7zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M85.547 44.566h2.7v2.7h-2.7zm.5.399h1.8v1.902h-1.8zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cm)"},Dh.createElement("g",{clipPath:"url(#cn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"M86.047 44.965h1.8v1.902h-1.8zm.398.5h.903v.902h-.903zm0 0"}))),Dh.createElement("g",{clipPath:"url(#co)"},Dh.createElement("g",{clipPath:"url(#cp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M86.445 45.465h.903v.902h-.903zm0 0"}))),Sn||(Sn=Dh.createElement("path",{className:"clip-1",d:"M-.001.001v17.7L46.1 44.3V26.6zm0 0",transform:"matrix(1 0 0 -1 73.146 76.966)"})),Dh.createElement("g",{clipPath:"url(#cq)"},Dh.createElement("g",{clipPath:"url(#cr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M19.348 1.566h99.898v5.7H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cs)"},Dh.createElement("g",{clipPath:"url(#ct)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M19.348 7.266h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cu)"},Dh.createElement("g",{clipPath:"url(#cv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b4b4b4",fillOpacity:1},d:"M19.348 8.367h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cw)"},Dh.createElement("g",{clipPath:"url(#cx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M19.348 9.367h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cy)"},Dh.createElement("g",{clipPath:"url(#cz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b6b6b6",fillOpacity:1},d:"M19.348 10.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cA)"},Dh.createElement("g",{clipPath:"url(#cB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M19.348 11.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cC)"},Dh.createElement("g",{clipPath:"url(#cD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"M19.348 12.465h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cE)"},Dh.createElement("g",{clipPath:"url(#cF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M19.348 13.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cG)"},Dh.createElement("g",{clipPath:"url(#cH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bababa",fillOpacity:1},d:"M19.348 14.566h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cI)"},Dh.createElement("g",{clipPath:"url(#cJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M19.348 15.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cK)"},Dh.createElement("g",{clipPath:"url(#cL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bcbcbc",fillOpacity:1},d:"M19.348 16.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cM)"},Dh.createElement("g",{clipPath:"url(#cN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M19.348 17.664h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cO)"},Dh.createElement("g",{clipPath:"url(#cP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M19.348 18.766h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cQ)"},Dh.createElement("g",{clipPath:"url(#cR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bfbfbf",fillOpacity:1},d:"M19.348 19.766h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cS)"},Dh.createElement("g",{clipPath:"url(#cT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M19.348 20.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cU)"},Dh.createElement("g",{clipPath:"url(#cV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c1c1c1",fillOpacity:1},d:"M19.348 21.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cW)"},Dh.createElement("g",{clipPath:"url(#cX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M19.348 22.867h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#cY)"},Dh.createElement("g",{clipPath:"url(#cZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M19.348 23.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#da)"},Dh.createElement("g",{clipPath:"url(#db)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M19.348 24.965h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dc)"},Dh.createElement("g",{clipPath:"url(#dd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c5c5c5",fillOpacity:1},d:"M19.348 26.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#de)"},Dh.createElement("g",{clipPath:"url(#df)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M19.348 27.066h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dg)"},Dh.createElement("g",{clipPath:"url(#dh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c7c7c7",fillOpacity:1},d:"M19.348 28.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#di)"},Dh.createElement("g",{clipPath:"url(#dj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M19.348 29.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dk)"},Dh.createElement("g",{clipPath:"url(#dl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M19.348 30.164h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dm)"},Dh.createElement("g",{clipPath:"url(#dn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M19.348 31.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#do)"},Dh.createElement("g",{clipPath:"url(#dp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cbcbcb",fillOpacity:1},d:"M19.348 32.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dq)"},Dh.createElement("g",{clipPath:"url(#dr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ccc",fillOpacity:1},d:"M19.348 33.266h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ds)"},Dh.createElement("g",{clipPath:"url(#dt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M19.348 34.367h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#du)"},Dh.createElement("g",{clipPath:"url(#dv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M19.348 35.367h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dw)"},Dh.createElement("g",{clipPath:"url(#dx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M19.348 36.465h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dy)"},Dh.createElement("g",{clipPath:"url(#dz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d0d0d0",fillOpacity:1},d:"M19.348 37.465h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dA)"},Dh.createElement("g",{clipPath:"url(#dB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M19.348 38.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dC)"},Dh.createElement("g",{clipPath:"url(#dD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d2d2d2",fillOpacity:1},d:"M19.348 39.566h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dE)"},Dh.createElement("g",{clipPath:"url(#dF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M19.348 40.566h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dG)"},Dh.createElement("g",{clipPath:"url(#dH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M19.348 41.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dI)"},Dh.createElement("g",{clipPath:"url(#dJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M19.348 42.664h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dK)"},Dh.createElement("g",{clipPath:"url(#dL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d6d6d6",fillOpacity:1},d:"M19.348 43.664h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dM)"},Dh.createElement("g",{clipPath:"url(#dN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M19.348 44.766h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dO)"},Dh.createElement("g",{clipPath:"url(#dP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d8d8d8",fillOpacity:1},d:"M19.348 45.766h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dQ)"},Dh.createElement("g",{clipPath:"url(#dR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M19.348 46.867h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dS)"},Dh.createElement("g",{clipPath:"url(#dT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M19.348 47.867h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dU)"},Dh.createElement("g",{clipPath:"url(#dV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dbdbdb",fillOpacity:1},d:"M19.348 48.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dW)"},Dh.createElement("g",{clipPath:"url(#dX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M19.348 49.965h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#dY)"},Dh.createElement("g",{clipPath:"url(#dZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#ddd",fillOpacity:1},d:"M19.348 50.965h99.898v1.101H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ea)"},Dh.createElement("g",{clipPath:"url(#eb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M19.348 52.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ec)"},Dh.createElement("g",{clipPath:"url(#ed)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M19.348 53.066h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ee)"},Dh.createElement("g",{clipPath:"url(#ef)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M19.348 54.066h99.898v1.098H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eg)"},Dh.createElement("g",{clipPath:"url(#eh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e1e1e1",fillOpacity:1},d:"M19.348 55.164h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ei)"},Dh.createElement("g",{clipPath:"url(#ej)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M19.348 56.164h99.898v1.102H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ek)"},Dh.createElement("g",{clipPath:"url(#el)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e3e3e3",fillOpacity:1},d:"M19.348 57.266h99.898v1H19.348zm0 0"}))),Dh.createElement("g",{clipPath:"url(#em)"},Dh.createElement("g",{clipPath:"url(#en)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M19.348 58.266h99.898v1.101H19.348zm0 0"}))),Dn||(Dn=Dh.createElement("path",{className:"clip-1",d:"m-.001 0-53.7 31.102 46 26.598L46.1 26.602zm0 0",transform:"matrix(1 0 0 -1 73.146 59.266)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M.002-.001v-10.7",transform:"matrix(1 0 0 -1 37.846 42.366)"}),Zn||(Zn=Dh.createElement("path",{className:"clip-1",d:"m-.001.002-24.598 14.2",transform:"matrix(1 0 0 -1 71.646 65.166)"})),Gn||(Gn=Dh.createElement("path",{className:"clip-1",d:"M0 0v-3.5",transform:"matrix(1 0 0 -1 46.946 47.766)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-3.5m0 3.5-24.5 14.2",transform:"matrix(1 0 0 -1 71.446 61.966)"}),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#39b54a",fillOpacity:1,strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v3.602l3-1.8V-1.8zm0 0",transform:"matrix(1 0 0 -1 40.946 47.766)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .002V-10.6",transform:"matrix(1 0 0 -1 34.746 40.666)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0-.001v-10.7",transform:"matrix(1 0 0 -1 31.746 38.866)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M-.001 0v-10.7",transform:"matrix(1 0 0 -1 28.646 37.066)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0-.001V-10.6",transform:"matrix(1 0 0 -1 25.546 35.366)"}),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#7f7f7f",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v-10.598",transform:"matrix(1 0 0 -1 22.446 33.566)"}),Dh.createElement("g",{clipPath:"url(#eo)"},Dh.createElement("g",{clipPath:"url(#ep)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m16.246 45.965.102-19.598h.297l-.098 19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m16.547 45.965.098-19.598h.3l-.097 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eq)"},Dh.createElement("g",{clipPath:"url(#er)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m16.848 45.965.097-19.598h.2v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#es)"},Dh.createElement("g",{clipPath:"url(#et)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M17.145 45.965V26.367h.3v19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M17.445 45.965V26.367h.301v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eu)"},Dh.createElement("g",{clipPath:"url(#ev)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M17.746 45.965V26.367h.3v19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ew)"},Dh.createElement("g",{clipPath:"url(#ex)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M18.047 45.965V26.367h.3l-.1 19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"m18.246 45.965.102-19.598h.297v19.598zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M18.645 45.965V26.367h.3l-.097 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ey)"},Dh.createElement("g",{clipPath:"url(#ez)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"m18.848 45.965.097-19.598h.301l-.101 19.598zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eA)"},Dh.createElement("g",{clipPath:"url(#eB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m19.145 45.965.101-19.598h.3l-.1 19.598zm0 0"}))),Bn||(Bn=Dh.createElement("path",{className:"clip-1",d:"M.002.002v17.7l3.097-1.7v-17.8zm0 0",transform:"matrix(1 0 0 -1 16.346 44.166)"})),Dh.createElement("g",{clipPath:"url(#eC)"},Dh.createElement("g",{clipPath:"url(#eD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m73.047 78.867.098-19.703h.3l-.097 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"m73.348 78.867.097-19.703h.301l-.101 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b8b8b8",fillOpacity:1},d:"m73.645 78.867.101-19.703h.2v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eE)"},Dh.createElement("g",{clipPath:"url(#eF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bebebe",fillOpacity:1},d:"M73.945 78.867V59.164h.301v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eG)"},Dh.createElement("g",{clipPath:"url(#eH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c3c3c3",fillOpacity:1},d:"M74.246 78.867V59.164h.3v19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c9c9c9",fillOpacity:1},d:"M74.547 78.867V59.164h.3v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eI)"},Dh.createElement("g",{clipPath:"url(#eJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cecece",fillOpacity:1},d:"M74.848 78.867V59.164h.297v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eK)"},Dh.createElement("g",{clipPath:"url(#eL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d4d4d4",fillOpacity:1},d:"M75.145 78.867V59.164h.3v19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d9d9d9",fillOpacity:1},d:"M75.445 78.867V59.164h.301v19.703zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eM)"},Dh.createElement("g",{clipPath:"url(#eN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dfdfdf",fillOpacity:1},d:"M75.746 78.867V59.164h.3l-.1 19.703zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"m75.945 78.867.102-19.703h.3l-.1 19.703zm0 0"}))),Qn||(Qn=Dh.createElement("path",{className:"clip-1",d:"M-.001.001v17.7L3.1 15.9V-1.8zm0 0",transform:"matrix(1 0 0 -1 73.146 76.966)"})),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M.002.002v17.7l3.097-1.7 46 26.598L102.9 11.502V-6.201L59.9-31.1v-3.5zm0 0",transform:"matrix(1 0 0 -1 16.346 44.166)"}),Dh.createElement("path",{style:{fillRule:"evenodd",fill:"#000",fillOpacity:1,strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#000",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001V31.4l13.6-7.9V-7.8zm0 0",transform:"matrix(1 0 0 -1 93.946 70.966)"}),Dh.createElement("g",{clipPath:"url(#eO)"},Dh.createElement("g",{clipPath:"url(#eP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.945 76.164V63.066h.7v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eQ)"},Dh.createElement("g",{clipPath:"url(#eR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eS)"},Dh.createElement("g",{clipPath:"url(#eT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eU)"},Dh.createElement("g",{clipPath:"url(#eV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eW)"},Dh.createElement("g",{clipPath:"url(#eX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.848 76.164V63.066h.199v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#eY)"},Dh.createElement("g",{clipPath:"url(#eZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fa)"},Dh.createElement("g",{clipPath:"url(#fb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fc)"},Dh.createElement("g",{clipPath:"url(#fd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fe)"},Dh.createElement("g",{clipPath:"url(#ff)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.848 76.164V63.066h.199v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fg)"},Dh.createElement("g",{clipPath:"url(#fh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fi)"},Dh.createElement("g",{clipPath:"url(#fj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fk)"},Dh.createElement("g",{clipPath:"url(#fl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 76.164V63.066h.3v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fm)"},Dh.createElement("g",{clipPath:"url(#fn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 76.164V63.066h.297v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fo)"},Dh.createElement("g",{clipPath:"url(#fp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 76.164V63.066h.203v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 76.164V63.066h.297v13.098zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fq)"},Dh.createElement("g",{clipPath:"url(#fr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 76.164V63.066h.301v13.098zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fs)"},Dh.createElement("g",{clipPath:"url(#ft)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 76.164V63.066h.3v13.098zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-8.7l-7.5 4.4V4.4zm0 0",transform:"matrix(1 0 0 -1 104.446 67.466)"}),Un||(Un=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 76.166)"})),Xn||(Xn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 74.466)"})),qn||(qn=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 72.666)"})),Yn||(Yn=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 70.966)"})),Jn||(Jn=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 105.946 69.166)"})),Kn||(Kn=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 67.466)"})),_n||(_n=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 65.766)"})),$n||($n=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 63.966)"})),ei||(ei=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 62.266)"})),ti||(ti=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 60.466)"})),li||(li=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.8",transform:"matrix(1 0 0 -1 105.946 58.766)"})),ai||(ai=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 105.946 56.966)"})),ci||(ci=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 55.266)"})),ri||(ri=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.801",transform:"matrix(1 0 0 -1 105.946 53.566)"})),ni||(ni=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 51.766)"})),ii||(ii=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.801",transform:"matrix(1 0 0 -1 105.946 50.066)"})),Dh.createElement("g",{clipPath:"url(#fu)"},Dh.createElement("g",{clipPath:"url(#fv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.848 65.766v-13.2h.797v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fw)"},Dh.createElement("g",{clipPath:"url(#fx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fy)"},Dh.createElement("g",{clipPath:"url(#fz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fA)"},Dh.createElement("g",{clipPath:"url(#fB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 65.766v-13.2h.2v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.445 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fC)"},Dh.createElement("g",{clipPath:"url(#fD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.746 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fE)"},Dh.createElement("g",{clipPath:"url(#fF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fG)"},Dh.createElement("g",{clipPath:"url(#fH)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fI)"},Dh.createElement("g",{clipPath:"url(#fJ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 65.766v-13.2h.2v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fK)"},Dh.createElement("g",{clipPath:"url(#fL)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.746 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fM)"},Dh.createElement("g",{clipPath:"url(#fN)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fO)"},Dh.createElement("g",{clipPath:"url(#fP)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fQ)"},Dh.createElement("g",{clipPath:"url(#fR)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 65.766v-13.2h.3v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fS)"},Dh.createElement("g",{clipPath:"url(#fT)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 65.766v-13.2h.297v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fU)"},Dh.createElement("g",{clipPath:"url(#fV)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 65.766v-13.2h.203v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 65.766v-13.2h.297v13.2zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fW)"},Dh.createElement("g",{clipPath:"url(#fX)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 65.766v-13.2h.301v13.2zm0 0"}))),Dh.createElement("g",{clipPath:"url(#fY)"},Dh.createElement("g",{clipPath:"url(#fZ)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 65.766v-13.2h.3v13.2zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 .001v-8.7L-7.5-4.4v8.703zm0 0",transform:"matrix(1 0 0 -1 104.446 56.966)"}),Dh.createElement("g",{clipPath:"url(#ga)"},Dh.createElement("g",{clipPath:"url(#gb)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M96.945 55.266V42.164h.7v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gc)"},Dh.createElement("g",{clipPath:"url(#gd)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b3b3b3",fillOpacity:1},d:"M97.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#ge)"},Dh.createElement("g",{clipPath:"url(#gf)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b5b5b5",fillOpacity:1},d:"M97.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gg)"},Dh.createElement("g",{clipPath:"url(#gh)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b7b7b7",fillOpacity:1},d:"M98.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#b9b9b9",fillOpacity:1},d:"M98.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gi)"},Dh.createElement("g",{clipPath:"url(#gj)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bbb",fillOpacity:1},d:"M98.848 55.266V42.164h.199v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gk)"},Dh.createElement("g",{clipPath:"url(#gl)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#bdbdbd",fillOpacity:1},d:"M99.047 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"silver",fillOpacity:1},d:"M99.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c2c2c2",fillOpacity:1},d:"M99.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gm)"},Dh.createElement("g",{clipPath:"url(#gn)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c4c4c4",fillOpacity:1},d:"M99.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#go)"},Dh.createElement("g",{clipPath:"url(#gp)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c6c6c6",fillOpacity:1},d:"M100.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#c8c8c8",fillOpacity:1},d:"M100.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gq)"},Dh.createElement("g",{clipPath:"url(#gr)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cacaca",fillOpacity:1},d:"M100.848 55.266V42.164h.199v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gs)"},Dh.createElement("g",{clipPath:"url(#gt)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cdcdcd",fillOpacity:1},d:"M101.047 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#cfcfcf",fillOpacity:1},d:"M101.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d1d1d1",fillOpacity:1},d:"M101.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gu)"},Dh.createElement("g",{clipPath:"url(#gv)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d3d3d3",fillOpacity:1},d:"M101.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gw)"},Dh.createElement("g",{clipPath:"url(#gx)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d5d5d5",fillOpacity:1},d:"M102.246 55.266V42.164h.3v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#d7d7d7",fillOpacity:1},d:"M102.547 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gy)"},Dh.createElement("g",{clipPath:"url(#gz)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dadada",fillOpacity:1},d:"M102.848 55.266V42.164h.297v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gA)"},Dh.createElement("g",{clipPath:"url(#gB)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dcdcdc",fillOpacity:1},d:"M103.145 55.266V42.164h.203v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#dedede",fillOpacity:1},d:"M103.348 55.266V42.164h.297v13.102zm0 0"}),Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e0e0e0",fillOpacity:1},d:"M103.645 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gC)"},Dh.createElement("g",{clipPath:"url(#gD)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e2e2e2",fillOpacity:1},d:"M103.945 55.266V42.164h.301v13.102zm0 0"}))),Dh.createElement("g",{clipPath:"url(#gE)"},Dh.createElement("g",{clipPath:"url(#gF)",clipRule:"evenodd"},Dh.createElement("path",{style:{stroke:"none",fillRule:"evenodd",fill:"#e5e5e5",fillOpacity:1},d:"M104.246 55.266V42.164h.3v13.102zm0 0"}))),Dh.createElement("path",{style:{fill:"none",strokeWidth:1.132,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#eee",strokeOpacity:1,strokeMiterlimit:10},d:"M0 0v-8.7l-7.5 4.4v8.703zm0 0",transform:"matrix(1 0 0 -1 104.446 46.566)"}),mi||(mi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.898",transform:"matrix(1 0 0 -1 105.946 48.266)"})),di||(di=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 105.946 46.566)"})),hi||(hi=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 105.946 77.966)"})),pi||(pi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 70.066)"})),oi||(oi=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 68.366)"})),si||(si=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 66.566)"})),Ei||(Ei=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 64.866)"})),vi||(vi=Dh.createElement("path",{className:"clip-1",d:"M0 0v-.9",transform:"matrix(1 0 0 -1 95.446 63.066)"})),fi||(fi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 61.366)"})),ui||(ui=Dh.createElement("path",{className:"clip-1",d:"M0 .002v-.8",transform:"matrix(1 0 0 -1 95.446 59.666)"})),yi||(yi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 57.866)"})),zi||(zi=Dh.createElement("path",{className:"clip-1",d:"M0 .002v-.8",transform:"matrix(1 0 0 -1 95.446 56.166)"})),ki||(ki=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 54.366)"})),Pi||(Pi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 52.666)"})),bi||(bi=Dh.createElement("path",{className:"clip-1",d:"M0-.001V-.9",transform:"matrix(1 0 0 -1 95.446 50.866)"})),Mi||(Mi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 49.166)"})),gi||(gi=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 95.446 47.466)"})),xi||(xi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 45.666)"})),Ri||(Ri=Dh.createElement("path",{className:"clip-1",d:"M0 .001v-.8",transform:"matrix(1 0 0 -1 95.446 43.966)"})),Hi||(Hi=Dh.createElement("path",{className:"clip-1",d:"M0 .002V-.9",transform:"matrix(1 0 0 -1 95.446 42.166)"})),Oi||(Oi=Dh.createElement("path",{className:"clip-1",d:"M0 .001V-.9",transform:"matrix(1 0 0 -1 95.446 40.466)"})),Ni||(Ni=Dh.createElement("path",{className:"clip-1",d:"M0-.001v-.797",transform:"matrix(1 0 0 -1 95.446 71.866)"})),Dh.createElement("g",{className:"black","data-tcolor":"black",style:{fillOpacity:1}},Vi||(Vi=Dh.createElement("use",{xlinkHref:"#gG",x:40.446,y:109.066})),wi||(wi=Dh.createElement("use",{xlinkHref:"#gH",x:49.932,y:109.066})),Li||(Li=Dh.createElement("use",{xlinkHref:"#gI",x:58.536,y:109.066})),Ci||(Ci=Dh.createElement("use",{xlinkHref:"#gJ",x:65.628,y:109.066})),Ai||(Ai=Dh.createElement("use",{xlinkHref:"#gH",x:75.42,y:109.066})),Fi||(Fi=Dh.createElement("use",{xlinkHref:"#gI",x:84.096,y:109.066}))),ji||(ji=Dh.createElement("path",{className:"thread-box sblack","data-tcolor":"sblack",d:"M-.001 0c-4.5 0-9-4.5-9-9v-35.898c0-4.5 4.5-9 9-9h163.5c4.5 0 9 4.5 9 9V-9c0 4.5-4.5 9-9 9zm0 0",transform:"matrix(1 0 0 -1 371.146 32.766)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Ti||(Ti=Dh.createElement("use",{xlinkHref:"#gG",x:378.846,y:66.466})),Ii||(Ii=Dh.createElement("use",{xlinkHref:"#gK",x:388.332,y:66.466})),Wi||(Wi=Dh.createElement("use",{xlinkHref:"#gL",x:399.132,y:66.466})),Si||(Si=Dh.createElement("use",{xlinkHref:"#gM",x:409.032,y:66.466})),Di||(Di=Dh.createElement("use",{xlinkHref:"#gN",x:415.026,y:66.466})),Zi||(Zi=Dh.createElement("use",{xlinkHref:"#gO",x:420.912,y:66.466})),Gi||(Gi=Dh.createElement("use",{xlinkHref:"#gI",x:431.316,y:66.466})),Bi||(Bi=Dh.createElement("use",{xlinkHref:"#gH",x:438.408,y:66.466})),Qi||(Qi=Dh.createElement("use",{xlinkHref:"#gP",x:447.084,y:66.466})),Ui||(Ui=Dh.createElement("use",{xlinkHref:"#gQ",x:456.084,y:66.466})),Xi||(Xi=Dh.createElement("use",{xlinkHref:"#gR",x:467.064,y:66.466})),qi||(qi=Dh.createElement("use",{xlinkHref:"#gS",x:471.654,y:66.466})),Yi||(Yi=Dh.createElement("use",{xlinkHref:"#gT",x:476.154,y:66.466})),Ji||(Ji=Dh.createElement("use",{xlinkHref:"#gI",x:492.858,y:66.466})),Ki||(Ki=Dh.createElement("use",{xlinkHref:"#gU",x:499.95,y:66.466})),_i||(_i=Dh.createElement("use",{xlinkHref:"#gN",x:505.224,y:66.466})),$i||($i=Dh.createElement("use",{xlinkHref:"#gH",x:511.02,y:66.466})),em||(em=Dh.createElement("use",{xlinkHref:"#gI",x:519.696,y:66.466}))),tm||(tm=Dh.createElement("path",{className:"line-1 sblack","data-tcolor":"sblack",d:"M.002 0h117.097v.102H219.9",transform:"matrix(1 0 0 -1 126.846 59.766)"})),lm||(lm=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m362.145 59.664-16.098-5.297v10.7zm0 0"})),am||(am=Dh.createElement("path",{className:"line-4 sblack","data-tcolor":"sblack",d:"M.002.002V-22.9h21.297v-8.098",transform:"matrix(1 0 0 -1 452.846 86.666)"})),cm||(cm=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m474.145 131.965 5-15h-10zm0 0"})),rm||(rm=Dh.createElement("path",{className:"thread-box sblack","data-tcolor":"sblack",d:"M-.001 0C-4.501 0-8.9-4.4-8.9-8.9v-36c0-4.4 4.4-8.9 8.9-8.9h165.6c4.399 0 8.899 4.5 8.899 8.902v36c0 4.5-4.5 8.899-8.899 8.899zm0 0",transform:"matrix(1 0 0 -1 179.146 225.566)"})),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},nm||(nm=Dh.createElement("use",{xlinkHref:"#gV",x:179.246,y:259.266})),im||(im=Dh.createElement("use",{xlinkHref:"#gP",x:196.238,y:259.266})),mm||(mm=Dh.createElement("use",{xlinkHref:"#gU",x:205.328,y:259.266})),dm||(dm=Dh.createElement("use",{xlinkHref:"#gW",x:210.53,y:259.266})),hm||(hm=Dh.createElement("use",{xlinkHref:"#gM",x:221.006,y:259.266})),pm||(pm=Dh.createElement("use",{xlinkHref:"#gN",x:227,y:259.266})),om||(om=Dh.createElement("use",{xlinkHref:"#gO",x:232.796,y:259.266})),sm||(sm=Dh.createElement("use",{xlinkHref:"#gI",x:243.272,y:259.266})),Em||(Em=Dh.createElement("use",{xlinkHref:"#gH",x:250.274,y:259.266})),vm||(vm=Dh.createElement("use",{xlinkHref:"#gP",x:258.95,y:259.266})),fm||(fm=Dh.createElement("use",{xlinkHref:"#gQ",x:267.95,y:259.266})),um||(um=Dh.createElement("use",{xlinkHref:"#gR",x:278.93,y:259.266})),ym||(ym=Dh.createElement("use",{xlinkHref:"#gS",x:283.52,y:259.266})),zm||(zm=Dh.createElement("use",{xlinkHref:"#gX",x:288.11,y:259.266})),km||(km=Dh.createElement("use",{xlinkHref:"#gH",x:300.116,y:259.266})),Pm||(Pm=Dh.createElement("use",{xlinkHref:"#gP",x:308.72,y:259.266})),bm||(bm=Dh.createElement("use",{xlinkHref:"#gQ",x:317.72,y:259.266})),Mm||(Mm=Dh.createElement("use",{xlinkHref:"#gH",x:328.7,y:259.266})),gm||(gm=Dh.createElement("use",{xlinkHref:"#gI",x:337.376,y:259.266}))),xm||(xm=Dh.createElement("path",{className:"line-3 sred","data-tcolor":"sred",d:"M0 0h54.3",transform:"matrix(1 0 0 -1 498.246 109.266)"})),Rm||(Rm=Dh.createElement("path",{className:"arrow red","data-tcolor":"red",d:"M551.746 115.266v-11.899l31.5 5.899zm0 0"})),Hm||(Hm=Dh.createElement("path",{className:"line-4 sblack","data-tcolor":"sblack",d:"M0 0v24.3h-.4v9.602",transform:"matrix(1 0 0 -1 261.946 225.566)"})),Om||(Om=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m261.547 177.367-5 14.899h10zm0 0"})),Nm||(Nm=Dh.createElement("path",{className:"line-3 sred","data-tcolor":"sred",d:"M0 .001h54.3",transform:"matrix(1 0 0 -1 279.946 208.466)"})),Vm||(Vm=Dh.createElement("path",{className:"arrow red","data-tcolor":"red",d:"M333.445 214.465v-11.899l31.602 5.899zm0 0"})),wm||(wm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-.7c-1.5 0-3-.6-4.3-1.5",transform:"matrix(1 0 0 -1 237.746 117.766)"})),Lm||(Lm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c-.5-1.098-.8-2.2-.8-3.301V-4.4",transform:"matrix(1 0 0 -1 229.746 122.566)"})),Cm||(Cm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v-4.5",transform:"matrix(1 0 0 -1 228.946 131.466)"})),Am||(Am=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001V-4.6",transform:"matrix(1 0 0 -1 228.946 140.466)"})),Fm||(Fm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v-4.5",transform:"matrix(1 0 0 -1 228.946 149.566)"})),jm||(jm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002v-4.5",transform:"matrix(1 0 0 -1 228.946 158.666)"})),Tm||(Tm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002v-4.5",transform:"matrix(1 0 0 -1 228.946 167.666)"})),Im||(Im=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .002V-4.6",transform:"matrix(1 0 0 -1 228.946 176.666)"})),Wm||(Wm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v-.5c0-1.3.401-2.6 1.1-3.8",transform:"matrix(1 0 0 -1 228.946 185.766)"})),Sm||(Sm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c1.2-.699 2.5-1.1 3.8-1.1h.5",transform:"matrix(1 0 0 -1 233.246 193.266)"})),Dm||(Dm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.6",transform:"matrix(1 0 0 -1 242.046 194.366)"})),Zm||(Zm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 251.146 194.366)"})),Gm||(Gm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 260.146 194.366)"})),Bm||(Bm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 269.246 194.366)"})),Qm||(Qm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 278.246 194.366)"})),Um||(Um=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 287.346 194.366)"})),Xm||(Xm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 296.346 194.366)"})),qm||(qm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.597",transform:"matrix(1 0 0 -1 305.346 194.366)"})),Ym||(Ym=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 314.446 194.366)"})),Jm||(Jm=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 323.546 194.366)"})),Km||(Km=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 332.546 194.366)"})),_m||(_m=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 341.546 194.366)"})),$m||($m=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h4.5",transform:"matrix(1 0 0 -1 350.646 194.366)"})),ed||(ed=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001H4.6",transform:"matrix(1 0 0 -1 359.646 194.366)"})),td||(td=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 368.746 194.366)"})),ld||(ld=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 377.746 194.366)"})),ad||(ad=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 386.846 194.366)"})),cd||(cd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002-.001h4.5",transform:"matrix(1 0 0 -1 395.846 194.366)"})),rd||(rd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 404.946 194.366)"})),nd||(nd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 413.946 194.366)"})),id||(id=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 423.046 194.366)"})),md||(md=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.5",transform:"matrix(1 0 0 -1 432.046 194.366)"})),dd||(dd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001h4.6",transform:"matrix(1 0 0 -1 441.046 194.366)"})),hd||(hd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001-.001h.3c1.403 0 2.801.402 4 1.203",transform:"matrix(1 0 0 -1 450.146 194.366)"})),pd||(pd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001C.6 1.1 1 2.4 1 3.6v.7",transform:"matrix(1 0 0 -1 457.546 189.866)"})),od||(od=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v4.6",transform:"matrix(1 0 0 -1 458.546 181.066)"})),sd||(sd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v4.5",transform:"matrix(1 0 0 -1 458.546 171.966)"})),Ed||(Ed=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 .001v4.5",transform:"matrix(1 0 0 -1 458.546 162.966)"})),vd||(vd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001v4.5",transform:"matrix(1 0 0 -1 458.546 153.866)"})),fd||(fd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0-.001v4.5",transform:"matrix(1 0 0 -1 458.546 144.866)"})),ud||(ud=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v4.5",transform:"matrix(1 0 0 -1 458.546 135.766)"})),yd||(yd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0v.9c0 1.202-.3 2.4-.9 3.499",transform:"matrix(1 0 0 -1 458.546 126.766)"})),zd||(zd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0c-1.198.8-2.698 1.3-4.1 1.3h-.2",transform:"matrix(1 0 0 -1 454.546 119.066)"})),kd||(kd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 445.746 117.766)"})),Pd||(Pd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 436.746 117.766)"})),bd||(bd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 427.646 117.766)"})),Md||(Md=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 418.646 117.766)"})),gd||(gd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 409.546 117.766)"})),xd||(xd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 400.546 117.766)"})),Rd||(Rd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.6",transform:"matrix(1 0 0 -1 391.546 117.766)"})),Hd||(Hd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 382.446 117.766)"})),Od||(Od=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 373.346 117.766)"})),Nd||(Nd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 364.346 117.766)"})),Vd||(Vd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0H-4.6",transform:"matrix(1 0 0 -1 355.346 117.766)"})),wd||(wd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 346.246 117.766)"})),Ld||(Ld=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.6",transform:"matrix(1 0 0 -1 337.246 117.766)"})),Cd||(Cd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 328.146 117.766)"})),Ad||(Ad=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M-.001 0h-4.5",transform:"matrix(1 0 0 -1 319.146 117.766)"})),Fd||(Fd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 310.046 117.766)"})),jd||(jd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 301.046 117.766)"})),Td||(Td=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 291.946 117.766)"})),Id||(Id=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 282.946 117.766)"})),Wd||(Wd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 273.846 117.766)"})),Sd||(Sd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M.002 0h-4.5",transform:"matrix(1 0 0 -1 264.846 117.766)"})),Dd||(Dd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 255.746 117.766)"})),Zd||(Zd=Dh.createElement("path",{className:"dash-1 sblack","data-tcolor":"sblack",d:"M0 0h-4.5",transform:"matrix(1 0 0 -1 246.746 117.766)"})),Dh.createElement("g",{className:"black","data-tcolor":"black",style:{fillOpacity:1}},Gd||(Gd=Dh.createElement("use",{xlinkHref:"#gX",x:392.546,y:222.366})),Bd||(Bd=Dh.createElement("use",{xlinkHref:"#gH",x:404.552,y:222.366})),Qd||(Qd=Dh.createElement("use",{xlinkHref:"#gP",x:413.156,y:222.366})),Ud||(Ud=Dh.createElement("use",{xlinkHref:"#gQ",x:422.156,y:222.366})),Xd||(Xd=Dh.createElement("use",{xlinkHref:"#gS",x:433.244,y:222.366})),qd||(qd=Dh.createElement("use",{xlinkHref:"#gX",x:437.744,y:222.366})),Yd||(Yd=Dh.createElement("use",{xlinkHref:"#gH",x:449.75,y:222.366})),Jd||(Jd=Dh.createElement("use",{xlinkHref:"#gY",x:458.426,y:222.366})),Kd||(Kd=Dh.createElement("use",{xlinkHref:"#gU",x:468.326,y:222.366})),_d||(_d=Dh.createElement("use",{xlinkHref:"#gZ",x:473.6,y:222.366})),$d||($d=Dh.createElement("use",{xlinkHref:"#gW",x:483.392,y:222.366}))),Dh.createElement("path",{className:"line-2 sblue","data-tcolor":"sblue",d:"M0 .002V-25.9",transform:"matrix(1 0 0 -1 240.246 69.666)",style:{fill:"none",strokeWidth:2.292,strokeLinecap:"butt",strokeLinejoin:"round",strokeOpacity:1,strokeMiterlimit:10,stroke:"#00c"}}),eh||(eh=Dh.createElement("path",{className:"arrow blue","data-tcolor":"blue",d:"M234.348 94.766h11.898l-6 31.5zm0 0"})),Dh.createElement("g",{className:"blue","data-tcolor":"blue",style:{fillOpacity:1}},th||(th=Dh.createElement("use",{xlinkHref:"#ha",x:111.846,y:95.566})),lh||(lh=Dh.createElement("use",{xlinkHref:"#hb",x:121.638,y:95.566})),ah||(ah=Dh.createElement("use",{xlinkHref:"#hc",x:126.23,y:95.566})),ch||(ch=Dh.createElement("use",{xlinkHref:"#hb",x:140.326,y:95.566})),rh||(rh=Dh.createElement("use",{xlinkHref:"#hd",x:145.014,y:95.566})),nh||(nh=Dh.createElement("use",{xlinkHref:"#he",x:150.118,y:95.566})),ih||(ih=Dh.createElement("use",{xlinkHref:"#hf",x:157.798,y:95.566})),mh||(mh=Dh.createElement("use",{xlinkHref:"#hg",x:167.494,y:95.566})),dh||(dh=Dh.createElement("use",{xlinkHref:"#hh",x:171.494,y:95.566})),hh||(hh=Dh.createElement("use",{xlinkHref:"#hi",x:180.598,y:95.566})),ph||(ph=Dh.createElement("use",{xlinkHref:"#hj",x:189.382,y:95.566})),oh||(oh=Dh.createElement("use",{xlinkHref:"#hb",x:196.086,y:95.566})),sh||(sh=Dh.createElement("use",{xlinkHref:"#hd",x:200.774,y:95.566})),Eh||(Eh=Dh.createElement("use",{xlinkHref:"#hb",x:205.878,y:95.566})),vh||(vh=Dh.createElement("use",{xlinkHref:"#hi",x:210.566,y:95.566})),fh||(fh=Dh.createElement("use",{xlinkHref:"#hk",x:219.35,y:95.566})),uh||(uh=Dh.createElement("use",{xlinkHref:"#hi",x:134.446,y:117.066})),yh||(yh=Dh.createElement("use",{xlinkHref:"#hl",x:143.15,y:117.066})),zh||(zh=Dh.createElement("use",{xlinkHref:"#hg",x:148.446,y:117.066})),kh||(kh=Dh.createElement("use",{xlinkHref:"#hm",x:152.446,y:117.066})),Ph||(Ph=Dh.createElement("use",{xlinkHref:"#hn",x:167.15,y:117.066})),bh||(bh=Dh.createElement("use",{xlinkHref:"#hb",x:173.534,y:117.066})),Mh||(Mh=Dh.createElement("use",{xlinkHref:"#hd",x:178.222,y:117.066})),gh||(gh=Dh.createElement("use",{xlinkHref:"#hb",x:183.326,y:117.066})),xh||(xh=Dh.createElement("use",{xlinkHref:"#hk",x:188.014,y:117.066})),Rh||(Rh=Dh.createElement("use",{xlinkHref:"#ho",x:197.214,y:117.066}))),Dh.createElement("path",{className:"obj-box sblack","data-tcolor":"sblack",d:"M-.001 0c-4.5 0-9-4.399-9-8.899v-36c0-4.402 4.5-8.902 9-8.902h106c4.5 0 9 4.5 9 8.902v36c0 4.5-4.5 8.899-9 8.899zm0 0",transform:"matrix(1 0 0 -1 11.146 225.566)",style:{fillRule:"evenodd",fill:"#cff",fillOpacity:1,strokeWidth:2.292,strokeLinecap:"butt",strokeLinejoin:"round",strokeOpacity:1,strokeMiterlimit:10}}),Dh.createElement("g",{style:{fill:"#000",fillOpacity:1}},Hh||(Hh=Dh.createElement("use",{xlinkHref:"#hp",x:10.746,y:259.266})),Oh||(Oh=Dh.createElement("use",{xlinkHref:"#hq",x:21.834,y:259.266})),Nh||(Nh=Dh.createElement("use",{xlinkHref:"#gN",x:31.032,y:259.266})),Vh||(Vh=Dh.createElement("use",{xlinkHref:"#gI",x:36.918,y:259.266})),wh||(wh=Dh.createElement("use",{xlinkHref:"#gP",x:44.01,y:259.266})),Lh||(Lh=Dh.createElement("use",{xlinkHref:"#hr",x:53.01,y:259.266})),Ch||(Ch=Dh.createElement("use",{xlinkHref:"#gN",x:60.984,y:259.266})),Ah||(Ah=Dh.createElement("use",{xlinkHref:"#hs",x:66.87,y:259.266})),Fh||(Fh=Dh.createElement("use",{xlinkHref:"#gI",x:76.878,y:259.266})),jh||(jh=Dh.createElement("use",{xlinkHref:"#gP",x:83.88,y:259.266})),Th||(Th=Dh.createElement("use",{xlinkHref:"#ht",x:92.88,y:259.266})),Ih||(Ih=Dh.createElement("use",{xlinkHref:"#gH",x:108.756,y:259.266}))),Wh||(Wh=Dh.createElement("path",{className:"line-1 sblack","data-tcolor":"sblack",d:"M0 .001h-28.8",transform:"matrix(1 0 0 -1 170.246 252.466)"})),Sh||(Sh=Dh.createElement("path",{className:"arrow black","data-tcolor":"black",d:"m126.145 252.465 16.101 5.402v-10.8zm0 0"})))}},8793:function(e,t,l){var a=l(7294),c=l(9960),r=l(1954),n=l(2949);t.Z=function(e){var t=(0,a.useState)(!1),l=t[0],i=t[1];(0,a.useEffect)((function(){i(!0)}),[]);var m,d,h,p=(m=(0,n.I)(),d=m.colorMode,m.setColorMode,"dark"===d?"button--secondary button--outline":"button--secondary");return h=e.index?"button "+p+" button--lg button--index":"button "+p+" button--lg",a.createElement(c.Z,{key:String(l),className:h,to:e.to},e.icon&&a.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},6143:function(e,t,l){l.r(t),l.d(t,{assets:function(){return E},contentTitle:function(){return o},default:function(){return u},frontMatter:function(){return p},metadata:function(){return s},toc:function(){return v}});var a=l(3117),c=l(102),r=(l(7294),l(3905)),n=l(8793),i=l(541),m=l(36),d=l(2986),h=["components"],p={id:"client",title:"Pulling a video stream",sidebar_label:"Client",slug:"/examples/client",description:"Example codes for pulling a stream on the client side."},o=void 0,s={unversionedId:"guides/examples/client",id:"guides/examples/client",title:"Pulling a video stream",description:"Example codes for pulling a stream on the client side.",source:"@site/docs/guides/examples/client.mdx",sourceDirName:"guides/examples",slug:"/examples/client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/client",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/examples/client.mdx",tags:[],version:"current",frontMatter:{id:"client",title:"Pulling a video stream",sidebar_label:"Client",slug:"/examples/client",description:"Example codes for pulling a stream on the client side."},sidebar:"docs",previous:{title:"Transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/transcoding"},next:{title:"Server",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/server"}},E={},v=[{value:"Introduction",id:"introduction",level:2},{value:"Codes",id:"codes",level:2},{value:"Examples on Github",id:"examples-on-github",level:2}],f={toc:v};function u(e){var t=e.components,l=(0,c.Z)(e,h);return(0,r.kt)("wrapper",(0,a.Z)({},f,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"The following figure show the theory of ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegClient"),". Assuming that we have a video server from the remote side, the real-time stream is pushed continuously. Even we do not read the online stream, the data flow would not wait for reading. Therefore, we design the following two-thread workflow."),(0,r.kt)("p",null,(0,r.kt)(d.Z,{className:"themeColor",mdxType:"ClientSvg"})),(0,r.kt)("p",null,"When connecting to the remote server, ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient"),' would create a sub-thread ("',(0,r.kt)("em",{parentName:"p"},"writer"),'" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two cursors maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting cursor is kept stepping each time a new frame is received.'),(0,r.kt)("p",null,"The reading events would be triggered by the Python-C-API. When a new reading event comes from the main thread, the reader would lock the current position of the reading cursor, and read several frames from the buffer. After the reading results are collected, the lock would be released, and the reading cursor will be reset to the end of the read frames. When the writer is writing a new frame, the current written position will also be locked by the writer. A locked position would not be updated. For example, during the reading events, if the writting cursor moves to the locked position, the writer will wait until the reading is finished. Because the reading events are merely data-collecting operations, in most cases the reading events would not block the writer. If the writer is blocked for too long, the demuxing of the online stream may fail. So we recommend users to set a rational buffer size. For example, if we always read 5 frames each time, the buffer size is recommended to be double of the reading size, i.e. 10."),(0,r.kt)("h2",{id:"codes"},"Codes"),(0,r.kt)("p",null,"To test the following codes, we recommend users to use ",(0,r.kt)("a",{parentName:"p",href:"https://www.videolan.org/vlc/streaming.html",title:"VLC used for streaming"},"VLC",(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," or ",(0,r.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg",(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," to push a remote stream, because the stream pushing without encoding is not supported by ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," currently. Using VLC or FFMpeg to serve the stream will occupy less system resources."),(0,r.kt)("p",null,"The following example codes would scale the remote frame to 480x360, and resample the frame rate to 5 FPS. The reading size and the buffer size are ",(0,r.kt)("inlineCode",{parentName:"p"},"5")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"12")," respectively."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'{9,15,19,22-24,26-27} title="client.py" showLineNumbers',"{9,15,19,22-24,26-27}":!0,title:'"client.py"',showLineNumbers:!0},"import os, sys\nimport time\nimport mpegCoder\nmpegCoder.setGlobal(dumpLevel=2) # show full log.\n\nif __name__ == '__main__':\n d = mpegCoder.MpegClient() # create the handle.\n d.setParameter(widthDst=480, heightDst=360, dstFrameRate=(5,1), readSize=5, cacheSize=12) # do basic settings.\n success = d.FFmpegSetup('rtsp://localhost:8554/video') # connect with the server.\n print(d)\n\n if not success: # exit the program if the server is not available. You could delete this checking and see what will happen.\n exit()\n\n d.start() # start the sub-thread for demuxing the stream.\n\n time.sleep(5) # wait for getting some frames.\n print('Get slept')\n p = d.ExtractFrame() # extract some frames from current cache.\n print(p.shape) # show information of extracted frames.\n\n for i in range(10): # wait for 50 seconds.\n time.sleep(5)\n p = d.ExtractFrame() # extract some frames from current cache.\n \n d.terminate() # shut down the current sub-thread. You could call start() and let it restart.\n d.clear() # but here we would like to clear the handle and exit.\n")),(0,r.kt)("p",null,"After configuring the client, the codes contain the following key steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.FFmpegSetup()")," accepts a video stream address. The stream type would be detected from the protocol automacially. Currently, we support ",(0,r.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"ftp"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sftp"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"rtsp"),", and ",(0,r.kt)("inlineCode",{parentName:"p"},"rtmp"),". Note that only ",(0,r.kt)("inlineCode",{parentName:"p"},"rtsp")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"rtmp")," should be used for analyzing the real-time stream. The ",(0,r.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"ftp")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"sftp")," protocols are mostly used for data transfer. This method will launch a connect to the remote server.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"When ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.start()"),' is called, the sub-thread "',(0,r.kt)("em",{parentName:"p"},"writer"),'" will be created.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Using ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.ExtractFrame()")," to get the real-time data. The returned frame number is given by ",(0,r.kt)("inlineCode",{parentName:"p"},"readSize")," during the configuration. However, user could override the configurtion by using an argument, for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"ExtractFrame(4)")," would force the reader to read 4 frames.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If the remote stream is closed, ",(0,r.kt)("inlineCode",{parentName:"p"},"d.ExtractFrame()")," would return ",(0,r.kt)("inlineCode",{parentName:"p"},"None"),". However, user would terminate the client in any time. The method ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.terminate()")," would stop the writing thread. But the connection would not be aborted until ",(0,r.kt)("inlineCode",{parentName:"p"},"MpegClient.clear()")," is called."))),(0,r.kt)("h2",{id:"examples-on-github"},"Examples on Github"),(0,r.kt)("p",null,"On Github, we provide the above example as a single branch."),(0,r.kt)("p",null,(0,r.kt)(n.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-check",icon:m.Z,mdxType:"DarkButton"},"Demuxing Checking Program")),(0,r.kt)("p",null,"In addition, we provide another example. This example is a simple video stream player based on ",(0,r.kt)("a",{parentName:"p",href:"https://www.riverbankcomputing.com/software/pyqt",title:"PyQt5"},(0,r.kt)("inlineCode",{parentName:"a"},"PyQt5"),(0,r.kt)(i.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."),(0,r.kt)("p",null,(0,r.kt)(n.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/example-client-player",icon:m.Z,mdxType:"DarkButton"},"Video Stream Player")))}u.isMDXComponent=!0},36:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/724e1eb2.9e918ef4.js b/assets/js/724e1eb2.9e918ef4.js new file mode 100644 index 0000000..4b95d37 --- /dev/null +++ b/assets/js/724e1eb2.9e918ef4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[4798],{5549:function(e,t,l){l.d(t,{A:function(){return i},q:function(){return d}});var n=l(7294),a=l(9960),r="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",o="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=o+"/"+e.url;break;case"3.1.0":t=r+"/"+e.url}else t=o+"/"+e.url;return n.createElement(a.Z,{to:t,className:"noline"},e.children)}function d(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}d.defaultProps={padx:"1ex"}},6150:function(e,t,l){l.r(t),l.d(t,{assets:function(){return g},contentTitle:function(){return u},default:function(){return h},frontMatter:function(){return p},metadata:function(){return m},toc:function(){return b}});var n=l(3117),a=l(102),r=(l(7294),l(3905)),o=l(5514),i=l(7795),d=l(7508),s=l(5549),c=["components"],p={id:"setGlobal",title:"setGlobal",sidebar_label:"setGlobal",slug:"/apis/setGlobal",description:"Set global configurations."},u=void 0,m={unversionedId:"apis/setGlobal",id:"version-3.1.0/apis/setGlobal",title:"setGlobal",description:"Set global configurations.",source:"@site/versioned_docs/version-3.1.0/apis/setGlobal.mdx",sourceDirName:"apis",slug:"/apis/setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/setGlobal",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/apis/setGlobal.mdx",tags:[],version:"3.1.0",frontMatter:{id:"setGlobal",title:"setGlobal",sidebar_label:"setGlobal",slug:"/apis/setGlobal",description:"Set global configurations."},sidebar:"version-3.1.0/apis",previous:{title:"readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/readme"},next:{title:"MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegDecoder"}},g={},b=[{value:"Arguments",id:"arguments",level:2},{value:"Requires",id:"requires",level:3},{value:"Example",id:"example",level:2},{value:"Disable all logs except errors",id:"disable-all-logs-except-errors",level:3}],f={toc:b};function h(e){var t=e.components,l=(0,a.Z)(e,c);return(0,r.kt)("wrapper",(0,n.Z)({},f,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)(o.Z,{icon:i.Z,mdxType:"InlineIcon"})," Function",(0,r.kt)(s.q,{mdxType:"Splitter"}),(0,r.kt)(s.A,{ver:"3.1.0",url:"MpegPyd.h#L131",mdxType:"SourceURL"},(0,r.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"})," Source")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=None)\n")),(0,r.kt)("p",null,"A function used for setting global configurations. If a configuration is not specified, that item will not be changed."),(0,r.kt)("h2",{id:"arguments"},"Arguments"),(0,r.kt)("h3",{id:"requires"},"Requires"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"dumpLevel")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"int")),(0,r.kt)("td",{parentName:"tr",align:"center"}),(0,r.kt)("td",{parentName:"tr",align:"left"},"The level of dumped log. This level will only influence ",(0,r.kt)("inlineCode",{parentName:"td"},"mpegCoder")," logs, FFMpeg logs and some codec logs. A few codec, like ",(0,r.kt)("inlineCode",{parentName:"td"},"libx265")," is not influenced by this configuration. Avaliable values: ",(0,r.kt)("inlineCode",{parentName:"td"},"0"),": Silent executing; ",(0,r.kt)("inlineCode",{parentName:"td"},"1"),": (default) Dump basic informations; ",(0,r.kt)("inlineCode",{parentName:"td"},"2"),": Dump all informations.")))),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("h3",{id:"disable-all-logs-except-errors"},"Disable all logs except errors"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=0)\n")))}h.isMDXComponent=!0},7795:function(e,t){t.Z={body:'',width:24,height:24}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/735d0569.a22aed90.js b/assets/js/735d0569.a22aed90.js new file mode 100644 index 0000000..9cfcecb --- /dev/null +++ b/assets/js/735d0569.a22aed90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7445],{997:function(e,t,a){a.r(t),a.d(t,{assets:function(){return c},contentTitle:function(){return u},default:function(){return N},frontMatter:function(){return s},metadata:function(){return h},toc:function(){return k}});var n=a(3117),i=a(102),o=(a(7294),a(3905)),r=a(5514),p=a(3119),l=a(6552),d=a(36),m=["components"],s={id:"changelog",title:"Changelog",description:"The changelog of this project.",slug:"/changelog"},u=void 0,h={unversionedId:"changelog",id:"changelog",title:"Changelog",description:"The changelog of this project.",source:"@site/docs/changelog.mdx",sourceDirName:".",slug:"/changelog",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/changelog",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/changelog.mdx",tags:[],version:"current",frontMatter:{id:"changelog",title:"Changelog",description:"The changelog of this project.",slug:"/changelog"},sidebar:"docs",previous:{title:"Q&A",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/qna"}},c={},k=[{value:"Update Report of mpegCoder",id:"update-report-of-mpegcoder",level:2},{value:"V3.2.4 @ 4/24/2022",id:"v324--4242022",level:3},{value:"V3.2.3 @ 4/22/2022:",id:"v323--4222022",level:3},{value:"V3.2.2 @ 4/22/2022:",id:"v322--4222022",level:3},{value:"V3.2.1 @ 4/22/2022:",id:"v321--4222022",level:3},{value:"V3.2.0 @ 4/8/2022:",id:"v320--482022",level:3},{value:"V3.1.0 @ 7/23/2021:",id:"v310--7232021",level:3},{value:"V3.0.0 update report:",id:"v300-update-report",level:3},{value:"V2.05 update report:",id:"v205-update-report",level:3},{value:"V2.01 update report:",id:"v201-update-report",level:3},{value:"V2.0 update report:",id:"v20-update-report",level:3},{value:"V1.8 update report:",id:"v18-update-report",level:3},{value:"V1.7-linux update report:",id:"v17-linux-update-report",level:3},{value:"V1.7 update report:",id:"v17-update-report",level:3},{value:"V1.5 update report:",id:"v15-update-report",level:3},{value:"V1.4 update report:",id:"v14-update-report",level:3},{value:"V1.2 update report:",id:"v12-update-report",level:3},{value:"V1.0 update report:",id:"v10-update-report",level:3}],g={toc:k};function N(e){var t=e.components,a=(0,i.Z)(e,m);return(0,o.kt)("wrapper",(0,n.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"This page do not need and will not be translated to other laungages."))),(0,o.kt)("h2",{id:"update-report-of-mpegcoder"},"Update Report of ",(0,o.kt)("inlineCode",{parentName:"h2"},"mpegCoder")),(0,o.kt)("h3",{id:"v324--4242022"},"V3.2.4 @ 4/24/2022"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug when ",(0,o.kt)("inlineCode",{parentName:"p"},"tqdm<4.40.0")," is installed. Previously, this problem should not trigger if ",(0,o.kt)("inlineCode",{parentName:"p"},"tqdm>4.40.0")," is installed, or ",(0,o.kt)("inlineCode",{parentName:"p"},"tqdm")," is not installed (",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/5"},(0,o.kt)(r.Z,{icon:p.Z,mdxType:"InlineIcon"})," issue #5"),").")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix the same bug (mentioned by item 1) in the ",(0,o.kt)("inlineCode",{parentName:"p"},"setup.py")," script.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add change logs to ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/3.2.4-pypi"},(0,o.kt)(r.Z,{icon:d.Z,mdxType:"InlineIcon"})," PyPI release branch"),"."))),(0,o.kt)("h3",{id:"v323--4222022"},"V3.2.3 @ 4/22/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Fix a severe bug that causes the dependencies to be downloaded repeatedly.")),(0,o.kt)("h3",{id:"v322--4222022"},"V3.2.2 @ 4/22/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Fix a typo: ",(0,o.kt)("inlineCode",{parentName:"li"},"mpegCoder.__verion__")," ",(0,o.kt)(r.Z,{icon:l.Z,mdxType:"InlineIcon"})," ",(0,o.kt)("inlineCode",{parentName:"li"},"mpegCoder.__version__"),".")),(0,o.kt)("h3",{id:"v321--4222022"},"V3.2.1 @ 4/22/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix an issue caused by the missing dependency ",(0,o.kt)("inlineCode",{parentName:"p"},"libcrypto.so.1.1"),". This fixture is only required by the Linux version.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Format the PyPI release script."))),(0,o.kt)("h3",{id:"v320--482022"},"V3.2.0 @ 4/8/2022:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Upgrade to ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 5.0")," version.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix the const assignment bug caused by the codec configuration method.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(Only for Linux) Upgrade the dependencies of FFMpeg to the newest versions (",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/4"},(0,o.kt)(r.Z,{icon:p.Z,mdxType:"InlineIcon"})," issue #4"),").")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(About PyPI) Change the behavior of the PYPI ",(0,o.kt)("inlineCode",{parentName:"p"},".whl")," release. Now the dependencies will not be packed into ",(0,o.kt)("inlineCode",{parentName:"p"},".whl")," directly. When users ",(0,o.kt)("inlineCode",{parentName:"p"},"import mpegCoder")," for the first time, the dependency will be automatically downloaded. Please ensure that you have the authority to modify the ",(0,o.kt)("inlineCode",{parentName:"p"},"site-packages")," folder when you import ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," for the first time."))),(0,o.kt)("h3",{id:"v310--7232021"},"V3.1.0 @ 7/23/2021:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support ",(0,o.kt)("inlineCode",{parentName:"p"},"str()")," type for all string arguments.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support ",(0,o.kt)("inlineCode",{parentName:"p"},"http"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"ftp"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"sftp")," streams for ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support ",(0,o.kt)("inlineCode",{parentName:"p"},"nthread")," option for ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegEncoder"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug caused by the constructor ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer()"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Clean up all ",(0,o.kt)("inlineCode",{parentName:"p"},"gcc")," warnings of the source codes.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix typos in docstrings."))),(0,o.kt)("h3",{id:"v300-update-report"},"V3.0.0 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a severe memory leaking bugs when using ",(0,o.kt)("inlineCode",{parentName:"p"},"AVPacket"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug caused by using ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient.terminate()")," when a video is closed by the server.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Support the ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),". This class is used for serving the online video streams.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Refactor the implementation of the loggings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add ",(0,o.kt)("inlineCode",{parentName:"p"},"getParameter()")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"setParameter(configDict)")," APIs to ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Move ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg")," depedencies and the ",(0,o.kt)("inlineCode",{parentName:"p"},"OutputStream")," class to the ",(0,o.kt)("inlineCode",{parentName:"p"},"cmpc")," space.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix dependency issues and cpp standard issues.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Upgrade to ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 4.4")," Version.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add a quick script for fetching the ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg")," dependencies."))),(0,o.kt)("h3",{id:"v205-update-report"},"V2.05 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a severe bug that causes the memory leak when using ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient"),".This bug also exists in ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder"),", but it seems that the bug would not cause memory leak in that case. (Although we have also fixed it now.)")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Upgrade to ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 4.0")," Version."))),(0,o.kt)("h3",{id:"v201-update-report"},"V2.01 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix a bug that occurs when the first received frame may has a PTS larger than zero.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enable the project produce the newest ",(0,o.kt)("inlineCode",{parentName:"p"},"FFMpeg 3.4.2")," version and use ",(0,o.kt)("inlineCode",{parentName:"p"},"Python 3.6.4"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"numpy 1.14"),". "))),(0,o.kt)("h3",{id:"v20-update-report"},"V2.0 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Revise the bug of the encoder which may cause the stream duration is shorter than the real duration of the video in some not advanced media players.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Improve the structure of the code and remove some unnecessary codes.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Provide a complete version of client, which could demux the video stream from a server in any network protocol."))),(0,o.kt)("h3",{id:"v18-update-report"},"V1.8 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Provide options ",(0,o.kt)("inlineCode",{parentName:"p"},"(widthDst, heightDst)")," to let ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," could control the output size manually. To ensure the option is valid, we must use the method ",(0,o.kt)("inlineCode",{parentName:"p"},"setParameter")," before ",(0,o.kt)("inlineCode",{parentName:"p"},"FFmpegSetup"),". Now you could use this options to get a rescaled output directly:"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-python"}," d = mpegCoder.MpegDecoder() # initialize\n d.setParameter(widthDst=400, heightDst=300) # noted that these options must be set before 'FFmpegSetup'! \n d.FFmpegSetup(b'i.avi') # the original video size would not influence the output\n print(d) # examine the parameters. You could also get the original video size by 'getParameter'\n d.ExtractFrame(0, 100) # get 100 frames with 400x300\n")),(0,o.kt)("p",{parentName:"li"},"In another example, the set optional parameters could be inherited by encoder, too:"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-python"}," d.setParameter(widthDst=400, heightDst=300) # set optional parameters\n ...\n e.setParameter(decoder=d) # the width/height would inherit from widthDst/heightDst rather than original width/height of the decoder.\n")),(0,o.kt)("p",{parentName:"li"},"Noted that we do not provide ",(0,o.kt)("inlineCode",{parentName:"p"},"widthDst"),"/",(0,o.kt)("inlineCode",{parentName:"p"},"heightDst")," in ",(0,o.kt)("inlineCode",{parentName:"p"},"getParameter"),", because these 2 options are all set by users. There is no need to get them from the video metadata. ")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Optimize some realization of Decoder so that its efficiency could be improved."))),(0,o.kt)("h3",{id:"v17-linux-update-report"},"V1.7-linux update report:"),(0,o.kt)("p",null,"Thanks to God, we succeed in this work!"),(0,o.kt)("p",null,"A new version is avaliable for Linux. To implement this tool, you need to install some libraries firstly:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"python3.5")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"numpy 1.13"))),(0,o.kt)("p",null,"If you want, you could install ",(0,o.kt)("inlineCode",{parentName:"p"},"ffmpeg")," on Linux: Here are some instructions"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Check every pack which ffmpeg needs here: ",(0,o.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu",title:"Dependency of FFmpeg"},"Dependency of FFmpeg"))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Use these steps to install ffmpeg instead of provided commands on the above site."))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-Bash"}," $ git clone https://git.ffmpeg.org/ffmpeg.git\n $ cd ffmpeg\n $ ./configure --prefix=host --enable-gpl --enable-libx264 --enable-libx265 --enable-shared --disable-static --disable-doc\n $ make\n $ make install\n")),(0,o.kt)("h3",{id:"v17-update-report"},"V1.7 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Realize the encoder totally.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Provide a global option ",(0,o.kt)("inlineCode",{parentName:"p"},"dumpLevel")," to control the log shown in the screen.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fix bugs in initialize functions."))),(0,o.kt)("h3",{id:"v15-update-report"},"V1.5 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Provide an incomplete version of encoder, which could encode frames as a video stream that could not be played by player.")),(0,o.kt)("h3",{id:"v14-update-report"},"V1.4 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Fix a severe bug of the decoder, which causes the memory collapsed if decoding a lot of frames.")),(0,o.kt)("h3",{id:"v12-update-report"},"V1.2 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Use numpy array to replace the native pyList, which improves the speed significantly.")),(0,o.kt)("h3",{id:"v10-update-report"},"V1.0 update report:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Provide the decoder which could decode videos in arbitrary formats and arbitrary coding.")))}N.isMDXComponent=!0},6552:function(e,t){t.Z={body:''}},36:function(e,t){t.Z={body:''}},3119:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/753ab2c1.f6468f87.js b/assets/js/753ab2c1.f6468f87.js new file mode 100644 index 0000000..55df3f6 --- /dev/null +++ b/assets/js/753ab2c1.f6468f87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[6378],{5549:function(e,t,n){n.d(t,{A:function(){return i},q:function(){return l}});var r=n(7294),a=n(9960),o="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=o+"/"+e.url}else t=d+"/"+e.url;return r.createElement(a.Z,{to:t,className:"noline"},e.children)}function l(e){return r.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}l.defaultProps={padx:"1ex"}},6021:function(e,t,n){n.r(t),n.d(t,{assets:function(){return f},contentTitle:function(){return p},default:function(){return v},frontMatter:function(){return u},metadata:function(){return m},toc:function(){return h}});var r=n(3117),a=n(102),o=(n(7294),n(3905)),d=n(5514),i=n(7795),l=n(7508),s=n(5549),c=["components"],u={id:"readme",title:"readme",sidebar_label:"readme",slug:"/apis/readme",description:"Use it to see README and some useful instructions."},p=void 0,m={unversionedId:"apis/readme",id:"version-3.2.x/apis/readme",title:"readme",description:"Use it to see README and some useful instructions.",source:"@site/versioned_docs/version-3.2.x/apis/readme.mdx",sourceDirName:"apis",slug:"/apis/readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/readme",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/apis/readme.mdx",tags:[],version:"3.2.x",frontMatter:{id:"readme",title:"readme",sidebar_label:"readme",slug:"/apis/readme",description:"Use it to see README and some useful instructions."},sidebar:"apis",previous:{title:"Overview",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/"},next:{title:"setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/setGlobal"}},f={},h=[{value:"Arguments",id:"arguments",level:2},{value:"Example",id:"example",level:2}],g={toc:h};function v(e){var t=e.components,n=(0,a.Z)(e,c);return(0,o.kt)("wrapper",(0,r.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)(d.Z,{icon:i.Z,mdxType:"InlineIcon"})," Function",(0,o.kt)(s.q,{mdxType:"Splitter"}),(0,o.kt)(s.A,{ver:"3.2.0",url:"MpegPyd.h#L158",mdxType:"SourceURL"},(0,o.kt)(d.Z,{icon:l.Z,mdxType:"InlineIcon"})," Source")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.readme()\n")),(0,o.kt)("p",null,"A function used for showing a short README and updating logs."),(0,o.kt)("h2",{id:"arguments"},"Arguments"),(0,o.kt)("p",null,"This function does not has arguments."),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.readme()\n")))}v.isMDXComponent=!0},7795:function(e,t){t.Z={body:'',width:24,height:24}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/774473e5.1e13cbeb.js b/assets/js/774473e5.1e13cbeb.js new file mode 100644 index 0000000..eba34ee --- /dev/null +++ b/assets/js/774473e5.1e13cbeb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[5563],{7207:function(e,n,t){t.r(n),t.d(n,{assets:function(){return g},contentTitle:function(){return u},default:function(){return k},frontMatter:function(){return c},metadata:function(){return h},toc:function(){return v}});var r=t(3117),a=t(102),o=(t(7294),t(3905)),i=t(541),s=t(5514),d=t(2895),l=t(5099),p=t(1533),m=["components"],c={id:"server",title:"Pushing a video stream",sidebar_label:"Server",slug:"/examples/server",description:"Example codes for pushing a stream on the server side."},u=void 0,h={unversionedId:"guides/examples/server",id:"guides/examples/server",title:"Pushing a video stream",description:"Example codes for pushing a stream on the server side.",source:"@site/docs/guides/examples/server.mdx",sourceDirName:"guides/examples",slug:"/examples/server",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/server",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/examples/server.mdx",tags:[],version:"current",frontMatter:{id:"server",title:"Pushing a video stream",sidebar_label:"Server",slug:"/examples/server",description:"Example codes for pushing a stream on the server side."},sidebar:"docs",previous:{title:"Client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/client"},next:{title:"Troubleshooting",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/troubleshooting"}},g={},v=[{value:"Preparation",id:"preparation",level:2},{value:"Non-blocking example",id:"non-blocking-example",level:2},{value:"Dual-process example",id:"dual-process-example",level:2}],f={toc:v};function k(e){var n=e.components,t=(0,a.Z)(e,m);return(0,o.kt)("wrapper",(0,r.Z)({},f,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"preparation"},"Preparation"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"ffserver")," has been removed after FFMpeg ",(0,o.kt)("inlineCode",{parentName:"p"},"3.4")," (see the docs ",(0,o.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/ffserver",title:"ffserver"},"here",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"})),"). In other words, FFMpeg could not work without a server program. The same case exists in our ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". Users need to start a server program first. The server program will keeps listening and waiting for any pushed streams. After that, ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," would push the stream to the server by ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegServer"),"."),(0,o.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"It is also supported if you push a stream with ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," and receive the same stream with ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegClient")," in the same time. But we recommend users to run ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient")," on different devices, because the encoder implemented in ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," may occupy a lot of system resources."))),(0,o.kt)("p",null,"We recommend the following video server projects. User could choose one from them according to their requirements."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Project"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Windows"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Linux"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/aler9/rtsp-simple-server",title:"RTSP Simple Server"},"RTSP Simple Server",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/klaxa/mkvserver_mk2/blob/master/Makefile",title:"Matroska Server Mk2"},"Matroska Server Mk2",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://ossrs.net/releases",title:"Simple Realtime Server"},"Simple Realtime Server",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"}))))),(0,o.kt)("p",null,"Take ",(0,o.kt)("em",{parentName:"p"},"RTSP Simple Server")," on Windows as an example. We only need to launch the server program by one command:"),(0,o.kt)("p",null,(0,o.kt)("img",{style:{maxWidth:"800px",width:"100%"},src:p.Z,alt:"Launch the RTSP Simple Server"})),(0,o.kt)("p",null,"When the server is listening, we could use the following addresses for the testings"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"rtsp://localhost:8554/\nrtmp://localhost:1935/\n")),(0,o.kt)("h2",{id:"non-blocking-example"},"Non-blocking example"),(0,o.kt)("p",null,"This example is based on the non-blocking API ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),". Synchronization is an important problem when pushing a stream. If we keeps using ",(0,o.kt)("inlineCode",{parentName:"p"},"ServeFrame()"),", the frames would be sent as many as possible. The newly income frames would override the previous pushed frames. In some cases, the server would be broken, because the server could not accept so many frames."),(0,o.kt)("p",null,"To make the server works properly, we need to push the frames according to the video timestamp. When ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.FFmpegSetup()")," is called, we mark this time point as a starting time. ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," will maintain a timer. Everytime users call ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.getParemeter('waitRef')"),", the method would returns a waiting period, indicating how long the pushed video stream is ahead of the playing time. The waiting period is half of the aforementioned time lag (the unit of the returned value is ",(0,o.kt)("em",{parentName:"p"},"second"),"). If we have pushed too much frames, we need to let the server wait for a while."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python",metastring:'{16,19-20} title="server-non-blocking.py" showLineNumbers',"{16,19-20}":!0,title:'"server-non-blocking.py"',showLineNumbers:!0},"import time\nimport mpegCoder\n\nd = mpegCoder.MpegDecoder()\nopened = d.FFmpegSetup('test-video.mp4')\ne = mpegCoder.MpegServer()\ne.setParameter(configDict=d.getParameter(), codecName='libx264', videoAddress='rtsp://localhost:8554/video') # inherit most of parameters from the decoder.\nopened = opened and e.FFmpegSetup() # Load the pusher.\nif opened: # If the decoder and the pusher are not loaded successfully, do not continue.\n gop = True\n s = 0\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\n if gop is not None:\n for i in gop: # Select every frame.\n e.ServeFrame(i) # Serve current frame.\n s += 1\n if s == 10: # Wait for synchronization for each 10 frames.\n wait = e.getParameter('waitRef')\n time.sleep(wait)\n s = 0\n e.FFmpegClose() # End encoding and pushing, and flush all frames in cache.\nelse:\n print(e)\ne.clear() # Close the pusher.\nd.clear() # Close the decoder.\n")),(0,o.kt)("h2",{id:"dual-process-example"},"Dual-process example"),(0,o.kt)("p",null,"The above example is not an elegant implementation, because ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," occupy the same main thread. When decoder takes a lot of time, there would be an obvious latency. Therefore, we suggest users to split ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," to two different sub-processes. The following codes are implemented by this way. The decoder and the streamer are synchronized by a shared queue. Instead of using ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),", we use ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrameBlock()")," here. Each time this method is called, ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," will check the current playing time first, and ensure that the timestamp of the newly incoming frame is not ahead of the playing time too much. If the time lag between the new frame and the playing time is too long, the method will wait until the time lag becomes small enough."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python",metastring:'{14,21,23,37,43,45} title="server-dual-procs.py" showLineNumbers',"{14,21,23,37,43,45}":!0,title:'"server-dual-procs.py"',showLineNumbers:!0},"import mpegCoder\nimport multiprocessing\n\n\nclass Decoder(multiprocessing.Process):\n def __init__(self, video_name='test-video.mp4', q_o=None, name=None, daemon=None):\n super().__init__(name=name, daemon=daemon)\n self.video_name = video_name\n self.q_o = q_o\n\n def run(self):\n d = mpegCoder.MpegDecoder()\n opened = d.FFmpegSetup(self.video_name)\n self.q_o.put(d.getParameter())\n if opened:\n gop = True\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\n if gop is not None:\n for i in gop: # Select every frame.\n self.q_o.put(i)\n else:\n self.q_o.put(None)\n else:\n print(d)\n d.clear()\n\n\nclass Encoder(multiprocessing.Process):\n def __init__(self, video_addr='rtsp://localhost:8554/video', q_i=None, name=None, daemon=None):\n super().__init__(name=name, daemon=daemon)\n self.video_addr = video_addr\n self.q_i = q_i\n\n def run(self):\n e = mpegCoder.MpegServer()\n config_dict = self.q_i.get() # Get decoder configurations.\n e.setParameter(configDict=config_dict, codecName='libx264', maxBframe=16, videoAddress=self.video_addr)\n opened = e.FFmpegSetup()\n if opened: # If pusher is not loaded successfully, do not continue.\n frame = True\n while frame is not None:\n frame = self.q_i.get() # Get one frame.\n if frame is not None:\n e.ServeFrameBlock(frame) # Encode and serve the current frame.\n e.FFmpegClose() # End encoding, and flush all frames in cache.\n else:\n print(e)\n e.clear()\n\n\nif __name__ == '__main__':\n queue_data = multiprocessing.Queue(maxsize=20)\n proc_dec = Decoder(video_name='test-video.mp4', q_o=queue_data, daemon=True)\n proc_enc = Encoder(video_addr='rtsp://localhost:8554/video', q_i=queue_data, daemon=True)\n proc_dec.start()\n proc_enc.start()\n proc_enc.join()\n proc_dec.join()\n")),(0,o.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"In the above examples, we use ",(0,o.kt)("inlineCode",{parentName:"p"},"configDict")," for ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.setParameter()"),". The input value is a python dict returned by ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder.getParameter()"),". This API is equivalent to using ",(0,o.kt)("inlineCode",{parentName:"p"},"e.setParameter(decoder=d)"),". However, we have to use the equivalent API here, because all classes of ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," could not be pickled."))))}k.isMDXComponent=!0},1533:function(e,n,t){n.Z=t.p+"assets/images/server-dd63ab08f996ce882cf07555a28f9091.png"},2895:function(e,n){n.Z={body:''}},5099:function(e,n){n.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/777dafb9.0ab02ae6.js b/assets/js/777dafb9.0ab02ae6.js new file mode 100644 index 0000000..dcff7e6 --- /dev/null +++ b/assets/js/777dafb9.0ab02ae6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9960],{9361:function(e){e.exports=JSON.parse('{"title":"Troubleshooting","description":"Tackle the issues and questions.","slug":"/category/troubleshooting","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/category/troubleshooting","navigation":{"previous":{"title":"Server","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/server"},"next":{"title":"Installation","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/installation"}}}')}}]); \ No newline at end of file diff --git a/assets/js/8554faf7.b16a64b7.js b/assets/js/8554faf7.b16a64b7.js new file mode 100644 index 0000000..13d0e00 --- /dev/null +++ b/assets/js/8554faf7.b16a64b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[6799],{5549:function(e,t,a){a.d(t,{A:function(){return i},q:function(){return p}});var n=a(7294),r=a(9960),m="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",s="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=s+"/"+e.url;break;case"3.1.0":t=m+"/"+e.url}else t=s+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function p(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}p.defaultProps={padx:"1ex"}},9692:function(e,t,a){a.r(t),a.d(t,{assets:function(){return g},contentTitle:function(){return k},default:function(){return v},frontMatter:function(){return h},metadata:function(){return c},toc:function(){return u}});var n=a(3117),r=a(102),m=(a(7294),a(3905)),s=a(541),i=a(5514),p=a(6577),l=a(2895),d=a(7508),o=a(5549),N=["components"],h={id:"MpegServer",title:"MpegServer",sidebar_label:"MpegServer",slug:"/apis/MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly."},k=void 0,c={unversionedId:"apis/MpegServer",id:"version-3.1.0/apis/MpegServer",title:"MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly.",source:"@site/versioned_docs/version-3.1.0/apis/MpegServer.mdx",sourceDirName:"apis",slug:"/apis/MpegServer",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegServer",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/apis/MpegServer.mdx",tags:[],version:"3.1.0",frontMatter:{id:"MpegServer",title:"MpegServer",sidebar_label:"MpegServer",slug:"/apis/MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly."},sidebar:"version-3.1.0/apis",previous:{title:"MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegClient"}},g={},u=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"ServeFrame",id:"serveframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ServeFrameBlock",id:"serveframeblock",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"FFmpegClose",id:"ffmpegclose",level:3},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Optimize the video encoding",id:"optimize-the-video-encoding",level:3},{value:"Rescale and resample the video",id:"rescale-and-resample-the-video",level:3},{value:"Use multi-thread encoding",id:"use-multi-thread-encoding",level:3},{value:"Configure the ahead frame number manually",id:"configure-the-ahead-frame-number-manually",level:3}],f={toc:u};function v(e){var t=e.components,a=(0,r.Z)(e,N);return(0,m.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,m.kt)("p",null,(0,m.kt)(i.Z,{icon:p.Z,mdxType:"InlineIcon"})," Class",(0,m.kt)(o.q,{mdxType:"Splitter"}),(0,m.kt)(o.A,{ver:"3.1.0",url:"MpegStreamer.h#L114",mdxType:"SourceURL"},(0,m.kt)(i.Z,{icon:d.Z,mdxType:"InlineIcon"})," Source")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev = mpegCoder.MpegServer()\n")),(0,m.kt)("p",null,"The frame-level video stream service used for pushing an online video stream."),(0,m.kt)("p",null,"This service instance is integrated with the features of ",(0,m.kt)("a",{parentName:"p",href:"./MpegEncoder"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegEncoder")),". Like the ",(0,m.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg CLI usages",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),", ",(0,m.kt)("inlineCode",{parentName:"p"},"MpegServer")," could not be run independently. A server program is required to be launched before the instance getting set up. We recommend some server programs ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#preparation"},"here"),"."),(0,m.kt)("p",null,"In practice, we recommend to split this instance into a sub-process, and use the ",(0,m.kt)("a",{parentName:"p",href:"https://docs.python.org/3/library/multiprocessing.html",title:"multiprocessing | Python"},(0,m.kt)("inlineCode",{parentName:"a"},"multiprocessing"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to feed the served data. See the ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#dual-process-example"},"tutorial")," to find the example. Although this class also provides a non-blocking style API, we do not recommend users to use that. "),(0,m.kt)("h2",{id:"arguments"},"Arguments"),(0,m.kt)("p",null,"This class does not has initialization arguments."),(0,m.kt)("h2",{id:"methods"},"Methods"),(0,m.kt)("h3",{id:"clear"},(0,m.kt)("inlineCode",{parentName:"h3"},"clear")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.clear()\n")),(0,m.kt)("p",null,"Clear all configurations ",(0,m.kt)("strong",{parentName:"p"},"including")," the default video address. If a video is being pushed by the server, ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically, and release the connection to the server."),(0,m.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,m.kt)("div",{parentName:"div",className:"admonition-heading"},(0,m.kt)("h5",{parentName:"div"},(0,m.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,m.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,m.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,m.kt)("div",{parentName:"div",className:"admonition-content"},(0,m.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file writers."))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"resetpath"},(0,m.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.resetPath(videoAddress)\n")),(0,m.kt)("p",null,"Reset the default video address to a specific value. Configuring this value will not cause the video to be pushed. This method is merely used as a configuration."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be pushed.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"getparameter"},(0,m.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"param = sev.getParameter(paramName=None)\n")),(0,m.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,m.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"paramName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,m.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,m.kt)("p",null,"Here is a list of checkable ",(0,m.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The current address of the pushed video. If the video is not being pushed, will return the default video address.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"codecName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"formatName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The video format name guessed from ",(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"nthread")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"width")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the pushed video stream. This value is mainly determined by the user configurations.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"height")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the pushed video stream. This value is mainly determined by the user configurations.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,m.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,m.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the pushed video stream. The unit is FPS.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"A wait reference with the unit of ",(0,m.kt)("inlineCode",{parentName:"td"},"second"),". This value represents how long users need to wait from this moment before pushing the next video frame. This value is required to be used with the non-blocking API ",(0,m.kt)("a",{parentName:"td",href:"#serveframe"},(0,m.kt)("inlineCode",{parentName:"a"},"ServeFrame()")),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"ptsAhead")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target ahead time duration in the unit of time stamp. This value is used for controlling the amount of ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," and the waiting time of the blocking API. It is converted from the configuration ",(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead"),".")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"param")),(0,m.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,m.kt)("inlineCode",{parentName:"td"},"paramName")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,m.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"setparameter"},(0,m.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.setParameter(\n decoder=None, configDict=None, videoPath=None, codecName=None,\n nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None,\n GOPSize=None, maxBframe=None, frameRate=None, frameAhead=None\n)\n")),(0,m.kt)("p",null,"Set the configurations of the server. To make the configurations take effects, these parameters need to be configured before ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"decoder")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("a",{parentName:"td",href:"./MpegDecoder"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegDecoder"))," or ",(0,m.kt)("a",{parentName:"td",href:"./MpegClient"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegClient"))),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"When configure this argument, the required configurations will be copied from a decoder or a client. If users also provide duplicated arguments in the same call, these copied parameters have a lower preference than those specified by users. This argument is useful when trancoding a video.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"configDict")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"dict")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"An alternative of the argument ",(0,m.kt)("inlineCode",{parentName:"td"},"decoder")," when the parameters need to be passed through different processes. Using ",(0,m.kt)("inlineCode",{parentName:"td"},"configDict=decoder.getParameter()")," is equivalent to using ",(0,m.kt)("inlineCode",{parentName:"td"},"decoder=decoder"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The current address of the pushed video. If the video is not being pushed, will return the default video address.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"codecName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"formatName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The video format name guessed from ",(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"nthread")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"width")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the pushed video stream.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"height")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the pushed video stream.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,m.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,m.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"tuple")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the pushed video stream. This value should be a tuple of two ",(0,m.kt)("inlineCode",{parentName:"td"},"int"),"s: ",(0,m.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". This format is consistent with ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/structAVRational.html",title:"AVRational"},(0,m.kt)("inlineCode",{parentName:"a"},"AVRational"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target ahead frame number. This value is used for controlling the number of served frames. For example, ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," is calculated by the equation: ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mi",{parentName:"msub"},"w")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"T"),(0,m.kt)("mo",{parentName:"mrow"},"\xd7"),(0,m.kt)("mi",{parentName:"mrow"},"max"),(0,m.kt)("mo",{parentName:"mrow"},"\u2061"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,m.kt)("mn",{parentName:"mrow"},"0"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_w = T \\times \\max(N_{pushed} - N_{played} - N_{ahead},~ 0)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.02691em"}},"w")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7667em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\xd7"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mop"},"max"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.01968em"}},"pl"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ye"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ah"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace nobreak"},"\xa0"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"0"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{pushed}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{played}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.01968em"}},"pl"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ye"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{ahead}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ah"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," are the number of pushed frames, the number of played frames and ",(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead")," respectively. ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"T")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T")))))," is the time base. By this way, the ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," and the waiting time of the blocking API ",(0,m.kt)("a",{parentName:"td",href:"#serveframeblock"},(0,m.kt)("inlineCode",{parentName:"a"},"ServeFrameBlock()"))," will be controlled by this value. Users do not need to specify it explicitly, because it could be calculated from the configured ",(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"ffmpegsetup"},(0,m.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.FFmpegSetup(videoAddress=None)\n")),(0,m.kt)("p",null,"Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the protocol used by the serving address and the user configurations set by ",(0,m.kt)("a",{parentName:"p",href:"#setparameter"},(0,m.kt)("inlineCode",{parentName:"a"},"setParameter()")),". If an video is being pushed by the server now, this video will be disconnected and released first, then the new video will be pushed with the same configurations."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be pushed. If not given, will use the default path configured by ",(0,m.kt)("a",{parentName:"td",href:"#resetpath"},(0,m.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video address to change.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"dumpfile"},(0,m.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.dumpFile()\n")),(0,m.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,m.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,m.kt)("div",{parentName:"div",className:"admonition-heading"},(0,m.kt)("h5",{parentName:"div"},(0,m.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,m.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,m.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,m.kt)("div",{parentName:"div",className:"admonition-content"},(0,m.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"serveframe"},(0,m.kt)("inlineCode",{parentName:"h3"},"ServeFrame")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"is_success = sev.ServeFrame(PyArrayFrame)\n")),(0,m.kt)("p",null,"Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the stream. But the writting to the codec buffer will be finished instantly."),(0,m.kt)("p",null,"This is the non-blocking API, which means the current thread will be only blocked by the frame encoding operations. Users need to use this API with ",(0,m.kt)("a",{parentName:"p",href:"#getparameter"},(0,m.kt)("inlineCode",{parentName:"a"},"getParameter('waitRef')"))," to control the number of served frames. Otherwise, serving too many frames will make the data to be dropped or cause the video server to collapse. The example about how to correctly use this API could be found ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#non-blocking-example"},"here"),"."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,m.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"is_success")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bool")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"serveframeblock"},(0,m.kt)("inlineCode",{parentName:"h3"},"ServeFrameBlock")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"is_success = sev.ServeFrameBlock(PyArrayFrame)\n")),(0,m.kt)("p",null,"Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the stream. The writting and pushing speeds to the codec buffer are controlled by user configurations."),(0,m.kt)("p",null,"This is the ",(0,m.kt)("strong",{parentName:"p"},"recommended")," blocking API, which means the method will cause the current thread blocked if the served frames are ahead of the playing time too much. In this case, the method will wait until the playing time catch the half of the served but not played frames. This method will ensure the safety of the video server."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,m.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"is_success")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bool")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"h3"},"FFmpegClose")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.FFmpegClose()\n")),(0,m.kt)("p",null,"Close the video stream and release the connection. Calling this method will flush all buffered frames into the video stream. In some cases, the video tail will be writen to the stream. If users does not call this method explicitly, it will be called when ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," is called or when the server is destructed."),(0,m.kt)("h2",{id:"operators"},"Operators"),(0,m.kt)("h3",{id:"__str__"},(0,m.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"info = str(sev)\n")),(0,m.kt)("p",null,"Return a brief report of the current stream encoder status."),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"info")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"A brief report of the stream encoder status, the configurations and parameters will be listed as formatted texts.")))),(0,m.kt)("h2",{id:"examples"},"Examples"),(0,m.kt)("p",null,"See ",(0,m.kt)("a",{parentName:"p",href:"../examples/server"},(0,m.kt)("em",{parentName:"a"},(0,m.kt)("inlineCode",{parentName:"em"},"Server")))," in the tutorial. Here we also show some specific configurations:"),(0,m.kt)("h3",{id:"optimize-the-video-encoding"},"Optimize the video encoding"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\n...\nsev = mpegCoder.MpegServer()\nsev.setParameter(decoder=dec, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, maxBframe=16)\n...\n")),(0,m.kt)("h3",{id:"rescale-and-resample-the-video"},"Rescale and resample the video"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(width=1280, height=720, frameRate=(5, 1), GOPSize=12, codecName='libx265', videoAddress='rtsp://localhost:8554/video')\n...\n")),(0,m.kt)("h3",{id:"use-multi-thread-encoding"},"Use multi-thread encoding"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(width=1280, height=720, GOPSize=12, nthread=8, videoAddress='rtsp://localhost:8554/video')\n...\n")),(0,m.kt)("h3",{id:"configure-the-ahead-frame-number-manually"},"Configure the ahead frame number manually"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(decoder=d, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, frameAhead=48)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/85febae5.8ea54dbf.js b/assets/js/85febae5.8ea54dbf.js new file mode 100644 index 0000000..d62b735 --- /dev/null +++ b/assets/js/85febae5.8ea54dbf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[4371],{8793:function(e,t,n){var o=n(7294),r=n(9960),a=n(1954),i=n(2949);t.Z=function(e){var t=(0,o.useState)(!1),n=t[0],l=t[1];(0,o.useEffect)((function(){l(!0)}),[]);var s,u,p,d=(s=(0,i.I)(),u=s.colorMode,s.setColorMode,"dark"===u?"button--secondary button--outline":"button--secondary");return p=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",o.createElement(r.Z,{key:String(n),className:p,to:e.to},e.icon&&o.createElement(a.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1692:function(e,t,n){n.r(t),n.d(t,{assets:function(){return c},contentTitle:function(){return d},default:function(){return k},frontMatter:function(){return p},metadata:function(){return m},toc:function(){return h}});var o=n(3117),r=n(102),a=(n(7294),n(3905)),i=n(8793),l=n(541),s=n(3807),u=["components"],p={id:"running",title:"Troubleshooting for running",sidebar_label:"Running",slug:"/troubleshooting/running",description:"The troubleshooting for running mpegCoder."},d=void 0,m={unversionedId:"troubleshooting/running",id:"troubleshooting/running",title:"Troubleshooting for running",description:"The troubleshooting for running mpegCoder.",source:"@site/docs/troubleshooting/running.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/running",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/troubleshooting/running.mdx",tags:[],version:"current",frontMatter:{id:"running",title:"Troubleshooting for running",sidebar_label:"Running",slug:"/troubleshooting/running",description:"The troubleshooting for running mpegCoder."},sidebar:"docs",previous:{title:"Installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/installation"},next:{title:"Q&A",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/qna"}},c={},h=[{value:"Introduction",id:"introduction",level:2},{value:"Questions and answers",id:"questions-and-answers",level:2},{value:"Fail to decode first frame",id:"fail-to-decode-first-frame",level:3},{value:"Fail to encode frames",id:"fail-to-encode-frames",level:3},{value:"Bad output video",id:"bad-output-video",level:3},{value:"Stuck of the streamer",id:"stuck-of-the-streamer",level:3},{value:"Fail to push the stream",id:"fail-to-push-the-stream",level:3},{value:"Set log level",id:"set-log-level",level:3},{value:"Reuse the instances",id:"reuse-the-instances",level:3}],g={toc:h};function k(e){var t=e.components,n=(0,r.Z)(e,u);return(0,a.kt)("wrapper",(0,o.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"If you could not find your problem in this page, please fire an issue:"),(0,a.kt)("p",null,(0,a.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/new/choose",icon:s.Z,mdxType:"DarkButton"},"Fire an issue")),(0,a.kt)("h2",{id:"questions-and-answers"},"Questions and answers"),(0,a.kt)("h3",{id:"fail-to-decode-first-frame"},"Fail to decode first frame"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Why is the first frame not able to be decoded correctly? The returned frame is totally black.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem often occurs when using ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegClient"),", especially when demuxing the RTSP stream. In some video codec formats, there are I, P, and B frames. The I frame is required for decoding other frames. If the first received frame from the remote stream is not an I frame, you could not decode the frame correctly. This problem should be fixed if you let your client running for a while."))),(0,a.kt)("h3",{id:"fail-to-encode-frames"},"Fail to encode frames"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When encoding frames, why does ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," collapse?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": You may send incorrect data to ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegEncoder.EncodeFrame()"),". The input value should be a 3D ",(0,a.kt)("a",{parentName:"p",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,a.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,a.kt)(l.Z,{mdxType:"IconExternalLink"})),". The size of this array requires to be consistent with the configuration of the encoder."))),(0,a.kt)("h3",{id:"bad-output-video"},"Bad output video"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I am working with ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegEncoder"),". Why is the output video broken?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": There are two typical cases for the bad output video. Please check whether you meet such cases:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"The video tail is not written correctly. This problem is often caused by a sudden termination of the program."),(0,a.kt)("li",{parentName:"ul"},"Some of the input frames are not correctly written.")))),(0,a.kt)("h3",{id:"stuck-of-the-streamer"},"Stuck of the streamer"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When using ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegClient")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer"),", why is the program stucked?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem is often caused by ",(0,a.kt)("inlineCode",{parentName:"p"},"streamer.FFmpegSetup()"),", especially when the remote server program is not launched, or the stream protocol is not accepted by the server. I have to admit that I should add a timeout option in the future."))),(0,a.kt)("h3",{id:"fail-to-push-the-stream"},"Fail to push the stream"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I could connect the server by ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer.FFmpegSetup()")," successfully. Why am I not able to serve the first frame by ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem is often caused by using a wrong codec. Not all codecs are supported for the online streaming. We recommend users to use ",(0,a.kt)("inlineCode",{parentName:"p"},"libx264"),"."))),(0,a.kt)("h3",{id:"set-log-level"},"Set log level"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I do not want the logs shown in the prompt, how to disable them?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": We provide a global configuration method to do that:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=0)\n")),(0,a.kt)("p",{parentName:"li"},"This value could be ",(0,a.kt)("inlineCode",{parentName:"p"},"0")," (only show errors), ",(0,a.kt)("inlineCode",{parentName:"p"},"1")," (show basic logs), ",(0,a.kt)("inlineCode",{parentName:"p"},"2")," (show detailed logs)."))),(0,a.kt)("h3",{id:"reuse-the-instances"},"Reuse the instances"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Can I reuse the same instance of ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", for example, the ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegDecoder"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Of course. Remember to call ",(0,a.kt)("inlineCode",{parentName:"p"},"clear()")," before reusing the instance."))))}k.isMDXComponent=!0},3807:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/869549d8.e7d9dc4e.js b/assets/js/869549d8.e7d9dc4e.js new file mode 100644 index 0000000..39b9e4d --- /dev/null +++ b/assets/js/869549d8.e7d9dc4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7023],{3733:function(e,t,n){n.r(t),n.d(t,{assets:function(){return s},contentTitle:function(){return l},default:function(){return u},frontMatter:function(){return r},metadata:function(){return c},toc:function(){return p}});var o=n(3117),a=n(102),i=(n(7294),n(3905)),d=(n(541),["components"]),r={id:"transcoding",title:"Transcoding a video",sidebar_label:"Transcoding",slug:"/examples/transcoding",description:"Example codes for encoding or transcoding a video."},l=void 0,c={unversionedId:"guides/examples/transcoding",id:"version-3.1.0/guides/examples/transcoding",title:"Transcoding a video",description:"Example codes for encoding or transcoding a video.",source:"@site/versioned_docs/version-3.1.0/guides/examples/transcoding.mdx",sourceDirName:"guides/examples",slug:"/examples/transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/transcoding",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/examples/transcoding.mdx",tags:[],version:"3.1.0",frontMatter:{id:"transcoding",title:"Transcoding a video",sidebar_label:"Transcoding",slug:"/examples/transcoding",description:"Example codes for encoding or transcoding a video."},sidebar:"version-3.1.0/docs",previous:{title:"Decoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/decoding"},next:{title:"Client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/client"}},s={},p=[{value:"Optimize the output video",id:"optimize-the-output-video",level:2},{value:"Rescaling and resampling",id:"rescaling-and-resampling",level:2}],m={toc:p};function u(e){var t=e.components,n=(0,a.Z)(e,d);return(0,i.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The following codes show an example of encoding and muxing a new video file. Although we are transcoding a video, the input of the encoder could be any data."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:'{12,14-15} title="transcoding.py"',"{12,14-15}":!0,title:'"transcoding.py"'},"import mpegCoder\n\nd = mpegCoder.MpegDecoder()\nd.setParameter(nthread=4)\nopened = d.FFmpegSetup('test-video.mp4') # Setup the decoder\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', nthread=8) # inherit most of parameters from the decoder.\nopened = opened and e.FFmpegSetup() # Setup the encoder.\nif opened: # If either the decoder or the encoder is not loaded successfully, do not continue.\n p = True\n while p is not None:\n p = d.ExtractGOP() # Extract current GOP.\n if p is not None:\n for i in p: # Iterate every frame.\n e.EncodeFrame(i) # Encode current frame.\n e.FFmpegClose() # End encoding, and flush all frames in cache.\ne.clear() # Clean configs of the encoder.\nd.clear() # Close configs of the decoder.\n")),(0,i.kt)("p",null,"In this example, we decode an existing video file, and encode a new video by ",(0,i.kt)("inlineCode",{parentName:"p"},"x265")," codec. The most widely used video codecs are ",(0,i.kt)("inlineCode",{parentName:"p"},"libxvid"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libx264"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libx265"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libvp9"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libsvtav1"),". Most of the encoder configurations are copied from the opened decoder. So the output video would share the same GOP size, consecutive B frame number, picture size, bit rate and frame rate of the input video. We also reconfigure the thread number of the encoder by ",(0,i.kt)("inlineCode",{parentName:"p"},"8"),"."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Some codec may not work with multi-threading. In this case, after we call ",(0,i.kt)("inlineCode",{parentName:"p"},"FFmpegSetup()"),", the configuration of the threading number would be corrected as ",(0,i.kt)("inlineCode",{parentName:"p"},"1")," automatically."))),(0,i.kt)("p",null,"In each while loop, we read a GOP, iterate the GOP, and encode the data frame-by-frame. After all frames are encoded, the ",(0,i.kt)("inlineCode",{parentName:"p"},"mp4")," file tail would be dumped into the output video."),(0,i.kt)("p",null,"If user trigger ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," during the while loop, the video could be still completed safely. However, if users hit ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," by twice, the output video would be broken, because the video tail has not been written correctly."),(0,i.kt)("h2",{id:"optimize-the-output-video"},"Optimize the output video"),(0,i.kt)("p",null,"In the above example, the output video may not be encoded by an optimized configuration. The x265 codec could accept a maximal consecutive B frame number of ",(0,i.kt)("inlineCode",{parentName:"p"},"<=16"),". We could also configure the output bit rate manually. Therefore, if we change the configuraitons like the following example, the output video file size would be reduced significantly."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16, bitRate=48.0, nthread=8)\nopened = opened and e.FFmpegSetup()\n...\n")),(0,i.kt)("h2",{id:"rescaling-and-resampling"},"Rescaling and resampling"),(0,i.kt)("p",null,"In some cases, we may want to rescale the output video size, and resample the output frames,"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', width=720, height=486, frameRate=(5, 1), nthread=8)\nopened = opened and e.FFmpegSetup()\n...\n")),(0,i.kt)("p",null,"This example would rescale the output frame to 720x486, and resample the output frame rate as 5 FPS. In this case, when we call ",(0,i.kt)("inlineCode",{parentName:"p"},"e.EncodeFrame(i)"),", the frame ",(0,i.kt)("inlineCode",{parentName:"p"},"i")," may be not in the size of 720x486, but ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," could scale it automatically."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8894.ec66c47d.js b/assets/js/8894.ec66c47d.js new file mode 100644 index 0000000..8f00771 --- /dev/null +++ b/assets/js/8894.ec66c47d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8894],{8894:function(e,c,p){p.r(c)}}]); \ No newline at end of file diff --git a/assets/js/8dd5433b.f9c9a57a.js b/assets/js/8dd5433b.f9c9a57a.js new file mode 100644 index 0000000..d3afb76 --- /dev/null +++ b/assets/js/8dd5433b.f9c9a57a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8126],{5549:function(e,t,a){a.d(t,{A:function(){return d},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",l="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function d(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=l+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=l+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},7791:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return h},default:function(){return f},frontMatter:function(){return c},metadata:function(){return k},toc:function(){return N}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),l=(a(541),a(5514)),d=a(6577),o=a(2895),m=a(7508),p=a(5549),s=["components"],c={id:"MpegClient",title:"MpegClient",sidebar_label:"MpegClient",slug:"/apis/MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly."},h=void 0,k={unversionedId:"apis/MpegClient",id:"apis/MpegClient",title:"MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly.",source:"@site/docs/apis/MpegClient.mdx",sourceDirName:"apis",slug:"/apis/MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegClient",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/apis/MpegClient.mdx",tags:[],version:"current",frontMatter:{id:"MpegClient",title:"MpegClient",sidebar_label:"MpegClient",slug:"/apis/MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly."},sidebar:"apis",previous:{title:"MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegEncoder"},next:{title:"MpegServer",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegServer"}},u={},N=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"start",id:"start",level:3},{value:"terminate",id:"terminate",level:3},{value:"ExtractFrame",id:"extractframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Scale the decoded frame",id:"scale-the-decoded-frame",level:3},{value:"Configure the cache size",id:"configure-the-cache-size",level:3},{value:"Use multi-thread decoding",id:"use-multi-thread-decoding",level:3}],g={toc:N};function f(e){var t=e.components,a=(0,r.Z)(e,s);return(0,i.kt)("wrapper",(0,n.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:d.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(p.q,{mdxType:"Splitter"}),(0,i.kt)(p.A,{ver:"3.2.0",url:"MpegStreamer.h#L49",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln = mpegCoder.MpegClient()\n")),(0,i.kt)("p",null,"The frame-level video stream client used for demuxing an online video stream."),(0,i.kt)("p",null,"This client instance is integrated with the features of ",(0,i.kt)("a",{parentName:"p",href:"./MpegDecoder"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegDecoder")),". The connection to the video server is established by ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". When the client is working, it will manage a background sub-thread for fetching the remote frames consecutively. The fetched frames are saved in a circular buffer. The method ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()"))," always return the latest received frames. To learn more details, please review the ",(0,i.kt)("a",{parentName:"p",href:"../examples/client#introduction"},"description of the theory"),"."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegClient")," requires users to initialize the decoding before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the client is destructed. ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegClient")," also supports threading control. When the client is connected to the server, users could use ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()"))," to keep the buffer synchronized with the video stream. Calling ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," will force the buffer updating to stop. In this case, the method ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()"))," will always return the same results."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("p",null,"This class does not has initialization arguments."),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"except")," the default video address. If a video stream is alredy opened, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will release the connection automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file readers. No matter when ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()"))," is called, this method could be used safely without calling ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()")),"."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.resetPath(videoAddress)\n")),(0,i.kt)("p",null,"Reset the default video address to a specific value. Configuring this value will not cause the video stream to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The address of the video to be read.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = cln.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current address of the read video. If the video stream is not opened, will return the default video address.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the read video. This value is determined by the video stream.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the read video. This value is determined by the video stream.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameCount")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of returned frames in the last frame extraction method.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"coderName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the codec used for decoding the video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"duration")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The total seconds of this video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"estFrameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The estimated total frame number (may be not accurate).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"srcFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The average frame rate of the source video stream. The unit is FPS. The actual frame rate may be changed on client side.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters. These parameters could serve as ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict")," for ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegEncoder")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegServer"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.setParameter(widthDst=None, heightDst=None, cacheSize=None, readSize=None, dstFrameRate=None, nthread=None)\n")),(0,i.kt)("p",null,"Set the configurations of the client. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"cacheSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of allocated avaliable frames in the cache. We recommend to configure this value as ",(0,i.kt)("inlineCode",{parentName:"td"},"2*readSize"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"dstFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"tuple")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The destination FPS of the stream. This value should be formatted as a factor defined as ",(0,i.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". Configuing this value will cause the received frames to be resampled.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.FFmpegSetup(videoAddress=None)\n")),(0,i.kt)("p",null,"Open the online video stream, and initialize the decoder. After the client initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video stream connection is established by the client now, this connection will be released first, then the new video stream will be opened."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be read. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"start"},(0,i.kt)("inlineCode",{parentName:"h3"},"start")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.start()\n")),(0,i.kt)("p",null,"Start the demuxing thread. The started sub-thread will keep receiving remote frames to ensure the client buffer is synchronized with the online video stream."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method must be called after ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". Once this method is called, users are not allowed to call it again until ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," is called or the client is restarted by ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"terminate"},(0,i.kt)("inlineCode",{parentName:"h3"},"terminate")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.terminate()\n")),(0,i.kt)("p",null,"Terminate the current demuxing thread. This method is required to be called after ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()")),'. It will stop the frame receiving, and make the played video to be "paused". In this case, the frame receiving could be started again by ',(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()")),"."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method must be called after ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". Calling this method will not cause the current connection aborted. Only ",(0,i.kt)("a",{parentName:"p",href:"#clear"},(0,i.kt)("inlineCode",{parentName:"a"},"clear()"))," could release the connection explicitly."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = cln.ExtractFrame(readSize=0)\n")),(0,i.kt)("p",null,"Read the latest several frames from the circular buffer."),(0,i.kt)("p",null,"This method is merely a reading method, and not decode frames. Instead, the decoding is managed by the sub-thread. ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractFrame()")," always fetch the several frames that are latestly decoded. Even ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," is called, this method could be still used safely."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"readSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of the frames to be read. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0"),", will use the default ",(0,i.kt)("inlineCode",{parentName:"td"},"readSize")," configured by ",(0,i.kt)("a",{parentName:"td",href:"#setparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"setParameter()")),".")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"readSize")," (no matter whether the video reaches its end), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no valid frames are received, this method would return several frames that are totally black.")))),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(cln)\n")),(0,i.kt)("p",null,"Return a brief report of the current client status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the client status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/client"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Client")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"scale-the-decoded-frame"},"Scale the decoded frame"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\ncln.setParameter(widthDst=720, heightDst=486)\n...\n")),(0,i.kt)("h3",{id:"configure-the-cache-size"},"Configure the cache size"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\n# Assume that the source frame rate is 29.997\ncln.setParameter(readSize=30, cacheSize=60)\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-decoding"},"Use multi-thread decoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\ncln.setParameter(nthread=8)\n...\n")))}f.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/90480b91.328f4fc9.js b/assets/js/90480b91.328f4fc9.js new file mode 100644 index 0000000..0d493d2 --- /dev/null +++ b/assets/js/90480b91.328f4fc9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[3241],{1824:function(e){e.exports=JSON.parse('{"title":"Examples","description":"Start the video processing or streaming with mpegCoder.","slug":"/category/examples","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/category/examples","navigation":{"previous":{"title":"Legacy","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/legacy"},"next":{"title":"Decoding","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/decoding"}}}')}}]); \ No newline at end of file diff --git a/assets/js/90e1dddb.eebc2077.js b/assets/js/90e1dddb.eebc2077.js new file mode 100644 index 0000000..b5641a8 --- /dev/null +++ b/assets/js/90e1dddb.eebc2077.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[4084],{5549:function(e,t,a){a.d(t,{A:function(){return i},q:function(){return p}});var n=a(7294),r=a(9960),m="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",s="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=s+"/"+e.url;break;case"3.1.0":t=m+"/"+e.url}else t=s+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function p(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}p.defaultProps={padx:"1ex"}},8343:function(e,t,a){a.r(t),a.d(t,{assets:function(){return g},contentTitle:function(){return k},default:function(){return v},frontMatter:function(){return h},metadata:function(){return c},toc:function(){return u}});var n=a(3117),r=a(102),m=(a(7294),a(3905)),s=a(541),i=a(5514),p=a(6577),l=a(2895),d=a(7508),o=a(5549),N=["components"],h={id:"MpegServer",title:"MpegServer",sidebar_label:"MpegServer",slug:"/apis/MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly."},k=void 0,c={unversionedId:"apis/MpegServer",id:"apis/MpegServer",title:"MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly.",source:"@site/docs/apis/MpegServer.mdx",sourceDirName:"apis",slug:"/apis/MpegServer",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegServer",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/apis/MpegServer.mdx",tags:[],version:"current",frontMatter:{id:"MpegServer",title:"MpegServer",sidebar_label:"MpegServer",slug:"/apis/MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly."},sidebar:"apis",previous:{title:"MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegClient"}},g={},u=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"ServeFrame",id:"serveframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ServeFrameBlock",id:"serveframeblock",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"FFmpegClose",id:"ffmpegclose",level:3},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Optimize the video encoding",id:"optimize-the-video-encoding",level:3},{value:"Rescale and resample the video",id:"rescale-and-resample-the-video",level:3},{value:"Use multi-thread encoding",id:"use-multi-thread-encoding",level:3},{value:"Configure the ahead frame number manually",id:"configure-the-ahead-frame-number-manually",level:3}],f={toc:u};function v(e){var t=e.components,a=(0,r.Z)(e,N);return(0,m.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,m.kt)("p",null,(0,m.kt)(i.Z,{icon:p.Z,mdxType:"InlineIcon"})," Class",(0,m.kt)(o.q,{mdxType:"Splitter"}),(0,m.kt)(o.A,{ver:"3.2.0",url:"MpegStreamer.h#L114",mdxType:"SourceURL"},(0,m.kt)(i.Z,{icon:d.Z,mdxType:"InlineIcon"})," Source")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev = mpegCoder.MpegServer()\n")),(0,m.kt)("p",null,"The frame-level video stream service used for pushing an online video stream."),(0,m.kt)("p",null,"This service instance is integrated with the features of ",(0,m.kt)("a",{parentName:"p",href:"./MpegEncoder"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegEncoder")),". Like the ",(0,m.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg CLI usages",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),", ",(0,m.kt)("inlineCode",{parentName:"p"},"MpegServer")," could not be run independently. A server program is required to be launched before the instance getting set up. We recommend some server programs ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#preparation"},"here"),"."),(0,m.kt)("p",null,"In practice, we recommend to split this instance into a sub-process, and use the ",(0,m.kt)("a",{parentName:"p",href:"https://docs.python.org/3/library/multiprocessing.html",title:"multiprocessing | Python"},(0,m.kt)("inlineCode",{parentName:"a"},"multiprocessing"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to feed the served data. See the ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#dual-process-example"},"tutorial")," to find the example. Although this class also provides a non-blocking style API, we do not recommend users to use that. "),(0,m.kt)("h2",{id:"arguments"},"Arguments"),(0,m.kt)("p",null,"This class does not has initialization arguments."),(0,m.kt)("h2",{id:"methods"},"Methods"),(0,m.kt)("h3",{id:"clear"},(0,m.kt)("inlineCode",{parentName:"h3"},"clear")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.clear()\n")),(0,m.kt)("p",null,"Clear all configurations ",(0,m.kt)("strong",{parentName:"p"},"including")," the default video address. If a video is being pushed by the server, ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically, and release the connection to the server."),(0,m.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,m.kt)("div",{parentName:"div",className:"admonition-heading"},(0,m.kt)("h5",{parentName:"div"},(0,m.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,m.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,m.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,m.kt)("div",{parentName:"div",className:"admonition-content"},(0,m.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file writers."))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"resetpath"},(0,m.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.resetPath(videoAddress)\n")),(0,m.kt)("p",null,"Reset the default video address to a specific value. Configuring this value will not cause the video to be pushed. This method is merely used as a configuration."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be pushed.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"getparameter"},(0,m.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"param = sev.getParameter(paramName=None)\n")),(0,m.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,m.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"paramName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,m.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,m.kt)("p",null,"Here is a list of checkable ",(0,m.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The current address of the pushed video. If the video is not being pushed, will return the default video address.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"codecName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"formatName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The video format name guessed from ",(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"nthread")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"width")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the pushed video stream. This value is mainly determined by the user configurations.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"height")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the pushed video stream. This value is mainly determined by the user configurations.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,m.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,m.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the pushed video stream. The unit is FPS.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"A wait reference with the unit of ",(0,m.kt)("inlineCode",{parentName:"td"},"second"),". This value represents how long users need to wait from this moment before pushing the next video frame. This value is required to be used with the non-blocking API ",(0,m.kt)("a",{parentName:"td",href:"#serveframe"},(0,m.kt)("inlineCode",{parentName:"a"},"ServeFrame()")),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"ptsAhead")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target ahead time duration in the unit of time stamp. This value is used for controlling the amount of ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," and the waiting time of the blocking API. It is converted from the configuration ",(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead"),".")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"param")),(0,m.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,m.kt)("inlineCode",{parentName:"td"},"paramName")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,m.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"setparameter"},(0,m.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.setParameter(\n decoder=None, configDict=None, videoPath=None, codecName=None,\n nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None,\n GOPSize=None, maxBframe=None, frameRate=None, frameAhead=None\n)\n")),(0,m.kt)("p",null,"Set the configurations of the server. To make the configurations take effects, these parameters need to be configured before ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"decoder")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("a",{parentName:"td",href:"./MpegDecoder"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegDecoder"))," or ",(0,m.kt)("a",{parentName:"td",href:"./MpegClient"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegClient"))),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"When configure this argument, the required configurations will be copied from a decoder or a client. If users also provide duplicated arguments in the same call, these copied parameters have a lower preference than those specified by users. This argument is useful when trancoding a video.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"configDict")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"dict")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"An alternative of the argument ",(0,m.kt)("inlineCode",{parentName:"td"},"decoder")," when the parameters need to be passed through different processes. Using ",(0,m.kt)("inlineCode",{parentName:"td"},"configDict=decoder.getParameter()")," is equivalent to using ",(0,m.kt)("inlineCode",{parentName:"td"},"decoder=decoder"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The current address of the pushed video. If the video is not being pushed, will return the default video address.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"codecName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"formatName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The video format name guessed from ",(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"nthread")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"width")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the pushed video stream.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"height")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the pushed video stream.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,m.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,m.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"tuple")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the pushed video stream. This value should be a tuple of two ",(0,m.kt)("inlineCode",{parentName:"td"},"int"),"s: ",(0,m.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". This format is consistent with ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/structAVRational.html",title:"AVRational"},(0,m.kt)("inlineCode",{parentName:"a"},"AVRational"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target ahead frame number. This value is used for controlling the number of served frames. For example, ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," is calculated by the equation: ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mi",{parentName:"msub"},"w")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"T"),(0,m.kt)("mo",{parentName:"mrow"},"\xd7"),(0,m.kt)("mi",{parentName:"mrow"},"max"),(0,m.kt)("mo",{parentName:"mrow"},"\u2061"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,m.kt)("mn",{parentName:"mrow"},"0"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_w = T \\times \\max(N_{pushed} - N_{played} - N_{ahead},~ 0)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.02691em"}},"w")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7667em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\xd7"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mop"},"max"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.01968em"}},"pl"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ye"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ah"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace nobreak"},"\xa0"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"0"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{pushed}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{played}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.01968em"}},"pl"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ye"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{ahead}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ah"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," are the number of pushed frames, the number of played frames and ",(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead")," respectively. ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"T")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T")))))," is the time base. By this way, the ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," and the waiting time of the blocking API ",(0,m.kt)("a",{parentName:"td",href:"#serveframeblock"},(0,m.kt)("inlineCode",{parentName:"a"},"ServeFrameBlock()"))," will be controlled by this value. Users do not need to specify it explicitly, because it could be calculated from the configured ",(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"ffmpegsetup"},(0,m.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.FFmpegSetup(videoAddress=None)\n")),(0,m.kt)("p",null,"Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the protocol used by the serving address and the user configurations set by ",(0,m.kt)("a",{parentName:"p",href:"#setparameter"},(0,m.kt)("inlineCode",{parentName:"a"},"setParameter()")),". If an video is being pushed by the server now, this video will be disconnected and released first, then the new video will be pushed with the same configurations."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be pushed. If not given, will use the default path configured by ",(0,m.kt)("a",{parentName:"td",href:"#resetpath"},(0,m.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video address to change.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"dumpfile"},(0,m.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.dumpFile()\n")),(0,m.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,m.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,m.kt)("div",{parentName:"div",className:"admonition-heading"},(0,m.kt)("h5",{parentName:"div"},(0,m.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,m.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,m.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,m.kt)("div",{parentName:"div",className:"admonition-content"},(0,m.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"serveframe"},(0,m.kt)("inlineCode",{parentName:"h3"},"ServeFrame")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"is_success = sev.ServeFrame(PyArrayFrame)\n")),(0,m.kt)("p",null,"Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the stream. But the writting to the codec buffer will be finished instantly."),(0,m.kt)("p",null,"This is the non-blocking API, which means the current thread will be only blocked by the frame encoding operations. Users need to use this API with ",(0,m.kt)("a",{parentName:"p",href:"#getparameter"},(0,m.kt)("inlineCode",{parentName:"a"},"getParameter('waitRef')"))," to control the number of served frames. Otherwise, serving too many frames will make the data to be dropped or cause the video server to collapse. The example about how to correctly use this API could be found ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#non-blocking-example"},"here"),"."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,m.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"is_success")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bool")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"serveframeblock"},(0,m.kt)("inlineCode",{parentName:"h3"},"ServeFrameBlock")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"is_success = sev.ServeFrameBlock(PyArrayFrame)\n")),(0,m.kt)("p",null,"Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the stream. The writting and pushing speeds to the codec buffer are controlled by user configurations."),(0,m.kt)("p",null,"This is the ",(0,m.kt)("strong",{parentName:"p"},"recommended")," blocking API, which means the method will cause the current thread blocked if the served frames are ahead of the playing time too much. In this case, the method will wait until the playing time catch the half of the served but not played frames. This method will ensure the safety of the video server."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,m.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"is_success")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bool")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"h3"},"FFmpegClose")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.FFmpegClose()\n")),(0,m.kt)("p",null,"Close the video stream and release the connection. Calling this method will flush all buffered frames into the video stream. In some cases, the video tail will be writen to the stream. If users does not call this method explicitly, it will be called when ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," is called or when the server is destructed."),(0,m.kt)("h2",{id:"operators"},"Operators"),(0,m.kt)("h3",{id:"__str__"},(0,m.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"info = str(sev)\n")),(0,m.kt)("p",null,"Return a brief report of the current stream encoder status."),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"info")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"A brief report of the stream encoder status, the configurations and parameters will be listed as formatted texts.")))),(0,m.kt)("h2",{id:"examples"},"Examples"),(0,m.kt)("p",null,"See ",(0,m.kt)("a",{parentName:"p",href:"../examples/server"},(0,m.kt)("em",{parentName:"a"},(0,m.kt)("inlineCode",{parentName:"em"},"Server")))," in the tutorial. Here we also show some specific configurations:"),(0,m.kt)("h3",{id:"optimize-the-video-encoding"},"Optimize the video encoding"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\n...\nsev = mpegCoder.MpegServer()\nsev.setParameter(decoder=dec, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, maxBframe=16)\n...\n")),(0,m.kt)("h3",{id:"rescale-and-resample-the-video"},"Rescale and resample the video"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(width=1280, height=720, frameRate=(5, 1), GOPSize=12, codecName='libx265', videoAddress='rtsp://localhost:8554/video')\n...\n")),(0,m.kt)("h3",{id:"use-multi-thread-encoding"},"Use multi-thread encoding"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(width=1280, height=720, GOPSize=12, nthread=8, videoAddress='rtsp://localhost:8554/video')\n...\n")),(0,m.kt)("h3",{id:"configure-the-ahead-frame-number-manually"},"Configure the ahead frame number manually"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(decoder=d, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, frameAhead=48)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.2cce0cbb.js b/assets/js/935f2afb.2cce0cbb.js new file mode 100644 index 0000000..3b72d71 --- /dev/null +++ b/assets/js/935f2afb.2cce0cbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[53],{1109:function(e){e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"className":"docs-version-current","isLast":false,"docsSidebars":{"docs":[{"type":"link","label":"Introduction","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/","docId":"introduction"},{"type":"category","label":"Installation","collapsed":false,"items":[{"type":"link","label":"PyPI","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/pypi","docId":"guides/install/pypi"},{"type":"link","label":"Windows","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/windows","docId":"guides/install/windows"},{"type":"link","label":"Linux","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/linux","docId":"guides/install/linux"},{"type":"link","label":"Legacy","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/legacy","docId":"guides/install/legacy"}],"collapsible":true,"href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/installation"},{"type":"category","label":"Examples","items":[{"type":"link","label":"Decoding","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/decoding","docId":"guides/examples/decoding"},{"type":"link","label":"Transcoding","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/transcoding","docId":"guides/examples/transcoding"},{"type":"link","label":"Client","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/client","docId":"guides/examples/client"},{"type":"link","label":"Server","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/server","docId":"guides/examples/server"}],"collapsed":true,"collapsible":true,"href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/examples"},{"type":"category","label":"Troubleshooting","items":[{"type":"link","label":"Installation","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/installation","docId":"troubleshooting/installation"},{"type":"link","label":"Running","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/running","docId":"troubleshooting/running"},{"type":"link","label":"Q&A","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/qna","docId":"troubleshooting/qna"}],"collapsed":true,"collapsible":true,"href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/troubleshooting"},{"type":"link","label":"Changelog","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/changelog","docId":"changelog"}],"apis":[{"type":"link","label":"Overview","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/","docId":"apis"},{"type":"link","label":"readme","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/readme","docId":"apis/readme"},{"type":"link","label":"setGlobal","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/setGlobal","docId":"apis/setGlobal"},{"type":"link","label":"MpegDecoder","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegDecoder","docId":"apis/MpegDecoder"},{"type":"link","label":"MpegEncoder","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegEncoder","docId":"apis/MpegEncoder"},{"type":"link","label":"MpegClient","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegClient","docId":"apis/MpegClient"},{"type":"link","label":"MpegServer","href":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegServer","docId":"apis/MpegServer"}]},"docs":{"apis":{"id":"apis","title":"Overview","description":"The overview of all APIs.","sidebar":"apis"},"apis/MpegClient":{"id":"apis/MpegClient","title":"MpegClient","description":"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly.","sidebar":"apis"},"apis/MpegDecoder":{"id":"apis/MpegDecoder","title":"MpegDecoder","description":"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly.","sidebar":"apis"},"apis/MpegEncoder":{"id":"apis/MpegEncoder","title":"MpegEncoder","description":"This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly.","sidebar":"apis"},"apis/MpegServer":{"id":"apis/MpegServer","title":"MpegServer","description":"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly.","sidebar":"apis"},"apis/readme":{"id":"apis/readme","title":"readme","description":"Use it to see README and some useful instructions.","sidebar":"apis"},"apis/setGlobal":{"id":"apis/setGlobal","title":"setGlobal","description":"Set global configurations.","sidebar":"apis"},"changelog":{"id":"changelog","title":"Changelog","description":"The changelog of this project.","sidebar":"docs"},"guides/examples/client":{"id":"guides/examples/client","title":"Pulling a video stream","description":"Example codes for pulling a stream on the client side.","sidebar":"docs"},"guides/examples/decoding":{"id":"guides/examples/decoding","title":"Decoding a video","description":"Example codes for decoding a video.","sidebar":"docs"},"guides/examples/server":{"id":"guides/examples/server","title":"Pushing a video stream","description":"Example codes for pushing a stream on the server side.","sidebar":"docs"},"guides/examples/transcoding":{"id":"guides/examples/transcoding","title":"Transcoding a video","description":"Example codes for encoding or transcoding a video.","sidebar":"docs"},"guides/install/legacy":{"id":"guides/install/legacy","title":"Installation (legacy versions)","description":"Archived legacy pre-compiled versions of mpegCoder.","sidebar":"docs"},"guides/install/linux":{"id":"guides/install/linux","title":"Installation for Linux","description":"A tutorial about the installation or compilation of the package for Linux.","sidebar":"docs"},"guides/install/pypi":{"id":"guides/install/pypi","title":"Installation from PyPI","description":"A tutorial about the installation of the package from PyPI.","sidebar":"docs"},"guides/install/windows":{"id":"guides/install/windows","title":"Installation for Windows","description":"A tutorial about the installation or compilation of the package for Windows.","sidebar":"docs"},"introduction":{"id":"introduction","title":"Introduction","description":"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.","sidebar":"docs"},"troubleshooting/installation":{"id":"troubleshooting/installation","title":"Troubleshooting for installation","description":"The troubleshooting for installation.","sidebar":"docs"},"troubleshooting/qna":{"id":"troubleshooting/qna","title":"Questions and answers","description":"The questions and answers for mpegCoder.","sidebar":"docs"},"troubleshooting/running":{"id":"troubleshooting/running","title":"Troubleshooting for running","description":"The troubleshooting for running mpegCoder.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/972d9d57.183b6a18.js b/assets/js/972d9d57.183b6a18.js new file mode 100644 index 0000000..1d5cb16 --- /dev/null +++ b/assets/js/972d9d57.183b6a18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[937],{4212:function(e,t,a){var l,c,r=a(7294),n=["title","titleId"];function i(){return i=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,o=s(e,n);return r.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{maxWidth:360,height:"auto",maxHeight:360},viewBox:"0 0 360 360","aria-labelledby":a},o),t?r.createElement("title",{id:a},t):null,l||(l=r.createElement("defs",null,r.createElement("linearGradient",{id:"a"},r.createElement("stop",{stopColor:"#ffe052",offset:0}),r.createElement("stop",{stopColor:"#ffc331",offset:1})),r.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",xlinkHref:"#a",id:"d",x1:89.137,y1:111.921,x2:147.777,y2:168.101,gradientUnits:"userSpaceOnUse"}),r.createElement("linearGradient",{id:"b"},r.createElement("stop",{stopColor:"#387eb8",offset:0}),r.createElement("stop",{stopColor:"#366994",offset:1})),r.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",href:"#b",xlinkHref:"#b",id:"c",x1:55.549,y1:77.07,x2:110.149,y2:131.853,gradientUnits:"userSpaceOnUse"}))),c||(c=r.createElement("g",{stroke:"null"},r.createElement("path",{fill:"url(#c)",d:"M223.912 105.999c-72.204 0-67.695 31.312-67.695 31.312l.08 32.438H225.2v9.74h-96.27s-46.203-5.24-46.203 67.614c0 72.855 40.327 70.271 40.327 70.271h24.068v-33.807s-1.298-40.327 39.683-40.327h68.339s38.395.62 38.395-37.108V143.75s5.83-37.75-69.627-37.75zm-37.993 21.813a12.384 12.384 0 0 1 12.396 12.396c0 6.856-5.54 12.396-12.396 12.396a12.384 12.384 0 0 1-12.396-12.396 12.385 12.385 0 0 1 12.396-12.396z",transform:"translate(-44.938 -67.469)"}),r.createElement("path",{fill:"url(#d)",d:"M225.963 388.939c72.204 0 67.695-31.312 67.695-31.312l-.08-32.439h-68.903v-9.74h96.27s46.203 5.24 46.203-67.614-40.327-70.27-40.327-70.27h-24.068v33.807s1.298 40.327-39.683 40.327h-68.339s-38.395-.621-38.395 37.107v62.382s-5.83 37.752 69.627 37.752zm37.993-21.814a12.384 12.384 0 0 1-12.396-12.396c0-6.855 5.54-12.396 12.396-12.396 6.855 0 12.396 5.54 12.396 12.396a12.385 12.385 0 0 1-12.396 12.396z",transform:"translate(-44.938 -67.469)"}))))}},3503:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P=a(7294),F=["title","titleId"];function S(){return S=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,A=V(e,F);return P.createElement("svg",S({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:888,height:476.815,viewBox:"0 0 888 476.815","aria-labelledby":a},A),t?P.createElement("title",{id:a},t):null,l||(l=P.createElement("path",{d:"M552.642 164.076a75.14 75.14 0 0 0-147.426-15.843c-.91-.032-1.82-.069-2.738-.069a75.158 75.158 0 0 0-72.096 53.97 53.104 53.104 0 0 0-63.012 15.673h234.388c28.796 0 52.111-23.851 50.937-52.623q-.023-.553-.053-1.108zM.096 70.892A75.14 75.14 0 0 1 147.522 55.05c.91-.032 1.82-.069 2.738-.069a75.158 75.158 0 0 1 72.095 53.969 53.104 53.104 0 0 1 63.012 15.674H50.979C22.183 124.624-1.13 100.773.042 72q.023-.554.054-1.109z",fill:"#e6e6e6"})),c||(c=P.createElement("path",{fill:"#5cb85c",d:"M336.372 145.025H151.746L59.433 304.916l92.313 159.891h184.626l92.313-159.891-92.313-159.891z"})),r||(r=P.createElement("path",{d:"M167.2 438.04h153.718l76.859-133.124-76.86-133.124H167.2L90.341 304.916z",fill:"#fff"})),n||(n=P.createElement("path",{fill:"#3f3d56",d:"M0 463.686h888v2.241H0z"})),i||(i=P.createElement("path",{fill:"#a0616a",d:"m697.681 58.277 8.023 22.731-13.372 26.743-22.731-38.777 28.08-10.697z"})),s||(s=P.createElement("path",{d:"M765.207 333.06c-4.4 6.165-38.323 41.84-61.014 65.534a20123.845 20123.845 0 0 1-15.417 16.06c-3.236 3.356-5.135 5.321-5.135 5.321l-10.256-21.448-4.453-9.306.067-.08 2.795-3.57 26.65-34.098 27.986-35.795-22.732-45.463 28.08-4.012 18.667 1.097 4.065.24s17.383 56.16 10.697 65.52z",fill:"#2f2e41"})),o||(o=P.createElement("path",{d:"M686.315 442.707c-1.738 1.738-4.76-.481-8.036-4.279-6.78-7.862-14.695-22.464-14.695-22.464l-9.36-20.057c1.002-5.99 10.175-6.753 14.775-6.766 1.565 0 2.608.08 2.608.08l.775 1.15 16.394 24.282s2.888 22.705-2.46 28.054z",fill:"#2f2e41"})),m||(m=P.createElement("path",{d:"M688.776 414.653s2.888 22.705-2.46 28.054c-1.74 1.738-4.761-.481-8.037-4.279l-4.894-39.9-1.003-8.157-.588-4.8 26.65-34.098 5.749 47.121a20201.877 20201.877 0 0 1-15.417 16.06zm18.519-137.244-3.597-7.194 28.08-4.012 18.667 1.097.053.24-43.203 9.869z",opacity:.2})),d||(d=P.createElement("path",{fill:"#2f2e41",d:"M671.607 208.706h-9.361l2.675 88.252 18.72 152.435h30.754l-13.371-109.647 6.686-61.508 46.8-10.698-13.372-61.508-69.531 2.674z"})),f||(f=P.createElement("path",{d:"M686.315 445.381s-2.674 18.72-1.337 20.057 2.674 2.675 2.674 5.349 16.046 9.36 24.069 4.011 2.674-13.371 2.674-13.371l-8.023-16.046z",fill:"#2f2e41"})),p||(p=P.createElement("circle",{cx:680.967,cy:52.26,r:22.732,fill:"#a0616a"})),h||(h=P.createElement("path",{fill:"#e6e6e6",d:"m694.338 88.363-17.489-7.025-10.591 131.379 73.543 5.349-25.406-135.052-11.365-10.671-8.692 16.02z"})),y||(y=P.createElement("path",{d:"M674.522 77.37 660.91 88.363l-25.405 13.371 9.36 84.24 1.337 48.138s-17.383 42.789-4.012 53.486 28.08 6.685 25.406-16.046-8.023-38.777 17.383-62.846 3.157-136.98-10.456-131.336zm27.126-7.854 16.759 10.824 22.731 12.034 17.383 192.55-38.777 12.034S698.26 74.738 701.648 69.516z",fill:"#2f2e41"})),u||(u=P.createElement("path",{d:"M745.15 228.763s-20.058 30.755-5.349 30.755 18.72-25.406 18.72-25.406zm-82.904 0s20.058 30.755 5.35 30.755-18.721-25.406-18.721-25.406z",fill:"#a0616a"})),E||(E=P.createElement("path",{d:"m682.304 18.83-6.686-4.01 1.337 2.674-5.348-1.337 1.337 1.337-6.686-1.337 2.674 2.674s-10.697 0-12.034 10.697l-6.686 1.337 2.674 4.012v4.011l2.675 2.674v4.012l2.674 6.686 2.674-9.36s12.035 2.674 17.383-8.023c0 0 1.337 4.011 8.023 2.674l10.697 18.72s1.337-8.299 6.018-9.498 2.005-11.896 2.005-11.896-4.011-4.012-4.011-6.686-4.012-5.349-6.686-5.349-9.36-5.348-9.36-5.348zM646.2 103.071l-6.224-3.691-4.472 2.354s-5.35 2.674-6.686 12.034-14.709 66.858-14.709 66.858-1.337 9.36 5.349 25.406 32.091 44.126 32.091 44.126l24.069-20.058-36.103-44.126 9.36-36.103zm84.241-10.697h10.697l17.383 65.52 5.349 81.566-25.406-9.36v-58.834l-8.023-78.892z",fill:"#2f2e41"})),x||(x=P.createElement("path",{fill:"#3f3d56",d:"M184.701 171.594h2v82.555h-2z"})),z||(z=P.createElement("circle",{cx:185.701,cy:258.894,r:5.693,fill:"#5cb85c"})),v||(v=P.createElement("path",{fill:"#3f3d56",d:"M227.402 171.594h2v82.555h-2z"})),M||(M=P.createElement("circle",{cx:228.402,cy:258.894,r:5.693,fill:"#3f3d56"})),g||(g=P.createElement("path",{fill:"#3f3d56",d:"M302.366 171.594h2v82.555h-2z"})),k||(k=P.createElement("circle",{cx:303.366,cy:258.894,r:5.693,fill:"#3f3d56"})),b||(b=P.createElement("circle",{cx:272.052,cy:340.5,r:5.693,fill:"#3f3d56"})),w||(w=P.createElement("circle",{cx:156.285,cy:288.31,r:5.693,fill:"#3f3d56"})),H||(H=P.createElement("path",{fill:"#3f3d56",d:"M273.052 335.755h-2v-99.479h-42.65v-2h44.65v101.479z"})),O||(O=P.createElement("circle",{cx:198.986,cy:376.558,r:5.693,fill:"#5cb85c"})),G||(G=P.createElement("path",{fill:"#3f3d56",d:"M199.986 371.814h-2v-99.48h-42.65v-2h44.65v101.48z"})),T||(T=P.createElement("circle",{cx:330.884,cy:331.96,r:5.693,fill:"#5cb85c"})),L||(L=P.createElement("path",{fill:"#3f3d56",d:"M331.884 327.215h-2v-99.479h-27.467v-2h29.467v101.479zm-174.599-44.599h-2v-49.461h30.416v2h-28.416v47.461z"})),C||(C=P.createElement("circle",{cx:228.876,cy:398.858,r:5.693,fill:"#3f3d56"})),I||(I=P.createElement("path",{fill:"#3f3d56",d:"M229.876 393.164h-2v-47.461H199.46v-2h30.416v49.461z"})),j||(j=P.createElement("circle",{cx:301.468,cy:356.631,r:5.693,fill:"#3f3d56"})),Z||(Z=P.createElement("path",{fill:"#3f3d56",d:"M302.468 350.938h-2v-49.461h30.416v2h-28.416v47.461z"})))}},7353:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G=a(7294),T=["title","titleId"];function L(){return L=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,I=C(e,T);return G.createElement("svg",L({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1144,height:751.924,viewBox:"0 0 1144 751.924","aria-labelledby":a},I),void 0===t?G.createElement("title",{id:a},"3333"):t?G.createElement("title",{id:a},t):null,l||(l=G.createElement("path",{fill:"#f2f2f2",d:"M1111.983 428.056 904.837 604.443l-45.323 38.589-126.827-.774-108.238-.658-8.99-.053-21.965-25.799-87.33-102.562-43.838-51.49-13.181-15.476-9.535-11.201-21.249-24.956-34.403-40.401 34.844-29.667 33.277-28.338 23.92-20.366L777.168 34.846l334.815 393.21z"})),c||(c=G.createElement("path",{fill:"#3f3d56",d:"M97 101.924h397v287H97zm482 593h374v2H579z"})),r||(r=G.createElement("path",{d:"M1133.924 641.924H834.57s-6.068-88.998 29.834-90.009 31.857 39.442 76.862-16.181 99.616-52.59 106.695-19.721-13.653 59.163 24.272 51.072 92.536 13.147 61.69 74.839z",fill:"#5cb85c"})),n||(n=G.createElement("path",{d:"m979.194 641.944-1.01-.04c2.356-58.596 14.628-96.243 24.507-117.508 10.727-23.089 21.064-32.435 21.168-32.527l.672.755c-.102.091-10.319 9.345-20.96 32.278-9.825 21.174-22.03 58.668-24.377 117.042zm108.344.121-.971-.283c11.69-40.126 39.22-65.46 39.497-65.712l.68.749c-.275.249-27.599 25.404-39.206 65.246zm-205.818-.072-1.002-.14c3.966-28.605-3.198-50.799-9.907-64.38-7.265-14.704-15.553-22.736-15.636-22.815l.7-.73c.084.08 8.5 8.235 15.842 23.098 6.772 13.708 14.004 36.107 10.003 64.967z",fill:"#f2f2f2"})),i||(i=G.createElement("path",{fill:"#3f3d56",d:"M43 641.924h1101v2H43z"})),s||(s=G.createElement("path",{fill:"#2f2e41",d:"M724.735 39.413h94.695v117.651h-94.695z"})),o||(o=G.createElement("path",{fill:"#ffb8b8",d:"m646.54 588.213-12.913 47.348 21.522 15.782 5.739-4.304 10.043-48.782-24.391-10.044zm162.129-4.304-4.304 57.391h27.261v-53.087l-22.957-4.304zm-86.086-362.997v34.434l53.087 8.609 45.912-18.652-8.608-21.522-90.391-2.869z"})),m||(m=G.createElement("path",{d:"M765.626 249.607 719.714 241l-11.479 93.26-28.695 116.216s-43.043 99-37.304 121.956l2.87 7.174-2.87 12.913 28.695 11.478 11.479-18.652s8.608 12.913 22.956-14.348 74.608-196.564 74.608-196.564l10.043 28.696a59.132 59.132 0 0 0-1.434 27.26c2.87 14.348 5.739 58.826 5.739 58.826s-15.783 77.478 5.739 83.217l4.304 17.217 30.13 2.87 5.74-17.218s28.695-10.043 21.521-60.26-10.043-215.216-10.043-215.216l-28.266-69.693zm-123.39 383.084s-7.174-5.739-10.043-4.304-33 40.174-33 40.174-31.565 24.39-8.609 27.26 86.086-28.695 86.086-35.87-13.265-25.14-13.265-25.14-9.69 7.924-21.17-2.12zm159.26-4.304s25.825-1.604 30.13 2.785 2.87 25.91 2.87 25.91 2.869 38.74-20.088 38.74-17.217-25.827-17.217-25.827z",fill:"#2f2e41"})),d||(d=G.createElement("circle",{cx:775.67,cy:58.783,r:35.869,fill:"#ffb8b8"})),f||(f=G.createElement("path",{d:"M751.996 81.022s20.087 24.39-20.087 43.043 28.696 96.13 28.696 96.13 80.347-30.13 73.173-88.956c0 0-48.782-8.609-37.304-48.783z",fill:"#ffb8b8"})),p||(p=G.createElement("path",{d:"M730.474 122.63s-33-4.304-34.434 22.956 0 93.26 0 93.26-14.348 57.391-7.174 107.608c0 0-8.609 58.826 14.348 55.956s5.739-60.26 5.739-60.26l10.043-93.26-4.304-68.87 18.652-41.607zm94.973 6.339s31.287-.6 32.722 22.356-10.043 93.26-10.043 93.26l-17.218 8.61-15.782-48.783z",fill:"#ffb8b8"})),h||(h=G.createElement("path",{d:"m834.495 246.738-2.87 7.174 8.61 21.521s-34.435 27.26-31.566 33 18.652-7.174 18.652-7.174l22.957 11.478s18.652-20.087 10.043-38.739-11.934-31.04-11.934-31.04-12.457-.525-13.892 3.78z",fill:"#ffb8b8"})),y||(y=G.createElement("path",{d:"m724.018 117.608-4.304 47.348s-20.087 20.087 2.87 47.347l-2.87 21.522s53.086-2.87 63.13 0 41.06-2.31 41.06-2.31l.548-16.342s14.348-20.087 10.043-50.217 0-40.174 0-40.174l-10.043-1.435s-6.457 43.761-50.935 48.065c0 0-55.238 5.022-39.456-53.804z",fill:"#5cb85c"})),u||(u=G.createElement("path",{d:"M779.257.674s-37.304-2.312-45.913 20.885-23.674 35.376-23.674 35.376-23.731 16.496-11.865 45.944c0 0-36.917 24.808-12.526 46.846 0 0-1.435 22.037 12.913 37.115 0 0 11.478 5.8 7.174 9.28s28.695 1.16 25.826-30.157 16.5-53.376 16.5-53.376-18.652-40.603-10.044-54.522c5.227-8.45 7.471-14.752 11.81-18.399a54.432 54.432 0 0 0 6.698-6.537 15.455 15.455 0 0 1 16.644-5.19c12.913 3.48 15.783 13.918 15.783 13.918s9.326 24.937 25.108 36.536-12.196 31.896-12.196 31.896 4.864 23.898 17.497 38.046-3.64 26.48-4.584 28.067c-2.152 3.619-10.747 26.474 24.757 26.575 0 0 8.243-17.297 19.721-27.735s2.87-40.596 2.87-40.596 17.217-10.438-1.435-35.956c0 0 5.74-23.197-10.043-38.275 0 0-22.24-67.86-71.021-59.74z",fill:"#2f2e41"})),E||(E=G.createElement("ellipse",{cx:736.931,cy:58.065,rx:3.587,ry:5.739,fill:"#ffb8b8"})),x||(x=G.createElement("path",{d:"M593 750.924H1s-12-176 59-178 63 78 152-32 197-104 211-39-27 117 48 101 183 26 122 148z",fill:"#5cb85c"})),z||(z=G.createElement("path",{d:"m287.007 750.964-1.998-.08c4.66-115.878 28.928-190.33 48.466-232.381 21.214-45.661 41.656-64.145 41.86-64.327l1.33 1.495c-.202.18-20.406 18.48-41.45 63.832-19.43 41.874-43.566 116.02-48.208 231.46zm214.26.239-1.92-.559c23.119-79.353 77.561-129.455 78.11-129.952l1.343 1.48c-.543.494-54.578 50.24-77.533 129.03zm-407.024-.142-1.982-.275c7.844-56.57-6.324-100.461-19.592-127.319-14.366-29.08-30.757-44.962-30.92-45.12l1.383-1.443c.166.16 16.81 16.286 31.33 45.678 13.392 27.11 27.694 71.405 19.78 128.48z",fill:"#f2f2f2"})),v||(v=G.createElement("path",{fill:"#3f3d56",d:"M0 749.924h837v2H0zm565-360H96v-372h469zm-467-2h465v-368H98z"})),M||(M=G.createElement("circle",{cx:137,cy:170.924,r:17,fill:"#5cb85c"})),g||(g=G.createElement("circle",{cx:185,cy:170.924,r:17,fill:"#d0cde1"})),k||(k=G.createElement("circle",{cx:233,cy:170.924,r:17,fill:"#5cb85c",opacity:.5})),b||(b=G.createElement("circle",{cx:281,cy:170.924,r:17,fill:"#f2f2f2"})),w||(w=G.createElement("path",{fill:"#f2f2f2",d:"M330 162.924h140v16H330z"})),H||(H=G.createElement("circle",{cx:288,cy:283.924,r:46,fill:"#f2f2f2"})),O||(O=G.createElement("path",{d:"m288.191 297.772-23.02-23.02a4 4 0 0 1 5.658-5.657l16.98 16.98 54.184-61.789a4 4 0 1 1 6.014 5.275z",fill:"#5cb85c"})))}},3073:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P,F,S,V,A,q,D,N,_,U,B,R,W,X,K,J,Q,Y,$,ee,te,ae,le,ce,re,ne,ie,se,oe,me,de,fe,pe,he,ye,ue,Ee,xe,ze,ve,Me,ge,ke,be,we,He,Oe,Ge,Te,Le,Ce,Ie,je,Ze,Pe,Fe,Se,Ve,Ae,qe,De,Ne,_e,Ue,Be,Re,We,Xe,Ke,Je,Qe,Ye,$e,et,tt,at,lt,ct,rt,nt,it,st,ot,mt,dt,ft,pt,ht,yt,ut,Et,xt,zt,vt,Mt,gt,kt,bt=a(7294),wt=["title","titleId"];function Ht(){return Ht=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,Gt=Ot(e,wt);return bt.createElement("svg",Ht({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:1099.2,height:725.77,viewBox:"0 0 1099.2 725.77","aria-labelledby":a},Gt),l||(l=bt.createElement("defs",null,bt.createElement("linearGradient",{id:"a",x1:837,y1:580.8,x2:989.66,y2:580.8,gradientTransform:"matrix(-1 0 0 1 1862 0)",gradientUnits:"userSpaceOnUse"},bt.createElement("stop",{offset:0,stopColor:"gray",stopOpacity:.25}),bt.createElement("stop",{offset:.54,stopColor:"gray",stopOpacity:.12}),bt.createElement("stop",{offset:1,stopColor:"gray",stopOpacity:.1})),bt.createElement("linearGradient",{id:"b",x1:-106.89,y1:588.73,x2:-106.89,y2:244.28,gradientTransform:"matrix(-1 -.04 -.04 1 494.48 21.29)",xlinkHref:"#a"}))),void 0===t?bt.createElement("title",{id:a},"compose music"):t?bt.createElement("title",{id:a},t):null,c||(c=bt.createElement("circle",{cx:985.58,cy:371.09,r:21.63,fill:"#a4a4a4",opacity:.1})),r||(r=bt.createElement("circle",{cx:1062.95,cy:274.65,r:36.25,fill:"#a4a4a4",opacity:.1})),n||(n=bt.createElement("circle",{cx:455.32,cy:27.78,r:21.63,fill:"#a4a4a4",opacity:.1})),i||(i=bt.createElement("circle",{cx:703.43,cy:52.64,r:21.63,fill:"#a4a4a4",opacity:.1})),s||(s=bt.createElement("circle",{cx:36.25,cy:326.22,r:36.25,fill:"#a4a4a4",opacity:.1})),o||(o=bt.createElement("path",{d:"M608.11 119.66c-64.72-2.41-126.36-24.85-185.22-49.41S305.72 18.5 242.6 5.49c-40.63-8.37-87.09-9.56-119.83 13.84-31.55 22.56-41.73 61.39-47.17 97.45-4.12 27.14-6.54 55.7 4.74 81.1 7.83 17.64 21.74 32.46 31.36 49.35 33.47 58.78 9.81 131.27-26.46 188.66-17 26.92-36.74 52.6-49.87 81.26s-19.23 61.5-7.77 90.74c11.38 29 38.51 50.74 67.9 66 59.69 31.09 130 40 198.61 45 151.82 11.16 304.46 6.33 456.69 1.49 56.33-1.79 112.92-3.61 168.34-13 30.78-5.2 62.55-13.45 84.89-33.36 28.37-25.27 35.4-68.07 16.39-99.76-31.88-53.16-120-66.37-142.31-123.42-12.26-31.4.33-66.38 18.16-95.5 38.23-62.48 102.33-117.29 105.7-188.71 2.32-49-28.49-98.16-76.13-121.37-49.94-24.33-119.18-21.27-156 19-37.92 41.63-104.59 57.54-161.73 55.4z",fill:"#a4a4a4",opacity:.1})),m||(m=bt.createElement("path",{d:"M872.34 482.75a5.91 5.91 0 0 0 1.33 3.46 19.66 19.66 0 0 0 5.32 4.52v5.42s16 13.37 19.29 18.42c3.17 4.82 6.41 9.73 10.92 13.32a9.85 9.85 0 0 0 4.07 2.16h.27a4.23 4.23 0 0 1-1.56 1 3.7 3.7 0 0 0 4.36 3.13 7.29 7.29 0 0 0 2.16-1.08l6.34-4.1a18.16 18.16 0 0 0 2.95-2.21c1.18-1.19 2-2.68 3.16-3.9 2-2.08 4.84-3.32 6.23-5.82.87-1.56 1-3.41 1.56-5.12.35-1.12.86-2.18 1.2-3.3a11.93 11.93 0 0 0 .41-2.06c.22.19.45.38.69.56.49-.32 1.43.52 1.21 1.06s-.75.93-.93 1.49c-.4 1.28 1.18 2.23 1.84 3.4s.32 2.67.39 4 .68 2.93.87 4.42c.46 3.48-1.26 7.15 0 10.44a3.29 3.29 0 0 0-3.25 2.53 9.58 9.58 0 0 0 .13 4.45 6.12 6.12 0 0 0-3 5.59 1.37 1.37 0 0 1-.14 1 1.42 1.42 0 0 1-.57.33 5.64 5.64 0 0 0-3.48 5.24 2.6 2.6 0 0 1-.1 1.11 2.63 2.63 0 0 1-.82.84 6.52 6.52 0 0 0-2.43 5.1 3.7 3.7 0 0 0 1.72 3.34h.07a18 18 0 0 0-6 11.39 46.76 46.76 0 0 0 .78 11.79h.36v.29a5.25 5.25 0 0 0 .57 1.7 24.36 24.36 0 0 1 2.15 8.76 7.76 7.76 0 0 0 .3 2.21 11.14 11.14 0 0 0 1.13 1.94c1.33 2.17 1.64 4.79 2.09 7.3a57.72 57.72 0 0 0 2.55 9.57c1.53 4.24 3.59 8.58 2.89 13a13 13 0 0 0-.4 3.21 9.39 9.39 0 0 0 1.26 3.37c.51 1 1 2.06 1.4 3.12a2.52 2.52 0 0 0 .62 1.69c.12.33.22.67.32 1s.17.53.25.8a10.32 10.32 0 0 1 .31 1.36l-.06 1.05v1a2.49 2.49 0 0 1-.48.89 3.58 3.58 0 0 1-.26.29l-.24.27a1.8 1.8 0 0 0-.27.39 1.87 1.87 0 0 0-.08 1.15c0 .15.06.3.1.45.25 1.08.52 2.16.79 3.23.08.33.17.65.25 1 .22.84.44 1.69.67 2.53v.11l.15.56.57 2.06c.12.41.24.81.35 1.22l.44 1.49q.51 1.74 1.05 3.48c3.57 11.78 7.4 23.49 9.76 35.57a3.83 3.83 0 0 0 1.43 2.14 8.24 8.24 0 0 0 2.49 1.34c.23 1.77.8 3.93.87 5 .22 3.49.38 7.21-.89 10.39a.84.84 0 0 0-.76.24 31 31 0 0 0-2.29 2.43l-4.69 5a7.75 7.75 0 0 0-1.06 1.29 4.51 4.51 0 0 0-.45 3.69 5 5 0 0 0 2.41 2.86 4 4 0 0 1 .76.43 4.51 4.51 0 0 0 .47.4 1.82 1.82 0 0 0 1 .19 35.71 35.71 0 0 0 7.87-1.34 6.31 6.31 0 0 0 3.25-1.53 6.08 6.08 0 0 0 1.11-2.16l.94-2.6a29.61 29.61 0 0 0 1.43-4.85 10 10 0 0 0-.25-5 1 1 0 0 0-.24.41c.23-1.45.45-2.91.68-4.37.07-.43.13-.87.19-1.32.3 3.89-.27 7.81-.09 11.71a13.65 13.65 0 0 0-.39 2.19c.26 3.58 1.75 7.49 4.64 9.62a4.75 4.75 0 0 0 1.59.83 5.62 5.62 0 0 0 1.64 0 20.9 20.9 0 0 0 6.24-1.18 7.67 7.67 0 0 0 4.49-4.26 10 10 0 0 0 .45-3.08 11.83 11.83 0 0 0-.29-3.25 24.79 24.79 0 0 0-1.64-3.79 36.17 36.17 0 0 1-1.86-5.58l-.87-3.17c-.24-.9-.49-1.8-.8-2.68a4.49 4.49 0 0 0-1.11-2.11c-.36-.28-.6-.3-.76-.14v-.34a35.86 35.86 0 0 0 .23-3.71c-.24-2-1.83-3.63-2.86-5.41a10.56 10.56 0 0 1-1.14-2.86c-.06-.22-.1-.43-.14-.66a2.33 2.33 0 0 1 .57-.37l1.78 1c-1.57-11.8-.74-24.17-5.32-35.15-2-4.78-5.85-9.76-5.42-14.91a4.2 4.2 0 0 1 .47-6.7c.77-.42 1.72-.62 2.25-1.33a3.63 3.63 0 0 0 .51-1.29 204.58 204.58 0 0 1 9.88-29.65c.89-2.11 1.81-4.2 2.74-6.29l3.1-7.05 3.78-8.58c1.28-2.89 2.57-6.19 1.36-9.1-.48-1.15-1.33-2.24-1.21-3.47a21.78 21.78 0 0 1 .74-2.29 5.7 5.7 0 0 0-.19-2.49 89.79 89.79 0 0 0-.82-3.23 18 18 0 0 1 2.41.46c.48-.81-.29-1.75-.76-2.57a8.69 8.69 0 0 1-.87-3.57l-1-10.09a17.9 17.9 0 0 1-.08-4.2c.2-1.48.77-2.89 1.06-4.37.55-2.83 0-5.75.18-8.64a38.74 38.74 0 0 1 1.32-7.52c.09-.37.17-.73.26-1.1a6 6 0 0 0 1.45.25h1.24a4 4 0 0 0 .55-.14h.12a6 6 0 0 0 .59-.23c-.24-.51-.46-1-.67-1.54-.09-.21-.17-.42-.25-.63s-.23-.59-.33-.89-.2-.55-.29-.82-.15-.46-.22-.69-.19-.63-.28-1-.18-.66-.27-1l.15-.31a8.77 8.77 0 0 0 1.65 1.13c2 3.45 3.81 7 5.48 10.58a3.36 3.36 0 0 0 .51-1.29 6.19 6.19 0 0 0 .71.91 10.6 10.6 0 0 0 2.33 1.71 6 6 0 0 0 2.76 1 5.15 5.15 0 0 0 3.53-1.53c2.91-2.55 4.36-6.34 5.71-10a75.29 75.29 0 0 0 4.3-14.73c.82-5.43.47-11.07 2-16.34-1.39-2.76-2.27-5.81-3.83-8.48a37.92 37.92 0 0 1-2.64-4.95 17.1 17.1 0 0 1-.47-11.44 1.57 1.57 0 0 0-1.83.1 3.83 3.83 0 0 0-1.1 1.6 14.19 14.19 0 0 0-1.09 6.72 2.68 2.68 0 0 1-.19 1.64 2.06 2.06 0 0 1-1.78.75 15.34 15.34 0 0 1-4.12-.75 38.28 38.28 0 0 0-11.48-1.12 9.11 9.11 0 0 0-1-1l-.43-.35-.44-.34-.22-.18a5 5 0 0 1-.42-.37 2.77 2.77 0 0 1-1-1.75 2.25 2.25 0 0 1 0-.26 1.94 1.94 0 0 1 0-.24 3.38 3.38 0 0 1 .23-.7 4.71 4.71 0 0 1 .22-.45l.11-.23c0-.07.07-.15.11-.22a6.59 6.59 0 0 0 .32-.84 6.13 6.13 0 0 0 .21-.87 6.54 6.54 0 0 0 .09-.89v-1.35a9.09 9.09 0 0 0-.37-1.78 9.87 9.87 0 0 0-.48-1.28 14.16 14.16 0 0 0-.85-1.58 24.18 24.18 0 0 0-2.14-2.91l-.59-.69-.6-.68a23.75 23.75 0 0 1-1.74-2.13 8.28 8.28 0 0 1-1-1.78 6.84 6.84 0 0 1-.21-.64 6.51 6.51 0 0 1-.18-1.24v-.41a15.44 15.44 0 0 1 .08-1.67c.08-.78.19-1.57.3-2.37.07-.53.15-1.06.22-1.59 0-.26.06-.53.1-.79.06-.53.12-1.06.16-1.59a15.24 15.24 0 0 0-.26-4.63 8.77 8.77 0 0 0-.47-1.48 9.39 9.39 0 0 0-1-1.8 13 13 0 0 0-5.56-4.33 25.6 25.6 0 0 0-5.09-1.63c-.7-.15-1.39-.28-2.08-.39-10.4-1.67-21.44 1.49-28 10-3.42 4.42-6.33 9.38-7.57 14.83s-.68 11.49 2.39 16.17c1.29 2 3 3.68 4.13 5.74.94 1.68 1.5 3.57 2.51 5.21a12.3 12.3 0 0 0 5.55 4.67l-.44.4a13.48 13.48 0 0 0-3.11.06c-1.06.18-2.09.59-3.16.72-1.32.17-2.67-.09-4 .08-2.46.32-4.48 2-6.35 3.65-2.19 1.91-4.54 4.14-4.71 7v.08l-1.47 2a7.89 7.89 0 0 0-.92 1.45c-.59 1.39-.26 3-.58 4.48a9.58 9.58 0 0 1-1.16 2.67 60.07 60.07 0 0 1-5 7.46 12.64 12.64 0 0 1-3.11 3.08 5.6 5.6 0 0 1-3.24.92 20.77 20.77 0 0 1-4.74-3.17 30.57 30.57 0 0 1-4.19-5.21c-2.38-3.43 5 6.83 2.62 3.39l-21.34-35.56a29 29 0 0 1-.84-5.06c0-.65-.27-1.51-.93-1.53a1.13 1.13 0 0 0-.75.36 4.34 4.34 0 0 0-1.39 3.7 5.13 5.13 0 0 0-3.27.58 1.87 1.87 0 0 0-.41 2.66v.27a1.42 1.42 0 0 0-.75 1.5 5.08 5.08 0 0 0-3.51.17c-1.05.59-1.45 2.32-.43 3a3.07 3.07 0 0 0-1.96 2.9zm133.68 5.1a16.52 16.52 0 0 0 1.87.48 29.85 29.85 0 0 1 5.8 2 3.18 3.18 0 0 1 1.51 1.13 3.36 3.36 0 0 1-.18 2.84l-2.64 7.13c-.42 1.12-.83 2.24-1.35 3.31-.2.43-.43.86-.66 1.28q-.12-.36-.24-.69a58.51 58.51 0 0 1-1.9-6.64c-.44-1.94-.81-3.9-1.12-5.86a28.64 28.64 0 0 0-1.11-4.98zm-2.76-5.59.2.14a2.25 2.25 0 0 1 .69.48 1.07 1.07 0 0 1 0 1zm-4.77-6.87 3.16.46a4.15 4.15 0 0 1 2.13.73 1.43 1.43 0 0 1 .29 2 4.76 4.76 0 0 1-.7.47 2 2 0 0 0-.75 2.07 22.41 22.41 0 0 0-1.81-2.81 13.9 13.9 0 0 0-2.11-2.16c-.07-.25-.13-.51-.21-.76zm-30.37 227.33a11.28 11.28 0 0 0 1.17 0 11.23 11.23 0 0 0-.19 2.84z",transform:"translate(-50.4 -87.11)",fill:"url(#a)"})),d||(d=bt.createElement("path",{d:"M921.92 339.11c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87 21.4 21.4 0 0 1-7.75-10.52c-4.27 1-8.62 1.89-13 1.5s-8.79-2.37-11.08-6.09c-1-1.64-1.57-3.53-2.51-5.21-1.15-2.06-2.85-3.75-4.14-5.73-3.06-4.68-3.62-10.69-2.38-16.15s4.14-10.39 7.57-14.81c6.63-8.51 17.67-11.67 28.06-10z",fill:"#3a3768"})),f||(f=bt.createElement("path",{d:"M921.92 339.11c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87 21.4 21.4 0 0 1-7.75-10.52c-4.27 1-8.62 1.89-13 1.5s-8.79-2.37-11.08-6.09c-1-1.64-1.57-3.53-2.51-5.21-1.15-2.06-2.85-3.75-4.14-5.73-3.06-4.68-3.62-10.69-2.38-16.15s4.14-10.39 7.57-14.81c6.63-8.51 17.67-11.67 28.06-10z",fill:"#3f3d56"})),p||(p=bt.createElement("path",{d:"M956.54 407.68c.31 2 .68 3.92 1.13 5.87a56.16 56.16 0 0 0 1.89 6.62 6.36 6.36 0 0 1 .59 3 5.61 5.61 0 0 1-.73 1.82c-2.51 4.45-5.89 8.75-6.18 13.85-.07 1.27 0 2.64-.68 3.69q-2.91-6.24-6.41-12.18c-2.44-4.14-5.15-8.32-5.85-13.08a24.8 24.8 0 0 1 .08-6.72 14.63 14.63 0 0 1 2.42-7.07c1.65-2.16 6.2-5.43 9.14-4.76 3.45.84 4.16 6.17 4.6 8.96z",fill:"#f86d70"})),h||(h=bt.createElement("path",{d:"M868.17 431.67c-3.28-1.34-6.62-2.75-9.23-5.16a30.11 30.11 0 0 1-4.19-5.2l-7.71-11.14c-1.83-2.65-3.71-5.43-4.1-8.62a28.37 28.37 0 0 1-7.71-17.5c0-.66-.26-1.51-.92-1.53a1.16 1.16 0 0 0-.76.36 4.35 4.35 0 0 0-1.38 3.7 5.13 5.13 0 0 0-3.27.57c-.92.66-1.16 2.29-.17 2.84a1.41 1.41 0 0 0-1 1.59 5 5 0 0 0-3.51.17c-1 .59-1.45 2.31-.43 3a3 3 0 0 0-2 2.93 5.88 5.88 0 0 0 1.33 3.45c3 4 8.2 5.58 11.63 9.16a26.56 26.56 0 0 1 3 4l9.95 15.14c3.16 4.81 6.41 9.71 10.92 13.29a9.88 9.88 0 0 0 4.06 2.16 4.49 4.49 0 0 0 4.27-1.18c1-1.13 1.15-2.76 1.25-4.26.24-2.55-.2-5.2-.03-7.77z",fill:"#a1616a"})),y||(y=bt.createElement("path",{d:"M901.48 641.89a8.65 8.65 0 0 0-1.06 1.29 4.51 4.51 0 0 0-.45 3.69 5 5 0 0 0 2.41 2.85 4.71 4.71 0 0 1 .76.44 4.51 4.51 0 0 0 .47.4 1.82 1.82 0 0 0 1 .19 36.41 36.41 0 0 0 7.87-1.34 6.31 6.31 0 0 0 3.25-1.53 6.47 6.47 0 0 0 1.11-2.15l.93-2.6a30.54 30.54 0 0 0 1.44-4.84 10.08 10.08 0 0 0-.26-5 1.63 1.63 0 0 0-.35 1 11.07 11.07 0 0 1-2 4.85 4.94 4.94 0 0 1-.78 1 5.09 5.09 0 0 1-2.34 1 28.76 28.76 0 0 1-5 .64 1.56 1.56 0 0 1-.68-.08 1.19 1.19 0 0 1-.57-.71 3 3 0 0 1 0-2c.45-1.26 1.69-2.09 2.29-3.3.44-.89-.17-1.87-1.08-1.12a27.74 27.74 0 0 0-2.29 2.43z",fill:"#3f3d56"})),u||(u=bt.createElement("path",{d:"M910.1 623.89c.27 4.19.45 8.71-1.84 12.22-.82 1.27-1.93 2.33-2.87 3.52a4.13 4.13 0 0 0-1 2.12c-.14 1.53 1.3 2.85 2.82 3.13a9.33 9.33 0 0 0 4.53-.65 10.91 10.91 0 0 0 3.85-1.81c2-1.69 2.52-4.5 2.92-7.08l.93-6a18.91 18.91 0 0 0 .34-4.37 19.46 19.46 0 0 0-1.17-4.71l-1.54-4.5a2.12 2.12 0 0 0-.68-1.12 2 2 0 0 0-1.17-.21c-1.47.07-5.18.61-5.89 2.16-.65 1.4.67 5.72.77 7.3z",fill:"#ee8e9e"})),E||(E=bt.createElement("path",{d:"M910.1 623.89c.27 4.19.45 8.71-1.84 12.22-.82 1.27-1.93 2.33-2.87 3.52a4.13 4.13 0 0 0-1 2.12c-.14 1.53 1.3 2.85 2.82 3.13a9.33 9.33 0 0 0 4.53-.65 10.91 10.91 0 0 0 3.85-1.81c2-1.69 2.52-4.5 2.92-7.08l.93-6a18.91 18.91 0 0 0 .34-4.37 19.46 19.46 0 0 0-1.17-4.71l-1.54-4.5a2.12 2.12 0 0 0-.68-1.12 2 2 0 0 0-1.17-.21c-1.47.07-5.18.61-5.89 2.16-.65 1.4.67 5.72.77 7.3z",opacity:.05})),x||(x=bt.createElement("path",{d:"M877.15 499.74a.37.37 0 0 0 0 .11 5 5 0 0 0 .56 1.7 24.58 24.58 0 0 1 2.16 8.75 7.41 7.41 0 0 0 .29 2.21 11.81 11.81 0 0 0 1.13 1.94c1.33 2.17 1.64 4.78 2.09 7.29a57.61 57.61 0 0 0 2.55 9.56c1.53 4.23 3.59 8.57 2.89 13a13 13 0 0 0-.4 3.2 9.24 9.24 0 0 0 1.25 3.37c.52 1 1 2.06 1.41 3.12s.85 2.31 1.19 3.48c.41 1.44.69 3.14-.26 4.29a4.88 4.88 0 0 0-.77.94 2.5 2.5 0 0 0 0 1.62q.81 3.42 1.74 6.83c.48 1.78 1 3.55 1.51 5.32 3.86 12.94 8.22 25.75 10.81 39 .37 1.91 2.81 3.28 4.71 3.69a6.14 6.14 0 0 0 5.41-1.45 3.32 3.32 0 0 0 .38-.37c2-2.14 2.27-5.42 2.13-8.38-.67-13.64-7.54-26.12-10.81-39.38a75.84 75.84 0 0 1-2.12-14.61c-.77-16.47-1.07-33.87 3.58-49.68 1-3.29 2.11-7 .37-10-1.1-1.86-3.13-3-5.14-3.76a33.1 33.1 0 0 0-25.69.66 8 8 0 0 0 0 1 10.13 10.13 0 0 1-.52 4.54 5.57 5.57 0 0 0-.45 2.01zm56.37 128.39.87 3.17a35.43 35.43 0 0 0 1.85 5.58 24.31 24.31 0 0 1 1.65 3.78 12.22 12.22 0 0 1 .28 3.25 9.93 9.93 0 0 1-.45 3.07 7.67 7.67 0 0 1-4.49 4.26 21.21 21.21 0 0 1-6.23 1.17 5 5 0 0 1-1.64 0 4.57 4.57 0 0 1-1.59-.83c-2.89-2.12-4.38-6-4.64-9.61a11.82 11.82 0 0 1 .49-2.45c.22-.3 2.41.93 1.47 2-1.38 1.53 2.67.74 4.73.61a19 19 0 0 0 2.68-.44l3.33-.71c1.09-.24 2.35-.61 2.73-1.66s-.46-2.29-1.11-3.3c-1.75-2.69-2.19-6-2.6-9.17-.08-.63-.86-4.68.75-3.42a4.5 4.5 0 0 1 1.12 2.11c.31.8.55 1.69.8 2.59z",fill:"#3f3d56"})),z||(z=bt.createElement("path",{d:"M892.02 561.77c1-1.15.67-2.85.26-4.28-.16-.54-.32-1.07-.5-1.6l13.09-4.42c0 1.17.1 2.34.15 3.51a76.05 76.05 0 0 0 2.12 14.62c3.27 13.25 10.14 25.73 10.81 39.36.15 3.14-.18 6.65-2.5 8.77a6.19 6.19 0 0 1-5.42 1.44c-1.89-.41-4.34-1.78-4.71-3.69-2.59-13.25-7-26.06-10.81-39q-1.8-6-3.25-12.16a2.54 2.54 0 0 1 0-1.61 4.88 4.88 0 0 1 .76-.94z",opacity:.05})),v||(v=bt.createElement("path",{d:"M928.2 613.76c1 1.78 2.61 3.36 2.85 5.4a30.92 30.92 0 0 1-.23 3.71 11.64 11.64 0 0 0 .55 3q1.9 6.9 4.4 13.62a3.73 3.73 0 0 1 .35 1.85 3.26 3.26 0 0 1-2.17 2.16c-3.11 1.33-6.63 1.24-10 1.1a5.23 5.23 0 0 1-2.82-.66c-1.21-.83-1.51-2.47-1.59-3.93-.23-4.25.49-8.52 0-12.75-.16-1.54-.49-3.06-.73-4.58a13.43 13.43 0 0 1 .2-6.4 14.65 14.65 0 0 1 2.39-4 12.52 12.52 0 0 1 3.33-3.32c.4-.24 1.53-1 1.93-.51.21.23.12.85.15 1.14a11.37 11.37 0 0 0 .23 1.32 10.85 10.85 0 0 0 1.16 2.85z",fill:"#ee8e9e"})),M||(M=bt.createElement("path",{d:"M903.03 505.05a3.62 3.62 0 0 1 .25 3c-.44 1.81-1.16 3.54-1.75 5.31a73.87 73.87 0 0 0-2.26 9.65c-.55 2.95-1.71 6.23-1.23 9.2a65.55 65.55 0 0 0-7 21.81c-.27 1.95 4.07 4.48 4 6.45-.16 3.92-3.29 4.23-1 7.36.11.16-.87 3.66-.74 3.81.94 1.13 2.13 2 3.14 3.09a23.63 23.63 0 0 1 3.31 4.85c6 10.78 14.59 23 11.93 35a2.14 2.14 0 0 0 1.14 2.16 5.89 5.89 0 0 0 2.52.58h.42c2-2.14 2.27-5.42 2.13-8.38-.67-13.64-7.54-26.12-10.81-39.38a75.84 75.84 0 0 1-2.12-14.61c-.77-16.47-1.07-33.87 3.58-49.68 1-3.29 2.11-7 .37-10-1.1-1.86-3.13-3-5.14-3.76a33.1 33.1 0 0 0-25.69.66 8 8 0 0 0 0 1 10.13 10.13 0 0 1-.52 4.54 5.57 5.57 0 0 0-.51 2s-.24-2.65-.24-2.61c5.35.77 10.93 4.26 16.28 5a37.18 37.18 0 0 1 8.16 1.8 3.54 3.54 0 0 1 1.78 1.15z",opacity:.05})),g||(g=bt.createElement("path",{d:"M940.05 475.89c.72 2.29 1.36 4.6 1.9 6.93a5.66 5.66 0 0 1 .19 2.48 21.78 21.78 0 0 0-.74 2.29c-.12 1.23.73 2.31 1.21 3.46 1.21 2.92-.08 6.21-1.35 9.1l-3.79 8.57-3.1 7c-.92 2.09-1.84 4.18-2.73 6.29a204.49 204.49 0 0 0-9.88 29.61 3.63 3.63 0 0 1-.51 1.29c-.53.7-1.48.9-2.25 1.33a4.19 4.19 0 0 0-.46 6.69c-.44 5.15 3.42 10.12 5.41 14.89 4.57 11 3.74 23.32 5.32 35.1l-1.78-1c-1.71.78-1.65 3.2-2.56 4.83-1.38 2.46-4.75 2.81-7.56 2.62a5.9 5.9 0 0 1-2.53-.58 2.13 2.13 0 0 1-1.13-2.16c2.65-12-6-24.25-11.94-35a23.3 23.3 0 0 0-3.31-4.84c-1-1.07-2.19-2-3.14-3.1-2.63-3.16-3-7.62-2.79-11.73a65.72 65.72 0 0 1 7.47-27.7c-.47-3 .69-6.25 1.24-9.2a72.26 72.26 0 0 1 2.25-9.65c.59-1.77 1.31-3.5 1.75-5.31a3.62 3.62 0 0 0-.24-3 3.52 3.52 0 0 0-1.69-1.09 37.63 37.63 0 0 0-8.16-1.8l-18.38-2.64c-.59-3.78-1.19-8-.78-11.78a18.11 18.11 0 0 1 13-15.16 2.73 2.73 0 0 1 2.39.15 95.83 95.83 0 0 1 48.67 3.11z",fill:"#3f3d56"})),k||(k=bt.createElement("path",{d:"M923.35 376.5a9 9 0 0 0 .8 5.26 8.22 8.22 0 0 0 2.09 2.31 15.49 15.49 0 0 0 6.06 3c1.3.33 2.76.55 3.62 1.59 1.29 1.56.43 3.91-.67 5.61-1.9 3-4.55 5.65-7.94 6.57-2.71.74-5.61.29-8.38.77-2 .35-3.9 1.18-5.88 1.65a17.35 17.35 0 0 1-16-4.45c2.94-2.26 6-4.67 7.53-8.06a11.46 11.46 0 0 0 .57-7.7c-.71-2.51-2.3-5-1.8-7.52s3-4.32 5.51-5.19a35.34 35.34 0 0 1 6.93-1.4c1.29-.18 9.52-2 10-1.1.29.51-1.42 3.51-1.63 4.17a16.05 16.05 0 0 0-.81 4.49z",fill:"#a1616a"})),b||(b=bt.createElement("path",{d:"M923.35 376.5a9 9 0 0 0 .8 5.26 8.22 8.22 0 0 0 2.09 2.31 15.49 15.49 0 0 0 6.06 3c1.3.33 2.76.55 3.62 1.59 1.29 1.56.43 3.91-.67 5.61-1.9 3-4.55 5.65-7.94 6.57-2.71.74-5.61.29-8.38.77-2 .35-3.9 1.18-5.88 1.65a17.35 17.35 0 0 1-16-4.45c2.94-2.26 6-4.67 7.53-8.06a11.46 11.46 0 0 0 .57-7.7c-.71-2.51-2.3-5-1.8-7.52s3-4.32 5.51-5.19a35.34 35.34 0 0 1 6.93-1.4c1.29-.18 9.52-2 10-1.1.29.51-1.42 3.51-1.63 4.17a16.05 16.05 0 0 0-.81 4.49z",opacity:.05})),w||(w=bt.createElement("circle",{cx:913,cy:365.81,r:16.69,fill:"#a1616a"})),H||(H=bt.createElement("path",{d:"m921.81 393.4-11.31 1.9a42.37 42.37 0 0 1-8.46.85 24.2 24.2 0 0 0-4.66 0c-1.07.18-2.09.59-3.17.72-1.32.17-2.66-.08-4 .09-2.46.31-4.48 2-6.35 3.64-2.19 1.9-4.54 4.13-4.7 7a2 2 0 0 0 .13 1 2.93 2.93 0 0 0 .84.88c2.08 1.7 3.25 4.25 4.73 6.5a25.11 25.11 0 0 0 5.62 6.06c.5-.32 1.44.52 1.22 1.06s-.75.93-.93 1.49c-.4 1.28 1.18 2.22 1.83 3.4s.33 2.66.4 4 .67 2.93.87 4.43c.45 3.47-1.26 7.13 0 10.42a3.27 3.27 0 0 0-3.25 2.53 9.55 9.55 0 0 0 .13 4.44 6.11 6.11 0 0 0-3 5.58 1 1 0 0 1-.72 1.33 5.63 5.63 0 0 0-3.47 5.23 2.57 2.57 0 0 1-.1 1.11 2.44 2.44 0 0 1-.82.84 6.52 6.52 0 0 0-2.43 5.1 3.74 3.74 0 0 0 1.72 3.34 31.12 31.12 0 0 0 7.6 2.26 68.3 68.3 0 0 0 7.36 1.3 66 66 0 0 0 6.89.21l15.14-.06c4.25 0 8.51 0 12.76-.32 4-.26 8-.76 11.85.28.48-.81-.29-1.75-.76-2.57a8.61 8.61 0 0 1-.87-3.56l-.95-10.09a17.73 17.73 0 0 1-.08-4.18c.21-1.49.77-2.9 1.06-4.37.55-2.83 0-5.75.18-8.63a38.51 38.51 0 0 1 1.32-7.51l3-12.35a47.67 47.67 0 0 1 1.48-6.19q3.45-8.9 7.25-17.64a1.82 1.82 0 0 0-.13-1.56l-2.5-4.49a28.66 28.66 0 0 0-2.29-3.65 14.45 14.45 0 0 0-8.45-5.19 14.94 14.94 0 0 0-9.82 1.46c-1.17.62-2.25 1.39-3.44 2-2.01 1-4.46 2.06-6.72 1.91z",fill:"#f86d70"})),O||(O=bt.createElement("path",{d:"m881.65 404.39-3.94 5.26a6.7 6.7 0 0 0-.92 1.45c-.6 1.38-.27 3-.59 4.46a9.3 9.3 0 0 1-1.15 2.67 61.58 61.58 0 0 1-5 7.46 13.37 13.37 0 0 1-3.11 3.08 5.16 5.16 0 0 1-4.2.74 2.63 2.63 0 0 1 1.38 1.25 15.26 15.26 0 0 1 1 9.76 10 10 0 0 1-1.1 3.2 4.8 4.8 0 0 1-2.51 2.17 3.7 3.7 0 0 0 4.36 3.13 7.29 7.29 0 0 0 2.16-1.08l6.33-4.1a16.82 16.82 0 0 0 2.95-2.21c1.18-1.18 2-2.67 3.16-3.89 2-2.07 4.84-3.31 6.23-5.81.87-1.56 1-3.41 1.55-5.12.35-1.11.87-2.17 1.2-3.29a14.7 14.7 0 0 0-1.3-10.54c-1.63-3.25-4.16-5.83-6.5-8.59z",fill:"#f86d70"})),G||(G=bt.createElement("path",{d:"M896.51 356.3a21.88 21.88 0 0 1 5.87-6.11c3.11-2.33 6.7-4.26 10.59-4.48a11.26 11.26 0 0 1 4.76.78c.08-4.72 1.25-7.85 4.19-7.38 5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87c-3.59-2.58 1.7-22.12.3-26.31-2.09.45-5.93-9.63-8.12-19.88a10.35 10.35 0 0 1-4.75.48 5.72 5.72 0 0 0-1.7-.12 4.52 4.52 0 0 0-1.48.6 36.51 36.51 0 0 1-5.05 2.6c-3.62 1.35-7.61 1.17-11.46 1a11.36 11.36 0 0 1 1.62-8.19z",fill:"#3a3768"})),T||(T=bt.createElement("path",{d:"M896.51 356.3a21.88 21.88 0 0 1 5.87-6.11c3.11-2.33 6.7-4.26 10.59-4.48a11.26 11.26 0 0 1 4.76.78c.08-4.72 1.25-7.85 4.19-7.38 5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.67 9.67 0 0 1-10.82-1.41 36.43 36.43 0 0 0 2.46 7.08c-3.49 1.69-7.69-1.09-9.43-4.54s-2-7.48-3.2-11.14-3.49-6.89-4.49-10.58a10.17 10.17 0 0 0-1.25-3.54 9 9 0 0 0-2.2-1.87c-3.59-2.58 1.7-22.12.3-26.31-2.09.45-5.93-9.63-8.12-19.88a10.35 10.35 0 0 1-4.75.48 5.72 5.72 0 0 0-1.7-.12 4.52 4.52 0 0 0-1.48.6 36.51 36.51 0 0 1-5.05 2.6c-3.62 1.35-7.61 1.17-11.46 1a11.36 11.36 0 0 1 1.62-8.19z",fill:"#3f3d56"})),L||(L=bt.createElement("path",{d:"M954.04 432.09a75.88 75.88 0 0 1-7.16-31.64c0-5.35.15-11.56-4-15-1.1-.91-2.59-1.81-2.53-3.24a5.11 5.11 0 0 1 .7-1.84 8.56 8.56 0 0 0-.28-7 24.24 24.24 0 0 0-4.18-5.85 11.63 11.63 0 0 1-2.91-4.55 9.94 9.94 0 0 1-.12-3.31c.41-4.18 1.64-8.55 0-12.44-2-5-7.81-7.12-13.16-8.05a3 3 0 0 1 1.44-.09c5.49.88 11.59 3 13.69 8.14 1.58 3.89.36 8.26 0 12.44a9.44 9.44 0 0 0 .12 3.31 11.61 11.61 0 0 0 2.9 4.55 24.24 24.24 0 0 1 4.18 5.85 8.52 8.52 0 0 1 .28 7 5.09 5.09 0 0 0-.69 1.84c-.07 1.43 1.42 2.33 2.52 3.24 4.12 3.41 3.94 9.62 4 15a75.72 75.72 0 0 0 7.16 31.64 9.35 9.35 0 0 1-5.3 1 9.05 9.05 0 0 0 3.34-1zm-8.35 5.67a35.78 35.78 0 0 1-2.46-7.08 9.13 9.13 0 0 0 2.37 1.57 37.2 37.2 0 0 0 2 5.51 5.24 5.24 0 0 1-3.23.41 5.08 5.08 0 0 0 1.32-.41zm-29.92-91.27a11.52 11.52 0 0 0-3.18-.75h.38a11.18 11.18 0 0 1 2.82.21c-.01.16-.02.34-.02.54zm-11.36 17a36.62 36.62 0 0 0 5.06-2.6 4.44 4.44 0 0 1 1.48-.6 5.46 5.46 0 0 1 1.56.09 6.26 6.26 0 0 0-1.08.51 36.51 36.51 0 0 1-5.05 2.6 22.78 22.78 0 0 1-8.47 1.1 20.07 20.07 0 0 0 6.5-1.1zm12.99-3.6.09.45a9.8 9.8 0 0 1-2.48.07 11 11 0 0 0 2.39-.52z",opacity:.1})),C||(C=bt.createElement("path",{d:"M952.14 437.32a6.1 6.1 0 0 0 1.64 4.88 10.87 10.87 0 0 0 2.32 1.71 6.3 6.3 0 0 0 2.76 1 5.21 5.21 0 0 0 3.53-1.54c2.91-2.55 4.36-6.33 5.7-9.95a74.65 74.65 0 0 0 4.31-14.71c.82-5.43.47-11.06 2-16.33-1.38-2.76-2.26-5.8-3.83-8.46a39.86 39.86 0 0 1-2.64-4.95 17.1 17.1 0 0 1-.47-11.42 1.54 1.54 0 0 0-1.82.09 3.83 3.83 0 0 0-1.1 1.6 14.17 14.17 0 0 0-1.09 6.71 2.67 2.67 0 0 1-.19 1.64 2.06 2.06 0 0 1-1.78.75 15.8 15.8 0 0 1-4.12-.74 38.19 38.19 0 0 0-12.69-1.05 6 6 0 0 0-2.48.6 2.3 2.3 0 0 0-1.27 2.07l10.14 1.49a4.19 4.19 0 0 1 2.14.73 1.45 1.45 0 0 1 .29 2 4 4 0 0 1-.7.46 2.09 2.09 0 0 0 .08 3.34 2.14 2.14 0 0 1 .69.48c.42.56-.13 1.29-.31 2a2.48 2.48 0 0 0 1.22 2.53 8.92 8.92 0 0 0 2.83.95 29.82 29.82 0 0 1 5.8 2 3.18 3.18 0 0 1 1.51 1.13 3.39 3.39 0 0 1-.18 2.84l-2.64 7.12c-.42 1.12-.83 2.23-1.35 3.31-.67 1.39-1.5 2.7-2.19 4.09a40.83 40.83 0 0 0-1.65 4c-1.35 3.61-4 5.78-4.46 9.63z",fill:"#a1616a"})),I||(I=bt.createElement("path",{d:"M515.43 162.06v335.41a111.1 111.1 0 0 0-34.63-5.34c-49.87 0-90.37 35.29-90.37 85.16s40.5 84.77 90.37 84.77 90.62-36.72 90.62-90V339.14h263v158.33a111.05 111.05 0 0 0-34.63-5.34c-49.87 0-90.37 35.29-90.37 85.16s40.5 84.77 90.37 84.77 90.62-36.72 90.62-90v-410zm319 125h-263v-69h263zm-585-162v225.1a85.15 85.15 0 1 0 42.6 73.6v-213.4h85.4v-85.3zM226.6 652.62a54.34 54.34 0 0 0-15.65-5.54 71.57 71.57 0 0 0 11.71-2.63c10.17-3.22 15.3-7.54 11.45-9.65s-15.22-1.22-25.39 2a39.2 39.2 0 0 0-9.75 4.33c-1.05-2.23-3.91-4.82-8.37-7.27-9-5-21.18-7.47-27.12-5.59s-3.43 7.42 5.61 12.39a54.13 54.13 0 0 0 14 5.21 82.33 82.33 0 0 0-9.65 1.71c-11.07 2.66-17.47 6.67-14.3 9s14.73 2 25.8-.64a48.22 48.22 0 0 0 11.6-4.1c.91 2.3 3.82 5 8.52 7.61 9 5 21.18 7.47 27.12 5.59s3.42-7.46-5.58-12.42zm63.71-73.08a26.5 26.5 0 0 0-7.59-2.69 35.72 35.72 0 0 0 5.68-1.27c4.94-1.57 7.43-3.66 5.56-4.69s-7.39-.59-12.33 1a19.68 19.68 0 0 0-4.73 2.1c-.51-1.08-1.9-2.34-4.06-3.53-4.39-2.41-10.29-3.62-13.17-2.71s-1.66 3.61 2.72 6a26.21 26.21 0 0 0 6.82 2.52 41 41 0 0 0-4.69.84c-5.37 1.28-8.48 3.23-6.94 4.35s7.15 1 12.52-.31a23.78 23.78 0 0 0 5.64-2c.44 1.11 1.85 2.44 4.13 3.69 4.39 2.41 10.28 3.63 13.17 2.72s1.66-3.61-2.73-6.02zm-171.39-74.09a16.63 16.63 0 0 0-4.78-1.68 20.82 20.82 0 0 0 3.58-.8c3.09-1 4.65-2.29 3.48-2.93s-4.62-.37-7.71.61a12.28 12.28 0 0 0-3 1.31 5.85 5.85 0 0 0-2.54-2.2c-2.74-1.51-6.43-2.27-8.24-1.7s-1 2.25 1.71 3.76a16.29 16.29 0 0 0 4.27 1.58 24.63 24.63 0 0 0-2.94.53c-3.36.8-5.31 2-4.35 2.72s4.48.61 7.84-.19a14.94 14.94 0 0 0 3.53-1.25 5.57 5.57 0 0 0 2.58 2.31c2.75 1.51 6.44 2.27 8.24 1.7s1.07-2.26-1.67-3.77z",fill:"#a4a4a4"})),j||(j=bt.createElement("path",{d:"M364.43 125.06v71.3h-85.4v213.4a85.27 85.27 0 0 1-138.19 66.89 85.28 85.28 0 0 0 152.19-52.89v-213.4h85.4v-85.3z",opacity:.1})),Z||(Z=bt.createElement("path",{d:"m123.47 143.58.29 2.18 9.45 1.34s.77-.58 2-1.37c2.24-1.47 6-3.66 9.2-4.28 4.95-1 20.69-8.05 15.62-8.51s-4.55.59-4.55.59-5.59-5.49-11.36-.47c-4.38 3.81-14 7.91-18.39 9.66-1.4.55-2.26.86-2.26.86z",fill:"#efb7b9"})),P||(P=bt.createElement("path",{d:"M161.22 118.52a16 16 0 0 1 4.53-1.16 5.51 5.51 0 0 1 4.31 1.44c.61.63 1 1.44 1.6 2.08 2.88 3.08 8.47.78 11.94 3.17 2.13 1.48 2.79 4.27 3.55 6.76s2.14 5.22 4.68 5.75a13.88 13.88 0 0 0 3.69-.14 3.63 3.63 0 0 1 3.32 1.22c1.18 1.79-.45 4.78 1.26 6.06 1.53 1.13 4.3-.45 5.37 1.12a2.34 2.34 0 0 1-.37 2.6 18.07 18.07 0 0 0-1.74 2.18 3.3 3.3 0 0 0 3.25 4.82c1.08-.11 2.23-.72 3.17-.19a2.24 2.24 0 0 1 1 1.77 4.65 4.65 0 0 1-4.18 4.89c-1.84.12-3.53-.88-5.17-1.72s-3.57-1.55-5.27-.85a8.14 8.14 0 0 0-2.12 1.49 23.21 23.21 0 0 1-6.52 3.86c-2.08.82-4.5 1.31-6.5.29-2.25-1.15-3.41-3.95-5.79-4.8s-5.1.74-7.38 2.09-5.33 2.48-7.39.82c-2.22-1.79-1.54-5.38-2.89-7.89a7.75 7.75 0 0 0-2.17-2.39c-1.52-1.17-3.25-2.05-4.78-3.2a8 8 0 0 1-3.26-4.58c-.45-2.27.63-4.54 1.86-6.5s2.66-3.88 3.06-6.15c.3-1.7 0-3.47.39-5.15a6.35 6.35 0 0 1 4.12-4.35c1.12-.38 1.32-.28 1.89-1.27a4 4 0 0 1 2.54-2.07z",fill:"#3f3d56"})),F||(F=bt.createElement("path",{d:"M199.11 138.33a8.51 8.51 0 0 1 .18 3 8.11 8.11 0 0 1-.18-3zm4.28 11.45a3.27 3.27 0 0 0-.34 1.1 3.38 3.38 0 0 1 .12-2.8 17.79 17.79 0 0 1 1.74-2.17 3.69 3.69 0 0 0 .5-1l.08.09a2.34 2.34 0 0 1-.36 2.59 17.88 17.88 0 0 0-1.74 2.19zm-52.97-2.68c1.53 1.16 3.25 2 4.77 3.21a7.62 7.62 0 0 1 2.17 2.39c1.35 2.51.67 6.1 2.89 7.89 2.06 1.66 5.12.54 7.4-.82s4.88-3 7.37-2.09 3.54 3.65 5.8 4.8c2 1 4.41.52 6.5-.29a23.3 23.3 0 0 0 6.51-3.86 8.6 8.6 0 0 1 2.12-1.5c1.71-.69 3.64 0 5.28.86s3.33 1.84 5.16 1.72a4.7 4.7 0 0 0 4.15-4.11 3 3 0 0 1 .22.88 4.64 4.64 0 0 1-4.15 4.92c-1.83.12-3.53-.88-5.16-1.71s-3.57-1.55-5.28-.86a8.83 8.83 0 0 0-2.12 1.49 23.33 23.33 0 0 1-6.51 3.87c-2.08.81-4.51 1.3-6.5.29-2.26-1.15-3.41-3.95-5.8-4.8s-5.1.73-7.37 2.09-5.34 2.48-7.4.81c-2.22-1.79-1.54-5.37-2.89-7.89a7.7 7.7 0 0 0-2.17-2.38c-1.51-1.17-3.24-2.05-4.77-3.21a8 8 0 0 1-3.27-4.58 5.41 5.41 0 0 1-.1-1.2 8.36 8.36 0 0 0 3.15 4.08z",opacity:.1})),S||(S=bt.createElement("path",{d:"m154.47 199.04-3.43.73s3.38 5.56 8.59 1.91-5.16-2.64-5.16-2.64z",fill:"#4c4981"})),V||(V=bt.createElement("path",{d:"m154.47 199.04-3.43.73s3.38 5.56 8.59 1.91-5.16-2.64-5.16-2.64z",opacity:.1})),A||(A=bt.createElement("path",{d:"M228.92 250.79s4.76 2.46 9.19 5.31c3.18 2 6.19 4.27 7.17 5.94 2.36 4 13.83 8.34 13.83 8.34l11.38 8.66c2.68.89 5.29 4.15 6.36 5.61.32.44.51.72.51.72l4.56-.59 2.4-3.12s.61-6.88-4.13-6.8a6.52 6.52 0 0 1-2.67-.69c-5.1-2.25-12.23-9.35-12.23-9.35s-12.12-15.14-15.75-15.64a6 6 0 0 1-1.14-.29c-3.69-1.29-9-6.05-9-6.05zm-47.01 43.77c1.21 7.27 6.72 21.17 8.49 24.07 2.2 3.59 3.35 10.78 3.35 10.78l.65 5a5.8 5.8 0 0 0 .72 1.94 10.57 10.57 0 0 0 .64 1l9.13-2.81s-.53-2.1-1.33-4.51-2-5.44-3.14-6.56c-2.23-2.19-2.56-9.92-2.56-9.92s-1.86-14.86-2.43-16.73a25.8 25.8 0 0 1-1-5.48c-.09-1-.15-2.14-.16-3.43a70.09 70.09 0 0 0-1.44-11l-10.65 1.93-.28 11.91a7.94 7.94 0 0 0 .01 3.81z",fill:"#efb7b9"})),q||(q=bt.createElement("path",{d:"M276.85 284.65c.32.44.51.72.51.72l4.56-.59 2.4-3.12s.61-6.88-4.13-6.8a6.52 6.52 0 0 1-2.67-.69c-.39 2.06 1.92 3.77 1.92 3.77s1 .7.73 3.93c-.15 2.2-2.1 2.67-3.32 2.78z",opacity:.1})),D||(D=bt.createElement("path",{d:"M276.35 285.07c.3 1.11 3.18 2.74 5.18 3.76 1 .5 1.75.85 1.9.93.46.23 2.88-2.46 3.21-4.63s6.1-8.92 6.1-8.92a24.2 24.2 0 0 0 2.14-8.45c.22-2.95-1-3.19-2.45-2.52a9.69 9.69 0 0 0-2.74 2.15 7.32 7.32 0 0 1-3.55 1.84 17.37 17.37 0 0 0-5.11 2.18c-1.4.9-2.76 2-3 3-.53 2.13 1.89 3.93 1.89 3.93s1 .7.73 3.93-4.33 2.7-4.3 2.8z",fill:"#444053"})),N||(N=bt.createElement("path",{d:"M281.53 288.83c1 .5 1.75.85 1.9.93.46.23 2.88-2.46 3.21-4.63s6.1-8.92 6.1-8.92a24.2 24.2 0 0 0 2.14-8.45c.22-2.95-1-3.19-2.45-2.52-.24 2.34-.83 6.89-2 9.26-1.46 2.82-7.31 11.88-8.9 14.33zm-86.32 47.34-.09.17a10.57 10.57 0 0 0 .64 1l9.13-2.81s-.53-2.1-1.33-4.51c-3.61-1-8.79 5.31-8.79 5.31z",opacity:.1})),_||(_=bt.createElement("path",{d:"M194.6 342.97s7.62 2.67 11 2.26c2.61-.31 2.72-1.52 2.54-4-.06-.8-.14-1.72-.19-2.78-.17-4.4-1.94-5.29-1.94-5.29-2.9-7.6-11.25 2.6-11.25 2.6l.43.84a9.2 9.2 0 0 0-.85 4.15 12.12 12.12 0 0 0 .26 2.22z",fill:"#444053"})),U||(U=bt.createElement("path",{d:"M194.6 342.97s7.62 2.67 11 2.26c2.61-.31 2.72-1.52 2.54-4a8.07 8.07 0 0 1-6.21 1.78 24.43 24.43 0 0 1-7.59-2.26 12.12 12.12 0 0 0 .26 2.22z",opacity:.1})),B||(B=bt.createElement("path",{d:"m156.83 158.15 3 13 .61 2.68 5.51.7 5.68.72 6.18-2.24s1.72-5.88.3-10.29a6.52 6.52 0 0 0-2.86-3.77 6.35 6.35 0 0 1-1.19-.92 5.22 5.22 0 0 1-1-1.43 5.91 5.91 0 0 1-.53-2.07c-.31-3.51 1.91-7.35 1.91-7.35s-13.1-4.47-12.08-1.58c.67 1.87-1.18 5.13-2.56 7.19-.75 1.11-1.36 1.88-1.36 1.88z",fill:"#efb7b9"})),R||(R=bt.createElement("circle",{cx:168.65,cy:141.76,r:11.38,opacity:.1})),W||(W=bt.createElement("circle",{cx:168.6,cy:141.34,r:11.38,fill:"#efb7b9"})),X||(X=bt.createElement("path",{d:"M157.65 201.41c.54 2.51 3 6.46 3 6.46l15.89 3.9 11.35-11.88v-.08c-.35-1.11-4.68-15.12-1.55-18.57 3.28-3.59 2-13.72 2-13.72s-5.67-6.52-6.82-8.1-8.51-2.82-8.51-2.82c.37.5.71 1 1 1.43a14 14 0 0 1 1.81 3.84 5.74 5.74 0 0 1-.15 4.17 4.58 4.58 0 0 0-.39 1.07c-1.24 5.43-6.9 4.67-9.15 4.13-.58-.14-.94-.26-.94-.26l-5.41.17-3.4.11s1.55 26.78 1.18 28.91a3.42 3.42 0 0 0 .09 1.24z",fill:"#f86d70"})),K||(K=bt.createElement("path",{d:"m156.47 172.64 9.85-1.29h-.18c-.58-.14-.93-.26-.93-.26l-5.42.17-3.39.11s.02.44.07 1.27zm11.05 36.94 4.27 1.04 6.73-.88 1.75-1.83-12.75 1.67zm7.11 1.74 1.93.47.79-.83-2.72.36z",fill:"#925978"})),J||(J=bt.createElement("path",{d:"M157.65 201.41c2.54.26 4.88.39 4.88.39l13.09-.49v-13.67a19.39 19.39 0 0 0-5.28-3.48c-2.28-.79-5-3.21-4.46-9.59 0-.37.06-.75.11-1.14a14.68 14.68 0 0 0 .12-2.15 11.5 11.5 0 0 0-3.63-8.42 1.73 1.73 0 0 0-.19-.17l-2.13-9.92a2.12 2.12 0 0 0-.43.06c-.75 1.11-1.36 1.88-1.36 1.88l-1.57 3.44 3 13-3.4.11s1.55 26.78 1.18 28.91a3.42 3.42 0 0 0 .07 1.24z",opacity:.1})),Q||(Q=bt.createElement("path",{d:"m162.1 201.89 13.09-.48v-13.68a19.51 19.51 0 0 0-5.27-3.48c-2.41-.84-5.28-3.48-4.35-10.73a11.87 11.87 0 0 0-3.48-10.63l-.2-.17-2.13-9.92a4.61 4.61 0 0 0-3.37 1.93 8.45 8.45 0 0 1-.79 1.16 2 2 0 0 1-2.63.78c-1.38-.61-7.32-3.12-8.65-.66s-1.58 17.11-1.58 17.11a11.19 11.19 0 0 1 3.85 6.33c.91 4.19 2.43 4.29 2.43 4.29l1.64 12s1.49 2.61.38 4.05",fill:"#444053"})),Y||(Y=bt.createElement("path",{d:"m155.6 155.89 2.23 6.68 4.26.37-.2-.17-2.13-9.92a4.61 4.61 0 0 0-3.37 1.93 8.45 8.45 0 0 1-.79 1.11z",fill:"#444053"})),$||($=bt.createElement("path",{d:"m123.47 143.58.29 2.18 9.45 1.34s.77-.58 2-1.37c-1-.23-5.7-1.25-8.16-2-.91-.28-1.51-.52-1.53-.68s.06-.19.21-.31c-1.4.53-2.26.84-2.26.84z",opacity:.1})),ee||(ee=bt.createElement("path",{d:"M112.39 157.69s10.71 8.13 17.35 9.44c0 0 9.34 2.76 13 6l4-15.42-2.45-1.69s-2.93 1.81-5.45 1.21-5.31-1-5.31-1a41.06 41.06 0 0 0-6.79-1.86c-1.8-.15-1.07-2.49.73-3.73a3.91 3.91 0 0 1 .75-.42 2.32 2.32 0 0 0 3 .68 6.85 6.85 0 0 0 1.76-1.64 22.83 22.83 0 0 0 2-3s-5.59-1.2-8.37-2.06c-.91-.28-1.51-.52-1.53-.68-.08-.64 5-2.66 5-2.66s-4.34-2.1-6.1-.57c0 0 1.14.85.22 1.69s-12 9.37-12 9.37-5.47 2.69.19 6.34z",fill:"#444053"})),te||(te=bt.createElement("path",{d:"m121.6 149.8 5.93.85a3.91 3.91 0 0 1 .75-.42 2.32 2.32 0 0 0 3 .68 6.85 6.85 0 0 0 1.76-1.64 23.44 23.44 0 0 0 1.62-2.53s-5.59-1.2-8.37-2.06z",opacity:.1})),ae||(ae=bt.createElement("path",{d:"m121.94 149.32 6.31.91a2.32 2.32 0 0 0 3 .68c1.81-1 3.76-4.66 3.76-4.66s-5.59-1.2-8.37-2.06z",fill:"#444053"})),le||(le=bt.createElement("path",{d:"m239.43 242.89-10.51 7.95s4.76 2.46 9.19 5.31c3.87-2.62 7.52-5 10.29-7.21-3.69-1.34-8.97-6.05-8.97-6.05zm-57.52 51.67a35.61 35.61 0 0 0 7.7-1.84s1.94-.42 4.82-1.38c-.09-1-.15-2.14-.16-3.43a70.09 70.09 0 0 0-1.44-11l-10.65 1.93-.28 11.91a7.94 7.94 0 0 0 .01 3.81z",opacity:.1})),ce||(ce=bt.createElement("path",{d:"M162.93 246.24c2.14 3.17 8 16.65 8 16.65a57.34 57.34 0 0 0 4.46 6.87c2.33 2.93 3.94 9.52 5.71 14.79s-.52 4.28-.27 7 10.26-.8 10.26-.8 20.45-4.5 26.7-17 31.21-23.82 36.26-30.85-1.43-4.13-1.18-7.94-2.63-7-2.63-7-9.42-2.66-10.95-4.51-9.05-6.48-9.05-6.48-7.09-3.07-8-4.14-9.31-4.39-11.88-5-5.09-4.3-5.09-4.3-1.59.21-3.94-2.07-12.21-4.24-12.21-4.24c-16.83 12.4-28.46 10.67-28.46 10.67l-.27 2.34c-8.95 11.66.4 32.84 2.54 36.01z",fill:"#444053"})),re||(re=bt.createElement("path",{d:"M160.39 210.21s14.55 4.79 28.74-12.93c-16.84 12.34-28.47 10.61-28.47 10.61zm25.04 8.27s19.54 28.21 20.75 29.24-19.72-29.59-20.75-29.24zm-9.03-2.16s13.53 21 13.26 23.84c0 0-13.06-20.19-13.26-23.84zm-7.88 5.77s2.5 11.75-1.26 18.41zm-5.2.68s-.16 10.17-1.3 12.26zm33.14-9.07 17.97 7.04-6.58.86-11.39-7.9zm-35.38-78.67c.9.6 1.65 1.55 2.72 1.69a4.28 4.28 0 0 0 2.21-.54c1.79-.78 3.81-1.38 5.67-.77 2.64.87 4.09 3.91 6.72 4.81a4.79 4.79 0 0 0 2.52.14 4.88 4.88 0 0 0 1.42-.58 4.57 4.57 0 0 0 2-2.84 5.88 5.88 0 0 0-2-5.54 12.27 12.27 0 0 0-5.59-2.54c-5.28-1.17-10.77-.78-16.16-.37a2.35 2.35 0 0 0-1.26.33c-.82.61-2.22 3.68-1.93 4.72.4 1.35 3.53.35 3.68 1.49z",opacity:.1})),ne||(ne=bt.createElement("path",{d:"M161.03 134.61c.9.59 1.64 1.55 2.72 1.69a4.23 4.23 0 0 0 2.2-.55c1.79-.78 3.82-1.38 5.67-.77 2.64.88 4.09 3.92 6.72 4.81a4.7 4.7 0 0 0 2.52.14 4.6 4.6 0 0 0 1.42-.57 4.68 4.68 0 0 0 2.06-2.84 5.91 5.91 0 0 0-2.05-5.55 12.31 12.31 0 0 0-5.59-2.53c-5.28-1.18-10.76-.78-16.16-.38a2.38 2.38 0 0 0-1.26.34c-.81.6-2.22 3.68-1.93 4.72.4 1.39 3.53.33 3.68 1.49z",fill:"#3f3d56"})),ie||(ie=bt.createElement("path",{d:"m230.6 142.98 1.72 6.95 2.23-1.35 12.12-7.31s9.18-.34 9.89-7.72-10.2-.07-10.78.49-1.9 1.55-1.9 1.55l-11.28 6.3z",fill:"#efb7b9"})),se||(se=bt.createElement("path",{d:"m230.6 142.98 1.72 6.95 2.23-1.35c-.49-3.14-1.26-6-2-6.7zm-59.82 45.44 2.47 14.5 14.62-3.03c-.35-1.11-4.68-15.12-1.55-18.57 3.28-3.59 2-13.72 2-13.72s-5.67-6.52-6.82-8.1-8.51-2.82-8.51-2.82a5.91 5.91 0 0 1-.53-2.07 8.32 8.32 0 0 0-.56 1.55c0 2.64 1.07 4.46 3.9 5.79.25.12.51.23.79.34.44.18.93.35 1.45.51l.24.07c4.71 1.4 5.73 4.22 5.73 4.22a10.79 10.79 0 0 1 2.14 7.6c-.46 4.45-15.37 13.73-15.37 13.73z",opacity:.1})),oe||(oe=bt.createElement("path",{d:"m171.6 188.31 2.47 14.49 16.53-3.44s-.5-5.47-1.65-7.69-.92-10.89-.92-10.89c7-7.54 3.32-13.67 3.32-13.67s20.57-3.34 20.92-4 7.21-4.32 7.21-4.32 7.45-1.91 8.46-3a9 9 0 0 1 1.22-1.11 3.21 3.21 0 0 1 .4-.26l.55 4.75h.25a6.77 6.77 0 0 0 3.24-1.28c1.7-1.3-.45-15.55-2.1-16.05a1.9 1.9 0 0 0-.95 0 10.74 10.74 0 0 0-3.55 1.92l-.29.23-.1.09s-9.31 3.65-11.17 5.33-16.34 3.81-16.34 3.81-6.49 1.54-7.33.61-10.75-2.45-11.58-1-3.13 1.19-3.13 1.19c-1.63-1.88-2.76-1.15-3.45-.07a7.55 7.55 0 0 0-.88 2.09c0 2.88 1.27 4.77 4.69 6.13.52.2 1.08.4 1.69.58 4.72 1.4 5.73 4.22 5.73 4.22a10.77 10.77 0 0 1 2.15 7.6c-.45 4.46-15.39 13.74-15.39 13.74z",fill:"#444053"})),me||(me=bt.createElement("path",{d:"M230.6 141.89a1.54 1.54 0 0 1 .53.06c1.65.5 3.79 14.76 2.09 16.06a6.7 6.7 0 0 1-2.89 1.25h-.25l-.55-4.75a3.21 3.21 0 0 0-.4.26v-.2a12.34 12.34 0 0 0-2.35-10.55z",opacity:.1})),de||(de=bt.createElement("path",{d:"m229.52 154.49.55 4.75a6.65 6.65 0 0 0 3.53-1.35c1.7-1.3-.45-15.55-2.1-16.05-1.3-.4-3.59 1.22-4.5 1.91a12.36 12.36 0 0 1 2.52 10.74zm-52.06 7.65 2.37-2.22-6.18-6a7.55 7.55 0 0 0-.88 2.09c.02 2.88 1.27 4.77 4.69 6.13z",fill:"#444053"})),fe||(fe=bt.createElement("path",{d:"M160.92 133.76c.9.59 1.64 1.55 2.72 1.69a4.23 4.23 0 0 0 2.2-.55c1.79-.78 3.82-1.38 5.67-.77 2.64.88 4.09 3.92 6.72 4.81a4.7 4.7 0 0 0 2.52.14 4.57 4.57 0 0 0 3.48-3.41 4.55 4.55 0 0 0 .11-1.27 4.74 4.74 0 0 1 0 2.12 4.64 4.64 0 0 1-2.06 2.84 4.5 4.5 0 0 1-1.42.57 4.66 4.66 0 0 1-2.51-.14c-2.64-.89-4.09-3.93-6.73-4.81-1.85-.61-3.88 0-5.67.77a4.23 4.23 0 0 1-2.2.55c-1.07-.14-1.82-1.1-2.72-1.69-.15-1.16-3.28-.1-3.67-1.49a1.66 1.66 0 0 1 0-.64c.62 1.07 3.41.19 3.56 1.28zm9.68 32.73s-1.31 3.68.36 4.92c0 0-1.83-4.87-2.89-4.76",opacity:.1})),pe||(pe=bt.createElement("path",{d:"M252.05 130.65s-8.45 7.31-2.34 8.49 2.34-8.49 2.34-8.49z",fill:"#efb7b9"})),he||(he=bt.createElement("path",{d:"M821.44 333.14h-263v232.94c0 53.26-40.75 90-90.62 90a100.13 100.13 0 0 1-34.82-6.11 97.54 97.54 0 0 0 47.82 12.11c49.87 0 90.62-36.72 90.62-90V339.14h250zm-263.02-52.09h13v-63.01h250.02v-6H558.42v69.01zm319.01-118.99v404c0 53.26-40.75 90-90.62 90a100.13 100.13 0 0 1-34.82-6.11 97.54 97.54 0 0 0 47.82 12.11c49.87 0 90.62-36.72 90.62-90v-410z",opacity:.1})),ye||(ye=bt.createElement("path",{d:"M579.83 69.89c6.45 13.33 17 28.49 28.93 22.7s20.84-30.35 14.39-43.7-21.39-19.42-33.35-13.63-16.43 21.32-9.97 34.63z",fill:"#a4a4a4"})),ue||(ue=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a3.57 3.57 0 0 0-.28-.49 6.17 6.17 0 0 1-.89-2.48 9 9 0 0 1 .11-3.09l-6.35-.42s2.47 2.1 2.18 3.2a.63.63 0 0 1-.29.38 1 1 0 0 1-.42.18l-.48.14c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",fill:"#a4a4a4"})),Ee||(Ee=bt.createElement("path",{d:"m601.28 95.82 4.48.62a5.58 5.58 0 0 1-.13-.69c-1.14-.05-2.93-.2-4.06-.31a.63.63 0 0 1-.29.38z",fill:"#444053"})),xe||(xe=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a7.2 7.2 0 0 1-2.75.11 6.09 6.09 0 0 1-3.67-2.69c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",fill:"#a4a4a4"})),ze||(ze=bt.createElement("path",{d:"M605.36 101.03s2.33-.39 1.44-2.31a7.2 7.2 0 0 1-2.75.11 6.09 6.09 0 0 1-3.67-2.69c-1.67.59-1 1.43-1 1.43.22 2.74 5.98 3.46 5.98 3.46z",opacity:.1})),ve||(ve=bt.createElement("path",{d:"M601.97 36.66s7.1-.86 9.11 3.87a5.71 5.71 0 0 0-2.55.15 3.62 3.62 0 0 1-1.66.32 9.52 9.52 0 0 0-4.9-4.34z",fill:"#fff",opacity:.1})),Me||(Me=bt.createElement("path",{d:"M609.6 133.04a2.51 2.51 0 0 0 .4-.4 5.41 5.41 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 9.27 9.27 0 0 1 2-.6 8 8 0 0 1 1-.11l-.9-4.3v-.06l-.39-1.87a13.58 13.58 0 0 1-.9 1.57c-.46.7-1 1.37-1.6 1.38a.71.71 0 0 1-.45-.17 1.36 1.36 0 0 1-.28-.36c-.1-.16-.18-.3-.27-.43-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",fill:"#a4a4a4"})),ge||(ge=bt.createElement("path",{d:"M611.6 131.44a5.33 5.33 0 0 1 .63-.32c-.22-.93-.49-2.33-.68-3.43v-.23c0-.08 0-.23-.06-.33a.71.71 0 0 1-.45-.17l.1.67v.27z",fill:"#444053"})),ke||(ke=bt.createElement("path",{d:"M609.6 133.04a7.21 7.21 0 0 1-.84-2.62 5.68 5.68 0 0 1 .19-1.66c.05-.16.09-.32.15-.47a4.87 4.87 0 0 1 1.26-2.12c-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",fill:"#a4a4a4"})),be||(be=bt.createElement("path",{d:"M609.6 133.04a7.21 7.21 0 0 1-.84-2.62 5.68 5.68 0 0 1 .19-1.66c.05-.16.09-.32.15-.47a4.87 4.87 0 0 1 1.26-2.12c-1-1.44-1.63-.54-1.63-.54-1.14.41-1.61 1.77-1.78 3.14 0 .2 0 .4-.06.59a15.71 15.71 0 0 0 .1 2.91s1.03 2.15 2.61.77z",opacity:.1})),we||(we=bt.createElement("path",{d:"M566.35 91.89c5.4 3.47 11.63 6.83 17.55 8.61 4.55 1.38 8.91 1.82 12.56.66a11.51 11.51 0 0 0 4.26-2.46 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-2.34-7-6.22-13.2-11.33-16.48-12.46-8-28.38-5.4-35.56 5.79s-2.89 26.73 9.57 34.73z",fill:"#a4a4a4"})),He||(He=bt.createElement("path",{d:"M566.35 91.89c5.4 3.47 11.63 6.83 17.55 8.61 4.55 1.38 8.91 1.82 12.56.66a11.51 11.51 0 0 0 4.26-2.46 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-2.34-7-6.22-13.2-11.33-16.48-12.46-8-28.38-5.4-35.56 5.79s-2.89 26.73 9.57 34.73z",opacity:.1})),Oe||(Oe=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a4.27 4.27 0 0 0-.49-.28 5.58 5.58 0 0 1-1.59-1.13c-.16-.16-.32-.33-.47-.51a9.36 9.36 0 0 1-1.12-1.77 7.42 7.42 0 0 1-.39-.93l-5.64 3a12.79 12.79 0 0 1 1.77.43c.81.26 1.61.64 1.76 1.16a.63.63 0 0 1 0 .48 1.19 1.19 0 0 1-.27.37 4.94 4.94 0 0 0-.33.37c-1.14 1.33-.09 1.68-.09 1.68z",fill:"#a4a4a4"})),Ge||(Ge=bt.createElement("path",{d:"m598.18 102.89 4.13-1.82c-.16-.16-.32-.33-.47-.51-1 .54-2.59 1.35-3.62 1.85a.63.63 0 0 1-.04.48z",fill:"#444053"})),Te||(Te=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a6.91 6.91 0 0 1-2.29 1.52 6.09 6.09 0 0 1-4.52-.37c-1.1 1.37-.05 1.72-.05 1.72z",fill:"#a4a4a4"})),Le||(Le=bt.createElement("path",{d:"M597.51 105.3c1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a6.91 6.91 0 0 1-2.29 1.52 6.09 6.09 0 0 1-4.52-.37c-1.1 1.37-.05 1.72-.05 1.72z",opacity:.1})),Ce||(Ce=bt.createElement("path",{d:"M567.88 52.01s5.61-4.43 9.79-1.45a5.76 5.76 0 0 0-2.09 1.46 3.63 3.63 0 0 1-1.26 1.14 9.53 9.53 0 0 0-6.44-1.15z",fill:"#fff",opacity:.1})),Ie||(Ie=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"m628.16 98.66-1.3-6.23a12 12 0 0 1-.9 1.57 11.26 11.26 0 0 0 1.2 4.78 7 7 0 0 1 1-.12z"}),bt.createElement("path",{d:"M622.6 101.3a3 3 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.21 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 7 7 0 0 1 1-.12l-1.3-6.23a12 12 0 0 1-.9 1.57c-.46.7-1.05 1.38-1.6 1.39a.73.73 0 0 1-.44-.18 1.23 1.23 0 0 1-.31-.32c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1.03 2.1 2.64.73z"}),bt.createElement("path",{d:"M624.52 99.69a5.33 5.33 0 0 1 .63-.32c-.26-1.09-.58-2.86-.79-4a.73.73 0 0 1-.44-.18zm-1.92 1.61a7.33 7.33 0 0 1-.84-2.63 6.14 6.14 0 0 1 1.61-4.25c-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1 2.14 2.61.77z"}),bt.createElement("path",{d:"M622.6 101.3a7.33 7.33 0 0 1-.84-2.63 6.14 6.14 0 0 1 1.61-4.25c-1-1.44-1.64-.53-1.64-.53-2.57.93-1.74 6.64-1.74 6.64s1 2.14 2.61.77z",opacity:.1}))),je||(je=bt.createElement("path",{d:"M621.78 100.06a2.51 2.51 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 7 7 0 0 1 1-.12l-1.3-6.23a12.74 12.74 0 0 1-.9 1.57c-.46.7-1 1.38-1.6 1.38a.66.66 0 0 1-.44-.17 1.38 1.38 0 0 1-.29-.36c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s1.01 2.14 2.62.76z",fill:"#a4a4a4"})),Ze||(Ze=bt.createElement("path",{d:"M623.7 98.46a5.33 5.33 0 0 1 .63-.32c-.26-1.09-.58-2.86-.79-4a.66.66 0 0 1-.44-.17z",fill:"#444053"})),Pe||(Pe=bt.createElement("path",{d:"M621.78 100.06a7.21 7.21 0 0 1-.84-2.62 6.14 6.14 0 0 1 1.66-4.25c-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s.95 2.14 2.56.76z",fill:"#a4a4a4"})),Fe||(Fe=bt.createElement("path",{d:"M621.78 100.06a7.21 7.21 0 0 1-.84-2.62 6.14 6.14 0 0 1 1.66-4.25c-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s.95 2.14 2.56.76z",opacity:.1})),Se||(Se=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"M616.6 81.89a11.41 11.41 0 0 0 4.62 1.71 8.39 8.39 0 0 1 .46-.9l-5.88-2.44a12 12 0 0 1 .8 1.63z"}),bt.createElement("path",{d:"M618.6 90.52s2.33.39 2.11-1.72a3.24 3.24 0 0 0-.11-.56 5.53 5.53 0 0 1-.14-1.93 5.36 5.36 0 0 1 .1-.7 9.63 9.63 0 0 1 1.1-2.89l-5.88-2.44a12 12 0 0 1 .82 1.61c.32.78.54 1.65.24 2.1a.69.69 0 0 1-.4.27 1.06 1.06 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.73 2.73 4.48 5.26 4.48 5.26z"}),bt.createElement("path",{d:"m616.4 84.28 4 2a5.36 5.36 0 0 1 .1-.7c-1.06-.41-2.7-1.14-3.74-1.6a.69.69 0 0 1-.36.3zm2.2 6.24s2.33.39 2.11-1.72a7.2 7.2 0 0 1-2.64-.78 6.16 6.16 0 0 1-2.61-3.73c-1.76 0-1.36 1-1.36 1-.71 2.7 4.5 5.23 4.5 5.23z"}),bt.createElement("path",{d:"M618.6 90.52s2.33.39 2.11-1.72a7.2 7.2 0 0 1-2.64-.78 6.16 6.16 0 0 1-2.61-3.73c-1.76 0-1.36 1-1.36 1-.71 2.7 4.5 5.23 4.5 5.23z",opacity:.1}))),Ve||(Ve=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a3.07 3.07 0 0 0-.11-.56 5.59 5.59 0 0 1-.14-1.94 5.21 5.21 0 0 1 .1-.69 8.17 8.17 0 0 1 .64-2 8.39 8.39 0 0 1 .46-.9l-5.88-2.45a12 12 0 0 1 .8 1.63c.32.79.54 1.65.24 2.11a.72.72 0 0 1-.4.26 1.23 1.23 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.69 2.73 4.5 5.25 4.5 5.25z",fill:"#a4a4a4"})),Ae||(Ae=bt.createElement("path",{d:"m615.99 83.66 4 2a5.21 5.21 0 0 1 .1-.69c-1.06-.41-2.7-1.14-3.74-1.6a.72.72 0 0 1-.36.29z",fill:"#444053"})),qe||(qe=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a7.44 7.44 0 0 1-2.64-.79 6.14 6.14 0 0 1-2.61-3.72c-1.76 0-1.36 1-1.36 1-.69 2.7 4.5 5.22 4.5 5.22z",fill:"#a4a4a4"})),De||(De=bt.createElement("path",{d:"M618.17 89.89s2.33.39 2.11-1.71a7.44 7.44 0 0 1-2.64-.79 6.14 6.14 0 0 1-2.61-3.72c-1.76 0-1.36 1-1.36 1-.69 2.7 4.5 5.22 4.5 5.22z",opacity:.1})),Ne||(Ne=bt.createElement("path",{d:"M595.09 117.28a12.41 12.41 0 0 1 .91-1.56c.48-.7 1.07-1.37 1.61-1.37a.63.63 0 0 1 .45.18 1.3 1.3 0 0 1 .28.35c.09.17.18.31.26.44 1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a3.68 3.68 0 0 0-.41.39 6.39 6.39 0 0 1-2.16 1.51 9 9 0 0 1-2 .57 6.36 6.36 0 0 1-1 .11z",fill:"#a4a4a4"})),_e||(_e=bt.createElement("path",{d:"M597.6 114.35a.63.63 0 0 1 .45.18l-.56-4.49a5.25 5.25 0 0 1-.63.31c.26 1.1.56 2.87.74 4z",fill:"#444053"})),Ue||(Ue=bt.createElement("path",{d:"M598.6 115.32c1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a7 7 0 0 1 .8 2.63 6.06 6.06 0 0 1-1.64 4.24z",fill:"#a4a4a4"})),Be||(Be=bt.createElement("path",{d:"M598.6 115.32c1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a7 7 0 0 1 .8 2.63 6.06 6.06 0 0 1-1.64 4.24z",opacity:.1})),Re||(Re=bt.createElement("path",{d:"M592.96 125.7a19.55 19.55 0 0 0 3-10c.48-.7 1.07-1.37 1.61-1.37a.63.63 0 0 1 .45.18 1.3 1.3 0 0 1 .28.35c.09.17.18.31.26.44 1 1.46 1.64.55 1.64.55 2.58-.9 1.8-6.63 1.8-6.63s-1-2.15-2.6-.79a3.68 3.68 0 0 0-.41.39 6.39 6.39 0 0 1-2.16 1.51 9 9 0 0 1-2 .57 13.44 13.44 0 0 0-1.85-2.78 22.81 22.81 0 0 0-8.9-5.87c1.4 8.87 4.01 18.21 8.88 23.45zm14.03 3.07a17.36 17.36 0 0 0 2.15-.48 18.83 18.83 0 0 0 1.91-.66l.41-.17c.53-.23 1.07-.48 1.61-.76s.81-.42 1.22-.65c7.61-4.39 15-13.22 18.3-22.18a29.11 29.11 0 0 0 1.79-7.62 20.49 20.49 0 0 0-.06-4.15 29.29 29.29 0 0 0-3.72-11.21c-.22-.37-.43-.72-.66-1.06-5-7.72-13.41-12.38-22.35-11.44 1.94 5.61 4.7 10.39 8.59 12.88.32.79.54 1.65.24 2.11a.72.72 0 0 1-.4.26 1.23 1.23 0 0 1-.45 0h-.51c-1.76 0-1.36 1-1.36 1-.69 2.65 4.5 5.18 4.5 5.18s2.33.39 2.11-1.71a3.07 3.07 0 0 0-.11-.56 5.59 5.59 0 0 1-.14-1.94 5.21 5.21 0 0 1 .1-.69 8.17 8.17 0 0 1 .64-2 12.85 12.85 0 0 0 3.34 0 17.74 17.74 0 0 0 4.56-1.24c-.21.33-.4.66-.58 1a19.62 19.62 0 0 0-3 10c-.46.7-1 1.38-1.6 1.38a.66.66 0 0 1-.44-.17 1.38 1.38 0 0 1-.29-.36c-.09-.16-.18-.3-.26-.43-1-1.44-1.64-.54-1.64-.54-2.57.94-1.74 6.65-1.74 6.65s1 2.14 2.61.76a2.51 2.51 0 0 0 .4-.4 5.59 5.59 0 0 1 1.52-1.2 5.33 5.33 0 0 1 .63-.32 8.57 8.57 0 0 1 2-.59 12.74 12.74 0 0 0 1.87 2.77l.4.43-.14.13a79 79 0 0 0-8.87 9.44c-.81 1-1.59 2.1-2.28 3.18q-.74 1.13-1.38 2.25a19.67 19.67 0 0 0-2.94 10c-.46.7-1 1.37-1.6 1.38a.71.71 0 0 1-.45-.17 1.36 1.36 0 0 1-.28-.36c-.1-.16-.18-.3-.27-.43-1-1.44-1.63-.54-1.63-.54-1.14.5-1.58 1.86-1.75 3.23z",opacity:.1})),We||(We=bt.createElement("g",{opacity:.1},bt.createElement("path",{d:"M618.38 78.75a3.6 3.6 0 0 0 1.68.23 5.83 5.83 0 0 1 2.46.68c-.38-5.12-7.38-6.6-7.38-6.6a9.5 9.5 0 0 1 3.24 5.69zm-34.92 18.64c.13 1 .27 2.09.44 3.15 4.55 1.38 8.91 1.82 12.56.66.81.26 1.61.64 1.76 1.16a.63.63 0 0 1 0 .48 1.19 1.19 0 0 1-.27.37 4.94 4.94 0 0 0-.33.37c-1.12 1.37-.07 1.72-.07 1.72 1.59 2.22 6.86-.16 6.86-.16s1.79-1.54 0-2.71a4.27 4.27 0 0 0-.49-.28 5.58 5.58 0 0 1-1.59-1.13c-.16-.16-.32-.33-.47-.51a9.36 9.36 0 0 1-1.12-1.77 12.15 12.15 0 0 0 2.15-2.56c4.23-6.61 4.15-18.23.8-28.29-13 1.84-22.02 15-20.23 29.5zm12.14 29.07a11.4 11.4 0 0 0 4.61 1.73 7.28 7.28 0 0 1 .47-.9l-5.9-2.4a13.86 13.86 0 0 1 .82 1.57z"}),bt.createElement("path",{d:"M597.6 135.08s2.34.4 2.11-1.71a3 3 0 0 0-.1-.56 5.61 5.61 0 0 1-.14-1.94 5 5 0 0 1 .09-.69 9 9 0 0 1 .64-2 7.28 7.28 0 0 1 .47-.9l-5.89-2.39a13.86 13.86 0 0 1 .8 1.62c.31.79.53 1.66.23 2.11a.66.66 0 0 1-.39.27 1.32 1.32 0 0 1-.46 0 4.53 4.53 0 0 0-.5 0c-1.77 0-1.37 1-1.37 1-.68 2.67 4.51 5.19 4.51 5.19z"}),bt.createElement("path",{d:"m595.42 128.89 4 2q0-.36.09-.69c-1.05-.41-2.7-1.14-3.74-1.6a.67.67 0 0 1-.35.29zm2.18 6.19s2.33.39 2.11-1.72a7.1 7.1 0 0 1-2.64-.78 6.1 6.1 0 0 1-2.61-3.72c-1.77 0-1.37 1-1.37 1-.69 2.7 4.51 5.22 4.51 5.22z"}),bt.createElement("path",{d:"M597.6 135.08s2.33.39 2.11-1.72a7.1 7.1 0 0 1-2.64-.78 6.1 6.1 0 0 1-2.61-3.72c-1.77 0-1.37 1-1.37 1-.69 2.7 4.51 5.22 4.51 5.22zm20.78-56.33a3.6 3.6 0 0 0 1.68.23 5.83 5.83 0 0 1 2.46.68c-.38-5.12-7.38-6.6-7.38-6.6a9.5 9.5 0 0 1 3.24 5.69z",opacity:.1}))),Xe||(Xe=bt.createElement("path",{d:"M584.9 98.21c1.81 14.7 6.88 32.44 20.07 30.81s29.52-22 27.71-36.71-14-25.28-27.18-23.65-22.42 14.86-20.6 29.55z",fill:"#a4a4a4"})),Ke||(Ke=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a4.44 4.44 0 0 0-.1-.56 5.37 5.37 0 0 1-.15-1.94c0-.23.06-.47.1-.69a9 9 0 0 1 1.11-2.89l-5.88-2.45s1.66 2.79 1 3.74a.69.69 0 0 1-.4.27 1.54 1.54 0 0 1-.45 0h-.5c-1.77 0-1.37 1-1.37 1-.66 2.72 4.53 5.23 4.53 5.23z",fill:"#a4a4a4"})),Je||(Je=bt.createElement("path",{d:"m596.85 129.67 4 2c0-.23.06-.47.1-.69-1.06-.41-2.7-1.14-3.74-1.6a.69.69 0 0 1-.36.29z",fill:"#444053"})),Qe||(Qe=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a7 7 0 0 1-2.64-.79 6.06 6.06 0 0 1-2.6-3.72c-1.77 0-1.37 1-1.37 1-.69 2.71 4.5 5.22 4.5 5.22z",fill:"#a4a4a4"})),Ye||(Ye=bt.createElement("path",{d:"M599.03 135.89s2.33.4 2.11-1.71a7 7 0 0 1-2.64-.79 6.06 6.06 0 0 1-2.6-3.72c-1.77 0-1.37 1-1.37 1-.69 2.71 4.5 5.22 4.5 5.22z",opacity:.1})),$e||($e=bt.createElement("path",{d:"M616.6 73.89s7 1.48 7.38 6.6a5.74 5.74 0 0 0-2.47-.67 3.64 3.64 0 0 1-1.67-.24 9.57 9.57 0 0 0-3.24-5.69z",fill:"#fff",opacity:.1})),et||(et=bt.createElement("path",{d:"M599.39 130.99a4.26 4.26 0 0 1 3.79 5.24c-.88 2.95-4.5 3.88-6.86 5.85s-3.49 5.12-3.78 8.19a20.08 20.08 0 0 0 5.77 15.88c2.12 2.09 4.68 3.69 6.77 5.81a34.58 34.58 0 0 1 5.85 8.92 20.88 20.88 0 0 1 2.59 7.5c.35 4.21-1.77 8.24-4.3 11.62s-5.56 6.44-7.52 10.18a21.39 21.39 0 0 0-1.23 16.77 2.17 2.17 0 0 0 .71 1.12.79.79 0 0 0 1.16-.25",fill:"none",stroke:"#444053",strokeMiterlimit:10})),tt||(tt=bt.createElement("path",{d:"M611.68 130.25a2 2 0 0 1 .09 2.54 3.09 3.09 0 0 1-2.44 1.13c-1.13 0-2.39-.35-3.32.31a2.87 2.87 0 0 0-1 2.17 11.07 11.07 0 0 1-.25 2.45 4.88 4.88 0 0 1-1.08 1.76 5.41 5.41 0 0 1-2 1.46c-1.67.65-3.6.06-5.31.6-2.25.71-3.46 3.14-4.14 5.4a15.55 15.55 0 0 0-.49 8.38 29 29 0 0 0 2.27 5.14 11.63 11.63 0 0 1 1.48 5.36 4.92 4.92 0 0 1-2.82 4.5m16.19 23.35c-2.69 3.58-3.71 9.3-8.11 10.17-2.27.45-4.52-.72-6.55-1.84-4.73-2.64-9.6-5.3-15-6.17s-11.36.38-14.9 4.49c-2.41 2.82-3.4 6.6-5.52 9.64a19.78 19.78 0 0 1-11.2 7.36 45.83 45.83 0 0 1-13.58 1.16c-1.69-.05-3.53-.18-4.79-1.3a11.66 11.66 0 0 1-2-3.05c-2.17-3.64-6.46-5.64-10.69-5.91s-8.41 1-12.32 2.61c-2 .82-4 1.76-6.14 1.55-3-.3-5.21-2.72-7.06-5.05a100 100 0 0 1-12.13-19.74",fill:"none",stroke:"#444053",strokeMiterlimit:10})),at||(at=bt.createElement("path",{d:"M497.91 603.42c1.07-3.89 1.77-7.31 1.77-7.31a15.3 15.3 0 0 1 2-7.41l.05-1.07.3-7.89a26.56 26.56 0 0 0-1.83-4.21c-1.33-2.53.45-11.57.45-11.57s5.76-12.61 4.79-20.78 12.2-35.68 12.2-35.68a35.38 35.38 0 0 0-.83-8 6.81 6.81 0 0 1-.09-1.68v-.14c.39-5.35 5-15.24 5-15.24l.17-19.16s-2.27-11.4 2.73-26.39c1.74-5.23 2.89-9.42 3.64-12.66.09-.37.17-.72.24-1.06-9-1.74-15.92-3.16-15.92-3.16s6.11-21.83 9.82-25.55 7-15.74 7-15.74 2.45-15.49-.37-20.15-2.9-12.57-2.9-12.57-6.64-5.22-7.41-7.46-2-7.25-1.9-9.87 1-4.93.81-6.31 2.25-6.54 1.2-9.06a7 7 0 0 1-.36-2.41v-.07a33.5 33.5 0 0 1 .85-6.44 18.24 18.24 0 0 1 6.9-3.35l.17-.59.44-1.53c.24-.15.47-.27.69-.38v-.56l.15-2.24-.88-5.07c-1.76-8.82 10-9.68 10-9.68a6.14 6.14 0 0 1 3.42-2.77c2.38-.74-.12 13.17-1.25 14-.85.64-3.57 4.93-4.88 7l-.22.35a4.89 4.89 0 0 1 .52.58l-.56 3-.09.46a12.63 12.63 0 0 1 1.74 3.25s-2.23 2.26-1.9 4.9a15.46 15.46 0 0 1-.94 6c.13-.13 1.7-1.7 3.18-1.25s5.63 1.87 5.63 1.87 3.11.68 2.8 1.35 2 3.8 2 3.8L555 316c.09-.24.19-.47.27-.72a19.67 19.67 0 0 0 .87-3.46 19.17 19.17 0 0 1-2.66-1 5.78 5.78 0 0 1-2.27-1.58 9 9 0 0 1-1.21-3.68c-.58-2.48-1.92-4.71-2.86-7.08a22.69 22.69 0 0 1-1.2-12.57 8.26 8.26 0 0 1 1.44-3.61c1.44-1.84 4-2.51 5.83-3.94s3.13-3.7 5.28-4.75c1.95-.95 4.28-.74 6.41-.3a34.3 34.3 0 0 1 11.76 4.79c1.2.77 2.51 1.67 3.93 1.46a5.29 5.29 0 0 0 3-2v-.11l.09-.11a14.85 14.85 0 0 1 1.07 6.35c0 .33 0 .67-.08 1v.35a1.43 1.43 0 0 0 0 .29 1.73 1.73 0 0 0 0 .45 3.23 3.23 0 0 0 .74 1.17 6 6 0 0 1 .65 1c0-.12-.06-.23-.1-.35a5 5 0 0 1 .77 2.69 2.68 2.68 0 0 1-.7 1.87 8.69 8.69 0 0 1-1.42 1.05 16 16 0 0 1-8.32 16.39c-.1.23-.21.47-.31.71a20.11 20.11 0 0 0-1.88 9.12c0 .22 0 .44.08.67a4.39 4.39 0 0 1 .28.36s13.88.67 17.27-2.17 8 7.56 8 7.56 4.95 1.15 6 .23 6.84.12 6.84.12a12.53 12.53 0 0 1 8.8-2.83 25.71 25.71 0 0 1 6.51-3.3h.16a7.19 7.19 0 0 1 3.14-.28s7.05-5.38 9.16-8.33 12-13.84 12.08-13.88l.05-.55.17-1.63a6.09 6.09 0 0 0 .85.11c.06-.16.13-.35.22-.56a29.77 29.77 0 0 1 2.19-4.55s.08-2.07-.51-2.61.57-8.09.57-8.09 6.7-14.15 11.81-3.2c0 0 10.15 7.36 1.09 15.12 0 0-3.55 1.55-4.1 2.87-.36.86-1.64 3.25-2.49 4.83-.15.26-.28.5-.39.71l.1.09-.18 1.34-.08.52c1.62 1 2.7 2 2.4 2.67a15.36 15.36 0 0 0-1.14 3.68s-12.68 14.68-14.5 21.1c0 0-33.19 18-43.91 19l1.48 9.71s.34 5.81.12 7.87.84 11.49.84 11.49 1.32 13.84 2.81 15.83.89 10.24.89 10.24a69.1 69.1 0 0 0 1.69 11.79c1.36 5.3 0 11.73 0 11.73s4.93 12.61-7.69 3.7c0 0-6.35-.64-13.66-1.17v.74c0 .94 0 2-.08 3-.17 7.11-.51 16.9-1.11 24.29-1.08 13.06-6.06 38.8-6.06 38.8l-.5 13a16.94 16.94 0 0 1 .23 3.73 24.16 24.16 0 0 1-4 12.89l-1.53 8.59s-2.56 5.62-2.74 9a4.28 4.28 0 0 0 .07.83 6.08 6.08 0 0 1 .06 1.34c0 3.94-2.75 13.28-2.75 13.28s-.51 9.5-2 10c-1.23.43 1.42 5.54 2.21 7a2.61 2.61 0 0 0 .06-.27l.17.3a6.73 6.73 0 0 1 .35 2.42 3.46 3.46 0 0 1-1.71 3.28c-2.77 1.54-4.27 2.87-2 3.5.87.25 1.8.34 2.49.63 0-.11.09-.22.13-.32a1.52 1.52 0 0 1 .87 1.71 7 7 0 0 1-1 3.19 34.14 34.14 0 0 1-4.12 6.87l-1.09-.16a5.33 5.33 0 0 0 .59 1.2 4.63 4.63 0 0 0 1.55 1.49 5 5 0 0 0 1.92.74 5.49 5.49 0 0 1 4 2.12c1.34 1.88 2.14 4.42-.75 6.51L564 612.44s-17.6 1.6-16.52-2.29 1.78-7.31 1.78-7.31A15.54 15.54 0 0 1 551 596a7.2 7.2 0 0 1 .66-1l-.62-.1s-.94-8.72-2.59-10.44c-.38-.4-.46-.7-.35-.92-.16-.48.29-.74.87-.87 0 .11.08.23.11.34a9.1 9.1 0 0 1 1.71-.12s.75-4.52-1-6.25a1.75 1.75 0 0 1-.31-1.36 7.42 7.42 0 0 1 .27-1.85l.06.11c1.09-4.09 4.49-10.52 4.49-10.52s.31-4.13-.77-5.82 1-22.45 1-22.45 0-10.07 1.42-14.71-1.18-10.25-1.18-10.25v-.3a.22.22 0 0 0 0-.07l.23-1.58v.1c.39-2.65 1.12-7.45 1.6-9.67.69-3.14.57-18.32.57-18.32l-2.32-6.58-5 11-5.38 14.63s-2.52 3.05-2.7 6.23v.47a8.26 8.26 0 0 1 0 1 8.84 8.84 0 0 1-1.68 5.25s-1.55 7-3.61 8.69-2.19 5.15-2.19 5.15-2.82 10.1-4 11.85c-1 1.47-1.23 5.62-1.27 6.89v.37s-.48 3.63-.58 6.7v1.09-.08a11.11 11.11 0 0 0 .2 2.49v.14-.51a25.88 25.88 0 0 1 .49 6.38c-.08 3.66-.8 8-3.12 10.44-4 4.26-6.41 3.62-6.41 3.62s1.64 5.58 3.87 6.77a1 1 0 0 1 .24.16c0-.1 0-.21.07-.32a2.69 2.69 0 0 1 .59 2.08c.07 2.43-1.61 6.31-3.14 8.06a4.51 4.51 0 0 1-2 1.05l.35.24c.28.16.53.29.77.4a3.66 3.66 0 0 0 1.15.34 5.43 5.43 0 0 1 4 2.12c1.35 1.88 2.15 4.42-.74 6.51l-10.32 3.12s-17.61 1.61-16.53-2.28z",transform:"translate(-50.4 -87.11)",fill:"url(#b)"})),lt||(lt=bt.createElement("path",{d:"m514.12 525.39 10-3.13c2.8-2.1 2-4.63.73-6.52a5.22 5.22 0 0 0-3.82-2.11 4.73 4.73 0 0 1-1.86-.74 4.45 4.45 0 0 1-1.5-1.49 7.27 7.27 0 0 1-1-3.85s-10.7-3.58-13.78-.53a8.15 8.15 0 0 0-1.38 1.87 16 16 0 0 0-1.65 6.92s-.68 3.41-1.72 7.31 15.98 2.27 15.98 2.27zm-48.03-6.71 10-3.13c2.8-2.1 2-4.63.73-6.51a5.18 5.18 0 0 0-3.83-2.11 3.91 3.91 0 0 1-1.11-.35 5 5 0 0 1-.74-.4c-2.71-1.62-2.54-5.29-2.54-5.29s-10.69-3.58-13.77-.53a7.9 7.9 0 0 0-1.09 1.37 15.63 15.63 0 0 0-1.94 7.42s-.69 3.42-1.73 7.31 16.02 2.22 16.02 2.22z",fill:"#2d293d"})),ct||(ct=bt.createElement("path",{d:"M502.89 507.02a8.15 8.15 0 0 0-1.38 1.87l16.14 2.5a7.27 7.27 0 0 1-1-3.85s-10.68-3.57-13.76-.52zm-49.11-5.34-.12 3c2.36 4.26 14.59 3.82 18.21 1.87a5 5 0 0 1-.74-.4c-2.7-1.59-2.53-5.26-2.53-5.26s-10.69-3.58-13.77-.53a7.9 7.9 0 0 0-1.05 1.32z",opacity:.1})),rt||(rt=bt.createElement("path",{d:"M452.35 488.52a26.62 26.62 0 0 1 1.77 4.21l-.42 10.88c2.58 4.65 17 3.69 19 1.28s4.34-8.8 2.18-10-3.74-6.77-3.74-6.77 2.32.64 6.21-3.62 3.16-14.09 2.56-16.46.4-10.19.4-10.19.07-5.52 1.24-7.26 3.91-11.86 3.91-11.86.13-3.44 2.13-5.16 3.5-8.69 3.5-8.69a9 9 0 0 0 1.61-5.87c-.28-3.46 2.62-7.07 2.62-7.07l5.25-14.7 4.84-11 2.19 6.65s.1 15.18-.57 18.33-1.82 11.52-1.82 11.52 2.54 5.61 1.12 10.25-1.39 14.7-1.39 14.7-2 20.76-1 22.45.74 5.82.74 5.82-6.12 11.91-4.39 13.63 1 6.25 1 6.25-3.85-.15-2.26 1.57 2.57 10.39 2.57 10.39l16.58 2.57a34.8 34.8 0 0 0 4-6.88c2.4-5-.23-4.57-2.43-5.2s-.74-2 1.94-3.51 1.31-5.33 1.31-5.33-3.74-6.91-2.34-7.41 1.91-10 1.91-10 3.18-11.19 2.61-14.25 2.6-10.25 2.6-10.25l1.3-8.64a23.85 23.85 0 0 0 3.66-16.27l.52-13.36s4.85-25.75 5.91-38.82c.67-8.36 1-19.81 1.17-26.95.09-4 .12-6.66.12-6.66l-59.27-8.49a48.54 48.54 0 0 1-1.42 8.8c-.73 3.25-1.85 7.44-3.54 12.67-4.86 15-2.67 26.39-2.67 26.39l-.19 19.16s-5.73 12.61-4.8 17.06a36.37 36.37 0 0 1 .8 8s-12.79 27.51-11.86 35.68-4.66 20.79-4.66 20.79-1.78 9.09-.5 11.62z",fill:"#3f3d56"})),nt||(nt=bt.createElement("path",{d:"m489.14 418.07-18-3.11s9.84 10.86 18 3.11z",opacity:.05})),it||(it=bt.createElement("path",{d:"M474.42 397.36s-.87 6.38 3 8.94c-.04 0-7.02-1.41-3-8.94zm1.89-20.35s14.67 13.05 20.21 12.23-20.21-12.23-20.21-12.23zm35.06 47.77s11.4 3.06 11.56 7.69-11.56-7.69-11.56-7.69z",opacity:.1})),st||(st=bt.createElement("path",{d:"M506.6 482.13s16.13 3.65 11.44 5.54a78.41 78.41 0 0 1-12.3 3.22s-5.25.11.86-8.76zm14.63 8.95a3.2 3.2 0 0 0 1.57-2.3l.16.3s1.37 3.77-1.31 5.32l-.87.53c-.48-.11-1-.2-1.49-.34-2.2-.64-.69-1.96 1.94-3.51zm-20.9-1.91c-.43-.43-.37-1.49-.05-2.84a7.65 7.65 0 0 1 .77 4 3.25 3.25 0 0 0-.72-1.16zm5.14-68.43a18.48 18.48 0 0 1 .9 5.1 20.71 20.71 0 0 0-1.12-3.53s.08-.61.22-1.57zm-36.94-8.67a6.45 6.45 0 0 1-.09-1.51c.16 1 .27 2 .34 2.84-.07-.44-.18-.88-.25-1.33zm35.45 57.65a8.89 8.89 0 0 1-.3-3.08 10.35 10.35 0 0 1 .65 3.9 3.89 3.89 0 0 0-.35-.82zm-4.38 25.85a53.63 53.63 0 0 1 1.58 8.53l16.58 2.57a34.8 34.8 0 0 0 4-6.88c.21-.44.38-.84.52-1.2 1 .5 1.33 1.55-.1 4.52a34.74 34.74 0 0 1-4 6.89l-16.58-2.57s-.91-8.73-2.5-10.45c-.82-.84-.28-1.23.5-1.41zm22.92-23.89s-.5 9.5-1.9 10c-.63-1.6-1-3.11-.41-3.33 1.4-.5 1.9-10 1.9-10s3.19-11.19 2.62-14.25 2.6-10.24 2.6-10.24l1.3-8.64a23.88 23.88 0 0 0 3.66-16.28l.51-13.36s4.86-25.75 5.91-38.81c.68-8.37 1-19.81 1.18-26.95 0-1.29.05-2.44.06-3.41l.48.07s0 2.66-.12 6.66c-.16 7.14-.5 18.59-1.17 26.95-1.06 13.07-5.91 38.82-5.91 38.82l-.52 13.36a23.85 23.85 0 0 1-3.66 16.27l-1.3 8.64s-3.17 7.19-2.6 10.25-2.63 14.25-2.63 14.25zm-50.24 29.52a16.17 16.17 0 0 0 2.89-6.45c1.64 1.6-.55 7.49-2.47 9.77s-16.41 3.37-19-1.28l.1-2.62c3.6 3.83 16.56 2.85 18.48.58zm-20.34-16.38a27.89 27.89 0 0 1 1.77 4.21l-.08 1.93c-.28-.71-.69-1.67-1.27-2.81a8.23 8.23 0 0 1-.47-3.43zm20.01 2.95a26.05 26.05 0 0 1-1.23-3.33s2.32.64 6.2-3.62c2.84-3.1 3.22-9.15 3-13.13.6 2.37 1.33 12.19-2.56 16.46-2.56 2.79-4.42 3.47-5.41 3.62zm8.36-30.27a72.28 72.28 0 0 0-.59 8.15c-.08-.53-.16-1-.24-1.29-.6-2.36.4-10.19.4-10.19s.08-5.51 1.25-7.26 3.9-11.85 3.9-11.85.13-3.45 2.13-5.16 3.51-8.7 3.51-8.7a9.07 9.07 0 0 0 1.6-5.87c-.28-3.46 2.62-7.07 2.62-7.07l5.26-14.7 4.83-11 2.23 6.57v2.1l-1.8-5.34-4.81 11-5.25 14.7s-2.9 3.61-2.62 7.07a9 9 0 0 1-1.61 5.87s-1.51 7-3.5 8.69-2.13 5.16-2.13 5.16-2.74 10.11-3.91 11.85-1.27 7.27-1.27 7.27z",opacity:.05})),ot||(ot=bt.createElement("path",{d:"m478.49 203.62.84 5.07-.14 2.24-.11 1.65 5.72.81.69-1.17c1.28-2.11 3.91-6.4 4.74-7 1.1-.86 3.53-14.77 1.22-14a6 6 0 0 0-3.31 2.78s-11.35.8-9.65 9.62z",fill:"#ffcdd3"})),mt||(mt=bt.createElement("path",{d:"m479.08 212.58 5.72.81.69-1.17a5.05 5.05 0 0 0-6.3-1.29z",opacity:.1})),dt||(dt=bt.createElement("path",{d:"m477.52 215.24 7.51 2 .21-1.12.54-3a5.22 5.22 0 0 0-7.3-1.29l-.43 1.54z",fill:"#dce6f2"})),ft||(ft=bt.createElement("path",{d:"m600.72 208.89 7.93 4.65.79-1.5c.83-1.58 2.07-4 2.42-4.83.53-1.32 4-2.88 4-2.88 8.78-7.77-1-15.11-1-15.11-4.93-10.95-11.44 3.21-11.44 3.21s-1.11 7.55-.55 8.09.49 2.6.49 2.6a30.15 30.15 0 0 0-2.13 4.56c-.36.73-.51 1.21-.51 1.21z",fill:"#ffcdd3"})),pt||(pt=bt.createElement("path",{d:"m600.72 208.89 7.93 4.65.79-1.5c-1.11-1-5-4.44-6.36-4.34a9.49 9.49 0 0 1-1.92 0c-.29.71-.44 1.19-.44 1.19z",opacity:.1})),ht||(ht=bt.createElement("path",{d:"m599.8 211.29 8.92 4.83.26-2 .18-1.34s-5.1-4.72-6.66-4.61a8.21 8.21 0 0 1-2.37-.1l-.17 1.64z",fill:"#dce6f2"})),yt||(yt=bt.createElement("path",{d:"M499.25 237.89s39.47 6 32.15 3.3c-5.09-1.88-7-5.23-7.31-8.89a20.73 20.73 0 0 1 1.83-9.11 39.25 39.25 0 0 1 3.82-7s-29.66-17.84-24.18-2.45a24.36 24.36 0 0 1 1.44 7.25 20.27 20.27 0 0 1-1.06 7.23 21.73 21.73 0 0 1-6.69 9.67z",fill:"#ffcdd3"})),ut||(ut=bt.createElement("path",{d:"M505.6 213.7a24.36 24.36 0 0 1 1.44 7.25c2.76 2.5 5.9 2.47 9.91 2.62 3.1.12 6.49 1 9-.39a39.25 39.25 0 0 1 3.82-7s-29.69-17.87-24.17-2.48z",opacity:.1})),Et||(Et=bt.createElement("circle",{cx:518.04,cy:208.24,r:16.4,fill:"#ffcdd3"})),xt||(xt=bt.createElement("path",{d:"M499.25 237.89s39.47 6 32.15 3.3c-5.09-1.88-7-5.23-7.31-8.89-1.89-2.21-5.8-3.91-8.31-4.83a11.91 11.91 0 0 0-7.18-.39 10.12 10.12 0 0 0-2.66 1.11 21.73 21.73 0 0 1-6.69 9.7zm-21.73-22.65 7.51 2 .21-1.12a6.7 6.7 0 0 0-7.19-2.77zm122.28-3.95 8.92 4.83.26-2a67.15 67.15 0 0 0-9-4.41zM479.72 337.16c15.26 3 37 7 40.49 6.09 2.91-.77 12.1-.32 20.08.26.09-4 .12-6.66.12-6.66l-59.27-8.49a48.54 48.54 0 0 1-1.42 8.8z",opacity:.1})),zt||(zt=bt.createElement("path",{d:"M464.6 332.97s50.22 10.62 55.71 9.18 33.27 1.42 33.27 1.42c12.21 8.88 7.46-3.72 7.46-3.72s1.35-6.43 0-11.72a71.88 71.88 0 0 1-1.61-11.79s.59-8.25-.85-10.24-2.7-15.83-2.7-15.83-1-9.42-.8-11.48-.11-7.87-.11-7.87l-1.42-9.71c10.38-1 42.53-19.06 42.53-19.06 1.77-6.41 14.06-21.12 14.06-21.12a15.61 15.61 0 0 1 1.1-3.68c.92-2.17-11.31-7-11.31-7s-9.67 10.94-11.71 13.89-8.88 8.35-8.88 8.35a6.75 6.75 0 0 0-3 .28h-.16a24.55 24.55 0 0 0-6.31 3.31 12 12 0 0 0-8.52 2.84s-5.62-1-6.62-.12-5.78-.22-5.78-.22-4.43-10.38-7.71-7.54-16.73 2.19-16.73 2.19c-1.69-2.45-6-4.33-8.68-5.31a11.91 11.91 0 0 0-7.18-.4 9.16 9.16 0 0 0-2.89 1.27l-8.46 7.67s-2.23-3.12-1.93-3.8-2.7-1.35-2.7-1.35-4-1.39-5.45-1.86-2.95 1.11-3.08 1.25a16.08 16.08 0 0 0 .92-6c-.31-2.63 1.84-4.89 1.84-4.89-4.36-12-15.63-2.54-15.63-2.54s-1.49 6.43-.48 8.95-1.4 7.67-1.18 9.06-.69 3.7-.79 6.32 1.09 7.63 1.83 9.86 7.16 7.45 7.16 7.45.11 7.87 2.83 12.53.33 20.15.33 20.15-3.22 12-6.82 15.74-9.55 25.54-9.55 25.54z",fill:"#3f3d56"})),vt||(vt=bt.createElement("path",{d:"M541.73 245.17s1.69-4.49 3.08-4.85a31.9 31.9 0 0 0 4.07-1.64l-.82-1.73s-5.23 1.22-6.12 2.71-.21 5.51-.21 5.51zm28.07-8.99c.23 1.38 12.44 3.1 12.44 3.1l-6-6.46h-.15a24.55 24.55 0 0 0-6.29 3.36zm-29.58 46.31c.14-.15-32.42 37.86-55.66 14.28.04 0 37.89 6.63 55.66-14.28z",opacity:.1})),Mt||(Mt=bt.createElement("path",{d:"M548.69 262.83a59.93 59.93 0 0 1-7.68 12.06 48.44 48.44 0 0 1-11.71 10.46s18.98-19.98 19.39-22.52zm6.91-21.36s-3.62 13.26-11.78 17.5zm4.7 1.54c.09-.25 2.35 10.69-10.94 16.18 0 0 5.62-1.67 10.94-16.18zm-80.79-12.12c.21 0-6.61 4-8.49 5.88 0 .02 4.58-6.29 8.49-5.88z",opacity:.1})),gt||(gt=bt.createElement("path",{d:"M521.9 223.28a3.43 3.43 0 0 1-1.36 2.16 3.32 3.32 0 0 1-1.56.29c-5 .12-10.22.14-14.77-2a5.58 5.58 0 0 1-2.19-1.58 9.16 9.16 0 0 1-1.17-3.67c-.56-2.48-1.86-4.71-2.76-7.08a23.4 23.4 0 0 1-1.14-12.51 8.47 8.47 0 0 1 1.39-3.62c1.4-1.84 3.84-2.51 5.65-3.95s3-3.7 5.12-4.75c1.89-1 4.14-.75 6.2-.31a32.39 32.39 0 0 1 11.38 4.78c1.16.77 2.43 1.66 3.81 1.46a5.3 5.3 0 0 0 2.91-2.07 15.07 15.07 0 0 1 1 7.19 3.26 3.26 0 0 0 0 1.08 3.36 3.36 0 0 0 .72 1.16c1.18 1.48 1.86 3.78.59 5.17-.55.62-1.38.93-1.92 1.55-1 1.11-.73 2.78-.76 4.26a2.19 2.19 0 0 1-.42 1.44 2.13 2.13 0 0 1-2 .4 5.68 5.68 0 0 0-2.15-.29 3.65 3.65 0 0 0-1.93 1.37c-2.51 2.83-3.53 6.02-4.64 9.52z",fill:"#3f3d56"})),kt||(kt=bt.createElement("path",{d:"M501.51 220.89a5.55 5.55 0 0 0 2.2 1.58c4.55 2.1 9.76 2.08 14.77 2a3.58 3.58 0 0 0 1.56-.29 3.43 3.43 0 0 0 1.36-2.17c1.11-3.49 2.13-6.68 4.55-9.53a3.61 3.61 0 0 1 1.93-1.37 5.68 5.68 0 0 1 2.15.29 2.11 2.11 0 0 0 2-.41 2.19 2.19 0 0 0 .42-1.44c0-1.47-.21-3.14.75-4.25.54-.63 1.37-.94 1.93-1.55a3.21 3.21 0 0 0 .44-3.27c.82 1.42 1.14 3.22.07 4.39-.56.61-1.39.93-1.93 1.55-1 1.11-.72 2.78-.75 4.26a2.19 2.19 0 0 1-.42 1.44 2.13 2.13 0 0 1-2 .4 5.73 5.73 0 0 0-2.15-.29 3.61 3.61 0 0 0-1.93 1.37c-2.42 2.85-3.45 6-4.55 9.54a3.43 3.43 0 0 1-1.36 2.16 3.32 3.32 0 0 1-1.56.29c-5 .12-10.22.14-14.77-2a5.55 5.55 0 0 1-2.2-1.58 4.46 4.46 0 0 1-.66-1.35zm32.82-22.65a2.37 2.37 0 0 1-.47-.85 3 3 0 0 1 0-1.07 15.25 15.25 0 0 0-.54-6l.09-.1a15.19 15.19 0 0 1 .95 7.19 5.29 5.29 0 0 0-.03.83zm-9.88 35.09s-20.59 1.92-22.31-1.23m-17.18-8.78s-11.38-.42-14 3.75",opacity:.1})))}},7632:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P,F,S,V,A,q,D,N,_,U,B,R,W,X,K,J,Q,Y,$,ee,te,ae,le,ce,re,ne,ie,se,oe,me,de,fe,pe,he,ye,ue,Ee,xe,ze,ve,Me,ge,ke,be,we,He,Oe,Ge,Te,Le,Ce,Ie,je,Ze,Pe,Fe,Se,Ve,Ae,qe,De,Ne,_e,Ue,Be,Re,We,Xe,Ke,Je,Qe,Ye,$e,et,tt,at,lt,ct,rt,nt,it,st,ot,mt,dt,ft,pt,ht,yt,ut,Et,xt,zt,vt,Mt,gt,kt,bt,wt,Ht,Ot,Gt,Tt,Lt,Ct,It,jt,Zt,Pt,Ft,St,Vt,At,qt,Dt,Nt,_t,Ut,Bt,Rt,Wt,Xt,Kt,Jt,Qt,Yt,$t,ea,ta,aa,la,ca,ra,na,ia,sa,oa,ma,da,fa,pa,ha,ya,ua,Ea,xa,za,va,Ma,ga,ka,ba,wa,Ha,Oa,Ga,Ta,La,Ca,Ia,ja,Za,Pa,Fa,Sa,Va,Aa,qa,Da,Na,_a,Ua,Ba,Ra,Wa,Xa,Ka,Ja,Qa,Ya,$a,el,tl,al,ll,cl,rl,nl,il,sl,ol,ml,dl,fl,pl,hl,yl,ul,El,xl,zl,vl,Ml,gl,kl,bl,wl,Hl,Ol,Gl,Tl,Ll,Cl,Il,jl,Zl,Pl,Fl,Sl,Vl,Al,ql,Dl,Nl,_l,Ul,Bl,Rl,Wl,Xl,Kl,Jl,Ql,Yl,$l,ec,tc,ac,lc,cc,rc,nc,ic,sc=a(7294),oc=["title","titleId"];function mc(){return mc=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,fc=dc(e,oc);return sc.createElement("svg",mc({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:1157.72,height:825.98,viewBox:"0 0 1157.72 825.98","aria-labelledby":a},fc),l||(l=sc.createElement("defs",null,sc.createElement("linearGradient",{id:"a",x1:418.19,y1:540.35,x2:418.19,y2:8.65,gradientUnits:"userSpaceOnUse"},sc.createElement("stop",{offset:0,stopColor:"gray",stopOpacity:.25}),sc.createElement("stop",{offset:.54,stopColor:"gray",stopOpacity:.12}),sc.createElement("stop",{offset:1,stopColor:"gray",stopOpacity:.1})),sc.createElement("linearGradient",{id:"b",x1:561.46,y1:451.84,x2:561.46,y2:451.78,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"c",x1:566.83,y1:511.15,x2:566.83,y2:451.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"d",x1:566.42,y1:505.23,x2:566.42,y2:500.93,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"e",x1:573.33,y1:463.86,x2:573.33,y2:457.49,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"f",x1:574.03,y1:466.6,x2:574.03,y2:461.87,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"g",x1:571,y1:471.64,x2:571,y2:465.77,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"h",x1:569.74,y1:476.81,x2:569.74,y2:472.34,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"i",x1:567.96,y1:482.09,x2:567.96,y2:474.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"j",x1:566.96,y1:483.74,x2:566.96,y2:478.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"k",x1:569.17,y1:486.56,x2:569.17,y2:482.56,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"l",x1:564.99,y1:495.8,x2:564.99,y2:488.04,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"m",x1:567.74,y1:493.71,x2:567.74,y2:490.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"n",x1:563.91,y1:502.03,x2:563.91,y2:492.66,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"o",x1:564.17,y1:508.32,x2:564.17,y2:497.03,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"p",x1:589.65,y1:508.24,x2:589.65,y2:461.7,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"q",x1:637.22,y1:511.4,x2:637.22,y2:460.75,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"r",x1:593.95,y1:510.51,x2:593.95,y2:460.75,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"s",x1:556.38,y1:511.14,x2:556.38,y2:451.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"t",x1:777.04,y1:810.07,x2:777.04,y2:679.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"u",x1:858.15,y1:793.9,x2:858.15,y2:586.42,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"v",x1:777.01,y1:463,x2:777.01,y2:384.85,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"w",x1:693.32,y1:655.8,x2:693.32,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"x",x1:784.01,y1:593.15,x2:784.01,y2:445.4,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"y",x1:789.52,y1:479.23,x2:789.52,y2:445.4,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"z",x1:769.72,y1:440.22,x2:769.72,y2:359.14,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"A",x1:784.01,y1:593.15,x2:784.01,y2:487.36,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"B",x1:782.08,y1:693.69,x2:782.08,y2:490.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"C",x1:782.08,y1:691.68,x2:782.08,y2:488.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"D",x1:693.32,y1:590.64,x2:693.32,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"E",x1:694.66,y1:588.64,x2:694.66,y2:521.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"F",x1:674.74,y1:658.97,x2:674.74,y2:490.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"G",x1:825.97,y1:775.45,x2:825.97,y2:736.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"H",x1:816.79,y1:771.83,x2:816.79,y2:736.81,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"I",x1:689.2,y1:658.97,x2:689.2,y2:646.08,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"J",x1:750.14,y1:810.91,x2:750.14,y2:648.09,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"K",x1:737.1,y1:796.17,x2:737.1,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"L",x1:735.05,y1:798.18,x2:735.05,y2:662.65,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"M",x1:735.05,y1:796.17,x2:735.05,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"N",x1:689.04,y1:772.24,x2:689.04,y2:735.53,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"O",x1:794.31,y1:747.43,x2:794.31,y2:707.65,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"P",x1:812.48,y1:784.44,x2:812.48,y2:758.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Q",x1:805.2,y1:833.36,x2:805.2,y2:759.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"R",x1:805.2,y1:833.36,x2:805.2,y2:804.2,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"S",x1:777.31,y1:739.49,x2:777.31,y2:736.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"T",x1:780.05,y1:750.13,x2:780.05,y2:747.43,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"U",x1:779.31,y1:746.18,x2:779.31,y2:743.48,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"V",x1:780.05,y1:755.44,x2:780.05,y2:752.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"W",x1:773.46,y1:760.94,x2:773.46,y2:758.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"X",x1:862.64,y1:812.46,x2:862.64,y2:774.6,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Y",x1:907.2,y1:814.39,x2:907.2,y2:760.44,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"Z",x1:907.2,y1:798.12,x2:907.2,y2:761.84,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aa",x1:868.85,y1:763.68,x2:868.85,y2:611.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ab",x1:871.92,y1:789.8,x2:871.92,y2:611.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ac",x1:816.9,y1:761.86,x2:816.9,y2:744.66,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ad",x1:870.9,y1:789.8,x2:870.9,y2:602.69,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ae",x1:769.35,y1:651.44,x2:769.35,y2:638.6,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"af",x1:764.04,y1:663.34,x2:764.04,y2:657.71,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ag",x1:726.47,y1:530.38,x2:726.47,y2:504.12,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ah",x1:708.03,y1:538.2,x2:708.03,y2:512.74,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ai",x1:748.85,y1:773.83,x2:748.85,y2:726.79,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aj",x1:896.31,y1:743.48,x2:896.31,y2:740.78,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ak",x1:901.77,y1:771.66,x2:901.77,y2:768.96,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"al",x1:890.68,y1:721.79,x2:890.68,y2:660.64,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"am",x1:885.78,y1:675.79,x2:885.78,y2:637.37,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"an",x1:848.29,y1:754.42,x2:848.29,y2:740.55,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ao",x1:864.81,y1:750.13,x2:864.81,y2:747.43,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ap",x1:846.19,y1:747.53,x2:846.19,y2:744.83,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aq",x1:881.19,y1:749.6,x2:881.19,y2:746.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ar",x1:886.06,y1:770.31,x2:886.06,y2:767.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"as",x1:889.38,y1:746.9,x2:889.38,y2:744.2,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"at",x1:893.72,y1:770.31,x2:893.72,y2:767.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"au",x1:872.64,y1:750.95,x2:872.64,y2:748.25,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"av",x1:876.21,y1:771.66,x2:876.21,y2:768.96,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aw",x1:856.52,y1:749.6,x2:856.52,y2:746.9,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ax",x1:806.51,y1:727.79,x2:806.51,y2:668.88,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"ay",x1:814.59,y1:726.79,x2:814.59,y2:588.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"az",x1:850.17,y1:603.03,x2:850.17,y2:588.63,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aA",x1:852.9,y1:601.03,x2:852.9,y2:566.67,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aB",x1:749.15,y1:577.5,x2:749.15,y2:490.97,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aC",x1:848.06,y1:581.05,x2:848.06,y2:488.62,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aD",x1:803.57,y1:585.21,x2:803.57,y2:369.24,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aE",x1:866,y1:427.4,x2:866,y2:413.47,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aF",x1:767.18,y1:450.76,x2:767.18,y2:418.27,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aG",x1:721.08,y1:477.69,x2:721.08,y2:430.35,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aH",x1:762.7,y1:532.98,x2:762.7,y2:519.25,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aI",x1:759.55,y1:491.42,x2:759.55,y2:466.23,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aJ",x1:850.33,y1:585.21,x2:850.33,y2:548.89,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aK",x1:885.57,y1:560.24,x2:885.57,y2:486.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aL",x1:811.63,y1:524.13,x2:811.63,y2:497.28,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aM",x1:749.16,y1:575.49,x2:749.16,y2:509.11,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aN",x1:798.41,y1:458.74,x2:798.41,y2:399.27,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aO",x1:778.83,y1:639.38,x2:778.83,y2:581.08,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aP",x1:777.81,y1:637.37,x2:777.81,y2:579.07,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aQ",x1:704.23,y1:625.68,x2:704.23,y2:592.01,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aR",x1:783.34,y1:573,x2:783.34,y2:552.61,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aS",x1:812.36,y1:782.25,x2:812.36,y2:768.97,xlinkHref:"#a"}),sc.createElement("linearGradient",{id:"aT",x1:875.12,y1:811.72,x2:875.12,y2:787.42,xlinkHref:"#a"}))),void 0===t?sc.createElement("title",{id:a},"creativity"):t?sc.createElement("title",{id:a},t):null,c||(c=sc.createElement("ellipse",{cx:788.82,cy:768.45,rx:195.65,ry:26.54,fill:"#a4a4a4",opacity:.1})),r||(r=sc.createElement("ellipse",{cx:1029.06,cy:710.91,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),n||(n=sc.createElement("ellipse",{cx:1053.29,cy:821.13,rx:35.78,ry:4.85,fill:"#a4a4a4",opacity:.1})),i||(i=sc.createElement("ellipse",{cx:428.53,cy:755.65,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),s||(s=sc.createElement("ellipse",{cx:285.37,cy:705.99,rx:82.47,ry:11.19,fill:"#a4a4a4",opacity:.1})),o||(o=sc.createElement("path",{d:"M713 88.33c-49.68 31.15-114.14 29.13-170.58 12.93S434.09 56.2 379.07 35.7A580.66 580.66 0 0 0 235.56 2.19C165.45-5.01 87.15 3.76 38.29 54.11c-54.43 56.07-50.22 157.2 8.62 208.68 29.93 26.18 69.12 39 103.3 59.47s65.82 54.39 62.91 93.85c-2.7 36.52-34 64.55-66.44 82.14-25.06 13.59-55.93 28.43-58.95 56.58-2.92 27.24 23 48.59 47.81 60.72 80.84 39.6 180.43 39.22 261-1 28.73-14.35 55.14-33.43 85.27-44.62 79.11-29.36 166.28.2 250.05 11a556.31 556.31 0 0 0 212.63-13.84c41.48-11 83.12-27.75 112.26-59 21-22.53 34.11-51.05 46.4-79.21q19.67-45 37.8-90.73c7.25-18.28 14.4-36.92 16.27-56.48 3.4-35.44-10.91-70.48-30.4-100.39-46.26-71-124.17-121-208.51-133.65s-173.69 12.09-239.13 66.36",fill:"#a4a4a4",opacity:.1})),m||(m=sc.createElement("path",{fill:"url(#a)",d:"M109.49 8.65v531.7h617.4V8.65h-617.4z"})),d||(d=sc.createElement("path",{fill:"#f6f7f9",d:"M113.94 13.31h608.5v20.27h-608.5z"})),f||(f=sc.createElement("path",{fill:"#534d72",d:"M113.94 13.31h608.5v20.27h-608.5z"})),p||(p=sc.createElement("path",{fill:"#f6f7f9",d:"M113.94 33.58h608.5v502.1h-608.5z"})),h||(h=sc.createElement("ellipse",{cx:127.06,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),y||(y=sc.createElement("ellipse",{cx:139.42,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),u||(u=sc.createElement("ellipse",{cx:151.77,cy:23.45,rx:4.56,ry:3.44,fill:"#f6f7f9"})),E||(E=sc.createElement("path",{fill:"#a4a4a4",d:"M257.92 64.54h320.55V74H257.92z",opacity:.2})),x||(x=sc.createElement("path",{fill:"#a4a4a4",d:"M535.88 64.54h42.59V74h-42.59z"})),z||(z=sc.createElement("path",{d:"M561.48 451.84s-.02-.06 0 0z",transform:"translate(-21.14 -37.01)",fill:"url(#b)"})),v||(v=sc.createElement("path",{d:"m545.41 505.14-4.68 3.16c0-2.21 8.23-11 8.23-11-2.13-1.2-9.67 4.68-9.67 4.68.89-3.85 7.55-8.51 7.55-8.51-.58-.3-5.72 2.3-5.72 2.3 1.68-3.55 8.61-8.69 8.61-8.69-.86-.55-5.93 1.64-6.17 1.74.27-.19 8.71-6.11 8-6.29s-7.14 1.15-7.14 1.15c-.5-2.26 10-12.91 10-12.91s1.31-1.85.84-1.36-5.34 2.18-5.34 2.18c.07-3.33 10.22-8.49 10.22-8.49l-4.62-.18 3-3.27c-.14.11-4.9 3.76-5 2.69s4.48-5.37 5.46-6 4-.12 4-.12-1.32-3.81-1.57-4.36c.73.6 11.09 5 11.09 5l.9.18c2.42.47 9 1.8 10 2.5s6 1.65 8.88 2.21l2 .38-7.28 46.11h-2c-1.19 0-2.37-.1-3.55-.2q-2.79-.25-5.55-.76c-3.7-.69-8.56-1.61-12.31-2.34-2.32-.45-4.21-.84-5.14-1.05-3.71-.87-8.34 2-9.4 2s-7.44 5.31-7.44 5.31c.05-1.05 3.8-6.06 3.8-6.06z",transform:"translate(-21.14 -37.01)",fill:"url(#c)"})),M||(M=sc.createElement("path",{d:"M545.37 505.06c.08 0 7.28-2.95 9.68-3.89s31.19 1.13 32.41 1.22v.18c-.3 0-29.94-2.16-32.33-1.22s-9.6 3.85-9.67 3.88z",transform:"translate(-21.14 -37.01)",fill:"url(#d)",opacity:.1})),g||(g=sc.createElement("path",{d:"M561.48 451.84s-.02-.06 0 0z",transform:"translate(-21.14 -37.01)",fill:"url(#b)"})),k||(k=sc.createElement("path",{d:"M553.5 462.27a55.92 55.92 0 0 1 6.12-4.32c1.64-.91 4.85-.26 7.19.21a16.15 16.15 0 0 0 2.08.34c1.43 0 9.26 2.22 9.59 2.32.08 0 8.56 2 9.63 1.94a32.35 32.35 0 0 1 5 .91v.19a32.82 32.82 0 0 0-5-.92c-1.1.07-9.34-1.86-9.69-1.94-.08 0-8.13-2.31-9.54-2.32a13.82 13.82 0 0 1-2.11-.34c-2.19-.44-5.49-1.1-7.07-.23a59.1 59.1 0 0 0-6.1 4.3z",transform:"translate(-21.14 -37.01)",fill:"url(#e)",opacity:.1})),b||(b=sc.createElement("path",{d:"M555.19 462.79c.73-.81 9.23-1.1 10-.8s10.51 1.25 11 1.23c.16 0 12.8 2.44 16.67 3.2v.18c-5.62-1.1-16.34-3.17-16.63-3.19-.05 0-10.19-.9-11.09-1.25s-9.22.14-9.78.75z",transform:"translate(-21.14 -37.01)",fill:"url(#f)",opacity:.1})),w||(w=sc.createElement("path",{d:"M549.8 471.54c2.61-4.44 17.34-5.76 17.48-5.77 1.57-.13 24 4.12 24.92 4.3v.18c-.23 0-23.32-4.43-24.86-4.29-4.1.35-15.21 2.05-17.33 5.68z",transform:"translate(-21.14 -37.01)",fill:"url(#g)",opacity:.1})),H||(H=sc.createElement("path",{d:"M548.8 476.69c4.16-4.67 17.36-4.35 17.49-4.34 1 0 23.44 3.36 24.39 3.5v.18c-.23 0-23.39-3.45-24.37-3.49-.13 0-13.23-.33-17.33 4.27z",transform:"translate(-21.14 -37.01)",fill:"url(#h)",opacity:.1})),O||(O=sc.createElement("path",{d:"M544.87 481.86c1.56-2.91 5.94-5 13-6.19a72.7 72.7 0 0 1 10.37-.93l22.86 2.61v.19l-22.84-2.61c-.19 0-19.79.15-23.29 7.16l-.17-.08z",transform:"translate(-21.14 -37.01)",fill:"url(#i)",opacity:.1})),G||(G=sc.createElement("path",{d:"M544.31 483.62c2.19-2.4 10.76-4.3 14.86-4.79 3.85-.46 29.36 3.57 30.45 3.74v.18c-.27 0-26.57-4.19-30.4-3.74s-12.61 2.4-14.74 4.73z",transform:"translate(-21.14 -37.01)",fill:"url(#j)",opacity:.1})),T||(T=sc.createElement("path",{d:"m549.32 484.51 9.67-1.6a25.82 25.82 0 0 1 7.5-.14l10.72 1.38 11.79 2.23v.18l-11.8-2.23-10.73-1.33a25.83 25.83 0 0 0-7.45.13l-9.67 1.61z",transform:"translate(-21.14 -37.01)",fill:"url(#k)",opacity:.1})),L||(L=sc.createElement("path",{d:"M541.23 495.29c2-3.72 10.9-5.57 15.78-6.59 1-.21 1.85-.38 2.33-.52 2.76-.77 28.52 1.82 29.61 1.93v.19c-.27 0-26.82-2.7-29.54-1.94-.49.14-1.31.31-2.34.52-4.67 1-14.4 3-15.84 6.92l-.18-.06a3 3 0 0 1 .18-.45z",transform:"translate(-21.14 -37.01)",fill:"url(#l)",opacity:.1})),C||(C=sc.createElement("path",{d:"M546.61 493.53s4.92-1.55 6-2.06 13.85-.83 14.39-.85l21.87 1.38v.19L567 490.81c-.12 0-13.21.32-14.31.82s-5.86 2-6.06 2.08z",transform:"translate(-21.14 -37.01)",fill:"url(#m)",opacity:.1})),I||(I=sc.createElement("path",{d:"M539.21 501.93c4.81-6.76 23.13-9.38 24.77-9.26l24.63 1.58v.18c-.23 0-23-1.46-24.62-1.58s-19.84 2.49-24.6 9.18z",transform:"translate(-21.14 -37.01)",fill:"url(#n)",opacity:.1})),j||(j=sc.createElement("path",{d:"M541.21 506.88c4.34-8.1 23-9.92 24.71-9.85l21.78 1v.18l-21.78-1c-1.81-.08-22.3 1.93-25.09 11.1l-.18-.05a8 8 0 0 1 .56-1.38z",transform:"translate(-21.14 -37.01)",fill:"url(#o)",opacity:.1})),Z||(Z=sc.createElement("path",{d:"m585 508.22 7.37-46.52 2 .38-7.37 46.16c-.69 0-1.37 0-2-.02z",transform:"translate(-21.14 -37.01)",fill:"url(#p)",opacity:.1})),P||(P=sc.createElement("path",{d:"m585.39 509.23 7.69-48.48 9.43 3 6.9 2.2s4.82-1 6.36 2.51-3.37 13.76-1 16 22.4 4 22.4 4 29.1 7.75 32.14 8.21S689 506.84 689 506.84c.91 2.29-10.27 2.39-12.77 3.07s-26.36-3.81-27.91-5.18-23.75-7.36-23.75-7.36c-7.15-3.7-11.74-2.15-11.74-2.15a55.09 55.09 0 0 1-3.45 14 3.8 3.8 0 0 1-4 2.17l-10.78-.85z",transform:"translate(-21.14 -37.01)",fill:"url(#q)"})),F||(F=sc.createElement("path",{d:"m585.39 509.23 7.69-48.48 9.43 3C601 468.44 592 498 594.6 510.51z",transform:"translate(-21.14 -37.01)",fill:"url(#r)",opacity:.1})),S||(S=sc.createElement("path",{d:"m545.41 505.14-4.68 3.16c0-2.21 8.23-11 8.23-11-2.13-1.2-9.67 4.68-9.67 4.68.89-3.85 7.55-8.51 7.55-8.51-.58-.3-5.72 2.3-5.72 2.3 1.68-3.55 8.61-8.69 8.61-8.69-.86-.55-5.93 1.64-6.17 1.74.27-.19 8.71-6.11 8-6.29s-7.14 1.15-7.14 1.15c-.5-2.26 10-12.91 10-12.91s1.31-1.85.84-1.36-5.34 2.18-5.34 2.18c.07-3.33 10.22-8.49 10.22-8.49l-4.62-.18 3-3.27c-.14.11-4.9 3.76-5 2.69s4.48-5.37 5.46-6 4-.12 4-.12-1.32-3.81-1.57-4.36c.73.6 11.09 5 11.09 5l.9.17c-1 .76-1.92 1.45-2.53 2a7.37 7.37 0 0 0-2.21 2.7 5.48 5.48 0 0 0 .69 4.5c.77 1.37 1.83 2.56 2.59 3.94a2.66 2.66 0 0 1 .42 1.94 3.34 3.34 0 0 1-1.31 1.51 25.37 25.37 0 0 0-8.32 11.5 3.1 3.1 0 0 0-.25 1.4 4.67 4.67 0 0 0 .82 1.75 6.31 6.31 0 0 1-.81 7.27c-.82.9-2 1.69-2.06 2.9a3.9 3.9 0 0 0 .6 1.92q1.23 2.29 2.44 4.61c-2.32-.45-4.21-.84-5.14-1.05-3.71-.87-8.34 2-9.4 2s-7.44 5.3-7.44 5.3c.17-1.07 3.92-6.08 3.92-6.08z",transform:"translate(-21.14 -37.01)",fill:"url(#s)"})),V||(V=sc.createElement("path",{d:"m702.23 777.41 4.43 17.75s99.48 32.16 131.73 2-3.55-88.78-3.55-88.78L813 685.94l-57.61-6.7H735z",transform:"translate(-21.14 -37.01)",fill:"url(#t)"})),A||(A=sc.createElement("path",{d:"m702.23 777.41 4.43 17.75s99.48 32.16 131.73 2-3.55-88.78-3.55-88.78L813 685.94l-57.61-6.7H735z",transform:"translate(-21.14 -37.01)",fill:"url(#t)",opacity:.03})),q||(q=sc.createElement("path",{d:"M943.93 648.08 934.37 659l-33.06 59.14-11.25 20.77s-8.5 10.58-7.66 15 3.23 37.27-25.4 39.94-90.69-64.33-90.69-64.33l2.53-1.7 55.43-37.49 19.9-21.42 5.32-5.72s25.92-34.84 25.23-40.2 25.91-37.52 41.25-36.52 26.93 1 32.38 20.44-4.42 41.17-4.42 41.17z",transform:"translate(-21.14 -37.01)",fill:"url(#u)"})),D||(D=sc.createElement("path",{fill:"url(#v)",d:"M724.47 384.85h105.08v78.14H724.47z"})),N||(N=sc.createElement("path",{fill:"url(#v)",d:"M724.47 384.85h105.08v78.14H724.47z",opacity:.1})),_||(_=sc.createElement("path",{d:"M716.89 584.62c0 1.43-.13 3.39-.34 5.6-.79 8.6-2.73 21-2.73 21s-4.09 21.83-3.07 23.61-1 16.33-2.39 19.53-9.54 0-9.54 0l-27-71.22-1.49-3.93-.59-1.55.62-2.38 2.19-8.63s44.34 11.03 44.34 17.97z",transform:"translate(-21.14 -37.01)",fill:"url(#w)"})),U||(U=sc.createElement("path",{d:"M840.29 514.19v11.26l-8.19 39.33-17.72 23.36-39.2 5-37.5-14.47s-24.88-39.46 4.09-61.67a54.69 54.69 0 0 0 16.6-20.75 66.44 66.44 0 0 0 5.74-26.67 61 61 0 0 0-.86-11.8s61.36-27.8 51.47 0a31 31 0 0 0-1.39 14.95 46.05 46.05 0 0 0 4.91 14.66c7.92 15.39 22.05 26.8 22.05 26.8z",transform:"translate(-21.14 -37.01)",fill:"url(#x)"})),B||(B=sc.createElement("path",{d:"M814.72 457.75a31 31 0 0 0-1.39 14.95 41.86 41.86 0 0 1-49.22-3.15 61 61 0 0 0-.86-11.8s61.36-27.75 51.47 0z",transform:"translate(-21.14 -37.01)",fill:"url(#y)",opacity:.1})),R||(R=sc.createElement("ellipse",{cx:769.72,cy:399.68,rx:41.25,ry:40.54,fill:"url(#z)"})),W||(W=sc.createElement("path",{d:"M840.29 514.19v11.26l-8.19 39.33-17.72 23.36-39.2 5-37.5-14.47s-24.88-39.46 4.09-61.67a54.69 54.69 0 0 0 16.6-20.75C735.71 581.49 784 577.07 784 577.07c44.18 0 35.29-81 34.22-89.71 7.94 15.42 22.07 26.83 22.07 26.83z",transform:"translate(-21.14 -37.01)",fill:"url(#A)",opacity:.1})),X||(X=sc.createElement("path",{d:"M877.79 552.27c-1.71 5.7-5.8 26.46-5.8 26.46s-1.15.45-3 1.28c-7 3.19-24.31 12-25.59 23a4.1 4.1 0 0 0-.06.49c-1 14.07-13.63 43.89-20.1 57.29s3.07 27.81 3.07 27.81l-13 3s-18.02 2.4-33.31-1.3-13.3 6-22.84 2.68-40.91-5.7-46-8.71-9.54-29.81-6.82-33.17 11.25-74 11.25-74-34.43-31.5-33.75-51.94 25.57-21.43 25.57-21.43 9.57-3.3 17.68-6.73c1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06 1.6.2 2.58.34 2.58.34-.88 3-1.67 5.94-2.39 8.75-13.91 54.89 2.42 71.3 14.87 76.14a28 28 0 0 0 11.37 1.92c15.66 0 24.65-10.19 29.69-23.72 10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.23 30.48 7.52 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#B)",opacity:.1})),K||(K=sc.createElement("path",{d:"M877.79 550.26c-1.71 5.7-5.8 26.46-5.8 26.46s-1.15.45-3 1.28c-7 3.19-24.31 12-25.59 23a4.1 4.1 0 0 0-.06.49c-1 14.07-13.63 43.89-20.1 57.29s3.07 27.81 3.07 27.81l-13 3s-18.02 2.41-33.31-1.3-13.3 6-22.84 2.68-40.91-5.7-46-8.71-9.54-29.81-6.82-33.17 11.25-74 11.25-74-34.43-31.5-33.75-51.94 25.57-21.43 25.57-21.43 9.57-3.3 17.68-6.73c1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06 1.6.2 2.58.34 2.58.34-.88 3-1.67 5.94-2.39 8.75-13.91 54.89 2.42 71.3 14.87 76.14a28 28 0 0 0 11.37 1.92c15.66 0 24.65-10.19 29.69-23.72 10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.23 30.48 7.52 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#C)"})),J||(J=sc.createElement("path",{d:"M716.89 584.62v6l-.34-.42c-14.39-17.92-37.7-10-44.72-7.06-1.33.56-2.08.94-2.08.94s.4-2.3.59-4.87a27.27 27.27 0 0 0 0-3.93l2.19-8.63s44.36 11.03 44.36 17.97z",transform:"translate(-21.14 -37.01)",fill:"url(#D)",opacity:.1})),Q||(Q=sc.createElement("path",{d:"m692.34 521.11-8.88 11.4s-15 35.84-13.62 38.52-.09 11.06-.09 11.06 30.09-15.38 47.13 6.55V577.4s1.71-4.69 2.39-6 0-11.73 0-11.73z",transform:"translate(-21.14 -37.01)",fill:"url(#E)"})),Y||(Y=sc.createElement("path",{d:"M708.36 654.46a5.34 5.34 0 0 1-.35 1.11c-4.35 9.71-36.91-4.47-36.91-4.47s-.27-1.34-.7-3.51c-1.72-8.73-5.81-31.06-3.62-35.35 2.72-5.36 3-22.11 3-22.11 9.12-16.08 4.52-48.58 4.52-48.58 4.09-7-2.38-13.4-2.38-13.4s-56.6-32.84-17.73-37.19 46.37 41.86 43.3 46.91 2.38 45.82 2.38 45.82l5.45 31.57s5.39 27.35 3.04 39.2z",transform:"translate(-21.14 -37.01)",fill:"url(#F)"})),$||($=sc.createElement("path",{fill:"url(#G)",d:"m851.15 775.46-10.12-.5-39.35-1.9-.05-1.23-.84-19.99 29.88-15.03.04-.02.38.27.77.53.83.58 17.07 11.97 1.39 25.32z"})),ee||(ee=sc.createElement("path",{fill:"url(#H)",d:"m832.79 738.06-.1.11-31.06 33.66-.84-19.99 29.88-15.03.42.25 1.7 1z",opacity:.1})),te||(te=sc.createElement("path",{d:"M708 655.57c-4.35 9.71-36.91-4.47-36.91-4.47s-.27-1.34-.7-3.51c4.34-1.79 9.87-2.16 17.17-.17 9.44 2.58 16 5.52 20.44 8.15z",transform:"translate(-21.14 -37.01)",fill:"url(#I)",opacity:.1})),ae||(ae=sc.createElement("path",{d:"M706.66 795.16s-19.09-9.38-20.11-14.4-6.48-20.78-8.87-24.13-17-26.13-20.45-35.84-13.64-37.19-6.14-47.58 11.93-30.48 36.48-23.78 29.31 15.74 29.31 15.74l2.69 5.7s59.36 54.21 60.38 55.92 32.73 25.15 32.73 25.15l39.2 23.12-33.07 35.85s-41.93-16.08-43.29-22.78-12.88-12.73-12.88-12.73l-15.76-6z",transform:"translate(-21.14 -37.01)",fill:"url(#J)"})),le||(le=sc.createElement("path",{d:"M666.77 715.09s7.16 7 7.16 9.72 9.88 7.37 9.88 7.37 78.41 47.87 87.62 47.72l16.39 16.27 23.09-47L782 726.79l-60.38-53.24s-11.21-7.37-17.35-8.38-37.5-15.07-40.22 12.06 2.72 37.86 2.72 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#K)",opacity:.1})),ce||(ce=sc.createElement("path",{d:"M664.73 717.1s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 728.8l-60.38-53.24s-11.21-7.37-17.34-8.38-37.5-15.07-40.23 12.06 2.68 37.86 2.68 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#L)",opacity:.1})),re||(re=sc.createElement("path",{d:"M664.73 715.09s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 726.79l-60.38-53.24s-11.21-7.37-17.34-8.38-37.55-15.07-40.28 12.06 2.73 37.86 2.73 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#M)"})),ne||(ne=sc.createElement("path",{d:"M664.73 715.09s7.16 7 7.16 9.72 9.87 7.37 9.87 7.37 78.42 47.87 87.62 47.72l16.39 16.27 23.1-47L780 726.79l-60.38-53.24s-11.21-7.37-17.34-8.38-37.55-15.07-40.28 12.06 2.73 37.86 2.73 37.86z",transform:"translate(-21.14 -37.01)",fill:"url(#M)"})),ie||(ie=sc.createElement("path",{d:"M672.23 735.53s20.6 33.56 31.77 36.54-31.77-36.54-31.77-36.54z",transform:"translate(-21.14 -37.01)",fill:"url(#N)",opacity:.1})),se||(se=sc.createElement("path",{fill:"url(#O)",d:"m811.31 707.65-3.1 17.2-2.84 15.79-1.22 6.79-26.84-8.37 2.74-14.72.15-.82 1.79-9.59 29.32-6.28z"})),oe||(oe=sc.createElement("path",{d:"m826.51 777.65-1.22 6.79-26.84-8.37 2.74-14.73c3.93-5 14.26-1 14.26-1 14.35-1.68 9.5 14.74 9.5 14.74a5.49 5.49 0 0 1 1.56 2.57z",transform:"translate(-21.14 -37.01)",fill:"url(#P)",opacity:.1})),me||(me=sc.createElement("path",{d:"M829.38 833.36c-7.15-6.36-33.07-9.36-41.59-9.36s-5.11-2.67-5.11-2.67l-5.64-4c-3.85-2.75-2.08-9.24-.58-13.08.71-1.79 1.35-3 1.35-3s2.14-15.75 4.27-20.45 17.69-11.8 17.69-11.8c-1.32-14.12 15.68-7.65 15.68-7.65 14.35-1.67 9.5 14.75 9.5 14.75 2.73 2 3.41 12.72 2.73 16.41s2.38 15.41 2.38 15.41 2.87 10.6 4.61 16.79c.34 1.19.63 2.23.85 3 1.36 4.64-6.14 5.65-6.14 5.65z",transform:"translate(-21.14 -37.01)",fill:"url(#Q)"})),de||(de=sc.createElement("path",{d:"M829.38 833.36c-7.15-6.36-33.07-9.36-41.59-9.36s-5.11-2.67-5.11-2.67l-5.64-4c-3.85-2.75-2.08-9.24-.58-13.08l7.63 6.7s-2.18 1.68 0 1.68H793s28.64 6 41.64 12.1c.34 1.19.63 2.23.85 3 1.39 4.62-6.11 5.63-6.11 5.63z",transform:"translate(-21.14 -37.01)",fill:"url(#R)",opacity:.1})),fe||(fe=sc.createElement("ellipse",{cx:777.31,cy:738.14,rx:1.37,ry:1.35,fill:"url(#S)",opacity:.1})),pe||(pe=sc.createElement("ellipse",{cx:780.05,cy:748.78,rx:1.37,ry:1.35,fill:"url(#T)",opacity:.1})),he||(he=sc.createElement("ellipse",{cx:779.31,cy:744.83,rx:1.37,ry:1.35,fill:"url(#U)",opacity:.1})),ye||(ye=sc.createElement("ellipse",{cx:780.05,cy:754.09,rx:1.37,ry:1.35,fill:"url(#V)",opacity:.1})),ue||(ue=sc.createElement("ellipse",{cx:773.46,cy:759.59,rx:1.37,ry:1.35,fill:"url(#W)",opacity:.1})),Ee||(Ee=sc.createElement("path",{d:"m872.29 812.46-10.12-.46a3.5 3.5 0 0 1 0-1.9s7.42-7-4.86-20.32c0 0 .71-3.13 3.55-2.33 0 0-6.74-11.14-7.76-12.28a.89.89 0 0 1-.12-.54l.83.57 17.07 12z",transform:"translate(-21.14 -37.01)",fill:"url(#X)",opacity:.1})),xe||(xe=sc.createElement("path",{d:"M959.35 787.15a21.28 21.28 0 0 1-2.63 11 21.93 21.93 0 0 1-4.79 6.08h-.09a75.3 75.3 0 0 1-31.51 5.59c-13.94-.53-31.6-.48-37.55 2.63 0 0-20.59 5.65-18.54-2.39 0 0 7.41-7-4.86-20.32 0 0 .71-3.13 3.55-2.33 0 0-6.74-11.14-7.76-12.28-.57-.62 1-5 2.44-8.82.43-1.12.86-2.19 1.24-3.11.67-1.63 1.16-2.77 1.16-2.77.23.13 1.43.84 3.19 1.77 3.31 1.72 8.62 4.16 13.44 4.89 7.41 1.14 13.81 3.52 25.57 0s16.87-8.37 32.85-2.55 23.94 11.86 24.29 22.61z",transform:"translate(-21.14 -37.01)",fill:"url(#Y)"})),ze||(ze=sc.createElement("path",{d:"M959.35 787.15a21.28 21.28 0 0 1-2.63 11c-2.86-11.84-6.53-19.11-18.85-28.25-13.55-10-34.51.88-34.51.88s-17 .75-29.41.75a27.33 27.33 0 0 1-16.34-5.18 17.87 17.87 0 0 1-2.57-2.23l3.81-.88 4.35-1c3.31 1.72 8.62 4.16 13.44 4.89 7.41 1.14 13.81 3.52 25.57 0s16.87-8.37 32.85-2.55 23.94 11.82 24.29 22.57z",transform:"translate(-21.14 -37.01)",fill:"url(#Z)",opacity:.1})),ve||(ve=sc.createElement("path",{d:"M886.31 611.9s-9.2 13.74-8.86 17.76-7.5 12.06-7.5 12.06-8.52 9-8.52 12.73-15.69 35.71-15.69 35.71-20.74 19.24-25.22 22.25-15.34 23.45-19.77 26.13-4.35 22-4.35 22l31.28-32.12s34.77 34.6 36.81 35.27 8.18-28.14 8.18-28.14 19.1-18 24.55-22.91 26.52-38.29 26.52-38.29S942.9 639 941.2 628.66s-17.9-4.19-54.89-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#aa)",opacity:.1})),Me||(Me=sc.createElement("path",{d:"M889.38 611.9s-9.21 13.74-8.86 17.76-7.5 12.06-7.5 12.06-8.53 9-8.53 12.73-15.68 35.71-15.68 35.71-20.81 19.24-25.22 22.25-15.34 23.45-19.78 26.13-4.34 22-4.34 22 35.93-23 49.34 29.28l12.27-17.56s4.44-9.24 6.48-8.57 8.18-28.14 8.18-28.14 19.09-18 24.55-22.91 26.52-38.29 26.52-38.29S946 639 944.26 628.66s-21.64-7.66-54.88-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#ab)",opacity:.1})),ge||(ge=sc.createElement("path",{d:"m832.45 744.66-3.1 17.2c-10.56-7.19-22.13-3.89-28-1.33l1.79-9.59z",transform:"translate(-21.14 -37.01)",fill:"url(#ac)",opacity:.1})),ke||(ke=sc.createElement("path",{d:"M888.36 611.9s-9.21 13.74-8.87 17.76-7.5 12.06-7.5 12.06-8.52 9-8.52 12.73-15.68 35.71-15.68 35.71-20.79 19.24-25.23 22.25-15.34 23.45-19.77 26.13-4.34 22-4.34 22 35.93-23 49.34 29.28l12.27-17.56s4.43-9.24 6.48-8.57 8.18-28.14 8.18-28.14 19.09-18 24.54-22.91 26.53-38.29 26.53-38.29S945 639 943.24 628.66s-17.39-41.21-54.88-16.76z",transform:"translate(-21.14 -37.01)",fill:"url(#ad)"})),be||(be=sc.createElement("path",{d:"M729.84 645.41s50.56-18.78 79 6z",transform:"translate(-21.14 -37.01)",fill:"url(#ae)",opacity:.1})),we||(we=sc.createElement("path",{d:"M735.05 657.71s40.47 6.79 55.81 5.45-55.81-5.45-55.81-5.45z",transform:"translate(-21.14 -37.01)",fill:"url(#af)",opacity:.1})),He||(He=sc.createElement("path",{d:"M723.36 504.12s-3.18 20.68 4.38 25.7-4.38-25.7-4.38-25.7z",transform:"translate(-21.14 -37.01)",fill:"url(#ag)",opacity:.1})),Oe||(Oe=sc.createElement("path",{d:"M702.23 512.74s10.58 16.75 11.6 25.46",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#ah)"})),Ge||(Ge=sc.createElement("path",{d:"M731.2 726.79S769.38 755 766.31 768s-2.27 0-2.27 0z",transform:"translate(-21.14 -37.01)",fill:"url(#ai)",opacity:.1})),Te||(Te=sc.createElement("ellipse",{cx:896.31,cy:742.13,rx:1.37,ry:1.35,fill:"url(#aj)",opacity:.1})),Le||(Le=sc.createElement("ellipse",{cx:901.77,cy:770.31,rx:1.37,ry:1.35,fill:"url(#ak)",opacity:.1})),Ce||(Ce=sc.createElement("path",{d:"M903.71 660.64s-24.79 23.63-24.68 35-1.37 26.13-1.37 26.13l8.29-30.1z",transform:"translate(-21.14 -37.01)",fill:"url(#al)",opacity:.1})),Ie||(Ie=sc.createElement("path",{d:"M905.83 637.37s-43.53 34.5-39.83 38.19 39.83-38.19 39.83-38.19z",transform:"translate(-21.14 -37.01)",fill:"url(#am)",opacity:.1})),je||(je=sc.createElement("path",{d:"M838.39 740.55s20.93 9.57 19.77 13.33-19.77-13.33-19.77-13.33z",transform:"translate(-21.14 -37.01)",fill:"url(#an)",opacity:.1})),Ze||(Ze=sc.createElement("ellipse",{cx:864.81,cy:748.78,rx:1.37,ry:1.35,fill:"url(#ao)",opacity:.1})),Pe||(Pe=sc.createElement("ellipse",{cx:846.19,cy:746.18,rx:1.37,ry:1.35,fill:"url(#ap)",opacity:.1})),Fe||(Fe=sc.createElement("ellipse",{cx:881.19,cy:748.25,rx:1.37,ry:1.35,fill:"url(#aq)",opacity:.1})),Se||(Se=sc.createElement("ellipse",{cx:886.06,cy:768.96,rx:1.37,ry:1.35,fill:"url(#ar)",opacity:.1})),Ve||(Ve=sc.createElement("ellipse",{cx:889.38,cy:745.55,rx:1.37,ry:1.35,fill:"url(#as)",opacity:.1})),Ae||(Ae=sc.createElement("ellipse",{cx:893.72,cy:768.96,rx:1.37,ry:1.35,fill:"url(#at)",opacity:.1})),qe||(qe=sc.createElement("ellipse",{cx:872.64,cy:749.6,rx:1.37,ry:1.35,fill:"url(#au)",opacity:.1})),De||(De=sc.createElement("ellipse",{cx:876.21,cy:770.31,rx:1.37,ry:1.35,fill:"url(#av)",opacity:.1})),Ne||(Ne=sc.createElement("ellipse",{cx:856.52,cy:748.25,rx:1.37,ry:1.35,fill:"url(#aw)",opacity:.1})),_e||(_e=sc.createElement("path",{d:"M844.17 668.88c-.34 1.84-.47 3-.47 3s-19.09 29.82-32.39 33.84c0 0-30.14 21.83-42.47 22.08l55.43-37.49z",transform:"translate(-21.14 -37.01)",fill:"url(#ax)",opacity:.1})),Ue||(Ue=sc.createElement("path",{d:"m866.54 588.63-2.12 10.22s-.12.68-.36 1.88c-1.59 8.28-8.19 41.29-13.55 48-6.13 7.71-7.83 22.11-7.83 22.11s-19.09 29.82-32.39 33.84c0 0-51.82 37.52-47.38 14.73s34.42-31.82 34.42-31.82 4.09-7.71 4.09-9.38 8.87-12.06 8.87-12.06 7.84-14.08 8.18-17.09 14-58.3 14-58.3l8.07-.51z",transform:"translate(-21.14 -37.01)",fill:"url(#ay)"})),Be||(Be=sc.createElement("path",{d:"m866.54 588.63-2.12 10.22s-.12.68-.36 1.88c-10.4 1.86-27.61 4.19-30-.22-1.1-2 1.88-5.86 6.48-10.23z",transform:"translate(-21.14 -37.01)",fill:"url(#az)",opacity:.1})),Re||(Re=sc.createElement("path",{d:"M872 597.17S854.74 601 843.41 601h-1.65c-3.88-.15-6.82-.86-7.72-2.5-1.12-2 2-6 6.71-10.44 6.27-5.91 15.42-12.7 21.47-17 3.74-2.66 6.29-4.38 6.29-4.38l3.49 10.04s-.38 1.79-.79 4.33c-.89 5.5-1.87 14.51.79 16.12z",transform:"translate(-21.14 -37.01)",fill:"url(#aA)"})),We||(We=sc.createElement("path",{d:"M765.8 551.93q5.06 12 10.37 23.92a14.78 14.78 0 0 1-3.66 1.29c-6.28 1.32-13.29-1.25-19.44-3.85-9.2-3.88-19.19-8.5-23.35-17.45-3.07-6.61-2.27-14.26-3.45-21.43-1-6.19-3.57-12.12-4-18.37-.55-7.1 1.58-14.06 2.8-21.08 1.57-.66 3.1-1.34 4.48-2 6.73-3.17 21.88-1.79 28-1.06a24.36 24.36 0 0 0-.35 4.36 25 25 0 0 0 .54 4.73c1.52 7.62 5.8 14.85 5.82 22.67 0 4.85-1.64 9.61-1.51 14.47s1.89 9.37 3.75 13.8z",transform:"translate(-21.14 -37.01)",fill:"url(#aB)",opacity:.1})),Xe||(Xe=sc.createElement("path",{d:"M877.79 550.26c-1.71 5.7-5.8 26.46-5.8 26.46s-.38 1.79-.79 4.33c-.75-1-1.47-2-2.2-3-.47-.67-1-1.35-1.45-2a19.18 19.18 0 0 0-5.33-5 9.39 9.39 0 0 0-5-1.4c-2.86.08-5.43 1.65-8 2.89-10.33 5.05-24.68 4.57-31.46-4.61a22.41 22.41 0 0 1-4-12.57c10-26.81 4.42-66.74 4.42-66.74s31.71 12.72 52.16 25.46 9.16 30.48 7.45 36.18z",transform:"translate(-21.14 -37.01)",fill:"url(#aC)",opacity:.1})),Ke||(Ke=sc.createElement("path",{d:"M774.16 410.87c-1.27 3.85 0 8-.37 12.07-.9 9.49-10.58 16.11-12.77 25.39-1.69 7.11 1.29 14.48 1 21.77-.38 8.22-5 15.92-4.87 24.16.12 9.41 6.33 18 6.36 27.39 0 4.86-1.65 9.62-1.51 14.48s2 9.36 3.85 13.79q5.06 12 10.38 23.92c-7.12 3.64-15.73.55-23.11-2.56-9.21-3.89-19.19-8.49-23.35-17.45-3.06-6.62-2.26-14.26-3.45-21.43-1-6.19-3.57-12.12-4-18.38-.56-7.27 1.69-14.42 2.89-21.62a75 75 0 0 0-2.34-34.26c-2-6.43-4.85-12.63-6.12-19.24s-.71-14 3.54-19.24c4.62-5.72 12.46-7.77 18.27-12.32 6.17-4.84 9.7-12.23 11.94-19.67 1.9-6.33 3.6-13.67 9.49-16.83a15.58 15.58 0 0 1 7.77-1.6c9 .21 17.37 5.26 26.4 5.81 5.15.32 10.26-.85 15.38-1.43 12.69-1.46 26 .77 36.81 7.48s18.75 18.14 19.9 30.64c.68 7.5-1 15.07-.28 22.56a35.83 35.83 0 0 0 10 21.47c3.56 3.64 7.94 6.58 10.69 10.85a28.56 28.56 0 0 1 3.78 11.51c4.41 30.65-12.89 61-10 91.86.46 4.93 2 10.56 6.63 12.54-2.3 3.5-7.85 3.32-11.33 1s-5.58-6.18-8.12-9.5-6.13-6.47-10.36-6.35c-2.86.08-5.43 1.64-8 2.9-10.33 5-24.68 4.55-31.47-4.62-5.12-6.92-4.44-16.36-3.08-24.81s3.13-17.47-.38-25.31c-2.62-5.87-8.15-11.13-7.21-17.47.71-4.85 5-8.27 8.15-12.07 6-7.26 8.23-17 8-26.32s-2.63-18.5-5-27.54c-2-7.35-4-14.94-8.93-20.81a19.68 19.68 0 0 0-19.3-6.93c-3 .53-5.84-.76-9 .11a9.88 9.88 0 0 0-6.88 6.06z",transform:"translate(-21.14 -37.01)",fill:"url(#aD)"})),Je||(Je=sc.createElement("g",{opacity:.1},sc.createElement("path",{d:"M865.76 427.4c.19-4.64.7-9.3.49-13.93-.19 4.64-.71 9.3-.49 13.93z",transform:"translate(-21.14 -37.01)",fill:"url(#aE)"}),sc.createElement("path",{d:"M760.62 450.76a18.65 18.65 0 0 1 .4-2.43c2.2-9.28 11.87-15.9 12.77-25.39a28 28 0 0 0-.06-4.67c-1.1 9.3-10.54 15.87-12.71 25a23.89 23.89 0 0 0-.4 7.49z",transform:"translate(-21.14 -37.01)",fill:"url(#aF)"}),sc.createElement("path",{d:"M726.06 477.69a75 75 0 0 0-3.29-24.58c-2-6.43-4.85-12.62-6.12-19.23a34.43 34.43 0 0 1-.48-3.53 31 31 0 0 0 .48 8.55c1.27 6.61 4.14 12.81 6.12 19.24a75.08 75.08 0 0 1 3.29 19.55z",transform:"translate(-21.14 -37.01)",fill:"url(#aG)"}),sc.createElement("path",{d:"M762.09 533c.38-3.78 1.38-7.52 1.37-11.33a21.48 21.48 0 0 0-.15-2.4c-.39 4-1.47 7.87-1.36 11.85.05.61.05 1.24.14 1.88z",transform:"translate(-21.14 -37.01)",fill:"url(#aH)"}),sc.createElement("path",{d:"M757.25 491.42c.76-7.18 4.38-14.05 4.72-21.32a29.42 29.42 0 0 0-.09-3.87c-.72 7.8-4.88 15.15-4.78 23 .01.77.07 1.47.15 2.19z",transform:"translate(-21.14 -37.01)",fill:"url(#aI)"}),sc.createElement("path",{d:"M883.62 579.88a10 10 0 0 1-8-1.42c-3.48-2.36-5.58-6.17-8.12-9.5s-6.13-6.46-10.36-6.34c-2.86.08-5.43 1.64-8 2.89-10.34 5-24.69 4.56-31.48-4.61a22.18 22.18 0 0 1-4-12c-.34 6.11.4 12.19 4 17 6.79 9.17 21.14 9.66 31.48 4.62 2.56-1.26 5.13-2.82 8-2.9 4.23-.12 7.82 3 10.36 6.35s4.64 7.14 8.12 9.5 9 2.54 11.33-1a8.52 8.52 0 0 1-3.33-2.59z",transform:"translate(-21.14 -37.01)",fill:"url(#aJ)"}),sc.createElement("path",{d:"M880.09 560.24c.74-24.83 11.73-49.42 11-74.13-.76 24.69-11.75 49.28-11 74.13z",transform:"translate(-21.14 -37.01)",fill:"url(#aK)"}),sc.createElement("path",{d:"M816.23 524.13a28.1 28.1 0 0 0-2-13.36c-2.06-4.59-5.88-8.82-7-13.49a8.88 8.88 0 0 0-.22 1.05c-.93 6.34 4.59 11.6 7.22 17.47a24.37 24.37 0 0 1 2 8.33z",transform:"translate(-21.14 -37.01)",fill:"url(#aL)"}),sc.createElement("path",{d:"M753.07 566.25c-9.2-3.88-19.19-8.49-23.35-17.45-3.06-6.61-2.26-14.25-3.45-21.43-1-6.15-3.53-12-4-18.26a33.53 33.53 0 0 0 0 4.91c.48 6.26 3 12.19 4 18.38 1.19 7.17.39 14.81 3.45 21.43 4.16 9 14.15 13.56 23.35 17.45 7.38 3.11 16 6.2 23.11 2.56q-.95-2.13-1.87-4.25c-6.73 2.32-14.5-.49-21.24-3.34z",transform:"translate(-21.14 -37.01)",fill:"url(#aM)"}),sc.createElement("path",{d:"M809.27 411.59c4.9 5.87 7 13.46 8.93 20.81 2.3 8.66 4.6 17.41 5 26.34.06-1.28.09-2.55.06-3.82-.2-9.35-2.62-18.5-5-27.55-2-7.34-4-14.93-8.93-20.8a19.69 19.69 0 0 0-19.3-6.94c-3 .54-5.84-.75-9 .12a9.88 9.88 0 0 0-6.84 6.1 18.37 18.37 0 0 0-.45 7.06 11.29 11.29 0 0 1 .45-2 9.9 9.9 0 0 1 6.84-6.1c3.13-.87 6 .42 9-.11a19.68 19.68 0 0 1 19.24 6.89z",transform:"translate(-21.14 -37.01)",fill:"url(#aN)"}))),Qe||(Qe=sc.createElement("path",{d:"M839.41 581.08s15.88 41.55-20.94 58.3c0 0-66-7.33-86.24-2s-20.88-39.54-11.63-42.22 118.81-14.08 118.81-14.08z",transform:"translate(-21.14 -37.01)",fill:"url(#aO)",opacity:.1})),Ye||(Ye=sc.createElement("path",{d:"M838.39 579.07s15.88 41.55-20.94 58.3c0 0-66-7.33-86.25-2s-20.87-39.54-11.63-42.22 118.82-14.08 118.82-14.08z",transform:"translate(-21.14 -37.01)",fill:"url(#aP)"})),$e||($e=sc.createElement("path",{d:"m701.28 592 5.78 33.67s1.45-25.41-5.78-33.67z",transform:"translate(-21.14 -37.01)",fill:"url(#aQ)",opacity:.1})),et||(et=sc.createElement("path",{d:"M784 552.61s-1.31 15.07-1.93 19.76 4.3-18.37 1.93-19.76z",transform:"translate(-21.14 -37.01)",fill:"url(#aR)",opacity:.1})),tt||(tt=sc.createElement("path",{d:"M799.77 769s14 24.36 25.18 7.1",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#aS)"})),at||(at=sc.createElement("path",{d:"M862.93 787.42s34.07 17.41 21.65 24.3",transform:"translate(-21.14 -37.01)",opacity:.1,fill:"url(#aT)"})),lt||(lt=sc.createElement("path",{d:"M545.43 416.76s-.02-.06 0 0z",fill:"#9d9cb5"})),ct||(ct=sc.createElement("path",{d:"m529.72 469.79-4.58 3.14c0-2.2 8.05-10.94 8.05-10.94-2.09-1.2-9.46 4.65-9.46 4.65.87-3.83 7.39-8.46 7.39-8.46-.58-.3-5.6 2.28-5.6 2.28 1.65-3.52 8.42-8.65 8.42-8.65-.84-.54-5.8 1.64-6 1.74.26-.19 8.51-6.08 7.78-6.26s-7 1.14-7 1.14c-.49-2.24 9.79-12.84 9.79-12.84s1.28-1.84.82-1.36-5.23 2.18-5.23 2.18c.07-3.32 10-8.46 10-8.46l-4.52-.17 3-3.25c-.14.1-4.8 3.73-4.86 2.67s4.38-5.34 5.34-6 3.94-.13 3.94-.13-1.28-3.79-1.53-4.33c.71.59 10.84 4.94 10.84 4.94l.88.17c2.37.48 8.76 1.8 9.76 2.49s5.83 1.65 8.68 2.21l2 .38-7.2 45.92h-2c-1.16 0-2.32-.1-3.48-.2-1.81-.16-3.62-.42-5.42-.76-3.62-.69-8.37-1.6-12-2.32-2.27-.45-4.12-.84-5-1.05-3.63-.86-8.16 2-9.2 2s-7.27 5.28-7.27 5.28c-.01-1.03 3.66-6.01 3.66-6.01z",fill:"#e4e3f9"})),rt||(rt=sc.createElement("path",{d:"M529.68 469.7c.07 0 7.11-2.93 9.47-3.86s30.49 1.12 31.69 1.2v.19c-.29 0-29.27-2.15-31.6-1.22s-9.4 3.84-9.47 3.86z",opacity:.1})),nt||(nt=sc.createElement("path",{d:"M545.43 416.76s-.02-.06 0 0z",fill:"none"})),it||(it=sc.createElement("path",{d:"M537.62 427.13a58.51 58.51 0 0 1 6-4.3c1.61-.9 4.74-.26 7 .21a15.38 15.38 0 0 0 2 .34c1.41 0 9.06 2.21 9.38 2.31.08 0 8.37 2 9.42 1.93a31.23 31.23 0 0 1 4.94.91v.18a31.86 31.86 0 0 0-4.89-.91c-1.08.06-9.13-1.85-9.47-1.93-.09 0-8-2.3-9.34-2.31a13.43 13.43 0 0 1-2.06-.34c-2.14-.43-5.36-1.09-6.91-.23a58.6 58.6 0 0 0-6 4.28z",opacity:.1})),st||(st=sc.createElement("path",{d:"M539.28 427.65c.71-.8 9-1.09 9.77-.8s10.27 1.24 10.77 1.23c.16 0 12.52 2.43 16.3 3.18v.18c-5.51-1.09-16-3.16-16.27-3.17-.05 0-10-.9-10.84-1.25s-9 .14-9.56.75zm-5.27 8.71c2.56-4.43 17-5.73 17.1-5.74 1.53-.14 23.42 4.09 24.36 4.27v.18c-.23 0-22.8-4.4-24.31-4.27-4 .35-14.87 2.05-17 5.65zm-.97 5.12c4.06-4.65 17-4.32 17.09-4.32 1 0 22.92 3.34 23.86 3.48v.18c-.23 0-22.88-3.43-23.83-3.47-.13 0-12.94-.33-16.95 4.25z",opacity:.1})),ot||(ot=sc.createElement("path",{d:"M529.19 446.63c1.53-2.9 5.81-5 12.74-6.16a69.62 69.62 0 0 1 10.14-.93l22.35 2.6v.18l-22.34-2.59c-.18 0-19.35.15-22.77 7.12l-.17-.08s.03-.1.05-.14z",opacity:.1})),mt||(mt=sc.createElement("path",{d:"M528.64 448.37c2.14-2.38 10.52-4.28 14.53-4.76 3.77-.46 28.71 3.55 29.77 3.72v.18c-.25 0-26-4.17-29.72-3.72s-12.33 2.39-14.41 4.7z",opacity:.1})),dt||(dt=sc.createElement("path",{d:"m533.54 449.26 9.45-1.59a24.74 24.74 0 0 1 7.34-.14l10.53 1.37 11.54 2.22v.18l-11.53-2.22-10.48-1.36a24.4 24.4 0 0 0-7.29.13l-9.45 1.59zm-7.91 10.73c2-3.7 10.66-5.54 15.43-6.55 1-.21 1.81-.38 2.28-.52 2.69-.77 27.88 1.81 28.95 1.92v.19c-.26 0-26.22-2.69-28.88-1.93-.48.14-1.28.31-2.29.52-4.57 1-14.08 3-15.49 6.89l-.18-.07a4.43 4.43 0 0 1 .18-.45z",opacity:.1})),ft||(ft=sc.createElement("path",{d:"M530.86 458.23c.05 0 4.81-1.54 5.9-2.05s13.55-.82 14.08-.84l21.34 1.33v.19l-21.32-1.33c-.12 0-12.92.32-14 .82s-5.73 2-5.93 2.06z",opacity:.1})),pt||(pt=sc.createElement("path",{d:"M523.66 466.59c4.69-6.72 22.61-9.33 24.22-9.22s23.85 1.56 24.07 1.58v.18l-24.09-1.57c-1.59-.12-19.39 2.47-24 9.13z",opacity:.1})),ht||(ht=sc.createElement("path",{d:"M525.61 471.52c4.24-8.06 22.47-9.88 24.16-9.8l21.3 1v.18l-21.3-1c-1.77-.09-21.8 1.91-24.53 11h-.18a7.53 7.53 0 0 1 .55-1.38z",opacity:.1})),yt||(yt=sc.createElement("path",{d:"m568.38 472.85 7.21-46.28 2 .38-7.2 45.92c-.68 0-1.35 0-2.01-.02z",opacity:.1})),ut||(ut=sc.createElement("path",{d:"m568.86 473.86 7.52-48.24 9.22 3 6.74 2.19s4.72-1 6.22 2.5-3.29 13.69-1 15.89 21.9 4 21.9 4 28.4 7.7 31.4 8.15 19.23 10.12 19.23 10.12c.89 2.28-10 2.39-12.49 3.06s-25.77-3.79-27.29-5.15-23.22-7.33-23.22-7.33c-7-3.68-11.48-2.13-11.48-2.13a55.25 55.25 0 0 1-3.37 13.89 3.71 3.71 0 0 1-3.91 2.17l-10.47-.86z",fill:"#535461"})),Et||(Et=sc.createElement("path",{d:"m568.86 473.86 7.52-48.24 9.22 3c-1.44 4.65-10.32 34-7.73 46.5z",opacity:.1})),xt||(xt=sc.createElement("path",{d:"m529.72 469.79-4.58 3.14c0-2.2 8.05-10.94 8.05-10.94-2.08-1.2-9.46 4.65-9.46 4.65.87-3.83 7.39-8.46 7.39-8.46-.58-.31-5.6 2.28-5.6 2.28 1.65-3.53 8.42-8.65 8.42-8.65-.84-.54-5.8 1.64-6 1.74.26-.19 8.51-6.08 7.78-6.26s-7 1.14-7 1.14c-.49-2.25 9.79-12.85 9.79-12.85s1.28-1.83.82-1.35-5.23 2.17-5.23 2.17c.07-3.31 10-8.45 10-8.45l-4.51-.17 3-3.25c-.14.1-4.8 3.73-4.86 2.67s4.38-5.34 5.34-6 3.94-.13 3.94-.13-1.28-3.79-1.53-4.33c.71.59 10.84 4.94 10.84 4.94l.88.17c-.93.76-1.87 1.44-2.47 2a7.38 7.38 0 0 0-2.16 2.69 5.54 5.54 0 0 0 .67 4.48c.76 1.36 1.79 2.55 2.54 3.92a2.68 2.68 0 0 1 .41 1.93 3.3 3.3 0 0 1-1.29 1.51 25.19 25.19 0 0 0-8.13 11.44 3.2 3.2 0 0 0-.25 1.39 4.76 4.76 0 0 0 .81 1.74 6.39 6.39 0 0 1-.79 7.24c-.81.89-1.94 1.68-2 2.87a3.71 3.71 0 0 0 .58 1.92c.8 1.52 1.59 3.05 2.39 4.59-2.27-.46-4.12-.84-5-1.05-3.63-.86-8.16 2-9.19 2s-7.28 5.28-7.28 5.28c.01-1.03 3.68-6.01 3.68-6.01z",fill:"#a4a4a4"})),zt||(zt=sc.createElement("path",{d:"m683.05 740.68 4.34 17.66s97.27 32 128.8 2-3.47-88.35-3.47-88.35l-21.33-22.33-56.34-6.67h-20z",fill:"#5e52ad"})),vt||(vt=sc.createElement("path",{d:"m683.05 740.68 4.34 17.66s97.27 32 128.8 2-3.47-88.35-3.47-88.35l-21.33-22.33-56.34-6.67h-20z",opacity:.03})),Mt||(Mt=sc.createElement("path",{d:"m919.39 611.99-9.34 10.83-32.33 58.84-11 20.67s-8.31 10.52-7.49 14.92 3.16 37.08-24.84 39.74-88.67-64-88.67-64l2.47-1.7 54.2-37.3 19.47-21.29 5.2-5.69s25.34-34.66 24.67-40 25.33-37.33 40.33-36.33 26.34 1 31.67 20.33-4.34 40.98-4.34 40.98z",fill:"#5e52ad"})),gt||(gt=sc.createElement("path",{fill:"#784d55",d:"M725.47 386.93h102.75v77.75H725.47z"})),kt||(kt=sc.createElement("path",{opacity:.1,d:"M725.47 386.93h102.75v77.75H725.47z"})),bt||(bt=sc.createElement("path",{d:"M697.39 548.87c0 1.42-.13 3.37-.33 5.57-.77 8.55-2.67 20.91-2.67 20.91s-4 21.72-3 23.49-1 16.25-2.34 19.43-9.33 0-9.33 0l-26.39-70.86-1.47-3.91-.57-1.54.6-2.37 2.15-8.58s43.35 10.98 43.35 17.86zm120.66-70.08v11.2l-8 39.14-17.33 23.24-38.33 5-36.67-14.38s-24.33-39.27 4-61.4a54.2 54.2 0 0 0 16.23-20.65 67 67 0 0 0 5.61-26.53 61.53 61.53 0 0 0-.84-11.74s60-27.66 50.33 0a31.43 31.43 0 0 0-1.36 14.87 46.8 46.8 0 0 0 4.8 14.59c7.75 15.31 21.56 26.66 21.56 26.66z",fill:"#f8bdc5"})),wt||(wt=sc.createElement("path",{d:"M793.05 422.64a31.43 31.43 0 0 0-1.36 14.87 40.36 40.36 0 0 1-48.13-3.13 61.53 61.53 0 0 0-.84-11.74s60-27.65 50.33 0z",opacity:.1})),Ht||(Ht=sc.createElement("circle",{cx:769.72,cy:401.68,r:40.33,fill:"#f8bdc5"})),Ot||(Ot=sc.createElement("path",{d:"M818.05 478.79v11.2l-8 39.14-17.33 23.24-38.33 5-36.67-14.38s-24.33-39.27 4-61.4a54.2 54.2 0 0 0 16.23-20.65c-22.16 84.84 25.08 80.44 25.08 80.44 43.2 0 34.51-80.63 33.46-89.25 7.75 15.31 21.56 26.66 21.56 26.66z",opacity:.1})),Gt||(Gt=sc.createElement("path",{d:"M854.72 516.68c-1.67 5.67-5.67 26.33-5.67 26.33s-1.12.44-2.92 1.27c-6.9 3.17-23.77 12-25 22.91v.49c-1 14-13.33 43.67-19.66 57s3 27.67 3 27.67l-12.67 3s-17.67 2.33-32.67-1.34-13 6-22.33 2.67-40-5.67-45-8.67-9.33-29.66-6.67-33 11-73.66 11-73.66-33.66-31.34-33-51.67 25-21.33 25-21.33 9.36-3.28 17.29-6.69c1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06 1.57.2 2.52.34 2.52.34-.86 3-1.63 5.91-2.33 8.71-13.6 54.61 2.36 70.94 14.54 75.75a26.93 26.93 0 0 0 11.25 1.93c15.31 0 24.11-10.13 29-23.6 9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 8.95 30.33 7.28 36.02z",opacity:.1})),Tt||(Tt=sc.createElement("path",{d:"M854.72 514.68c-1.67 5.67-5.67 26.33-5.67 26.33s-1.12.44-2.92 1.27c-6.9 3.17-23.77 12-25 22.91v.49c-1 14-13.33 43.67-19.66 57s3 27.67 3 27.67l-12.67 3s-17.67 2.33-32.67-1.34-13 6-22.33 2.67-40-5.67-45-8.67-9.33-29.66-6.67-33 11-73.66 11-73.66-33.66-31.34-33-51.67 25-21.33 25-21.33 9.36-3.28 17.29-6.69c1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06 1.57.2 2.52.34 2.52.34-.86 3-1.63 5.91-2.33 8.71-13.6 54.61 2.36 70.94 14.54 75.75a26.93 26.93 0 0 0 11.25 1.93c15.31 0 24.11-10.13 29-23.6 9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 8.95 30.33 7.28 36.02z",fill:"#eb6475"})),Lt||(Lt=sc.createElement("path",{d:"M697.39 548.87v6l-.33-.42c-14.07-17.83-36.86-10-43.73-7-1.3.56-2 .94-2 .94s.39-2.29.57-4.85a27 27 0 0 0 0-3.91l2.15-8.58s43.34 10.94 43.34 17.82z",opacity:.1})),Ct||(Ct=sc.createElement("path",{d:"m673.39 485.68-8.69 11.31s-14.65 35.66-13.31 38.32-.09 11-.09 11 29.42-15.29 46.09 6.52v-11.15s1.66-4.67 2.33-6 0-11.67 0-11.67z",fill:"#eb6475"})),It||(It=sc.createElement("path",{d:"M689.05 618.35a5.33 5.33 0 0 1-.34 1.11c-4.25 9.66-36.09-4.45-36.09-4.45s-.27-1.33-.69-3.49c-1.68-8.69-5.68-30.9-3.54-35.17 2.66-5.34 2.91-22 2.91-22 8.92-16 4.42-48.34 4.42-48.34 4-7-2.33-13.33-2.33-13.33s-55.34-32.67-17.34-37 45.34 41.65 42.34 46.67 2.33 45.64 2.33 45.64l5.33 31.41s5.3 27.16 3 38.95zm160.29 157.21-9.89-.49-38.48-1.89-.05-1.23-.82-19.89 29.22-14.95.04-.02.37.27.75.53.81.57 16.69 11.91 1.36 25.19z",fill:"#f8bdc5"})),jt||(jt=sc.createElement("path",{opacity:.1,d:"m831.39 738.35-.1.11-30.37 33.49-.82-19.89 29.22-14.95.41.25 1.66.99zM688.71 619.46c-4.25 9.66-36.09-4.45-36.09-4.45s-.27-1.33-.69-3.49c4.25-1.78 9.65-2.15 16.79-.17 9.26 2.57 15.64 5.49 19.99 8.11z"})),Zt||(Zt=sc.createElement("path",{d:"M687.39 758.34s-18.67-9.35-19.67-14.35-6.33-20.67-8.67-24-16.66-26-20-35.67-13.33-37-6-47.33 11.67-30.33 35.67-23.67 28.67 15.67 28.67 15.67l2.63 5.67s58 53.94 59 55.63 32 25 32 25l38.34 23-32.31 35.7s-41-16-42.33-22.67-12.6-12.66-12.6-12.66l-15.4-6z",fill:"#5e52ad"})),Pt||(Pt=sc.createElement("path",{d:"M648.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",opacity:.1})),Ft||(Ft=sc.createElement("path",{d:"M646.39 680.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",opacity:.1})),St||(St=sc.createElement("path",{d:"M646.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",fill:"#5e52ad"})),Vt||(Vt=sc.createElement("path",{d:"M646.39 678.68s7 7 7 9.66 9.65 7.34 9.65 7.34 76.68 47.63 85.68 47.48l16 16.18 22.58-46.81-28.28-22.22-59-53s-11-7.33-17-8.33-36.66-15-39.33 12 2.7 37.7 2.7 37.7z",fill:"#5e52ad"})),At||(At=sc.createElement("path",{d:"M653.72 698.99s20.14 33.39 31.07 36.36-31.07-36.36-31.07-36.36z",opacity:.1})),qt||(qt=sc.createElement("path",{fill:"#f8bdc5",d:"m810.39 708.1-3.03 17.11-2.78 15.71-1.19 6.76-26.25-8.33 2.68-14.65.15-.81 1.75-9.54 28.67-6.25z"})),Dt||(Dt=sc.createElement("path",{d:"m804.58 740.92-1.19 6.76-26.25-8.33 2.72-14.65c3.84-4.93 13.94-1 13.94-1 14-1.67 9.29 14.67 9.29 14.67a5.4 5.4 0 0 1 1.49 2.55z",opacity:.1})),Nt||(Nt=sc.createElement("path",{d:"M807.39 796.35c-7-6.34-32.34-9.34-40.67-9.34s-5-2.66-5-2.66l-5.51-4c-3.77-2.73-2-9.19-.57-13 .69-1.78 1.32-3 1.32-3s2.09-15.67 4.18-20.34 17.29-11.72 17.29-11.72c-1.29-14 15.33-7.61 15.33-7.61 14-1.67 9.29 14.67 9.29 14.67 2.67 2 3.34 12.66 2.67 16.33s2.33 15.31 2.33 15.31 2.81 10.55 4.51 16.71c.33 1.18.61 2.21.83 3 1.33 4.65-6 5.65-6 5.65z",fill:"#ffc075"})),_t||(_t=sc.createElement("path",{d:"M807.39 796.35c-7-6.34-32.34-9.34-40.67-9.34s-5-2.66-5-2.66l-5.51-4c-3.77-2.73-2-9.19-.57-13l7.46 6.67s-2.13 1.67 0 1.67h8.76s28 5.93 40.72 12c.33 1.18.61 2.21.83 3 1.31 4.66-6.02 5.66-6.02 5.66z",opacity:.1})),Ut||(Ut=sc.createElement("circle",{cx:777.14,cy:738.43,r:1.34,opacity:.1})),Bt||(Bt=sc.createElement("circle",{cx:779.82,cy:749.02,r:1.34,opacity:.1})),Rt||(Rt=sc.createElement("circle",{cx:779.1,cy:745.09,r:1.34,opacity:.1})),Wt||(Wt=sc.createElement("circle",{cx:779.82,cy:754.31,r:1.34,opacity:.1})),Xt||(Xt=sc.createElement("circle",{cx:773.38,cy:759.78,r:1.34,opacity:.1})),Kt||(Kt=sc.createElement("path",{d:"m849.34 775.56-9.89-.49a3.46 3.46 0 0 1 0-1.89s7.25-6.94-4.75-20.22c0 0 .69-3.11 3.47-2.32 0 0-6.59-11.08-7.59-12.21a.89.89 0 0 1-.12-.54l.81.57 16.69 11.91z",opacity:.1})),Jt||(Jt=sc.createElement("path",{d:"M934.47 750.37a21.43 21.43 0 0 1-2.61 10.92 21.73 21.73 0 0 1-4.68 6.05h-.09a72.61 72.61 0 0 1-30.81 5.55c-13.63-.51-30.9-.47-36.72 2.63 0 0-20.13 5.62-18.13-2.38 0 0 7.25-6.94-4.75-20.22 0 0 .69-3.11 3.47-2.32 0 0-6.59-11.08-7.59-12.21-.55-.62.94-5 2.39-8.78.42-1.11.84-2.18 1.21-3.09.66-1.63 1.14-2.76 1.14-2.76.22.13 1.39.84 3.12 1.76 3.23 1.71 8.42 4.14 13.14 4.87 7.24 1.13 13.5 3.5 25 0s16.5-8.33 32.12-2.54 23.42 11.83 23.79 22.52z",fill:"#ffc075"})),Qt||(Qt=sc.createElement("path",{d:"M934.47 750.37a21.43 21.43 0 0 1-2.61 10.92c-2.8-11.78-6.38-19-18.43-28.11-13.25-10-33.75.88-33.75.88s-16.62.74-28.75.74a26.41 26.41 0 0 1-16-5.15 17.27 17.27 0 0 1-2.51-2.22l3.72-.87 4.26-1c3.23 1.71 8.42 4.14 13.14 4.87 7.24 1.13 13.5 3.5 25 0s16.5-8.33 32.12-2.54 23.44 11.79 23.81 22.48z",opacity:.1})),Yt||(Yt=sc.createElement("path",{d:"M863.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87l30.58-32s34 34.42 36 35.09 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-17.5-4.11-53.67-16.63z",opacity:.1})),$t||($t=sc.createElement("path",{d:"M866.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87 35.13-22.87 48.25 29.13l12-17.48s4.33-9.19 6.33-8.52 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-21.17-7.67-53.67-16.67z",opacity:.1})),ea||(ea=sc.createElement("path",{d:"m810.39 708.1-3 17.11c-10.33-7.15-21.64-3.87-27.39-1.32l1.75-9.54z",opacity:.1})),ta||(ta=sc.createElement("path",{d:"M865.05 575.99s-9 13.67-8.66 17.67-7.34 12-7.34 12-8.33 9-8.33 12.66-15.33 35.53-15.33 35.53-20.34 19.14-24.67 22.14-15 23.33-19.33 26-4.25 21.87-4.25 21.87 35.13-22.87 48.25 29.13l12-17.48s4.33-9.19 6.33-8.52 8-28 8-28 18.67-17.92 24-22.79 25.93-38.1 25.93-38.1 18.74-35.11 17.07-45.44-17-40.98-53.67-16.67z",fill:"#5e52ad"})),aa||(aa=sc.createElement("path",{d:"M710.05 609.34s49.44-18.68 77.28 6zm5.1 12.25s39.57 6.75 54.57 5.42-54.57-5.42-54.57-5.42zm-11.43-152.82s-3.11 20.57 4.28 25.57-4.28-25.57-4.28-25.57zm-20.67 8.57s10.36 16.67 11.35 25.34m16.99 187.63s37.33 28 34.33 41-2.22 0-2.22 0z",opacity:.1})),la||(la=sc.createElement("circle",{cx:893.5,cy:742.4,r:1.34,opacity:.1})),ca||(ca=sc.createElement("circle",{cx:898.85,cy:770.44,r:1.34,opacity:.1})),ra||(ra=sc.createElement("path",{d:"M880.06 624.5s-24.2 23.49-24.12 34.84-1.34 26-1.34 26l8.1-30zm2.08-23.16s-42.56 34.34-39 38 39-38 39-38zm-65.95 102.65s20.47 9.52 19.33 13.26-19.33-13.26-19.33-13.26z",opacity:.1})),na||(na=sc.createElement("circle",{cx:862.71,cy:749.02,r:1.34,opacity:.1})),ia||(ia=sc.createElement("circle",{cx:844.49,cy:746.43,r:1.34,opacity:.1})),sa||(sa=sc.createElement("circle",{cx:878.72,cy:748.49,r:1.34,opacity:.1})),oa||(oa=sc.createElement("circle",{cx:883.48,cy:769.1,r:1.34,opacity:.1})),ma||(ma=sc.createElement("circle",{cx:886.72,cy:745.81,r:1.34,opacity:.1})),da||(da=sc.createElement("circle",{cx:890.97,cy:769.1,r:1.34,opacity:.1})),fa||(fa=sc.createElement("circle",{cx:870.35,cy:749.83,r:1.34,opacity:.1})),pa||(pa=sc.createElement("circle",{cx:873.85,cy:770.44,r:1.34,opacity:.1})),ha||(ha=sc.createElement("circle",{cx:854.6,cy:748.49,r:1.34,opacity:.1})),ya||(ya=sc.createElement("path",{d:"M821.86 632.7c-.33 1.83-.46 3-.46 3s-18.67 29.67-31.67 33.67c0 0-29.47 21.72-41.53 22l54.2-37.3z",opacity:.1})),ua||(ua=sc.createElement("path",{d:"m843.72 552.86-2.07 10.13s-.12.68-.35 1.88c-1.56 8.23-8 41.08-13.25 47.78-6 7.67-7.66 22-7.66 22s-18.67 29.67-31.67 33.67c0 0-50.67 37.33-46.33 14.66s33.66-31.66 33.66-31.66 4-7.67 4-9.34 8.67-12 8.67-12 7.67-14 8-17 13.67-58 13.67-58l7.89-.51z",fill:"#f8bdc5"})),Ea||(Ea=sc.createElement("path",{d:"m843.72 552.86-2.07 10.13s-.12.68-.35 1.88c-10.17 1.85-27 4.16-29.36-.22-1.07-2 1.84-5.83 6.34-10.18z",opacity:.1})),xa||(xa=sc.createElement("path",{d:"M849.05 561.35s-16.87 3.84-28 3.84h-1.61c-3.79-.15-6.67-.85-7.55-2.48-1.09-2 1.93-6 6.56-10.39 6.13-5.88 15.08-12.64 21-16.93 3.65-2.64 6.15-4.35 6.15-4.35l3.4 10s-.37 1.78-.77 4.3c-.81 5.45-1.77 14.41.82 16.01z",fill:"#eb6475"})),za||(za=sc.createElement("path",{d:"M745.22 516.34q4.93 12 10.14 23.8a14 14 0 0 1-3.58 1.28c-6.14 1.32-13-1.24-19-3.83-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.22-14.19-3.38-21.32-1-6.16-3.49-12.06-4-18.28-.53-7.06 1.55-14 2.74-21 1.54-.66 3-1.33 4.38-2 6.58-3.16 21.4-1.78 27.33-1.06a25.16 25.16 0 0 0-.34 4.34 24.8 24.8 0 0 0 .53 4.71c1.48 7.58 5.67 14.77 5.69 22.55 0 4.83-1.61 9.57-1.48 14.4s1.98 9.36 3.8 13.77zm109.5-1.66c-1.67 5.67-5.67 26.33-5.67 26.33s-.37 1.78-.77 4.3c-.74-1-1.44-2-2.15-3a66.3 66.3 0 0 0-1.42-2 19.08 19.08 0 0 0-5.21-4.93 9.12 9.12 0 0 0-4.92-1.39c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59a22.6 22.6 0 0 1-3.93-12.51c9.75-26.67 4.33-66.4 4.33-66.4s31 12.66 51 25.33 9 30.29 7.33 35.98z",opacity:.1})),va||(va=sc.createElement("path",{d:"M753.39 375.99c-1.24 3.83 0 8-.36 12-.88 9.44-10.34 16-12.49 25.26-1.65 7.07 1.26 14.41.93 21.66-.37 8.19-4.86 15.84-4.76 24 .12 9.36 6.19 17.89 6.22 27.25 0 4.84-1.61 9.58-1.48 14.41s1.95 9.31 3.77 13.72q4.93 12 10.14 23.8c-7 3.62-15.38.54-22.59-2.55-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.21-14.19-3.38-21.32-1-6.16-3.49-12.06-4-18.28-.54-7.24 1.66-14.36 2.83-21.52a75.92 75.92 0 0 0-2.25-34.07c-1.94-6.4-4.74-12.56-6-19.14s-.7-13.9 3.46-19.14c4.51-5.69 12.18-7.74 17.87-12.27 6-4.8 9.48-12.16 11.67-19.56 1.86-6.3 3.52-13.6 9.28-16.75a15 15 0 0 1 7.59-1.59c8.85.21 17 5.23 25.82 5.78 5 .32 10-.84 15-1.43 12.41-1.45 25.43.77 36 7.45s18.34 18.05 19.46 30.49c.67 7.46-1 15-.28 22.44a36 36 0 0 0 9.85 21.4c3.48 3.62 7.77 6.54 10.45 10.79a28.64 28.64 0 0 1 3.7 11.46c4.32 30.48-12.6 60.72-9.78 91.38.45 4.91 2 10.51 6.48 12.49-2.24 3.47-7.67 3.3-11.07 1s-5.46-6.15-7.94-9.46-6-6.43-10.13-6.31c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59-5-6.89-4.35-16.28-3-24.69s3.06-17.38-.36-25.18c-2.57-5.84-8-11.08-7.06-17.38.7-4.83 4.89-8.23 8-12 5.87-7.22 8.05-16.88 7.85-26.18s-2.56-18.41-4.92-27.41c-1.91-7.31-3.94-14.86-8.73-20.7a19.07 19.07 0 0 0-18.87-6.9c-2.94.53-5.71-.75-8.77.11a9.75 9.75 0 0 0-6.73 6.01z",fill:"#784d55"})),Ma||(Ma=sc.createElement("path",{d:"M842.96 392.44c.18-4.62.68-9.25.47-13.86-.18 4.62-.69 9.25-.47 13.86zm-102.81 23.24a18.46 18.46 0 0 1 .39-2.42c2.15-9.24 11.61-15.82 12.49-25.26a30.11 30.11 0 0 0 0-4.65c-1.09 9.26-10.32 15.79-12.44 24.91a24 24 0 0 0-.44 7.42zm-33.8 26.79a75.77 75.77 0 0 0-3.2-24.45c-1.95-6.4-4.75-12.56-6-19.14a33.67 33.67 0 0 1-.47-3.51 31.5 31.5 0 0 0 .47 8.51c1.24 6.58 4 12.74 6 19.14a76 76 0 0 1 3.2 19.45zm35.24 55.01c.37-3.75 1.35-7.48 1.34-11.27a21 21 0 0 0-.15-2.38c-.38 3.93-1.44 7.83-1.33 11.79.02.62.07 1.25.14 1.86zm-4.73-41.34c.75-7.15 4.29-14 4.62-21.22a30.93 30.93 0 0 0-.08-3.85c-.71 7.76-4.77 15.08-4.68 22.89 0 .73.06 1.46.14 2.18zm123.57 88.01a9.67 9.67 0 0 1-7.78-1.41c-3.41-2.35-5.46-6.15-7.94-9.46s-6-6.43-10.13-6.31c-2.8.08-5.31 1.64-7.82 2.88-10.1 5-24.14 4.54-30.77-4.59a22.21 22.21 0 0 1-3.89-11.94c-.34 6.07.38 12.12 3.89 16.94 6.63 9.13 20.67 9.61 30.77 4.59 2.51-1.24 5-2.8 7.82-2.88 4.14-.12 7.64 3 10.13 6.31s4.53 7.11 7.94 9.46 8.83 2.52 11.08-1a8.33 8.33 0 0 1-3.3-2.59zm-3.46-19.55c.72-24.69 11.47-49.16 10.71-73.75-.7 24.57-11.44 49.03-10.71 73.75zm-62.44-35.92a28.4 28.4 0 0 0-1.92-13.29c-2-4.57-5.75-8.78-6.84-13.42-.09.34-.16.68-.22 1-.91 6.3 4.49 11.54 7.06 17.38a24.8 24.8 0 0 1 1.92 8.33zm-61.76 41.91c-9-3.86-18.77-8.45-22.83-17.36-3-6.58-2.21-14.19-3.38-21.32-1-6.13-3.45-12-3.94-18.17a33.25 33.25 0 0 0 0 4.89c.47 6.22 3 12.12 4 18.28 1.17 7.13.39 14.74 3.38 21.32 4.06 8.91 13.83 13.5 22.83 17.36 7.22 3.09 15.63 6.17 22.59 2.55-.61-1.41-1.21-2.82-1.83-4.23-6.63 2.3-14.23-.49-20.82-3.32zm54.95-153.88c4.79 5.84 6.82 13.39 8.73 20.7 2.26 8.61 4.5 17.32 4.86 26.21.07-1.27.09-2.54.06-3.8-.19-9.31-2.56-18.41-4.92-27.41-1.91-7.31-3.94-14.86-8.73-20.7a19.06 19.06 0 0 0-18.87-6.9c-2.94.53-5.71-.75-8.77.12a9.72 9.72 0 0 0-6.69 6.06 18.82 18.82 0 0 0-.44 7 12.07 12.07 0 0 1 .44-2 9.72 9.72 0 0 1 6.69-6.06c3.06-.87 5.83.41 8.77-.12a19.06 19.06 0 0 1 18.87 6.9zm29.47 168.63s15.53 41.34-20.47 58c0 0-64.48-7.29-84.33-2s-20.41-39.33-11.37-42 116.17-14 116.17-14z",opacity:.1})),ga||(ga=sc.createElement("path",{d:"M816.19 543.34s15.53 41.34-20.47 58c0 0-64.48-7.29-84.33-2s-20.41-39.33-11.37-42 116.17-14 116.17-14z",fill:"#eb6475"})),ka||(ka=sc.createElement("path",{d:"m682.13 556.22 5.65 33.5s1.42-25.29-5.65-33.5zm80.9-39.23s-1.29 15-1.89 19.67 4.19-18.32 1.89-19.67z",opacity:.1})),ba||(ba=sc.createElement("path",{d:"M778.43 732.29s13.7 24.23 24.62 7.06m37.14 11.29s33.31 17.35 21.17 24.18",fill:"none",stroke:"#000",strokeMiterlimit:10,opacity:.1})),wa||(wa=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-10.25 3.64-32.64 4.06-32.64 4.06l-42.23-1-20.9-3a87.51 87.51 0 0 1-9.92-3.47c-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.6 6.76 53.62 13.69z",fill:"#534d72"})),Ha||(Ha=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-10.25 3.64-32.64 4.06-32.64 4.06l-42.23-1-20.9-3a87.51 87.51 0 0 1-9.92-3.47c-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.6 6.76 53.62 13.69z",opacity:.1})),Oa||(Oa=sc.createElement("path",{d:"m485.96 633.14-1.25 26.38-.56 11.82-1.85 39-.5 10.7-1.36 28.57c-32.47 16.11-102.29 0-102.29 0l-1.08-28.57-.53-14-1.35-35.73-.55-14.58-.94-25.11c39.26 12.98 112.26 1.52 112.26 1.52z",fill:"#534d72"})),Ga||(Ga=sc.createElement("path",{d:"m484.71 659.52-.56 11.82h-109l-.55-14.58c14.07 4.4 72.97 21.01 110.11 2.76zm-2.41 50.84-.5 10.7H377.07l-.53-14c16.45 4.98 70.06 19.05 105.76 3.3z",opacity:.1})),Ta||(Ta=sc.createElement("ellipse",{cx:429.83,cy:667.8,rx:26.28,ry:11.12,opacity:.1})),La||(La=sc.createElement("ellipse",{cx:429.83,cy:667.16,rx:26.28,ry:11.12,fill:"#a4a4a4"})),Ca||(Ca=sc.createElement("ellipse",{cx:432.69,cy:633.25,rx:39.47,ry:4.99,opacity:.1})),Ia||(Ia=sc.createElement("ellipse",{cx:432.91,cy:633.67,rx:39.47,ry:4.99,fill:"#a4a4a4"})),ja||(ja=sc.createElement("path",{d:"M486.6 630.42c-.41 1.43-2.26 2.6-4.93 3.55-6.93-18.28-51.81-13.35-51.81-13.35-32.35-2-49.22 7-53.85 10-2.49-1.09-4.58-2.31-5-3.42 0 0 29.71-12.84 62-10.4s55.57 6.68 53.59 13.62z",opacity:.1})),Za||(Za=sc.createElement("path",{d:"M486.6 629.99c-.41 1.44-2.26 2.61-4.93 3.55-6.93-18.28-51.81-13.35-51.81-13.35-32.35-2-49.22 7-53.85 10-2.49-1.1-4.58-2.31-5-3.43 0 0 29.71-12.84 62-10.4s55.57 6.7 53.59 13.63z",fill:"#534d72"})),Pa||(Pa=sc.createElement("path",{d:"M377.95 743.81s-6.91 3.19-.43 8.49 49.44 8.69 60.27 6.69c0 0 39.37-2.12 44.51-7.75 0 0 .12-3.8-1.77-3.92 0 0-15.21 6.73-48.79 6.15s-55.48-2.88-53.79-9.66z",opacity:.1})),Fa||(Fa=sc.createElement("path",{d:"M377.95 744.23s-6.91 3.19-.43 8.5 49.44 8.7 60.27 6.68c0 0 39.37-2.12 44.51-7.74 0 0 .12-3.81-1.77-3.92 0 0-15.21 6.72-48.79 6.14s-55.48-2.9-53.79-9.66zm-1.26-33.91c-4.16-1.17-20.29-7.58-12.21-35 0 0 8.7-29.4 14-36.4 0 0-.92-1.64-2.22 0s-5.2 11.36-5.2 11.36-16.88 31.93-8.39 50.29c2.93 6.34 8.21 10 13.87 12",fill:"#534d72"})),Sa||(Sa=sc.createElement("path",{d:"M370.94 627.2s-.53 4.68 2.81 6.37 97.57 13.79 112.21 3c0 0 2.12-6.58 0-6.37s-84.46 14.4-115.02-3z",opacity:.1})),Va||(Va=sc.createElement("path",{d:"M370.94 626.77s-.53 4.68 2.81 6.38 97.57 13.78 112.21 3c0 0 2.12-6.58 0-6.37s-84.46 14.4-115.02-3.01z",fill:"#534d72"})),Aa||(Aa=sc.createElement("circle",{cx:378.42,cy:639.66,r:4.83,opacity:.1})),qa||(qa=sc.createElement("circle",{cx:377.74,cy:638.92,r:4.83,fill:"#534d72"})),Da||(Da=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 6.2 2.2 19.74 2.45 19.74 2.45l25.55-.57 12.64-1.8a53.57 53.57 0 0 0 6-2.1c1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.04-32.5 8.24z",fill:"#534d72"})),Na||(Na=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 6.2 2.2 19.74 2.45 19.74 2.45l25.55-.57 12.64-1.8a53.57 53.57 0 0 0 6-2.1c1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.04-32.5 8.24z",opacity:.1})),_a||(_a=sc.createElement("path",{d:"m253.28 631.31.75 15.95.34 7.15 1.12 23.6.31 6.48.81 17.28c19.64 9.74 61.88 0 61.88 0l.65-17.28.32-8.46.82-21.61.33-8.81.57-15.19c-23.75 7.82-67.9.89-67.9.89z",fill:"#534d72"})),Ua||(Ua=sc.createElement("path",{d:"m254.03 647.26.34 7.15h65.91l.33-8.81c-8.49 2.66-44.11 12.71-66.58 1.66zm1.46 30.73.31 6.48h63.34l.32-8.46c-9.95 2.98-42.37 11.54-63.97 1.98z",opacity:.1})),Ba||(Ba=sc.createElement("ellipse",{cx:287.23,cy:652.27,rx:15.9,ry:6.72,opacity:.1})),Ra||(Ra=sc.createElement("ellipse",{cx:287.23,cy:651.89,rx:15.9,ry:6.72,fill:"#a4a4a4"})),Wa||(Wa=sc.createElement("ellipse",{cx:287.23,cy:651.89,rx:15.9,ry:6.72,fill:"#fff",opacity:.5})),Xa||(Xa=sc.createElement("ellipse",{cx:285.5,cy:631.37,rx:23.88,ry:3.02,opacity:.1})),Ka||(Ka=sc.createElement("ellipse",{cx:285.37,cy:631.63,rx:23.88,ry:3.02,fill:"#a4a4a4"})),Ja||(Ja=sc.createElement("ellipse",{cx:285.5,cy:631.66,rx:23.88,ry:3.02,fill:"#fff",opacity:.5})),Qa||(Qa=sc.createElement("path",{d:"M252.86 629.66c.25.87 1.37 1.58 3 2.15 4.2-11.06 31.36-8.07 31.36-8.07 19.57-1.19 29.77 4.25 32.57 6 1.5-.67 2.77-1.4 3.05-2.08 0 0-18-7.76-37.48-6.29s-33.67 4.1-32.5 8.29z",opacity:.1})),Ya||(Ya=sc.createElement("path",{d:"M252.86 629.41c.25.86 1.37 1.57 3 2.14 4.2-11.06 31.36-8.07 31.36-8.07 19.57-1.18 29.77 4.25 32.57 6 1.5-.66 2.77-1.4 3.05-2.07 0 0-18-7.77-37.48-6.29s-33.67 4.09-32.5 8.29z",fill:"#534d72"})),$a||($a=sc.createElement("path",{d:"M318.61 698.25s4.18 1.93.26 5.14-29.91 5.26-36.45 4c0 0-23.82-1.28-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.2 4.07 29.51 3.72s33.56-1.7 32.54-5.8z",opacity:.1})),el||(el=sc.createElement("path",{d:"M318.61 698.5s4.18 1.93.26 5.14-29.91 5.27-36.45 4.05c0 0-23.82-1.29-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.2 4.07 29.51 3.72s33.56-1.74 32.54-5.85zm.76-20.51c2.52-.71 12.27-4.58 7.39-21.17 0 0-5.27-17.78-8.47-22 0 0 .56-1 1.34 0s3.15 6.86 3.15 6.86 10.2 19.31 5.08 30.42a14.06 14.06 0 0 1-8.39 7.26",fill:"#534d72"})),tl||(tl=sc.createElement("path",{d:"M322.86 627.71s.32 2.84-1.7 3.86-59 8.34-67.87 1.79c0 0-1.29-4 0-3.85s51.08 8.73 69.57-1.8z",opacity:.1})),al||(al=sc.createElement("path",{d:"M322.86 627.46s.32 2.83-1.7 3.85-59 8.34-67.87 1.8c0 0-1.29-4 0-3.85s51.08 8.73 69.57-1.8z",fill:"#534d72"})),ll||(ll=sc.createElement("circle",{cx:318.32,cy:635.25,r:2.92,opacity:.1})),cl||(cl=sc.createElement("circle",{cx:318.74,cy:634.81,r:2.92,fill:"#534d72"})),rl||(rl=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 6.2 2.19 19.74 2.45 19.74 2.45l25.54-.58 12.64-1.8a52.83 52.83 0 0 0 6-2.1c1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.08-32.44 8.24z",fill:"#534d72"})),nl||(nl=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 6.2 2.19 19.74 2.45 19.74 2.45l25.54-.58 12.64-1.8a52.83 52.83 0 0 0 6-2.1c1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.08-32.44 8.24z",opacity:.1})),il||(il=sc.createElement("path",{d:"m983.72 635.05.76 16 .34 7.15 1.11 23.6.31 6.47.82 17.28c19.64 9.75 61.87 0 61.87 0l.65-17.28.32-8.46.82-21.61.33-8.82.58-15.19c-23.77 7.8-67.91.86-67.91.86z",fill:"#534d72"})),sl||(sl=sc.createElement("path",{d:"m984.48 650.99.34 7.15h65.9l.33-8.82c-8.48 2.67-44.11 12.73-66.57 1.67zm1.45 30.77.31 6.47h63.34l.32-8.46c-9.94 3.01-42.37 11.52-63.97 1.99z",opacity:.1})),ol||(ol=sc.createElement("ellipse",{cx:1017.67,cy:656.02,rx:15.9,ry:6.72,opacity:.1})),ml||(ml=sc.createElement("ellipse",{cx:1017.67,cy:655.63,rx:15.9,ry:6.72,fill:"#a4a4a4"})),dl||(dl=sc.createElement("ellipse",{cx:1017.67,cy:655.63,rx:15.9,ry:6.72,opacity:.2})),fl||(fl=sc.createElement("ellipse",{cx:1015.94,cy:635.12,rx:23.88,ry:3.02,opacity:.1})),pl||(pl=sc.createElement("ellipse",{cx:1015.81,cy:635.37,rx:23.88,ry:3.02,fill:"#a4a4a4"})),hl||(hl=sc.createElement("ellipse",{cx:1016.84,cy:635.12,rx:23.88,ry:3.02,opacity:.2})),yl||(yl=sc.createElement("path",{d:"M983.33 633.41c.25.86 1.37 1.57 3 2.14 4.19-11.06 31.35-8.07 31.35-8.07 19.57-1.18 29.77 4.25 32.57 6 1.51-.66 2.77-1.4 3-2.07 0 0-18-7.77-37.48-6.29s-33.63 4.09-32.44 8.29z",opacity:.1})),ul||(ul=sc.createElement("path",{d:"M983.33 633.15c.25.87 1.37 1.57 3 2.15 4.19-11.06 31.35-8.08 31.35-8.08 19.57-1.18 29.77 4.25 32.57 6 1.51-.66 2.77-1.39 3-2.07 0 0-18-7.76-37.48-6.29s-33.63 4.13-32.44 8.29z",fill:"#534d72"})),El||(El=sc.createElement("path",{d:"M1007.29 629.99s-.04 0 0 0z",fill:"#9d9cb5"})),xl||(xl=sc.createElement("path",{d:"m1027.57 646.13.55 2.54c-1-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7a11.67 11.67 0 0 0 0 2.84c-1.25-1.34-2.28-5.18-2.28-5.18-.38.27-.31 2.81-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.57-.88-.44-.59a18.22 18.22 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.86 1.93-.9-1.86c0 .08.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.87-.1-2.15-.09c.38-.21 4-3.84 4-3.84s.08-.14.23-.36a28.11 28.11 0 0 1 2.79-3.79 23.22 23.22 0 0 0 2.48-3.39c.31-.47.51-.8.51-.8l18.77 11.17-.36.86c-.22.5-.45 1-.7 1.48-.39.76-.82 1.5-1.28 2.22-.93 1.45-2.16 3.35-3.12 4.82-.59.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.69 17.69 0 0 1-1.91-2.66z",fill:"#e4e3f9"})),zl||(zl=sc.createElement("path",{d:"M1027.52 646.13v-4.79c0-1.19 5.84-13.05 6.09-13.55h.08c-.07.13-6.07 12.34-6.08 13.52s0 4.75 0 4.79z",opacity:.1})),vl||(vl=sc.createElement("path",{d:"M1007.29 629.99s-.04 0 0 0z",fill:"none"})),Ml||(Ml=sc.createElement("path",{d:"M1010.42 635.21a27.07 27.07 0 0 1-.82-3.35c-.1-.86.73-2.11 1.33-3a6.16 6.16 0 0 0 .5-.83 44.25 44.25 0 0 1 2.65-3.67s2.33-3.28 2.49-3.75a15.58 15.58 0 0 1 1.26-2h.07a14.59 14.59 0 0 0-1.25 2c-.16.48-2.4 3.64-2.5 3.78s-2.39 3.05-2.64 3.65a5.17 5.17 0 0 1-.51.83c-.56.85-1.41 2.14-1.31 3a29.7 29.7 0 0 0 .81 3.33z",opacity:.1})),gl||(gl=sc.createElement("path",{d:"M1010.94 634.58c-.22-.45 1.11-4.11 1.37-4.38s2.34-4.25 2.42-4.46 3.25-5 4.24-6.53h.07c-1.44 2.2-4.17 6.39-4.23 6.51s-2.14 4.16-2.44 4.49a14.76 14.76 0 0 0-1.35 4.28zm2.86 3.82c-1.48-1.89.48-8.37.5-8.44.21-.68 5.89-9.45 6.13-9.83l.07.05c-.05.09-5.91 9.13-6.12 9.81-.55 1.8-1.72 6.82-.51 8.35zm2.06 1.32c-1.31-2.58 1.1-8.13 1.12-8.18.19-.42 5.48-9.37 5.7-9.75h.08c-.06.09-5.51 9.33-5.7 9.74 0 .06-2.41 5.56-1.12 8.11z",opacity:.1})),kl||(kl=sc.createElement("path",{d:"M1017.41 642.29c-1-1.17-1.14-3.39-.44-6.61a32.55 32.55 0 0 1 1.38-4.57l5-9.25h.07l-5 9.25c0 .08-3.33 8.43-.9 11.14l-.07.06z",opacity:.1})),bl||(bl=sc.createElement("path",{d:"M1018.07 642.84c-.66-1.35 0-5.32.48-7.15s6.58-11.85 6.84-12.28l.08.05c-.07.1-6.37 10.55-6.83 12.25s-1.13 5.78-.49 7.09z",opacity:.1})),wl||(wl=sc.createElement("path",{d:"m1019.32 640.87 1-4.39a11.45 11.45 0 0 1 1.22-3.21l2.44-4.32 3-4.62h.07l-3 4.62-2.43 4.31a11.76 11.76 0 0 0-1.22 3.19l-1 4.39zm3.27 5.31c-1.27-1.49-.54-5.6-.14-7.85.08-.47.15-.85.17-1.08.14-1.3 5.68-11.79 5.92-12.24h.07c0 .11-5.76 10.92-5.9 12.21 0 .23-.09.61-.18 1.09-.38 2.15-1.17 6.63.28 7.93l-.06.07a1.29 1.29 0 0 1-.16-.13z",opacity:.1})),Hl||(Hl=sc.createElement("path",{d:"M1022.75 643.59s.17-2.36.15-2.92a64.54 64.54 0 0 1 2.1-6.26l4.32-9h.08l-4.32 9s-2.13 5.67-2.1 6.22-.13 2.84-.14 2.94z",opacity:.1})),Ol||(Ol=sc.createElement("path",{d:"M1025.11 648.2c-2.09-3.22-.08-11.46.25-12.14s4.86-10.09 4.91-10.18h.07c0 .09-4.57 9.51-4.9 10.18s-2.33 8.86-.26 12z",opacity:.1})),Gl||(Gl=sc.createElement("path",{d:"M1027.6 648.22c-2.76-3.26-.35-11.5 0-12.22l4.17-9.07h.08l-4.17 9.08c-.35.75-3 9.81.49 12.59v.07a3.25 3.25 0 0 1-.57-.45z",opacity:.1})),Tl||(Tl=sc.createElement("path",{d:"m1035.68 629.87-18.82-11.25c.31-.47.51-.8.51-.8l18.67 11.17z",opacity:.1})),Ll||(Ll=sc.createElement("path",{d:"m1036.19 629.86-19.63-11.73 2.92-3.48 2.13-2.54s.39-2.23 2.18-2.27 5.37 3.84 6.73 3.21 5.58-8.81 5.58-8.81 8.34-11 9.06-12.22 7.77-6.58 7.77-6.58c1.15 0-.73 4.78-.87 6s-6.16 10.53-7 11-7.26 8.8-7.26 8.8c-2.82 2.39-2.94 4.61-2.94 4.61a26.26 26.26 0 0 1 5.45 3.91 1.74 1.74 0 0 1 .25 2.07l-2.22 4.43z",fill:"#535461"})),Cl||(Cl=sc.createElement("path",{d:"m1036.19 629.86-19.63-11.73 2.92-3.48c1.76 1.44 13 10.46 18.84 11.52z",opacity:.1})),Il||(Il=sc.createElement("path",{d:"m1027.57 646.13.55 2.54c-1-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7-.24.2 0 2.84 0 2.84-1.25-1.34-2.28-5.18-2.28-5.18-.39.27-.31 2.8-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.57-.88-.44-.59a18.22 18.22 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.86 1.93-.9-1.86c0 .07.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.87-.1-2.15-.09c.38-.21 4-3.84 4-3.84l.23-.36c.17.54.3 1.07.43 1.43a3.4 3.4 0 0 0 .79 1.4 2.55 2.55 0 0 0 2.06.5c.73-.09 1.43-.33 2.15-.41a1.19 1.19 0 0 1 .91.16 1.52 1.52 0 0 1 .43.82 11.8 11.8 0 0 0 3.54 5.54 1.47 1.47 0 0 0 .57.35 2.24 2.24 0 0 0 .89 0 3 3 0 0 1 3 1.61c.24.5.39 1.13.89 1.38a1.86 1.86 0 0 0 .94.08l2.41-.23c-.59.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.69 17.69 0 0 1-1.83-2.72z",fill:"#a4a4a4"})),jl||(jl=sc.createElement("path",{d:"m1027.67 646.13.56 2.54c-.95-.39-3.33-5.42-3.33-5.42-.89.7.36 4.93.36 4.93-1.52-1.05-2.38-4.7-2.38-4.7-.24.2 0 2.84 0 2.84-1.25-1.34-2.28-5.18-2.28-5.18-.39.27-.31 2.8-.31 2.93 0-.15-1.14-4.77-1.35-4.48a25.82 25.82 0 0 0-.73 3.23c-1.06-.18-3.86-6.51-3.86-6.51s-.58-.88-.45-.59a18.37 18.37 0 0 1 0 2.65c-1.43-.61-1.92-5.82-1.92-5.82l-.87 1.93-.89-1.86c0 .07.78 2.74.31 2.58s-1.55-2.84-1.66-3.37.64-1.74.64-1.74-1.88-.1-2.15-.09c.37-.21 4-3.84 4-3.84l.23-.36c.17.54.3 1.07.43 1.43a3.4 3.4 0 0 0 .79 1.4 2.55 2.55 0 0 0 2.06.5c.73-.09 1.42-.33 2.15-.41a1.2 1.2 0 0 1 .91.16 1.52 1.52 0 0 1 .43.82 11.8 11.8 0 0 0 3.54 5.54 1.51 1.51 0 0 0 .56.35 2.29 2.29 0 0 0 .9 0 3 3 0 0 1 3 1.61c.24.5.39 1.13.89 1.38a1.86 1.86 0 0 0 .94.08l2.41-.23c-.6.9-1.09 1.64-1.34 2-1 1.42-.57 3.89-.76 4.34s1 4.08 1 4.08a17.16 17.16 0 0 1-1.83-2.72z",opacity:.2})),Zl||(Zl=sc.createElement("path",{d:"M1049.05 701.99s4.18 1.93.26 5.14-29.9 5.26-36.45 4c0 0-23.82-1.28-26.93-4.68 0 0-.07-2.3 1.07-2.37 0 0 9.21 4.06 29.52 3.71s33.56-1.7 32.53-5.8z",opacity:.1})),Pl||(Pl=sc.createElement("path",{fill:"#534d72",d:"M1002.97 637.31h32.5v11.39h-32.5zm46.08 64.94s4.18 1.93.26 5.14-29.9 5.26-36.45 4c0 0-23.82-1.28-26.93-4.69 0 0-.07-2.3 1.07-2.37 0 0 9.21 4.07 29.52 3.72s33.56-1.7 32.53-5.8zm.81-20.52c2.52-.71 12.28-4.58 7.39-21.17 0 0-5.26-17.78-8.47-22 0 0 .56-1 1.35 0s3.14 6.87 3.14 6.87 10.21 19.32 5.07 30.42a14 14 0 0 1-8.39 7.26"})),Fl||(Fl=sc.createElement("path",{d:"M1053.29 631.46s.32 2.83-1.7 3.85-59 8.34-67.87 1.8c0 0-1.28-4 0-3.86s51.14 8.74 69.57-1.79z",opacity:.1})),Sl||(Sl=sc.createElement("path",{d:"M1053.29 631.2s.32 2.83-1.7 3.86-59 8.34-67.87 1.79c0 0-1.28-4 0-3.85s51.14 8.73 69.57-1.8z",fill:"#534d72"})),Vl||(Vl=sc.createElement("circle",{cx:1048.77,cy:639,r:2.92,opacity:.1})),Al||(Al=sc.createElement("circle",{cx:1049.18,cy:638.55,r:2.92,fill:"#534d72"})),ql||(ql=sc.createElement("ellipse",{cx:116.42,cy:773.8,rx:26.93,ry:4.55,fill:"#a4a4a4",opacity:.1})),Dl||(Dl=sc.createElement("path",{d:"M1076.36 814.87a11.66 11.66 0 0 0 3.83-5.78c.5-2.3-.48-5.06-2.67-5.9-2.46-.94-5.09.77-7.09 2.49s-4.27 3.69-6.88 3.32a10.47 10.47 0 0 0 3.24-9.81 4.12 4.12 0 0 0-.9-2c-1.37-1.46-3.84-.83-5.48.32-5.2 3.65-6.65 10.72-6.68 17.07-.52-2.29-.08-4.68-.09-7s-.66-5-2.64-6.22a8 8 0 0 0-4-1c-2.34-.09-4.94.15-6.54 1.86-2 2.12-1.47 5.69.26 8s4.35 3.81 6.76 5.42a15 15 0 0 1 4.84 4.62 5.19 5.19 0 0 1 .36.82h14.65a40.77 40.77 0 0 0 9.03-6.21z",fill:"#a4a4a4"})),Nl||(Nl=sc.createElement("path",{d:"M98.34 752.64s15.36-.47 20-3.77 23.62-7.23 24.77-1.94 23.08 26.29 5.74 26.43-40.29-2.7-44.91-5.52-5.6-15.2-5.6-15.2z",fill:"#a8a8a8"})),_l||(_l=sc.createElement("path",{d:"M149.15 771.52c-17.34.14-40.29-2.7-44.91-5.52-3.52-2.14-4.92-9.83-5.39-13.38h-.51s1 12.39 5.59 15.2 27.57 5.66 44.91 5.52c5 0 6.74-1.82 6.64-4.46-.69 1.61-2.62 2.61-6.33 2.64z",opacity:.2})),Ul||(Ul=sc.createElement("path",{d:"M247.46 385.54s4 11 2.46 20.5.53 2.83 1.78 6.95 1.26 18.24 1.26 18.24v-9.68s-.46-14.75 0-19.13-5.5-16.88-5.5-16.88zm36.51-16.39s4 11 2.46 20.5.53 2.83 1.78 6.94 1.26 18.25 1.26 18.25v-9.69s-.46-14.75 0-19.12-5.5-16.88-5.5-16.88z",fill:"#a4a4a4",opacity:.5})),Bl||(Bl=sc.createElement("path",{d:"M267.41 259.33s7.92 11 4.92 20.5-5 14.77-2.5 18.89 8.58 6.3 8.58 6.3v-9.68s-.92-14.75 0-19.13-11-16.88-11-16.88zm186.19-10.25s-1.41 13.46-10 18.57-13.53 7.73-14.41 12.46 2.19 10.38 2.19 10.38l6.43-7.23s9.12-11.63 12.72-14.29 3.07-19.89 3.07-19.89z",fill:"#fff",opacity:.5})),Rl||(Rl=sc.createElement("path",{d:"M530.27 491.13a29.43 29.43 0 0 0-1.14 4.21 4.2 4.2 0 0 0 1.4 3.92 1.42 1.42 0 0 0 1.1.3c.8-.17 1-1.2 1-2 0-1.61 0-3.22-.1-4.84a12.57 12.57 0 0 0-.41-3.24 3.76 3.76 0 0 0-1.64-2.31c-.37.82.1 2.76-.21 3.96zm17.71 9.86a30.11 30.11 0 0 0-1.13 4.21 4.16 4.16 0 0 0 1.4 3.92 1.41 1.41 0 0 0 1.09.31c.81-.17 1-1.2 1-2 0-1.61 0-3.22-.09-4.83a13.17 13.17 0 0 0-.42-3.25 3.73 3.73 0 0 0-1.63-2.3c-.34.83.1 2.75-.22 3.94zm-8.44-12.9a12.06 12.06 0 0 0 .48-1.76 1.76 1.76 0 0 0-.59-1.64.56.56 0 0 0-.46-.13c-.34.07-.43.5-.44.85v2a5.18 5.18 0 0 0 .18 1.36 1.52 1.52 0 0 0 .68 1c.21-.37.02-1.17.15-1.68zm95.51-191a12.19 12.19 0 0 0 .48-1.77 1.75 1.75 0 0 0-.59-1.64.64.64 0 0 0-.46-.13c-.34.07-.43.51-.43.85v2a4.83 4.83 0 0 0 .17 1.36 1.61 1.61 0 0 0 .68 1c.22-.37.02-1.17.15-1.67z",fill:"#a4a4a4"})),Wl||(Wl=sc.createElement("ellipse",{cx:548.62,cy:732.82,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Xl||(Xl=sc.createElement("ellipse",{cx:554.91,cy:733.54,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Kl||(Kl=sc.createElement("ellipse",{cx:557.53,cy:730.53,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Jl||(Jl=sc.createElement("ellipse",{cx:562.44,cy:734.05,rx:7.53,ry:1.22,fill:"#a4a4a4"})),Ql||(Ql=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m300.02 251.23 1.03 5.48 1.96-7.68-2.99 2.2zm-7.58-65.15 11.36 59.83 4.89-19.14h-.59l8.31-46.18q-8.42 1.62-16.54 3.59l1.75 15.94-4.09-15.37q-2.57.67-5.09 1.33z"})),Yl||(Yl=sc.createElement("path",{d:"m616.61 258.53-1.41 8.09 1.41 8.09c1.94-2.66 3.73-5.36 5.4-8.09-1.67-2.74-3.46-5.43-5.4-8.09z",fill:"#a4a4a4",opacity:.8})),$l||($l=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m286.73 266.62.16 5.75 8.56 6.28 3.07-12.03-3.07-12.03-8.56 6.28-.16 5.75zm14.32 9.91-1.03 5.48 2.99 2.2-1.96-7.68zm-98.19 8.97-4.73-13.84-6.91 25.52c2 1.75 12.93 3.47 15.07 5.16 1.57-5.73-5.43-11.63-3.43-16.84zm67 5.91 5.43-24.79 7.46-50.7c-5 1.74-14.21-6.69-19-4.75l-5.3 14.92-8.31-25.68c-4 1.68-18.17 23.21-21.94 25l6.38 41.2 10 43.05c3.77 1.81 1.65 21.48 5.61 23.16l8.31-25.68-4.41 27.29c4.77 1.95 10.77-44.76 15.77-43.02zm46.55 61.2-8.31-46.18h.59l-4.89-19.15-11.36 59.83q2.52.68 5.09 1.3l4.09-15.37-1.76 15.95c5.43 1.33 10.94 2.54 16.55 3.62zM197.39 230.9q-3.19 2.54-6.21 5.16l6.91 25.51 4.77-13.84c-2-5.21-3.85-11.1-5.47-16.83zm-11.08 9.58-3.51 51.44c.27.27 4.07 1.36 4.35 1.62l9.21-26.92-9.21-26.93c-.29.3-.57.52-.84.79z"})),ec||(ec=sc.createElement("path",{d:"m236 309.67-18.4-117.5q-6.12 3.3-11.85 6.81c2.49 17.22 16 64.25 8.48 65.06-3.45.38-7.06-5.5-10.38-13.68l-4.4 16.26 4.4 16.26c3.32-8.18 6.93-14.06 10.38-13.69 7.55.81-3.24 10.51-5.73 27.73 3.81 2.35 23.41 10.56 27.5 12.75z",fill:"#a4a4a4",opacity:.8})),tc||(tc=sc.createElement("path",{d:"M320.16 353.31q10.86 2 22.14 3.39l-5.13-40.95-.75 14.24-.9-27.4-.51-4-2.15 19.75-4.85-7.76 5.8-21.8-1.37-10.79-2.58-1.92 1.18-9.45-1.18-9.45 2.61-1.92 1.35-10.8-5.8-21.8 4.85-7.75 2.17 19.8.51-4 .9-27.41.75 14.24 9.08-6.59c-5.59 4.48 19.84 38.67-26.09-31l-2 46.17-7.72.55-7.55 40 7.55 40 7.72.55zm235.4-150.32c-2.14-1-4.31-1.91-6.5-2.83l-6.43 14.21 14.89 2.62zm-35.04 74.28c-2.17-.87 2.22-54.91 0-55.75l8.24-7.35-3.06 47.4z",fill:"#a4a4a4",opacity:.5})),ac||(ac=sc.createElement("path",{d:"m180.25 270.19 2.55-3.57-1.84-20.81a122.16 122.16 0 0 0-16.1 20.81c4.39 7.22 9.07-3.05 15.39 3.57z",fill:"#a4a4a4",opacity:.95})),lc||(lc=sc.createElement("path",{d:"M546.5 314.86c2.76-1.48 17.7 4.47 20.34 2.92l8.47-51.16-3.56-38.11c-2.64-1.56-13.34-1.18-16.1-2.66l-5.89 28.49-4.6-32.82-7.58 45.1-5.28 35.8 17.46-23.53zm-35.02 27.32-21.19-73.87-5.31 15.13 4.88-16.82-4.83-16.82 5.31 15.13 21.19-73.87c-3.86-1.24-7.77-2.42-11.76-3.54v39.29l-11.72-24.14c-6.36-1.66-8.79-.51-15.43-1.85l-4.29 15.39q-6.69-1.22-13.47-2.22l2.43-13.8-6 13.27c-2.28-.32-4.56-.63-6.86-.91l13.43 51.56 2.32-10-1.93 12.55 1.93 12.55-2.32-28-13.47 87.59q3.45 26.56 6.86-.91l6-22.73-2.39 22.12c4.53 17.32 9-1.43 13.44-2.25l4.29-2.61 1.62 1.45c6.64-1.35 13.15 15.15 19.51 13.49l6-40.93v39.29c3.99-1.12 7.9-2.31 11.76-3.54z",fill:"#a4a4a4",opacity:.5})),cc||(cc=sc.createElement("path",{d:"m490.86 295.81-8.19-28.54-2 5.85 1.86-6.5-1.86-6.5 2 5.84 8.19-28.53c-1.49-.48-3-.94-4.54-1.37v15.18l-2.33-15.82q-3.69-1-7.54-1.74l-.59 7.51-1.66-8c-1.71-.32-3.45-.6-5.2-.87l.94 8.58-2.33-8.78-2.65-.35 5.2 33.84.9-3.88-.75 4.85.75 4.85-.9-3.88-5.2 33.84 2.65-.35 2.33-8.78-.94 8.57c1.75-.26 3.49-.55 5.2-.87l1.66-8 .62 7.52q3.86-.78 7.54-1.75l2.33-15.74v15.18c1.51-.42 3.05-.88 4.51-1.36zM577 234.17l-1.54 31.53.29-1.73-.21 2.65.21 2.65-.29-1.74-.15 37.14c5.55-3.46 19.27-12.72 24.19-16.5l-19.09 15.82 3.52-37.38 8.07-16.95-4.66-20.43c-4.92-3.76-4.8 8.41-10.34 4.94z",fill:"#a4a4a4",opacity:.5})),rc||(rc=sc.createElement("path",{d:"M365.5 344.42c1.11-.23 34.11 15.15 35.22 14.92l3.05-92.72-10.55-53.35c-4.69-1-15-7.14-19.72-8.12l3.24 14.29 1.57 14.35-3-11.33-8.45 17.65 1.73 15.79-3.32-12.47-9 18.87-.53 4.32.53 4.32 9 18.86 3.32-12.46-1.73 15.78 8.41 17.66 3-11.33-1.57 14.35z",fill:"#a4a4a4",opacity:.6})),nc||(nc=sc.createElement("path",{fill:"#a4a4a4",opacity:.5,d:"m281.27 268.23.08-1.61-.08-1.61-2.2 1.61 2.2 1.61zm233.85-1.61-4.15-55.63 8.18 1.45 1.37-18.35c-1.24-.44-2.48-.87-3.73-1.29l-25.93 73.82 25.9 73.8 3.73-1.3-1.37-18.35-8.18 1.46zm-81.82 75.7 13.95-75.7-16.77-47c-3.41-.44-6.86-.81-10.33-1.12l1.84-22.9-4.52 22.69q-3.87-.3-7.79-.5l-2.06 48.85 1.64 73.8c2.61-.13 5.63 18.74 8.21 18.54l4.52-21.3 10 19c3.48-.29-2.13-13.92 1.31-14.36z"})),ic||(ic=sc.createElement("path",{fill:"#a4a4a4",d:"m236 231.81 11.46 36.5 14.4-19.23 5.55-9.38-9.49 35.01-6.22 15.79-15.7-35.91v-22.78z"})))}},4489:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v=a(7294),M=["title","titleId"];function g(){return g=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,b=k(e,M);return v.createElement("svg",g({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:980,height:489.48,viewBox:"0 0 980 489.48","aria-labelledby":a},b),t?v.createElement("title",{id:a},t):null,l||(l=v.createElement("path",{d:"M207.06 0a205.979 205.979 0 0 0-77.685 15.067c-.993.407-1.99.816-2.988 1.235A206.78 206.78 0 0 0 0 207.06V433a9.01 9.01 0 0 0 9 9l.179.016c173.467 31.502 342.106 47.465 501.372 47.465q3.581 0 7.156-.011c156.555-.477 308.994-16.44 453.083-47.447L971 442a9.01 9.01 0 0 0 9-9V9a9.01 9.01 0 0 0-9-9z",fill:"#a4a4a4"})),c||(c=v.createElement("path",{"data-name":"Path 40",d:"M745.8 180.193a5.947 5.947 0 0 0 0 11.892h149.085a5.947 5.947 0 1 0 .195-11.892q-.097-.002-.195 0z",fill:"#3f3d56"})),r||(r=v.createElement("path",{d:"M928.694 178.537a1.17 1.17 0 0 0 0 1.655l5.023 5.023h-12.386a1.17 1.17 0 1 0 0 2.34h12.386l-5.023 5.023a1.17 1.17 0 1 0 1.655 1.654l7.02-7.02a1.17 1.17 0 0 0 0-1.655l-7.02-7.02a1.17 1.17 0 0 0-1.655 0zm-216.767 0a1.17 1.17 0 0 1 0 1.655l-5.022 5.023h12.385a1.17 1.17 0 1 1 0 2.34h-12.385l5.022 5.023a1.17 1.17 0 0 1-1.654 1.654l-7.02-7.02a1.17 1.17 0 0 1 0-1.655l7.02-7.02a1.17 1.17 0 0 1 1.654 0z",fill:"#fff"})),n||(n=v.createElement("g",{opacity:.4,fill:"#fff"},v.createElement("circle",{cx:751.82,cy:50.39,r:6.39}),v.createElement("circle",{cx:778.445,cy:50.39,r:6.39}),v.createElement("circle",{cx:805.069,cy:50.39,r:6.39}),v.createElement("circle",{cx:831.694,cy:50.39,r:6.39}),v.createElement("circle",{cx:858.318,cy:50.39,r:6.39}),v.createElement("circle",{cx:884.943,cy:50.39,r:6.39}),v.createElement("circle",{cx:911.567,cy:50.39,r:6.39}),v.createElement("circle",{cx:751.82,cy:70.625,r:6.39}),v.createElement("circle",{cx:778.445,cy:70.625,r:6.39}),v.createElement("circle",{cx:805.069,cy:70.625,r:6.39}),v.createElement("circle",{cx:831.694,cy:70.625,r:6.39}),v.createElement("circle",{cx:858.318,cy:70.625,r:6.39}),v.createElement("circle",{cx:884.943,cy:70.625,r:6.39}),v.createElement("circle",{cx:911.567,cy:70.625,r:6.39}),v.createElement("circle",{cx:751.82,cy:90.859,r:6.39}),v.createElement("circle",{cx:778.445,cy:90.859,r:6.39}),v.createElement("circle",{cx:805.069,cy:90.859,r:6.39}),v.createElement("circle",{cx:831.694,cy:90.859,r:6.39}),v.createElement("circle",{cx:858.318,cy:90.859,r:6.39}),v.createElement("circle",{cx:884.943,cy:90.859,r:6.39}),v.createElement("circle",{cx:911.567,cy:90.859,r:6.39}),v.createElement("circle",{cx:751.82,cy:111.094,r:6.39}),v.createElement("circle",{cx:778.445,cy:111.094,r:6.39}),v.createElement("circle",{cx:751.82,cy:131.329,r:6.39}),v.createElement("circle",{cx:778.445,cy:131.329,r:6.39}),v.createElement("circle",{cx:805.069,cy:131.329,r:6.39}),v.createElement("circle",{cx:805.069,cy:111.094,r:6.39}),v.createElement("circle",{cx:831.694,cy:111.094,r:6.39}),v.createElement("circle",{cx:858.318,cy:111.094,r:6.39}),v.createElement("circle",{cx:884.943,cy:111.094,r:6.39}),v.createElement("circle",{cx:911.567,cy:111.094,r:6.39}))),i||(i=v.createElement("path",{d:"M660.157 375.459a35.272 35.272 0 1 1 35.273-35.272 35.313 35.313 0 0 1-35.273 35.272zm0-68.545a33.272 33.272 0 1 0 33.273 33.273 33.31 33.31 0 0 0-33.273-33.273z",fill:"#3f3d56"})),s||(s=v.createElement("path",{d:"M673.68 336.806h-10.142v-10.143a3.38 3.38 0 0 0-6.761 0v10.143h-10.143a3.38 3.38 0 0 0 0 6.761h10.143v10.143a3.38 3.38 0 0 0 6.761 0v-10.143h10.143a3.38 3.38 0 1 0 0-6.761z",fill:"#fff"})),o||(o=v.createElement("g",{opacity:.4,fill:"#fff"},v.createElement("circle",{cx:54.024,cy:374.766,r:5.024}),v.createElement("circle",{cx:54.024,cy:353.833,r:5.024}),v.createElement("circle",{cx:54.024,cy:332.9,r:5.024}),v.createElement("circle",{cx:54.024,cy:311.967,r:5.024}),v.createElement("circle",{cx:54.024,cy:291.034,r:5.024}),v.createElement("circle",{cx:54.024,cy:270.101,r:5.024}),v.createElement("circle",{cx:54.024,cy:249.168,r:5.024}),v.createElement("circle",{cx:69.933,cy:374.766,r:5.024}),v.createElement("circle",{cx:69.933,cy:353.833,r:5.024}),v.createElement("circle",{cx:69.933,cy:332.9,r:5.024}),v.createElement("circle",{cx:69.933,cy:311.967,r:5.024}),v.createElement("circle",{cx:69.933,cy:291.034,r:5.024}),v.createElement("circle",{cx:69.933,cy:270.101,r:5.024}),v.createElement("circle",{cx:69.933,cy:249.168,r:5.024}),v.createElement("circle",{cx:85.842,cy:374.766,r:5.024}),v.createElement("circle",{cx:85.842,cy:353.833,r:5.024}),v.createElement("circle",{cx:85.842,cy:332.9,r:5.024}),v.createElement("circle",{cx:85.842,cy:311.967,r:5.024}),v.createElement("circle",{cx:85.842,cy:291.034,r:5.024}),v.createElement("circle",{cx:85.842,cy:270.101,r:5.024}),v.createElement("circle",{cx:85.842,cy:249.168,r:5.024}),v.createElement("circle",{cx:101.751,cy:374.766,r:5.024}),v.createElement("circle",{cx:101.751,cy:353.833,r:5.024}),v.createElement("circle",{cx:117.66,cy:374.766,r:5.024}),v.createElement("circle",{cx:117.66,cy:353.833,r:5.024}),v.createElement("circle",{cx:117.66,cy:332.9,r:5.024}),v.createElement("circle",{cx:101.751,cy:332.9,r:5.024}),v.createElement("circle",{cx:101.751,cy:311.967,r:5.024}),v.createElement("circle",{cx:101.751,cy:291.034,r:5.024}),v.createElement("circle",{cx:101.751,cy:270.101,r:5.024}),v.createElement("circle",{cx:101.751,cy:249.168,r:5.024}))),m||(m=v.createElement("path",{d:"M497.408 33.002H163.666a6.189 6.189 0 0 0-6.182 6.183v285.383a6.189 6.189 0 0 0 6.182 6.182h333.742a6.189 6.189 0 0 0 6.183-6.182V39.185a6.189 6.189 0 0 0-6.183-6.183zm3.705 291.566a3.718 3.718 0 0 1-3.705 3.716H163.666a3.71 3.71 0 0 1-3.704-3.716V39.185a3.71 3.71 0 0 1 3.704-3.717h333.742a3.718 3.718 0 0 1 3.705 3.717z",fill:"#3f3d56"})),d||(d=v.createElement("path",{d:"M240.702 280.006c0 .44-.011.88-.034 1.309a25.175 25.175 0 0 1-50.281 0 24.33 24.33 0 0 1-.035-1.309 25.175 25.175 0 1 1 50.35 0z",fill:"#fff"})),f||(f=v.createElement("path",{d:"M471.475 263.22H273.663a4.197 4.197 0 0 0 0 8.393h197.812a4.197 4.197 0 0 0 0-8.394z",fill:"#3f3d56"})),p||(p=v.createElement("path",{d:"M358.78 288.4h-85.117a4.191 4.191 0 0 0 0 8.382h85.117a4.191 4.191 0 1 0 0-8.382zm217.918-54.819h-333.74a8.559 8.559 0 0 1-8.549-8.55V78.57a8.559 8.559 0 0 1 8.549-8.549h333.74a8.559 8.559 0 0 1 8.55 8.55V225.03a8.559 8.559 0 0 1-8.55 8.55zM242.958 73.02a5.555 5.555 0 0 0-5.549 5.55v146.46a5.556 5.556 0 0 0 5.549 5.55h333.74a5.556 5.556 0 0 0 5.55-5.55V78.57a5.555 5.555 0 0 0-5.55-5.549z",fill:"#fff"})),h||(h=v.createElement("path",{d:"M310.924 123.44a4.196 4.196 0 1 0 0 8.391h197.808a4.196 4.196 0 1 0 0-8.392zm0 24.312a4.196 4.196 0 0 0 0 8.392h197.808a4.196 4.196 0 0 0 0-8.392zm0 24.018a4.196 4.196 0 0 0 0 8.392h85.117a4.196 4.196 0 0 0 0-8.392zm320.8 123.863-33.52-47.307 10.85 2.26a1.501 1.501 0 1 0 .613-2.939l-16.17-3.366-2.183 16.37a1.501 1.501 0 1 0 2.976.397l1.463-10.993 33.523 47.312a1.5 1.5 0 1 0 2.448-1.734z",fill:"#fff"})),y||(y=v.createElement("path",{d:"M449.666 433.32H211.409a4.417 4.417 0 0 1-4.412-4.412v-59.101a4.417 4.417 0 0 1 4.412-4.412h238.257a4.417 4.417 0 0 1 4.412 4.412v59.101a4.417 4.417 0 0 1-4.412 4.413zm-238.257-66.16a2.65 2.65 0 0 0-2.647 2.647v59.101a2.65 2.65 0 0 0 2.647 2.648h238.257a2.65 2.65 0 0 0 2.647-2.648v-59.101a2.65 2.65 0 0 0-2.647-2.647z",fill:"#3f3d56"})),u||(u=v.createElement("circle",{cx:248.429,cy:397.09,r:17.973,fill:"#fff"})),E||(E=v.createElement("path",{d:"M289.938 385.108a2.995 2.995 0 1 0 0 5.991h141.215a2.995 2.995 0 1 0 0-5.99zm0 17.972a2.995 2.995 0 1 0 0 5.992h60.765a2.995 2.995 0 1 0 0-5.991z",fill:"#fff"})),x||(x=v.createElement("path",{d:"M764.024 222.756h105.893a4.417 4.417 0 0 1 4.412 4.412V337.45a4.417 4.417 0 0 1-4.412 4.413H764.024a4.417 4.417 0 0 1-4.412-4.413V227.168a4.417 4.417 0 0 1 4.413-4.412zm105.893 117.342a2.65 2.65 0 0 0 2.647-2.648V227.168a2.65 2.65 0 0 0-2.647-2.647H764.024a2.65 2.65 0 0 0-2.647 2.647V337.45a2.65 2.65 0 0 0 2.648 2.648z",fill:"#3f3d56"})),z||(z=v.createElement("path",{d:"M847.353 319.12a2.995 2.995 0 0 0 0-5.99h-60.765a2.995 2.995 0 0 0 0 5.99zm0-17.648a2.995 2.995 0 1 0 0-5.991h-60.765a2.995 2.995 0 1 0 0 5.99zm-30.383-55.974a18.855 18.855 0 1 1-18.855 18.855 18.876 18.876 0 0 1 18.855-18.855z",fill:"#fff"})))}},7627:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k=a(7294),b=["title","titleId"];function w(){return w=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,O=H(e,b);return k.createElement("svg",w({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1094,height:768.5,viewBox:"0 0 1094 768.5","aria-labelledby":a},O),void 0===t?k.createElement("title",{id:a},"image_focus"):t?k.createElement("title",{id:a},t):null,l||(l=k.createElement("path",{fill:"#3f3d56",d:"M530 707.5h564v2H530zM495.53 94.016l-17.664-18.938 18.938-17.663 17.664 18.937zm-14.848-18.84 14.946 16.025 16.024-14.947-14.946-16.024zm229.767 288.929h-25.897v-25.897h25.897zm-23.905-1.992h21.913V340.2h-21.913z"})),c||(c=k.createElement("path",{fill:"#5cb85c",d:"M0 222h663v478H0z"})),r||(r=k.createElement("path",{fill:"#3f3d56",d:"M352 264 0 306.35v-36.27L352 264zm311 338.46v38.53L289 596l374 6.46zM539 489 0 558.9v-38.03L539 489zm124-127.83v39.59L102 328l561 33.17zM225 373 0 400.07v-23.18L225 373z"})),n||(n=k.createElement("path",{d:"M750 565H280V173h470zm-468-2h466V175H282z",fill:"#3f3d56"})),i||(i=k.createElement("path",{d:"M777 174c0 .69-.02 1.37-.08 2.04a27.997 27.997 0 1 1-52.68-15.11 25.74 25.74 0 0 1 2.06-3.31 27.989 27.989 0 0 1 50.6 14.1c.07.75.1 1.51.1 2.28z",fill:"#5cb85c"})),s||(s=k.createElement("path",{d:"M777 174c0 .69-.02 1.37-.08 2.04L735 171l41.9.72c.07.75.1 1.51.1 2.28zm-10 14.11-38.78 4.67a28.058 28.058 0 0 1-2.96-3.95zm-11-31-31.76 3.82a25.74 25.74 0 0 1 2.06-3.31z",fill:"#3f3d56"})),o||(o=k.createElement("path",{d:"M611.91 700h-592s-9.89-145.1 41.44-173.3c.3-.17.61-.34.92-.49A38.144 38.144 0 0 1 78.91 522c71-2 63 78 152-32 55.35-68.41 118.05-91.95 160.91-84.34.79.14 1.57.29 2.35.45 24.84 5.16 42.61 21.06 47.74 44.89 14 65-27 117 48 101 35.11-7.49 77.45-2.27 106.3 17.92l.84.6c32.2 23.06 47.03 65.15 14.86 129.48z",fill:"#2f2e41"})),m||(m=k.createElement("path",{d:"M394.17 406.11c-4.94 4.98-22.19 23.99-40.05 62.47-19.43 41.87-43.55 116-48.2 231.42v.04l-1-.04-1-.04c4.66-115.88 28.93-190.33 48.46-232.38 16.95-36.46 33.4-55.6 39.44-61.92.79.14 1.57.29 2.35.45zm126.006 294.17-1.92-.56c23.119-79.353 77.561-129.454 78.11-129.951l1.343 1.48c-.543.493-54.578 50.24-77.533 129.03zm-407.024-.142-1.982-.276c7.844-56.57-6.324-100.46-19.592-127.318-14.366-29.08-30.757-44.963-30.92-45.12l1.383-1.443c.166.159 16.81 16.286 31.33 45.677 13.392 27.11 27.694 71.405 19.78 128.48z",fill:"#f2f2f2"})),d||(d=k.createElement("path",{fill:"#5cb85c",d:"M252 147h56v56h-56z"})),f||(f=k.createElement("path",{fill:"#3f3d56",d:"m257 162 51 3.02v3.59L257 162zm0 30 51 3.02v3.59L257 192zm-5-9.32 38-4.57-38 .66v3.91z"})),p||(p=k.createElement("path",{fill:"#5cb85c",d:"m789.6 563.39-39.6 39.6-39.6-39.6 39.6-39.6 27.76 27.76 11.84 11.84z"})),h||(h=k.createElement("path",{fill:"#3f3d56",d:"m774.77 548.56 2.99 2.99-39.76-5.16 36.77 2.17zM729 566.39l54.38 3.22-3.39 3.39-50.99-6.61zm33 19.11-26.32 3.17-2.67-2.67 28.99-.5zM87.53 459.016l-17.664-18.938 18.938-17.663 17.664 18.937zm-14.849-18.84 14.947 16.025 16.024-14.947-14.946-16.024z"})),y||(y=k.createElement("path",{d:"M726.356 286.368s-54.276 53.19-31.48 59.703 48.848-48.848 48.848-48.848zm54.276 179.11-6.513 30.395 48.848 2.171-7.599-32.566h-34.736zm154.144 187.795-6.513 30.395 48.848 2.171-7.599-32.566h-34.736z",fill:"#a0616a"})),u||(u=k.createElement("path",{d:"m849.02 262.486 4.342 17.368s-120.493-23.881-113.98 36.908S774.12 436.17 774.12 436.17s-2.171 19.54 2.17 22.796 0 14.112 0 14.112 40.165 5.428 41.25-4.342a68.083 68.083 0 0 0-1.085-19.54s2.17 0 0-10.855S805.514 339.94 799 328c0 0 57.618 44.124 88.013 38.696 0 0-4.342 43.42 13.026 100.953s17.368 64.046 17.368 64.046 20.625 109.638 15.198 122.664l-1.086 5.427h40.164s-3.256-57.532 0-65.13 3.257-72.73-15.197-105.296C943.418 466.298 945.852 399.43 953 373c6.003-22.195 7.519-39.278 4-62-3.763-24.299-15-37-28.737-48.514z",fill:"#2f2e41"})),E||(E=k.createElement("circle",{cx:881.042,cy:60.037,r:39.079,fill:"#a0616a"})),x||(x=k.createElement("path",{d:"M870.73 87.717s11.94 34.737 10.855 41.25 34.737-13.026 34.737-13.026-14.112-34.737-9.77-44.506z",fill:"#a0616a"})),z||(z=k.createElement("path",{d:"m914.15 104-37.992 15.198 2.17 13.026s-3.256 4.342-2.17 6.513-14.112 10.855-11.941 14.112-13.026 16.282-11.94 19.539-34.738 22.796-15.198 60.79c0 0 10.13 13.169 8.861 28.743q-.067.821-.177 1.65c-2.171 16.283 82.5-2.17 82.5-2.17v-18.454s7.598-3.257 6.513-17.369-7.599-7.598 0-15.197 7.598-6.513 6.513-13.026c-.434-2.6-.521-11.953-.47-22.25a98.776 98.776 0 0 0-20.155-60.25z",fill:"#d0cde1"})),v||(v=k.createElement("path",{d:"m893.526 132.224-70.559 73.815-103.124 81.414 22.796 18.454L932.605 178.9s16.282-69.473-39.08-46.677z",fill:"#d0cde1"})),M||(M=k.createElement("path",{d:"M783.888 481.761s-7.598-13.026-13.026-8.684l-37.993 30.395s-67.302 19.539-2.171 34.736c0 0 35.822 5.428 43.42 0s19.54-4.342 22.797-2.17 44.506-1.086 44.506-9.77-22.75-46.638-22.75-46.638-13.072 15.157-34.783 2.131zm154.144 187.795s-7.598-13.026-13.026-8.684l-37.993 30.394s-67.302 19.54-2.171 34.737c0 0 35.822 5.428 43.42 0s19.54-4.342 22.796-2.17 44.507-1.086 44.507-9.77-22.75-46.639-22.75-46.639-13.072 15.158-34.783 2.132zM834.21 44.539s6.607-58.083 63.119-41.591c0 0 39.979-8.132 54.099 41.8l14.332 52.349-6.56-3.41-2.9 6.675-10.47 2.867-4.674-8.85-1.97 10.894-72.304 14.618s24.453-27.939 24.28-68.859l-7.202 7.91z",fill:"#2f2e41"})),g||(g=k.createElement("path",{fill:"#3f3d56",d:"M762 733.5h272v2H762zm-132 33h437v2H630z"})))}},7905:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O,G,T,L,C,I,j,Z,P,F,S,V,A=a(7294),q=["title","titleId"];function D(){return D=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,_=N(e,q);return A.createElement("svg",D({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:973.461,height:587.025,viewBox:"0 0 973.461 587.025","aria-labelledby":a},_),t?A.createElement("title",{id:a},t):null,l||(l=A.createElement("g",{"data-name":"Group 100",fill:"#e4e4e4"},A.createElement("path",{"data-name":"Path 1465",d:"M561.877 471.613a11.49 11.49 0 1 0 11.49 11.49 11.49 11.49 0 0 0-11.49-11.49zm0 18.561a7.071 7.071 0 1 1 7.071-7.071 7.071 7.071 0 0 1-7.07 7.071z"}),A.createElement("path",{"data-name":"Path 1467",d:"M517.684 462.774h44.193v43.739a5.757 5.757 0 0 1-5.757 5.757h-32.679a5.757 5.757 0 0 1-5.757-5.757v-43.739z"}))),c||(c=A.createElement("path",{"data-name":"Path 944",d:"M665.133 513.271H.896a1.006 1.006 0 0 1 0-2h664.237a1.006 1.006 0 0 1 0 2z",fill:"#cacaca"})),r||(r=A.createElement("path",{fill:"#ffb6b6",d:"m89.41 494.381-4.108 20.313 76.393 25.514 6.064-29.98-78.349-15.847z"})),n||(n=A.createElement("path",{d:"M97.09 490.542 89 530.544l-.001.002a26.01 26.01 0 0 1-30.65 20.336l-.828-.168 13.247-65.496z",fill:"#2f2e41"})),i||(i=A.createElement("circle",{"data-name":"Ellipse 276",cx:175.979,cy:162.713,r:51.871,fill:"#feb8b8"})),s||(s=A.createElement("path",{"data-name":"Path 1461",d:"M224.427 117.963a59.907 59.907 0 0 0-34.08-26.052l-6.369 4.647v-6.034a55.143 55.143 0 0 0-10.3-.6l-5.494 4.971v-4.558a59.335 59.335 0 0 0-40.932 24.347c-11.93 17.2-13.945 41.129-2.21 58.467 3.221-9.9 7.131-19.189 10.353-29.088a29.3 29.3 0 0 0 7.633.037l3.92-9.145 1.094 8.758c12.148-1.058 30.166-3.382 41.682-5.511l-1.12-6.719 6.7 5.583c3.528-.812 5.623-1.549 5.45-2.112 8.565 13.808 19.047 22.627 27.611 36.435 3.253-19.47 6.997-35.659-3.938-53.426z",fill:"#2f2e41"})),o||(o=A.createElement("ellipse",{"data-name":"Ellipse 260",cx:192.856,cy:464.787,rx:133.56,ry:37.359,fill:"#2f2e41"})),m||(m=A.createElement("path",{d:"M287.54 296.101c-1.784-10.731-3.624-21.668-8.612-31.335-3.277-6.332-8.48-12.366-15.495-13.618a14.99 14.99 0 0 1-4.034-.934c-2.056-.99-29.674-16.756-34.063-19.502-3.77-2.357-9.72-6.722-12.72-6.722-3.017-.067-14.59 2.627-59.76-.904a163.141 163.141 0 0 0-22.01 10.822c-.145-.096-46.882 25.001-48.637 24.935-3.326-.14-6.416 1.989-8.323 4.67-1.905 2.681-2.8 6-3.735 9.21 10.208 22.732 19.547 45.494 29.756 68.227a5.821 5.821 0 0 1 .739 2.8 6.834 6.834 0 0 1-1.27 2.8c-5.007 8.042-4.848 18.157-4.3 27.61.547 9.451 1.223 19.435-3 27.907-1.15 2.326-2.644 4.455-3.736 6.781-2.56 5.268-3.484 22.117-1.99 27.777l187.267 5.365c-4.027-11.068 13.922-145.89 13.922-145.89z",fill:"#a4a4a4"})),d||(d=A.createElement("path",{"data-name":"Path 1421",d:"M53.963 341.958a33.063 33.063 0 0 0-.112 8.154l2.684 38.546c.252 3.633.5 7.257.841 10.881.644 7.033 1.606 14.01 2.8 20.977a3.736 3.736 0 0 0 3.83 3.633c11.814 2.5 24.021 2.4 36.08 1.719 18.4-1.027 65.473-2.97 68.35-6.706s1.2-9.779-2.55-12.8-65.872-10.386-65.872-10.386c.607-4.81 2.438-9.34 4.175-13.907 3.12-8.1 6.034-16.466 6.09-25.143s-3.213-17.8-10.32-22.771c-5.848-4.081-13.376-4.838-20.5-4.67-5.185.149-14.142-1.093-18.877.934-3.747 1.65-5.919 7.87-6.619 11.539z",fill:"#fbbebe"})),f||(f=A.createElement("path",{"data-name":"Path 1423",d:"M287.871 429.091c3.11-1.186 6.538-.757 9.872-.308 10.732 1.466 21.622 2.97 31.57 7.257 4.67 2 9.115 4.67 12.272 8.6 2.8 3.54 4.436 7.874 5.987 12.142l3.587 9.826a47.3 47.3 0 0 1 3.13 11.516c1.12 11.759-6.922 22.845-17.037 28.954s-22.023 8.284-33.624 10.563-23.247 4.8-34.8 7.472a140.086 140.086 0 0 1-16.373 3.222c-12.366 1.4-25.292-.663-37.042 3.428-4.67 1.635-9.256 4.063-14.1 5.193a87.745 87.745 0 0 1-9.75 1.485l-22.239 2.54a121.313 121.313 0 0 1-13.636 1.046c-9.713 0-19.268-2.3-28.7-4.6a7.258 7.258 0 0 1-2.8-1.13c-1.494-1.177-1.82-3.26-2.036-5.146q-1.429-12.525-2.5-25.077c-.224-2.718-.392-5.66 1.093-7.948 1.868-2.8 5.511-3.68 8.836-4.222a230.58 230.58 0 0 1 42.665-2.961c5.426-5.426 14.374-5.454 21.482-8.406a63.897 63.897 0 0 0 7.575-4.119 99 99 0 0 1 41.59-13.141 38.714 38.714 0 0 0 8.51-1.214c5.5-1.709 10.516-6.361 16.166-5.221.7-1.933 1.186-4.521 2.8-5.847.8-.682 1.793-1.139 2.531-1.868 1.56-1.578 1.7-4.063 1.466-6.267s-.757-4.464-.187-6.613a9.14 9.14 0 0 1 1.037-2.307c2.792-4.832 7.023-7.316 12.655-6.849z",fill:"#2f2e41"})),p||(p=A.createElement("path",{"data-name":"Path 1430",d:"M69.61 273.414a9.667 9.667 0 0 0-2.073 3.316 156.78 156.78 0 0 0-13.169 53.816 5.38 5.38 0 0 1-.607 2.606 11.403 11.403 0 0 1-1.373 1.485 5.156 5.156 0 0 0 .617 7.266q.127.107.261.206c1.541-2.9 5.23-3.848 8.51-4.1 15.7-1.242 31.035 6.062 46.782 5.511-1.11-3.839-2.709-7.528-3.615-11.413-4.007-17.251 5.987-36.033-.14-52.649-1.224-3.325-3.269-6.594-6.49-8.051a17.29 17.29 0 0 0-4.157-1.1c-3.979-.719-11.9-3.792-15.747-2.559-1.42.458-1.98 1.793-3.157 2.6-1.788 1.142-4.16 1.562-5.642 3.066z",fill:"#a4a4a4"})),h||(h=A.createElement("path",{"data-name":"Path 1421",d:"M287.651 330.419c-4.735-2.027-13.692-.785-18.876-.934-7.125-.168-14.653.589-20.5 4.67-7.108 4.971-10.377 14.094-10.32 22.771s2.97 17.043 6.09 25.143c1.736 4.567 3.567 9.097 4.174 13.907 0 0-62.12 7.365-65.87 10.386s-5.427 9.064-2.55 12.8 92.614 7.487 104.43 4.987a3.736 3.736 0 0 0 3.828-3.633c1.194-6.967 2.156-13.944 2.8-20.977.341-3.624.59-7.248.841-10.881l2.684-38.546a33.064 33.064 0 0 0-.112-8.154c-.7-3.669-2.872-9.889-6.619-11.539z",fill:"#fbbebe"})),y||(y=A.createElement("path",{"data-name":"Path 1430",d:"M272.981 270.348c-1.177-.807-1.737-2.142-3.157-2.6-3.847-1.233-11.768 1.84-15.747 2.559a17.29 17.29 0 0 0-4.156 1.1c-3.222 1.457-5.267 4.726-6.49 8.051-6.128 16.616 3.866 35.398-.14 52.649-.907 3.885-2.505 7.574-3.616 11.413 15.747.551 31.083-6.753 46.783-5.511 3.28.252 6.968 1.2 8.51 4.1q.133-.099.26-.206a5.156 5.156 0 0 0 .617-7.266 11.401 11.401 0 0 1-1.373-1.485 5.38 5.38 0 0 1-.607-2.606 156.78 156.78 0 0 0-13.169-53.816 9.667 9.667 0 0 0-2.073-3.316c-1.482-1.504-3.854-1.924-5.642-3.066z",fill:"#a4a4a4"})),u||(u=A.createElement("path",{fill:"#ffb6b6",d:"m299.243 523.378-2.73 20.543-80.538-.755 4.03-30.32 79.238 10.532z"})),E||(E=A.createElement("path",{d:"m319.853 520.785-8.804 66.24-.838-.111a26.01 26.01 0 0 1-22.356-29.209v-.001l5.377-40.457z",fill:"#2f2e41"})),x||(x=A.createElement("path",{"data-name":"Path 1427",d:"M109.77 439.487c0 .934-1.467 0-1.6-1-1.028-7.556-7.025-13.786-14.01-16.812s-14.945-3.185-22.51-2.466c-11.44 1.083-24.284 5.464-28.468 16.158-.99 2.5-10.264 24.76-9.359 29.766 2.438 13.356 11.572 24.779 22.64 32.69s24 12.637 36.9 16.9a639.95 639.95 0 0 0 104.607 24.984c5.753.869 11.563 1.672 17.073 3.521 4.931 1.653 9.545 4.128 14.365 6.071 11.208 4.5 23.266 6.108 35.211 7.687 2.036.262 4.371.448 5.875-.934 1.943-1.8 1.3-4.941.747-7.528a40.488 40.488 0 0 1 4.773-28.729c2-3.362 4.6-6.809 4.222-10.7-.448-4.539-4.969-7.752-9.47-8.481s-9.079.346-13.6.934a7.285 7.285 0 0 1-4.624-.458 9.235 9.235 0 0 1-1.812-1.606 20.482 20.482 0 0 0-23.854-3.334c-1.672.934-4.2-1.149-5.94-1.933l-19.642-8.892c-22.565-10.208-45.242-20.464-69.115-26.927a14.514 14.514 0 0 1-5.324-2.214c-1.186-.934-2.036-2.2-3.129-3.241-2.382-2.251-5.7-3.148-8.555-4.745s-6.056-5.508-5.402-8.711z",fill:"#2f2e41"})),z||(z=A.createElement("circle",{cx:160.617,cy:411.99,r:14,fill:"#fbbebe"})),v||(v=A.createElement("circle",{cx:191.617,cy:411.99,r:14,fill:"#fbbebe"})),M||(M=A.createElement("path",{d:"M278.035 443.537H85.697a8.48 8.48 0 0 1-8.47-8.47V318.381a8.48 8.48 0 0 1 8.47-8.47h192.338a8.48 8.48 0 0 1 8.47 8.47v116.686a8.48 8.48 0 0 1-8.47 8.47z",fill:"#3f3d56"})),g||(g=A.createElement("circle",{"data-name":"Ellipse 263",cx:181.399,cy:376.724,r:5.604,fill:"#fff"})),k||(k=A.createElement("path",{d:"M868.03 210.452H618.136a5.006 5.006 0 0 1-5-5v-47.1h2v47.1a3.003 3.003 0 0 0 3 3h249.892a3.003 3.003 0 0 0 3-3v-47.429h2v47.43a5.006 5.006 0 0 1-5 5z",fill:"#3f3d56"})),b||(b=A.createElement("path",{fill:"#3f3d56",d:"M371.397 157.352h587.22v2h-587.22z"})),w||(w=A.createElement("circle",{"data-name":"Ellipse 264",cx:371.439,cy:158.196,r:17.202,fill:"#a4a4a4"})),H||(H=A.createElement("circle",{"data-name":"Ellipse 266",cx:546.244,cy:158.196,r:17.202,fill:"#a4a4a4"})),O||(O=A.createElement("circle",{"data-name":"Ellipse 268",cx:664.876,cy:208.757,r:17.202,fill:"#3f3d56"})),G||(G=A.createElement("circle",{"data-name":"Ellipse 269",cx:755.063,cy:208.757,r:17.202,fill:"#ccc"})),T||(T=A.createElement("circle",{"data-name":"Ellipse 270",cx:711.36,cy:158.196,r:17.202,fill:"#a4a4a4"})),L||(L=A.createElement("circle",{"data-name":"Ellipse 271",cx:956.259,cy:158.196,r:17.202,fill:"#a4a4a4"})),C||(C=A.createElement("circle",{"data-name":"Ellipse 272",cx:872.029,cy:158.196,r:17.202,fill:"#a4a4a4"})),I||(I=A.createElement("path",{"data-name":"Rectangle 207",fill:"#3f3d56",d:"M648.539 0h31.906v21.99h-31.906z"})),j||(j=A.createElement("path",{"data-name":"Rectangle 208",fill:"#a4a4a4",d:"M355.612 0h31.906v21.99h-31.906z"})),Z||(Z=A.createElement("path",{"data-name":"Rectangle 209",fill:"#ccc",d:"M463.685 0h31.906v21.99h-31.906z"})),P||(P=A.createElement("path",{d:"M424.782 159.352a1 1 0 0 1-1-1V108.99a5.006 5.006 0 0 1 5-5h48.675a1 1 0 0 1 0 2h-48.675a3.003 3.003 0 0 0-3 3v49.362a1 1 0 0 1-1 1z",fill:"#3f3d56"})),F||(F=A.createElement("circle",{"data-name":"Ellipse 265",cx:479.744,cy:104.616,r:17.202,fill:"#e6e6e6"})),S||(S=A.createElement("path",{d:"M809.782 158.352h-2V108.99a5.006 5.006 0 0 1 5-5h48.675v2h-48.675a3.003 3.003 0 0 0-3 3z",fill:"#3f3d56"})),V||(V=A.createElement("circle",{"data-name":"Ellipse 265",cx:863.744,cy:104.616,r:17.202,fill:"#e6e6e6"})))}},5878:function(e,t,a){var l,c,r,n,i,s,o,m,d,f,p,h,y,u,E,x,z,v,M,g,k,b,w,H,O=a(7294),G=["title","titleId"];function T(){return T=Object.assign||function(e){for(var t=1;t=0||(c[a]=e[a]);return c}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(c[a]=e[a])}return c}t.Z=function(e){var t=e.title,a=e.titleId,C=L(e,G);return O.createElement("svg",T({"data-name":"Layer 1",xmlns:"http://www.w3.org/2000/svg",width:1008.92,height:607.45,viewBox:"0 0 1008.92 607.45","aria-labelledby":a},C),t?O.createElement("title",{id:a},t):null,l||(l=O.createElement("path",{d:"M1008.92 474.03a15.34 15.34 0 0 1-15.26 15.42h-671.4A15.34 15.34 0 0 1 307 474.03V15.42A15.34 15.34 0 0 1 322.26 0h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),c||(c=O.createElement("path",{d:"M1001 466.52a14.91 14.91 0 0 1-14.91 14.91h-655.8a14.91 14.91 0 0 1-14.91-14.91V23.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 1001 23.14z",fill:"#fff"})),r||(r=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M350.43 27.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H350.43a8.85 8.85 0 0 1-8.85-8.85V36.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),n||(n=O.createElement("path",{d:"M358.23 37.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H358.23a8.85 8.85 0 0 1-8.85-8.85V46.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),i||(i=O.createElement("path",{d:"M781.836 310.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#3f3d56"})),s||(s=O.createElement("path",{d:"M684.255 318.762H562.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#3f3d56"})),o||(o=O.createElement("circle",{cx:900.879,cy:386.814,r:36.167,fill:"#e6e6e6"})),m||(m=O.createElement("path",{d:"m919.665 386.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})),d||(d=O.createElement("path",{d:"M853.92 529.03a15.34 15.34 0 0 1-15.26 15.42h-671.4A15.34 15.34 0 0 1 152 529.03V70.42A15.34 15.34 0 0 1 167.26 55h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),f||(f=O.createElement("path",{d:"M846 521.52a14.91 14.91 0 0 1-14.91 14.91h-655.8a14.91 14.91 0 0 1-14.91-14.91V78.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 846 78.14z",fill:"#fff"})),p||(p=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M195.43 82.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H195.43a8.85 8.85 0 0 1-8.85-8.85V91.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),h||(h=O.createElement("path",{d:"M203.23 92.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H203.23a8.85 8.85 0 0 1-8.85-8.85V101.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),y||(y=O.createElement("path",{d:"M626.836 365.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#3f3d56"})),u||(u=O.createElement("path",{d:"M529.255 373.762H407.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#3f3d56"})),E||(E=O.createElement("circle",{cx:745.879,cy:441.814,r:36.167,fill:"#e6e6e6"})),x||(x=O.createElement("path",{d:"m764.665 441.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})),z||(z=O.createElement("path",{d:"M701.92 592.03a15.34 15.34 0 0 1-15.26 15.42H15.26A15.34 15.34 0 0 1 0 592.03V133.42A15.34 15.34 0 0 1 15.26 118h671.4a15.34 15.34 0 0 1 15.26 15.42z",fill:"#e6e6e6"})),v||(v=O.createElement("path",{d:"M694 584.52a14.91 14.91 0 0 1-14.91 14.91H23.29a14.91 14.91 0 0 1-14.91-14.91V141.14a14.91 14.91 0 0 1 14.91-14.91h655.83A14.91 14.91 0 0 1 694 141.14z",fill:"#fff"})),M||(M=O.createElement("path",{"data-name":"c6fe725a-3b03-4a96-90af-cfbd2676500a",d:"M43.43 145.48h616.22a8.85 8.85 0 0 1 8.85 8.85v415.28a8.85 8.85 0 0 1-8.85 8.85H43.43a8.85 8.85 0 0 1-8.85-8.85V154.33a8.85 8.85 0 0 1 8.85-8.85z",fill:"#e6e6e6"})),g||(g=O.createElement("path",{d:"M51.23 155.44h599.95a8.85 8.85 0 0 1 8.85 8.85v393.12a8.85 8.85 0 0 1-8.85 8.85H51.23a8.85 8.85 0 0 1-8.85-8.85V164.29a8.85 8.85 0 0 1 8.85-8.85z",fill:"#fff"})),k||(k=O.createElement("path",{d:"M474.836 428.533a16.87 16.87 0 0 1-6.853-1.46 8.314 8.314 0 0 1-1.429-.812l-43.602-30.692a16.87 16.87 0 0 1-7.159-13.79v-41.857a16.87 16.87 0 0 1 7.16-13.791l43.601-30.692a8.314 8.314 0 0 1 1.429-.812 16.87 16.87 0 0 1 23.722 15.415v101.616a16.87 16.87 0 0 1-16.87 16.87z",fill:"#5cb85c"})),b||(b=O.createElement("path",{d:"M377.255 436.762H255.647c-24.81-.02-44.916-16.058-44.942-35.847v-80.13c.026-19.789 20.132-35.826 44.942-35.847h121.925c24.634.023 44.596 15.946 44.625 35.594v80.383c-.025 19.79-20.132 35.827-44.942 35.847z",fill:"#5cb85c"})),w||(w=O.createElement("circle",{cx:593.879,cy:504.814,r:36.167,fill:"#3f3d56"})),H||(H=O.createElement("path",{d:"m612.665 504.165-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297l-28.83-16.644a.749.749 0 0 0-1.122.648v33.29a.749.749 0 0 0 1.122.648l28.83-16.645a.749.749 0 0 0 0-1.297z",fill:"#fff"})))}},8793:function(e,t,a){var l=a(7294),c=a(9960),r=a(1954),n=a(2949);t.Z=function(e){var t=(0,l.useState)(!1),a=t[0],i=t[1];(0,l.useEffect)((function(){i(!0)}),[]);var s,o,m,d=(s=(0,n.I)(),o=s.colorMode,s.setColorMode,"dark"===o?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",l.createElement(c.Z,{key:String(a),className:m,to:e.to},e.icon&&l.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1558:function(e,t,a){a.d(t,{Z:function(){return r}});var l=a(7294),c="featureSvg_UK3L";var r=function(e){var t=e.Svg,a=e.title,r=e.children;return l.createElement("div",null,l.createElement("div",{className:"text--center"},l.createElement(t,{className:c,alt:a})),l.createElement("div",{className:"text--left padding-horiz--md"},l.createElement("h3",{className:"text--center"},a),l.createElement("p",null,r)))}},6937:function(e,t,a){a.d(t,{Z:function(){return x}});var l=a(7294),c=a(6010),r=a(2730),n="navigationWrapper_JWzE",i="arrow_bCLT",s="disabled_AqwA",o="left_UJxi",m="right_iVh6",d="dots_V3wA",f="dot_TDDQ",p="active_Hf3j",h="slideItem_rSD0";function y(e){var t=e.disabled?" ${styles.disabled}":"";return l.createElement("svg",{onClick:e.onClick,className:(0,c.Z)([i,o,t]),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},l.createElement("path",{d:"M16.67 0l2.83 2.829-9.339 9.175 9.339 9.167-2.83 2.829-12.17-11.996z"}))}function u(e){var t=e.disabled?" "+s:"";return l.createElement("svg",{onClick:e.onClick,className:(0,c.Z)([i,m,t]),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},l.createElement("path",{d:"M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z"}))}var E=function(e){var t=new ResizeObserver((function(){e.update()}));e.on("created",(function(){t.observe(e.container)})),e.on("destroyed",(function(){t.unobserve(e.container)}))};var x=function(e){var t=l.useState(0),a=t[0],i=t[1],s=l.useState(!1),o=s[0],m=s[1],x=void 0!==e.spacing?e.spacing:15,z=(0,r.E)({initial:void 0!==e.initial?e.initial:0,loop:void 0===e.loop||e.loop,breakpoints:void 0!==e.breakpoints?e.breakpoints:{"(min-width: 768px)":{slides:{perView:2,spacing:x}},"(min-width: 1440px)":{slides:{perView:3,spacing:x+5}},"(min-width: 1920px)":{slides:{perView:3,spacing:x+15}}},slides:{perView:void 0!==e.slidesPerView?e.slidesPerView:1,origin:void 0!==e.centered?e.centered?"center":"auto":"center",spacing:x},selector:"."+h,created:function(){m(!0)},slideChanged:function(e){i(e.track.details.rel)}},[E]),v=z[0],M=z[1];return l.createElement(l.Fragment,null,l.createElement("div",{className:n},l.createElement("div",{ref:v,className:"keen-slider"},e.children&&l.Children.map(e.children,(function(e){return l.createElement("div",{className:h},e)}))),o&&M.current&&l.createElement(l.Fragment,null,l.createElement(y,{onClick:function(e){var t;return e.stopPropagation()||(null==(t=M.current)?void 0:t.prev())},disabled:!1}),l.createElement(u,{onClick:function(e){var t;return e.stopPropagation()||(null==(t=M.current)?void 0:t.next())},disabled:!1}))),o&&M.current&&l.createElement("div",{className:d},Array.from(Array(M.current.track.details.slides.length).keys()).map((function(e){return l.createElement("button",{key:e,onClick:function(){var t;null==(t=M.current)||t.moveToIdx(e)},className:(0,c.Z)([f,a===e?p:""])})}))))}},9880:function(e,t,a){a.r(t),a.d(t,{assets:function(){return x},contentTitle:function(){return u},default:function(){return M},frontMatter:function(){return y},metadata:function(){return E},toc:function(){return z}});var l=a(3117),c=a(102),r=(a(7294),a(3905)),n=a(9960),i=a(8793),s=a(1558),o=a(6937),m=a(541),d=a(3818),f=a(1320),p=a(9520),h=(a(4212),["components"]),y={id:"introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",slug:"/"},u=void 0,E={unversionedId:"introduction",id:"introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",source:"@site/docs/introduction.mdx",sourceDirName:".",slug:"/",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/introduction.mdx",tags:[],version:"current",frontMatter:{id:"introduction",title:"Introduction",description:"The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg.",slug:"/"},sidebar:"docs",next:{title:"Installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/installation"}},x={},z=[{value:"Related materials",id:"related-materials",level:2}],v={toc:z};function M(e){var t=e.components,y=(0,c.Z)(e,h);return(0,r.kt)("wrapper",(0,l.Z)({},v,y,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'This project is also named as "',(0,r.kt)("em",{parentName:"p"},"FFmpeg-Encoder-Decoder-for-Python"),'". It is implemented based on ',(0,r.kt)("a",{parentName:"p",href:"https://ffmpeg.org",title:"FFMpeg"},"FFMpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", ",(0,r.kt)("a",{parentName:"p",href:"https://docs.python.org/3/c-api/index.html",title:"Python-C-API"},"Python-C-API",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)("a",{parentName:"p",href:"https://en.cppreference.com/w/",title:"C++ 11"},"C++11",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". It is under ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE"},"GPL v3 License",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", and recommended for researching purposes."),(0,r.kt)("p",null,"With this package, users could:"),(0,r.kt)(o.Z,{mdxType:"KeenSlider"},(0,r.kt)(s.Z,{Svg:a(3503).Z,title:"Make use of all FFMpeg video codec",mdxType:"FeatureCase"},"When decoding a video (or an online stream), like the original FFMpeg (C version), the provided APIs could detect the video format and codec format automatically. When encoding a video, users could control the codec format, bit rate and some other options by setting parameters."),(0,r.kt)(s.Z,{Svg:a(5878).Z,title:"Work with FFMpeg directly",mdxType:"FeatureCase"},"This project invokes the FFMpeg C APIs in the bottom level. Unlike ",(0,r.kt)(n.Z,{href:"https://github.com/kkroening/ffmpeg-python",alt:"ffmpeg-python",mdxType:"Link"},"ffmpeg-python",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"https://github.com/deuteronomy-works/pyffmpeg",alt:"pyffmpeg",mdxType:"Link"},"pyffmpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is ",(0,r.kt)(n.Z,{href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",alt:"np.ndarray",mdxType:"Link"},(0,r.kt)("code",null,"np.ndarray"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". In other words, our project enables users to combine ",(0,r.kt)(n.Z,{href:"https://numpy.org",alt:"Numpy",mdxType:"Link"},(0,r.kt)("code",null,"Numpy"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and FFMpeg directly."),(0,r.kt)(s.Z,{Svg:a(7627).Z,title:"Frame-level APIs",mdxType:"FeatureCase"},"Unlike ",(0,r.kt)(n.Z,{href:"https://github.com/deuteronomy-works/pyffmpeg",alt:"pyffmpeg",mdxType:"Link"},"pyffmpeg",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),", this package is not a simple wrapper of FFMpeg. Users could works on the frame-level APIs. For example, when decoding a video, users could get the data frame-by-frame. Each frame is a 3D ",(0,r.kt)(n.Z,{href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",alt:"np.ndarray",mdxType:"Link"},(0,r.kt)("code",null,"np.ndarray"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"."),(0,r.kt)(s.Z,{Svg:a(7353).Z,title:"Pre-compiled package",mdxType:"FeatureCase"},"This package has been pre-compiled by the author. If users download the dependent dynamic libraries (",(0,r.kt)("code",null,".so")," or ",(0,r.kt)("code",null,".dll"),"), they do not need to compile the package by themself.")),(0,r.kt)("p",null,"However, users could not work with this project in such cases:"),(0,r.kt)(o.Z,{mdxType:"KeenSlider"},(0,r.kt)(s.Z,{Svg:a(4489).Z,title:"Platform limited",mdxType:"FeatureCase"},"Currently, we only support Linux and Windows. The Linux release is pre-compiled on Debian. It has been only tested in Ubuntu, Debian and Windows. In other cases, the pre-compiled library may not work. Users may need to compile the package by themselves."),(0,r.kt)(s.Z,{Svg:a(7905).Z,title:"Version limited",mdxType:"FeatureCase"},"Currently, our project works with FFMpeg ",(0,r.kt)("code",null,"4.4")," and ",(0,r.kt)("code",null,"5.0"),". Users need to download the dependent dynamic libraries to make the package work. The ",(0,r.kt)(n.Z,{to:"./docs/installation/pypi",alt:"pip version",mdxType:"Link"},(0,r.kt)("code",null,"pip")," version")," is able to download the libraries automatically. The legacy versions of this project supports FFMpeg ",(0,r.kt)("code",null,"3.3"),", ",(0,r.kt)("code",null,"3.4.2")," and ",(0,r.kt)("code",null,"4.0"),". However, the legacy built packages are not technically supported now."),(0,r.kt)(s.Z,{Svg:a(3073).Z,title:"Audio not supported",mdxType:"FeatureCase"},"Although the original FFMpeg supports both video and audio streams, our project only works on video streams. For example, if a video contains audio streams, our package would omit all audio frames in the bottom level. In other words, you ",(0,r.kt)("b",null,"could not")," perform audio analysis now. In the future (",(0,r.kt)("code",null,"v4"),"), we may support the audio frame analysis."),(0,r.kt)(s.Z,{Svg:a(7632).Z,title:"Filters not supported",mdxType:"FeatureCase"},"Although the original FFMpeg supports some video processing tools (",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lavfi.html",alt:"libavfilter",mdxType:"Link"},(0,r.kt)("code",null,"avfilter"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lpp.html",alt:"libpostproc",mdxType:"Link"},(0,r.kt)("code",null,"postproc"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"), our implementation drops these modules. Instead, we suggest that users should process the frames with ",(0,r.kt)(n.Z,{href:"https://pypi.org/project/Pillow",alt:"Pillow",mdxType:"Link"},"pillow",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," or ",(0,r.kt)(n.Z,{href:"https://pypi.org/project/opencv-python",alt:"OpenCV Python",mdxType:"Link"},"openCV",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),". On the other hand, our implementation still supports frame scaling and re-sampling (supported by ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__libsws.html",alt:"libswscale",mdxType:"Link"},(0,r.kt)("code",null,"swscale"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"}))," and ",(0,r.kt)(n.Z,{href:"http://ffmpeg.org/doxygen/trunk/group__lswr.html",alt:"libswresample",mdxType:"Link"},(0,r.kt)("code",null,"swresample"),(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),").")),(0,r.kt)("p",{className:"right noemph"},"Pictures are provided by ",(0,r.kt)(n.Z,{href:"https://undraw.co",alt:"unDraw",mdxType:"Link"},"unDraw",(0,r.kt)(m.Z,{mdxType:"IconExternalLink"})),"."),(0,r.kt)("h2",{id:"related-materials"},"Related materials"),(0,r.kt)("p",null,"License of this project:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE",icon:d.Z,mdxType:"DarkButton"},"GPL v3 License")),(0,r.kt)("p",null,"Guidelines for the contributions:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CONTRIBUTING.md",icon:f.Z,mdxType:"DarkButton"},"Contributions")),(0,r.kt)("p",null,"Contributor covenant code of conduct:"),(0,r.kt)("p",null,(0,r.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/CODE_OF_CONDUCT.md",icon:p.Z,mdxType:"DarkButton"},"Code of Conduct")))}M.isMDXComponent=!0},2730:function(e,t,a){var l=a(7294);function c(e){return Array.prototype.slice.call(e)}function r(){return Date.now()}function n(e,t,a){if(t="data-keen-slider-"+t,null===a)return e.removeAttribute(t);e.setAttribute(t,a||"")}function i(e,t){return t=t||document,"function"==typeof e&&(e=e(t)),Array.isArray(e)?e:"string"==typeof e?c(t.querySelectorAll(e)):e instanceof HTMLElement?[e]:e instanceof NodeList?c(e):[]}function s(e){e.raw&&(e=e.raw),e.cancelable&&!e.defaultPrevented&&e.preventDefault()}function o(e){e.raw&&(e=e.raw),e.stopPropagation&&e.stopPropagation()}function m(){var e=[];return{add:function(t,a,l,c){t.addListener?t.addListener(l):t.addEventListener(a,l,c),e.push([t,a,l,c])},input:function(e,t,a,l){this.add(e,t,function(e){return function(t){t.nativeEvent&&(t=t.nativeEvent);var a=t.changedTouches||[],l=t.targetTouches||[],c=t.detail&&t.detail.x?t.detail:null;return e({id:c?c.identifier?c.identifier:"i":l[0]?l[0]?l[0].identifier:"e":"d",idChanged:c?c.identifier?c.identifier:"i":a[0]?a[0]?a[0].identifier:"e":"d",raw:t,x:c&&c.x?c.x:l[0]?l[0].screenX:c?c.x:t.pageX,y:c&&c.y?c.y:l[0]?l[0].screenY:c?c.y:t.pageY})}}(a),l)},purge:function(){e.forEach((function(e){e[0].removeListener?e[0].removeListener(e[2]):e[0].removeEventListener(e[1],e[2],e[3])})),e=[]}}}function d(e,t,a){return Math.min(Math.max(e,t),a)}function f(e){return(e>0?1:0)-(e<0?1:0)||+e}function p(e){return e.getBoundingClientRect()}function h(e,t,a,l){var c=e&&e[t];return null==c?a:l&&"function"==typeof c?c():c}function y(e){return Math.round(1e6*e)/1e6}function u(e,t){if(e===t)return!0;var a=typeof e;if(a!==typeof t)return!1;if("object"!==a||null===e||null===t)return"function"===a&&e.toString()===t.toString();if(e.length!==t.length||Object.getOwnPropertyNames(e).length!==Object.getOwnPropertyNames(t).length)return!1;for(var l in e)if(!u(e[l],t[l]))return!1;return!0}function E(e,t){return u(e.current,t)||(e.current=t),e.current}var x=function(){return x=Object.assign||function(e){for(var t,a=1,l=arguments.length;a0?1:-1),{abs:n+t*i*c,origin:r,rel:n}}function G(e,t,a){var l;if(t||!I())return T(e,a);if(!L(e))return null;var c=O(null!=a?a:b),r=c.abs,n=e-c.rel,s=r+n;l=T(s);var o=T(s-i*f(n));return(null!==o&&Math.abs(o)6&&(g=g.slice(-6)),b=Math.round(1e6*t)/1e6;var l=P().abs;if(l!==k){var c=null!==k;k=l,c&&e.emit("slideChanged")}}function P(r){var s=r?null:function(){if(i){var e=I(),t=e?(b%a+a)%a:b,r=(e?b%a:b)-n[0][2],s=0-(r<0&&e?a-Math.abs(r):r),o=0,d=O(b),h=d.abs,y=d.rel,z=n[y][2],M=n.map((function(t,l){var r=s+o;(r<0-t[0]||r>1)&&(r+=(Math.abs(r)>a-1&&e?a:0)*f(-r));var n=l-y,m=f(n),d=n+h;e&&(-1===m&&r>z&&(d+=i),1===m&&rE&&(r-=a));var p=r+t[0]+t[1],x=Math.max(r>=0&&p<=1?1:p<0||r>1?0:r<0?Math.min(1,(t[0]+r)/t[0]):(1-r)/t[0],0);return o+=t[0]+t[1],{abs:d,distance:c.rtl?-1*r+1-t[0]:r,portion:x,size:t[0]}}));return h=C(h),y=j(h),{abs:C(h),length:l,max:v,maxIdx:p,min:x,minIdx:m,position:b,progress:e?t/a:b/l,rel:y,slides:M}}}();return t.details=s,e.emit("detailsChanged"),s}return t={absToRel:j,add:w,details:null,distToIdx:H,idxToDist:G,init:function(t){if(function(){if(c=e.options,n=(c.trackConfig||[]).map((function(e){return[h(e,"size",1),h(e,"spacing",0),h(e,"origin",0)]})),i=n.length){a=y(n.reduce((function(e,t){return e+t[0]+t[1]}),0));var t,r=i-1;l=y(a+n[0][2]-n[r][0]-n[r][2]-n[r][1]),(s=n.reduce((function(e,a){if(!e)return[0];var l=n[e.length-1],c=e[e.length-1]+(l[0]+l[2])+l[1];return c-=a[2],e[e.length-1]>c&&(c=e[e.length-1]),c=y(c),e.push(c),(!t||t200||(f(l)!==f(t.distance)&&t.distance&&(t={distance:0,lastTimestamp:0,time:0}),t.time&&(t.distance+=l),t.lastTimestamp&&(t.time+=c-t.lastTimestamp),t.lastTimestamp=c),t}),{distance:0,lastTimestamp:0,time:0});return t.distance/t.time||0}}}function M(e){var t,a,l,c,r,n,i;function s(e){return 2*e}function o(e){return d(e,n,i)}function m(e){return 1-Math.pow(1-e,3)}function p(){u();var t="free-snap"===e.options.mode,a=e.track,n=a.velocity();l=f(n);var i=e.track.details,d=[];if(n||!t){var p=h(n),y=p.dist,E=p.dur;if(E=s(E),y*=l,t){var x=a.idxToDist(a.distToIdx(y),!0);x&&(y=x)}d.push({distance:y,duration:E,easing:m});var z=i.position,v=z+y;if(vr){var M=vr||i=b)return t;if(i0||i>w&&a<0)return t;var o=(ib&&M0||M===w&&a<0)&&o(i),x+=v,!z&&Math.abs(x*c)>5&&(z=!0,n(t,"moves","")),e.track.add(v),E=m,e.emit("dragged")}}function G(t){!p&&e.track.details&&e.track.details.length&&(z=!1,x=0,p=!0,u=!0,y=t.id,L(t),E=C(t),e.emit("dragStarted"))}function T(a){p&&y===a.idChanged&&(n(t,"moves",null),p=!1,e.emit("dragEnded"))}function L(e){var t=I(),a=t?e.y:e.x,l=t?e.x:e.y,c=void 0!==v&&void 0!==M&&Math.abs(M-l)<=Math.abs(v-a);return v=a,M=l,c}function C(e){return I()?e.y:e.x}function I(){return e.options.vertical}function j(){c=e.size,r=I()?window.innerHeight:window.innerWidth;var t=e.track.details;t&&(b=t.min,w=t.max)}function Z(){if(H.purge(),e.options.drag&&!e.options.disabled){var a;a=e.options.dragSpeed||1,h="function"==typeof a?a:function(e){return e*a},l=e.options.rtl?-1:1,j(),t=e.container,function(){var e="data-keen-slider-clickable";i("[".concat(e,"]:not([").concat(e,"=false])"),t).map((function(e){H.add(e,"mousedown",o),H.add(e,"touchstart",o)}))}(),H.add(t,"dragstart",(function(e){s(e)})),H.input(t,"ksDragStart",G),H.input(t,"ksDrag",O),H.input(t,"ksDragEnd",T),H.input(t,"mousedown",G),H.input(t,"mousemove",O),H.input(t,"mouseleave",T),H.input(t,"mouseup",T),H.input(t,"touchstart",G,{passive:!0}),H.input(t,"touchmove",O,{passive:!1}),H.input(t,"touchend",T),H.input(t,"touchcancel",T),H.add(window,"wheel",(function(e){p&&s(e)}));var c="data-keen-slider-scrollable";i("[".concat(c,"]:not([").concat(c,"=false])"),e.container).map((function(e){return function(e){var t;H.input(e,"touchstart",(function(e){t=C(e),k=!0,g=!0}),{passive:!0}),H.input(e,"touchmove",(function(a){var l=I(),c=l?e.scrollHeight-e.clientHeight:e.scrollWidth-e.clientWidth,r=t-C(a),n=l?e.scrollTop:e.scrollLeft,i=l&&"scroll"===e.style.overflowY||!l&&"scroll"===e.style.overflowX;if(t=C(a),(r<0&&n>0||r>0&&n=1||(e.origin=1-t-(m>1?0:1-m)),e}))}a.options.trackConfig=r}function w(){O();var e=a.size;a.options.disabled||e===c||(c=e,k())}function H(){w(),setTimeout(w,500),setTimeout(w,2e3)}function O(){var e=p(a.container);a.size=(a.options.vertical?e.height:e.width)||1}function G(){a.slides=i(a.options.selector,a.container)}a.container=(o=i(e,document)).length?o[0]:null,a.destroy=function(){d.purge(),a.emit("destroyed"),f(!0)},a.prev=function(){a.moveToIdx(a.track.details.abs-1,!0)},a.next=function(){a.moveToIdx(a.track.details.abs+1,!0)},a.update=k,v(a.options)}}var w=function(e,t,a){try{return function(e,t){var a,l={};return a={emit:function(e){l[e]&&l[e].forEach((function(e){e(a)}));var t=a.options&&a.options[e];t&&t(a)},moveToIdx:function(e,t,l){var c=a.track.idxToDist(e,t);if(c){var r=a.options.defaultAnimation;a.animator.start([{distance:c,duration:h(l||r,"duration",500),easing:h(l||r,"easing",(function(e){return 1+--e*e*e*e*e}))}])}},on:function(e,t,a){void 0===a&&(a=!1),l[e]||(l[e]=[]);var c=l[e].indexOf(t);c>-1?a&&delete l[e][c]:a||l[e].push(t)},options:e},function(){if(a.track=v(a),a.animator=function(e){var t,a,l,c,r,n;function i(t){n||(n=t),s(!0);var r=t-n;r>l&&(r=l);var d=c[a];if(d[3]'}},1320:function(e,t){t.Z={body:''}},9520:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/a3628979.5f82cd9c.js b/assets/js/a3628979.5f82cd9c.js new file mode 100644 index 0000000..7718311 --- /dev/null +++ b/assets/js/a3628979.5f82cd9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8050],{5549:function(e,t,a){a.d(t,{A:function(){return l},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function l(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=d+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},8167:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return h},default:function(){return v},frontMatter:function(){return k},metadata:function(){return N},toc:function(){return g}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),d=a(541),l=a(5514),o=a(6577),m=a(2895),p=a(7508),s=a(5549),c=["components"],k={id:"MpegDecoder",title:"MpegDecoder",sidebar_label:"MpegDecoder",slug:"/apis/MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly."},h=void 0,N={unversionedId:"apis/MpegDecoder",id:"apis/MpegDecoder",title:"MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly.",source:"@site/docs/apis/MpegDecoder.mdx",sourceDirName:"apis",slug:"/apis/MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegDecoder",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/apis/MpegDecoder.mdx",tags:[],version:"current",frontMatter:{id:"MpegDecoder",title:"MpegDecoder",sidebar_label:"MpegDecoder",slug:"/apis/MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly."},sidebar:"apis",previous:{title:"setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/setGlobal"},next:{title:"MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegEncoder"}},u={},g=[{value:"Arguments",id:"arguments",level:2},{value:"Requires",id:"requires",level:3},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"ExtractFrame",id:"extractframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractFrameByTime",id:"extractframebytime",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractGOP",id:"extractgop",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractGOPByTime",id:"extractgopbytime",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ResetGOPPosition",id:"resetgopposition",level:3},{value:"Requires",id:"requires",level:4},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Scale the decoded frame",id:"scale-the-decoded-frame",level:3},{value:"Use multi-thread decoding",id:"use-multi-thread-decoding",level:3}],f={toc:g};function v(e){var t=e.components,a=(0,r.Z)(e,c);return(0,i.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(s.q,{mdxType:"Splitter"}),(0,i.kt)(s.A,{ver:"3.2.0",url:"MpegCoder.h#L21",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec = mpegCoder.MpegDecoder(videoPath=None)\n")),(0,i.kt)("p",null,"The frame-level video decoder used for demuxing a video file."),(0,i.kt)("p",null,"This decoder instance serves as a video file reader. It supports:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Decoding the video frames into ",(0,i.kt)("a",{parentName:"li",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),"."),(0,i.kt)("li",{parentName:"ul"},"Reading video frames consecutively."),(0,i.kt)("li",{parentName:"ul"},"Setting the reading cursor to any position."),(0,i.kt)("li",{parentName:"ul"},"Scaling the decoded video frames to a specific size.")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," requires users to initialize the decoder before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the decoder is destructed."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("h3",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read. Configuring this value will causes the video to be opened by ",(0,i.kt)("a",{parentName:"td",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". We do not recommend users to set this value when initializing the decoder.")))),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"except")," the default video path. If a video is opened by the decoder, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file readers."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.resetPath(videoPath)\n")),(0,i.kt)("p",null,"Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = dec.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the read video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the read video. This value is determined by the video file.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the read video. This value is determined by the video file.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameCount")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of returned frames in the last frame extraction method.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"coderName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the codec used for decoding the video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"duration")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The total seconds of this video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"estFrameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The estimated total frame number (may be not accurate).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"avgFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The average of the frame rate of the video stream. The unit is FPS.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters. These parameters could serve as ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict")," for ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegEncoder")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegServer"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.setParameter(widthDst=None, heightDst=None, nthread=None)\n")),(0,i.kt)("p",null,"Set the configurations of the decoder. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.FFmpegSetup(videoPath=None)\n")),(0,i.kt)("p",null,"Open the video file, and initialize the decoder. After the decoder initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video is being opened by the decoder now, this video will be closed first, then the new video will be opened."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = dec.ExtractFrame(framePos=0, frameNum=1)\n")),(0,i.kt)("p",null,"Extract several frames at a specific position."),(0,i.kt)("p",null,"This API is recommended to be used when users only want to fetch few frames. The API will seek the starting position defined by ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos"),", then extract the required number of frames."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used as the starting postion. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of frames that require to be extracted.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")," (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum"),"), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframebytime"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrameByTime")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = dec.ExtractFrameByTime(timePos=0, frameNum=1)\n")),(0,i.kt)("p",null,"Extract several frames at a specific position."),(0,i.kt)("p",null,"The functionality of this API is the same as ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()")),". Instead of using a frame index, this method seek the reading cursor by a time point (the unit is ",(0,i.kt)("inlineCode",{parentName:"p"},"second"),")."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used as the starting postion. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of frames that require to be extracted.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")," (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum"),"), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractgop"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractGOP")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ExtractGOP(framePos=-1)\n")),(0,i.kt)("p",null,"Extract a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of Pictures (GOP)",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". The GOP size is determined by the video file. ",(0,i.kt)("del",{parentName:"p"},"Users could use ",(0,i.kt)("a",{parentName:"del",href:"#getparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"getParameter()"))," to find the GOP size.")),(0,i.kt)("p",null,"We recommend to use ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractGOP()")," when a video file needs to be read consecutively. When the returned value is ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),", the read cursor reaches the end of the video."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Each time this method is used with ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos>=0"),", the current reading cursor will be reset by ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos"),"."))),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects, the GOP will be extracted from the current reading cursor position.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"gop")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is the GOP size (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than the GOP size), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractgopbytime"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractGOPByTime")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ExtractGOPByTime(timePos=-1)\n")),(0,i.kt)("p",null,"Extract a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of Pictures",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". Instead of using a frame index, this method uses a time point (the unit is ",(0,i.kt)("inlineCode",{parentName:"p"},"second"),") to seek the starting position."),(0,i.kt)("p",null,"We recommend to use ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractGOPByTime()")," when a video file needs to be read consecutively. When the returned value is ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),", the read cursor reaches the end of the video."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Each time this method is used with ",(0,i.kt)("inlineCode",{parentName:"p"},"timePos>=0"),", the current reading cursor will be reset by ",(0,i.kt)("inlineCode",{parentName:"p"},"timePos"),"."))),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects, the GOP will be extracted from the current reading cursor position.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"gop")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is the GOP size (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than the GOP size), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetgopposition"},(0,i.kt)("inlineCode",{parentName:"h3"},"ResetGOPPosition")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ResetGOPPosition(framePos=-1, timePos=-1)\n")),(0,i.kt)("p",null,"Reset the current reading cursor of ",(0,i.kt)("a",{parentName:"p",href:"#extractgop"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractGOP()"))," and ",(0,i.kt)("a",{parentName:"p",href:"#extractgopbytime"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractGOPByTime()")),". The cursor could be set by either a frame index or a time point (",(0,i.kt)("inlineCode",{parentName:"p"},"second"),"). This method is merely a configuration, and will not return the GOP."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used for seeking the starting position of the GOP. If this value is configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0")," or the ",(0,i.kt)("inlineCode",{parentName:"td"},"framePos")," is configured, it will not take effects.")))),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(dec)\n")),(0,i.kt)("p",null,"Return a brief report of the current decoder status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the decoder status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/decoding"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Decoding")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"scale-the-decoded-frame"},"Scale the decoded frame"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\ndec.setParameter(widthDst=720, heightDst=486)\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-decoding"},"Use multi-thread decoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\ndec.setParameter(nthread=8)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/a4212ab6.50478e6b.js b/assets/js/a4212ab6.50478e6b.js new file mode 100644 index 0000000..db8712b --- /dev/null +++ b/assets/js/a4212ab6.50478e6b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[6976],{5549:function(e,t,a){a.d(t,{A:function(){return i},q:function(){return p}});var n=a(7294),r=a(9960),m="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",s="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=s+"/"+e.url;break;case"3.1.0":t=m+"/"+e.url}else t=s+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function p(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}p.defaultProps={padx:"1ex"}},2548:function(e,t,a){a.r(t),a.d(t,{assets:function(){return g},contentTitle:function(){return k},default:function(){return v},frontMatter:function(){return h},metadata:function(){return c},toc:function(){return u}});var n=a(3117),r=a(102),m=(a(7294),a(3905)),s=a(541),i=a(5514),p=a(6577),l=a(2895),d=a(7508),o=a(5549),N=["components"],h={id:"MpegServer",title:"MpegServer",sidebar_label:"MpegServer",slug:"/apis/MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly."},k=void 0,c={unversionedId:"apis/MpegServer",id:"version-3.2.x/apis/MpegServer",title:"MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly.",source:"@site/versioned_docs/version-3.2.x/apis/MpegServer.mdx",sourceDirName:"apis",slug:"/apis/MpegServer",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegServer",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/apis/MpegServer.mdx",tags:[],version:"3.2.x",frontMatter:{id:"MpegServer",title:"MpegServer",sidebar_label:"MpegServer",slug:"/apis/MpegServer",description:"This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly."},sidebar:"apis",previous:{title:"MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegClient"}},g={},u=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"ServeFrame",id:"serveframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ServeFrameBlock",id:"serveframeblock",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"FFmpegClose",id:"ffmpegclose",level:3},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Optimize the video encoding",id:"optimize-the-video-encoding",level:3},{value:"Rescale and resample the video",id:"rescale-and-resample-the-video",level:3},{value:"Use multi-thread encoding",id:"use-multi-thread-encoding",level:3},{value:"Configure the ahead frame number manually",id:"configure-the-ahead-frame-number-manually",level:3}],f={toc:u};function v(e){var t=e.components,a=(0,r.Z)(e,N);return(0,m.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,m.kt)("p",null,(0,m.kt)(i.Z,{icon:p.Z,mdxType:"InlineIcon"})," Class",(0,m.kt)(o.q,{mdxType:"Splitter"}),(0,m.kt)(o.A,{ver:"3.2.0",url:"MpegStreamer.h#L114",mdxType:"SourceURL"},(0,m.kt)(i.Z,{icon:d.Z,mdxType:"InlineIcon"})," Source")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev = mpegCoder.MpegServer()\n")),(0,m.kt)("p",null,"The frame-level video stream service used for pushing an online video stream."),(0,m.kt)("p",null,"This service instance is integrated with the features of ",(0,m.kt)("a",{parentName:"p",href:"./MpegEncoder"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegEncoder")),". Like the ",(0,m.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg CLI usages",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),", ",(0,m.kt)("inlineCode",{parentName:"p"},"MpegServer")," could not be run independently. A server program is required to be launched before the instance getting set up. We recommend some server programs ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#preparation"},"here"),"."),(0,m.kt)("p",null,"In practice, we recommend to split this instance into a sub-process, and use the ",(0,m.kt)("a",{parentName:"p",href:"https://docs.python.org/3/library/multiprocessing.html",title:"multiprocessing | Python"},(0,m.kt)("inlineCode",{parentName:"a"},"multiprocessing"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to feed the served data. See the ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#dual-process-example"},"tutorial")," to find the example. Although this class also provides a non-blocking style API, we do not recommend users to use that. "),(0,m.kt)("h2",{id:"arguments"},"Arguments"),(0,m.kt)("p",null,"This class does not has initialization arguments."),(0,m.kt)("h2",{id:"methods"},"Methods"),(0,m.kt)("h3",{id:"clear"},(0,m.kt)("inlineCode",{parentName:"h3"},"clear")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.clear()\n")),(0,m.kt)("p",null,"Clear all configurations ",(0,m.kt)("strong",{parentName:"p"},"including")," the default video address. If a video is being pushed by the server, ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically, and release the connection to the server."),(0,m.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,m.kt)("div",{parentName:"div",className:"admonition-heading"},(0,m.kt)("h5",{parentName:"div"},(0,m.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,m.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,m.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,m.kt)("div",{parentName:"div",className:"admonition-content"},(0,m.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file writers."))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"resetpath"},(0,m.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.resetPath(videoAddress)\n")),(0,m.kt)("p",null,"Reset the default video address to a specific value. Configuring this value will not cause the video to be pushed. This method is merely used as a configuration."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be pushed.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"getparameter"},(0,m.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"param = sev.getParameter(paramName=None)\n")),(0,m.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,m.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"paramName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,m.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,m.kt)("p",null,"Here is a list of checkable ",(0,m.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The current address of the pushed video. If the video is not being pushed, will return the default video address.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"codecName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"formatName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The video format name guessed from ",(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"nthread")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"width")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the pushed video stream. This value is mainly determined by the user configurations.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"height")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the pushed video stream. This value is mainly determined by the user configurations.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,m.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,m.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the pushed video stream. The unit is FPS.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"left"},"A wait reference with the unit of ",(0,m.kt)("inlineCode",{parentName:"td"},"second"),". This value represents how long users need to wait from this moment before pushing the next video frame. This value is required to be used with the non-blocking API ",(0,m.kt)("a",{parentName:"td",href:"#serveframe"},(0,m.kt)("inlineCode",{parentName:"a"},"ServeFrame()")),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"ptsAhead")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target ahead time duration in the unit of time stamp. This value is used for controlling the amount of ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," and the waiting time of the blocking API. It is converted from the configuration ",(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead"),".")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"param")),(0,m.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,m.kt)("inlineCode",{parentName:"td"},"paramName")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,m.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"setparameter"},(0,m.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.setParameter(\n decoder=None, configDict=None, videoPath=None, codecName=None,\n nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None,\n GOPSize=None, maxBframe=None, frameRate=None, frameAhead=None\n)\n")),(0,m.kt)("p",null,"Set the configurations of the server. To make the configurations take effects, these parameters need to be configured before ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"decoder")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("a",{parentName:"td",href:"./MpegDecoder"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegDecoder"))," or ",(0,m.kt)("a",{parentName:"td",href:"./MpegClient"},(0,m.kt)("inlineCode",{parentName:"a"},"MpegClient"))),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"When configure this argument, the required configurations will be copied from a decoder or a client. If users also provide duplicated arguments in the same call, these copied parameters have a lower preference than those specified by users. This argument is useful when trancoding a video.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"configDict")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"dict")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"An alternative of the argument ",(0,m.kt)("inlineCode",{parentName:"td"},"decoder")," when the parameters need to be passed through different processes. Using ",(0,m.kt)("inlineCode",{parentName:"td"},"configDict=decoder.getParameter()")," is equivalent to using ",(0,m.kt)("inlineCode",{parentName:"td"},"decoder=decoder"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The current address of the pushed video. If the video is not being pushed, will return the default video address.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"codecName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The name of the encoder. See ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders",title:"Video encoders of FFMpeg"},"here",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"}))," to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"formatName")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The video format name guessed from ",(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"nthread")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The number of encoder threads.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bitRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"float")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"width")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the pushed video stream.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"height")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the pushed video stream.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The width of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"width"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The height of the source frame. This value should be consistent with the size of the ",(0,m.kt)("a",{parentName:"td",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,m.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),". If not given, will use ",(0,m.kt)("inlineCode",{parentName:"td"},"height"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The size of one ",(0,m.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"GOP",(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"maxBframe")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than ",(0,m.kt)("inlineCode",{parentName:"td"},"16"),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameRate")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"tuple")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target frame rate of the pushed video stream. This value should be a tuple of two ",(0,m.kt)("inlineCode",{parentName:"td"},"int"),"s: ",(0,m.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". This format is consistent with ",(0,m.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/structAVRational.html",title:"AVRational"},(0,m.kt)("inlineCode",{parentName:"a"},"AVRational"),(0,m.kt)(s.Z,{mdxType:"IconExternalLink"})),".")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"int")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The target ahead frame number. This value is used for controlling the number of served frames. For example, ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," is calculated by the equation: ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mi",{parentName:"msub"},"w")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"T"),(0,m.kt)("mo",{parentName:"mrow"},"\xd7"),(0,m.kt)("mi",{parentName:"mrow"},"max"),(0,m.kt)("mo",{parentName:"mrow"},"\u2061"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d"))),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mtext",{parentName:"mrow"},"\xa0"),(0,m.kt)("mn",{parentName:"mrow"},"0"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_w = T \\times \\max(N_{pushed} - N_{played} - N_{ahead},~ 0)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.02691em"}},"w")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7667em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\xd7"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mop"},"max"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.01968em"}},"pl"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ye"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ah"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace nobreak"},"\xa0"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"0"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"u"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{pushed}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"u"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"l"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{played}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.01968em"}},"pl"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ye"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"N"),(0,m.kt)("mrow",{parentName:"msub"},(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"d")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"N_{ahead}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"N"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"ah"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"d"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," are the number of pushed frames, the number of played frames and ",(0,m.kt)("inlineCode",{parentName:"td"},"frameAhead")," respectively. ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"T")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T")))))," is the time base. By this way, the ",(0,m.kt)("inlineCode",{parentName:"td"},"waitRef")," and the waiting time of the blocking API ",(0,m.kt)("a",{parentName:"td",href:"#serveframeblock"},(0,m.kt)("inlineCode",{parentName:"a"},"ServeFrameBlock()"))," will be controlled by this value. Users do not need to specify it explicitly, because it could be calculated from the configured ",(0,m.kt)("inlineCode",{parentName:"td"},"GOPSize"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"ffmpegsetup"},(0,m.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.FFmpegSetup(videoAddress=None)\n")),(0,m.kt)("p",null,"Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the protocol used by the serving address and the user configurations set by ",(0,m.kt)("a",{parentName:"p",href:"#setparameter"},(0,m.kt)("inlineCode",{parentName:"a"},"setParameter()")),". If an video is being pushed by the server now, this video will be disconnected and released first, then the new video will be pushed with the same configurations."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,m.kt)("inlineCode",{parentName:"td"},"bytes")),(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be pushed. If not given, will use the default path configured by ",(0,m.kt)("a",{parentName:"td",href:"#resetpath"},(0,m.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video address to change.")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"dumpfile"},(0,m.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.dumpFile()\n")),(0,m.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,m.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,m.kt)("div",{parentName:"div",className:"admonition-heading"},(0,m.kt)("h5",{parentName:"div"},(0,m.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,m.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,m.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,m.kt)("div",{parentName:"div",className:"admonition-content"},(0,m.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"serveframe"},(0,m.kt)("inlineCode",{parentName:"h3"},"ServeFrame")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"is_success = sev.ServeFrame(PyArrayFrame)\n")),(0,m.kt)("p",null,"Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the stream. But the writting to the codec buffer will be finished instantly."),(0,m.kt)("p",null,"This is the non-blocking API, which means the current thread will be only blocked by the frame encoding operations. Users need to use this API with ",(0,m.kt)("a",{parentName:"p",href:"#getparameter"},(0,m.kt)("inlineCode",{parentName:"a"},"getParameter('waitRef')"))," to control the number of served frames. Otherwise, serving too many frames will make the data to be dropped or cause the video server to collapse. The example about how to correctly use this API could be found ",(0,m.kt)("a",{parentName:"p",href:"../examples/server#non-blocking-example"},"here"),"."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,m.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"is_success")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bool")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"serveframeblock"},(0,m.kt)("inlineCode",{parentName:"h3"},"ServeFrameBlock")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"is_success = sev.ServeFrameBlock(PyArrayFrame)\n")),(0,m.kt)("p",null,"Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when ",(0,m.kt)("a",{parentName:"p",href:"#ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"a"},"FFmpegClose()"))," is called, the frames in the buffer will be flushed into the stream. The writting and pushing speeds to the codec buffer are controlled by user configurations."),(0,m.kt)("p",null,"This is the ",(0,m.kt)("strong",{parentName:"p"},"recommended")," blocking API, which means the method will cause the current thread blocked if the served frames are ahead of the playing time too much. In this case, the method will wait until the playing time catch the half of the served but not played frames. This method will ensure the safety of the video server."),(0,m.kt)("h4",{id:"requires"},"Requires"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"PyArrayFrame")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)(i.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,m.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W, C)"),", where ",(0,m.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the source height (",(0,m.kt)("inlineCode",{parentName:"td"},"heightSrc"),") and source width (",(0,m.kt)("inlineCode",{parentName:"td"},"widthSrc"),") respectively. ",(0,m.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel.")))),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"is_success")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"bool")),(0,m.kt)("td",{parentName:"tr",align:"left"},"The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"True"),"; Otherwise, will return ",(0,m.kt)("inlineCode",{parentName:"td"},"False"),".")))),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"ffmpegclose"},(0,m.kt)("inlineCode",{parentName:"h3"},"FFmpegClose")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"sev.FFmpegClose()\n")),(0,m.kt)("p",null,"Close the video stream and release the connection. Calling this method will flush all buffered frames into the video stream. In some cases, the video tail will be writen to the stream. If users does not call this method explicitly, it will be called when ",(0,m.kt)("inlineCode",{parentName:"p"},"clear()")," is called or when the server is destructed."),(0,m.kt)("h2",{id:"operators"},"Operators"),(0,m.kt)("h3",{id:"__str__"},(0,m.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"info = str(sev)\n")),(0,m.kt)("p",null,"Return a brief report of the current stream encoder status."),(0,m.kt)("h4",{id:"returns"},"Returns"),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,m.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,m.kt)("th",{parentName:"tr",align:"left"},(0,m.kt)("div",{className:"center"},"Description")))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"info")),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("inlineCode",{parentName:"td"},"str")),(0,m.kt)("td",{parentName:"tr",align:"left"},"A brief report of the stream encoder status, the configurations and parameters will be listed as formatted texts.")))),(0,m.kt)("h2",{id:"examples"},"Examples"),(0,m.kt)("p",null,"See ",(0,m.kt)("a",{parentName:"p",href:"../examples/server"},(0,m.kt)("em",{parentName:"a"},(0,m.kt)("inlineCode",{parentName:"em"},"Server")))," in the tutorial. Here we also show some specific configurations:"),(0,m.kt)("h3",{id:"optimize-the-video-encoding"},"Optimize the video encoding"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\n...\nsev = mpegCoder.MpegServer()\nsev.setParameter(decoder=dec, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, maxBframe=16)\n...\n")),(0,m.kt)("h3",{id:"rescale-and-resample-the-video"},"Rescale and resample the video"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(width=1280, height=720, frameRate=(5, 1), GOPSize=12, codecName='libx265', videoAddress='rtsp://localhost:8554/video')\n...\n")),(0,m.kt)("h3",{id:"use-multi-thread-encoding"},"Use multi-thread encoding"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(width=1280, height=720, GOPSize=12, nthread=8, videoAddress='rtsp://localhost:8554/video')\n...\n")),(0,m.kt)("h3",{id:"configure-the-ahead-frame-number-manually"},"Configure the ahead frame number manually"),(0,m.kt)("pre",null,(0,m.kt)("code",{parentName:"pre",className:"language-python"},"...\nsev = mpegCoder.MpegServer()\nsev.setParameter(decoder=d, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, frameAhead=48)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/a57d836b.d83e3b62.js b/assets/js/a57d836b.d83e3b62.js new file mode 100644 index 0000000..4c2a1dd --- /dev/null +++ b/assets/js/a57d836b.d83e3b62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[2715],{8793:function(e,n,t){var o=t(7294),i=t(9960),r=t(1954),a=t(2949);n.Z=function(e){var n=(0,o.useState)(!1),t=n[0],l=n[1];(0,o.useEffect)((function(){l(!0)}),[]);var p,s,d,m=(p=(0,a.I)(),s=p.colorMode,p.setColorMode,"dark"===s?"button--secondary button--outline":"button--secondary");return d=e.index?"button "+m+" button--lg button--index":"button "+m+" button--lg",o.createElement(i.Z,{key:String(t),className:d,to:e.to},e.icon&&o.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},6586:function(e,n,t){t.r(n),t.d(n,{assets:function(){return k},contentTitle:function(){return c},default:function(){return N},frontMatter:function(){return u},metadata:function(){return h},toc:function(){return g}});var o=t(3117),i=t(102),r=(t(7294),t(3905)),a=t(8793),l=t(541),p=t(5514),s=t(3807),d=t(7225),m=["components"],u={id:"installation",title:"Troubleshooting for installation",sidebar_label:"Installation",slug:"/troubleshooting/installation",description:"The troubleshooting for installation."},c=void 0,h={unversionedId:"troubleshooting/installation",id:"version-3.1.0/troubleshooting/installation",title:"Troubleshooting for installation",description:"The troubleshooting for installation.",source:"@site/versioned_docs/version-3.1.0/troubleshooting/installation.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/installation",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/troubleshooting/installation.mdx",tags:[],version:"3.1.0",frontMatter:{id:"installation",title:"Troubleshooting for installation",sidebar_label:"Installation",slug:"/troubleshooting/installation",description:"The troubleshooting for installation."},sidebar:"version-3.1.0/docs",previous:{title:"Server",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/server"},next:{title:"Running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/running"}},k={},g=[{value:"Introduction",id:"introduction",level:2},{value:"Questions and answers",id:"questions-and-answers",level:2},{value:"DLL not found",id:"dll-not-found",level:3},{value:".so not found",id:"so-not-found",level:3},{value:"numpy.core.multiarray not found",id:"numpycoremultiarray-not-found",level:3},{value:"GLibC not found",id:"glibc-not-found",level:3},{value:"Incorrect dependencies",id:"incorrect-dependencies",level:3}],f={toc:g};function N(e){var n=e.components,t=(0,i.Z)(e,m);return(0,r.kt)("wrapper",(0,o.Z)({},f,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"If you could not find your problem in this page, please fire an issue:"),(0,r.kt)("p",null,(0,r.kt)(a.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/new/choose",icon:s.Z,mdxType:"DarkButton"},"Fire an issue")),(0,r.kt)("h2",{id:"questions-and-answers"},"Questions and answers"),(0,r.kt)("h3",{id:"dll-not-found"},"DLL not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"ImportError: DLL load failed while importing mpegCoder: The specified module could not be found.\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": It seems that this error will only occurs when both the following conditions are satisfied:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"You are using Windows."),(0,r.kt)("li",{parentName:"ul"},"You are using the maunally installed ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder"),", not the pip version.")),(0,r.kt)("p",{parentName:"li"},"This error is caused by the absent of required dependencies. It is typically caused when:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Your python version does not match the ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder")," module."),(0,r.kt)("li",{parentName:"ul"},"The required DLL files are neither in the same folder of ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder.pyd"),", nor in the path (environment variable ",(0,r.kt)("inlineCode",{parentName:"li"},"PATH"),")."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Download the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/dll-win-ffmpeg_4_4.tar.xz"},"dependencies",(0,r.kt)(p.Z,{icon:d.Z,mdxType:"InlineIcon"}))," and extract the DLLs in the same folder of ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd"),"."))),(0,r.kt)("h3",{id:"so-not-found"},(0,r.kt)("inlineCode",{parentName:"h3"},".so")," not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"ImportError: lib*****.so.**: cannot open shared object file: No such file or directory\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": It seems that this error will only occurs when both the following conditions are satisfied:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"You are using Linux."),(0,r.kt)("li",{parentName:"ul"},"You are using the maunally installed ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder"),", not the pip version.")),(0,r.kt)("p",{parentName:"li"},"This error is caused by the absent of required dependencies. It is typically caused when:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Your python version does not match the ",(0,r.kt)("inlineCode",{parentName:"li"},"mpegCoder")," module, in this case, the library name should be ",(0,r.kt)("inlineCode",{parentName:"li"},"libpython3.*.so.**"),"."),(0,r.kt)("li",{parentName:"ul"},"The required dependencies files are not in your environment variable ",(0,r.kt)("inlineCode",{parentName:"li"},"$LD_LIBRARY_PATH"),"."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Download the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz"},"dependencies",(0,r.kt)(p.Z,{icon:d.Z,mdxType:"InlineIcon"}))," and extract the missing ",(0,r.kt)("inlineCode",{parentName:"p"},".so")," to a folder in ",(0,r.kt)("inlineCode",{parentName:"p"},"$LD_LIBRARY_PATH"),"."))),(0,r.kt)("h3",{id:"numpycoremultiarray-not-found"},(0,r.kt)("inlineCode",{parentName:"h3"},"numpy.core.multiarray")," not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"ImportError: numpy.core.multiarray failed to import\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": You may not install ",(0,r.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"})),", or your Numpy version is not match the pre-compiled ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". In most cases, a little bit mismatch of the Numpy would not cause this error. Maybe your Numpy version is different from the requirement too much. See ",(0,r.kt)("a",{parentName:"p",href:"../installation/windows#download-mpegcoder"},"Compilation list (Win)")," or ",(0,r.kt)("a",{parentName:"p",href:"../installation/linux#download-mpegcoder"},"Compilation list (Linux)")," to find the best Numpy version.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Reinstall Numpy, or compile ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," by yourself."))),(0,r.kt)("h3",{id:"glibc-not-found"},"GLibC not found"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ******/libdrm.so.2)\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": Your GLibC version is not ",(0,r.kt)("inlineCode",{parentName:"p"},">=2.29"),". To verify that, you could run"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ldd --version\n")),(0,r.kt)("p",{parentName:"li"},"This problem often occurs when you are using an older Linux OS. The supported OS list could be found ",(0,r.kt)("a",{parentName:"p",href:"../installation/linux#import"},"here"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": We recommend to compile and install GLibC ",(0,r.kt)("inlineCode",{parentName:"p"},">=2.29"),". However, if users want a faster hotfix. Please follow the follwing instructions."),(0,r.kt)("p",{parentName:"li"},"If you are using ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," from pip. You could find a folder named ",(0,r.kt)("inlineCode",{parentName:"p"},"lib-fix")," in where ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," is installed, then run the following command:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ln -sf /lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6\n")),(0,r.kt)("p",{parentName:"li"},"The same file (",(0,r.kt)("inlineCode",{parentName:"p"},"libm-2.31.so"),") could be also found in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz"},"Linux dependencies",(0,r.kt)(p.Z,{icon:d.Z,mdxType:"InlineIcon"})),"."))),(0,r.kt)("h3",{id:"incorrect-dependencies"},"Incorrect dependencies"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Question"),": I have not installed any dependencies, and I am not using the PyPI version. Why could I import ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," successfully?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Answer"),": You may have installed FFMpeg before. The FFMpeg libraries are already in your environment. It is danger to work with an incorrect FFMpeg version, because the FFMpeg APIs are keeping changing. Please ensure that your ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," version and your FFMpeg version are consistent.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Fix"),": Install ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," from PyPI, or download our dependencies, or compile ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," by yourself."))))}N.isMDXComponent=!0},7225:function(e,n){n.Z={body:'',width:24,height:24}},3807:function(e,n){n.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/a9cb6f53.3496ce15.js b/assets/js/a9cb6f53.3496ce15.js new file mode 100644 index 0000000..56685ab --- /dev/null +++ b/assets/js/a9cb6f53.3496ce15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[2750],{8793:function(e,t,n){var a=n(7294),r=n(9960),i=n(1954),o=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],d=t[1];(0,a.useEffect)((function(){d(!0)}),[]);var l,m,p,c=(l=(0,o.I)(),m=l.colorMode,l.setColorMode,"dark"===m?"button--secondary button--outline":"button--secondary");return p=e.index?"button "+c+" button--lg button--index":"button "+c+" button--lg",a.createElement(r.Z,{key:String(n),className:p,to:e.to},e.icon&&a.createElement(i.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},6713:function(e,t,n){n.r(t),n.d(t,{assets:function(){return s},contentTitle:function(){return p},default:function(){return N},frontMatter:function(){return m},metadata:function(){return c},toc:function(){return g}});var a=n(3117),r=n(102),i=(n(7294),n(3905)),o=(n(8793),n(5514)),d=n(7225),l=["components"],m={id:"legacy",title:"Installation (legacy versions)",sidebar_label:"Legacy",slug:"/installation/legacy",description:"Archived legacy pre-compiled versions of mpegCoder."},p=void 0,c={unversionedId:"guides/install/legacy",id:"version-3.1.0/guides/install/legacy",title:"Installation (legacy versions)",description:"Archived legacy pre-compiled versions of mpegCoder.",source:"@site/versioned_docs/version-3.1.0/guides/install/legacy.mdx",sourceDirName:"guides/install",slug:"/installation/legacy",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/legacy",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/install/legacy.mdx",tags:[],version:"3.1.0",frontMatter:{id:"legacy",title:"Installation (legacy versions)",sidebar_label:"Legacy",slug:"/installation/legacy",description:"Archived legacy pre-compiled versions of mpegCoder."},sidebar:"version-3.1.0/docs",previous:{title:"Linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/linux"},next:{title:"Decoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/decoding"}},s={},g=[],k={toc:g};function N(e){var t=e.components,n=(0,r.Z)(e,l);return(0,i.kt)("wrapper",(0,a.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"The following built are legacy and ",(0,i.kt)("strong",{parentName:"p"},"deprecated")," versions. They are not technically supported now. But they support older FFMpeg versions. Note that not all funcionalities of ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder")," are supported in these versions. They may also contains severe bugs."))),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,i.kt)("th",{parentName:"tr",align:"center"},"OS"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,i.kt)("th",{parentName:"tr",align:"center"},"FFmpeg"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py36.7z",title:"Windows 2.05, Python 3.6"},(0,i.kt)("inlineCode",{parentName:"a"},"2.05"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.6")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.14")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"4.0"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py35.7z",title:"Windows 2.05, Python 3.5"},(0,i.kt)("inlineCode",{parentName:"a"},"2.05"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"4.0"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.01/mpegCoder_2_0_1_Win.7z",title:"Windows 2.01"},(0,i.kt)("inlineCode",{parentName:"a"},"2.01"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.6")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.14")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.4.2"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Linux.7z",title:"Linux, 2.0"},(0,i.kt)("inlineCode",{parentName:"a"},"2.0"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Win.7z",title:"Windows, 2.0"},(0,i.kt)("inlineCode",{parentName:"a"},"2.0"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Linux.7z",title:"Linux, 1.8"},(0,i.kt)("inlineCode",{parentName:"a"},"1.8"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Win.7z",title:"Windows, 1.8"},(0,i.kt)("inlineCode",{parentName:"a"},"1.8"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Linux.7z",title:"Linux, 1.7"},(0,i.kt)("inlineCode",{parentName:"a"},"1.7"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Win.7z",title:"Windows, 1.7"},(0,i.kt)("inlineCode",{parentName:"a"},"1.7"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))))))}N.isMDXComponent=!0},7225:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/ae84f62c.5f50fde7.js b/assets/js/ae84f62c.5f50fde7.js new file mode 100644 index 0000000..8f9ff99 --- /dev/null +++ b/assets/js/ae84f62c.5f50fde7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8292],{3769:function(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/af961f94.d2816665.js b/assets/js/af961f94.d2816665.js new file mode 100644 index 0000000..005d7fb --- /dev/null +++ b/assets/js/af961f94.d2816665.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[2287],{8793:function(e,t,n){var a=n(7294),r=n(9960),i=n(1954),o=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],d=t[1];(0,a.useEffect)((function(){d(!0)}),[]);var l,m,p,c=(l=(0,o.I)(),m=l.colorMode,l.setColorMode,"dark"===m?"button--secondary button--outline":"button--secondary");return p=e.index?"button "+c+" button--lg button--index":"button "+c+" button--lg",a.createElement(r.Z,{key:String(n),className:p,to:e.to},e.icon&&a.createElement(i.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1528:function(e,t,n){n.r(t),n.d(t,{assets:function(){return g},contentTitle:function(){return p},default:function(){return N},frontMatter:function(){return m},metadata:function(){return c},toc:function(){return s}});var a=n(3117),r=n(102),i=(n(7294),n(3905)),o=(n(8793),n(5514)),d=n(7225),l=["components"],m={id:"legacy",title:"Installation (legacy versions)",sidebar_label:"Legacy",slug:"/installation/legacy",description:"Archived legacy pre-compiled versions of mpegCoder."},p=void 0,c={unversionedId:"guides/install/legacy",id:"guides/install/legacy",title:"Installation (legacy versions)",description:"Archived legacy pre-compiled versions of mpegCoder.",source:"@site/docs/guides/install/legacy.mdx",sourceDirName:"guides/install",slug:"/installation/legacy",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/legacy",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/install/legacy.mdx",tags:[],version:"current",frontMatter:{id:"legacy",title:"Installation (legacy versions)",sidebar_label:"Legacy",slug:"/installation/legacy",description:"Archived legacy pre-compiled versions of mpegCoder."},sidebar:"docs",previous:{title:"Linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/linux"},next:{title:"Examples",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/examples"}},g={},s=[],k={toc:s};function N(e){var t=e.components,n=(0,r.Z)(e,l);return(0,i.kt)("wrapper",(0,a.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"The following built are legacy and ",(0,i.kt)("strong",{parentName:"p"},"deprecated")," versions. They are not technically supported now. But they support older FFMpeg versions. Note that not all funcionalities of ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder")," are supported in these versions. They may also contains severe bugs."))),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,i.kt)("th",{parentName:"tr",align:"center"},"OS"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,i.kt)("th",{parentName:"tr",align:"center"},"FFmpeg"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py36.7z",title:"Windows 2.05, Python 3.6"},(0,i.kt)("inlineCode",{parentName:"a"},"2.05"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.6")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.14")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"4.0"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py35.7z",title:"Windows 2.05, Python 3.5"},(0,i.kt)("inlineCode",{parentName:"a"},"2.05"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"4.0"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.01/mpegCoder_2_0_1_Win.7z",title:"Windows 2.01"},(0,i.kt)("inlineCode",{parentName:"a"},"2.01"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.6")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.14")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.4.2"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Linux.7z",title:"Linux, 2.0"},(0,i.kt)("inlineCode",{parentName:"a"},"2.0"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Win.7z",title:"Windows, 2.0"},(0,i.kt)("inlineCode",{parentName:"a"},"2.0"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Linux.7z",title:"Linux, 1.8"},(0,i.kt)("inlineCode",{parentName:"a"},"1.8"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Win.7z",title:"Windows, 1.8"},(0,i.kt)("inlineCode",{parentName:"a"},"1.8"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Linux.7z",title:"Linux, 1.7"},(0,i.kt)("inlineCode",{parentName:"a"},"1.7"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Linux"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Win.7z",title:"Windows, 1.7"},(0,i.kt)("inlineCode",{parentName:"a"},"1.7"),(0,i.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"}))),(0,i.kt)("td",{parentName:"tr",align:"center"},"Windows"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.5")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"1.13")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"3.3"))))))}N.isMDXComponent=!0},7225:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/b0a4415c.6543637b.js b/assets/js/b0a4415c.6543637b.js new file mode 100644 index 0000000..b17ccd5 --- /dev/null +++ b/assets/js/b0a4415c.6543637b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9870],{8793:function(e,t,n){var a=n(7294),r=n(9960),o=n(1954),i=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],l=t[1];(0,a.useEffect)((function(){l(!0)}),[]);var d,p,m,s=(d=(0,i.I)(),p=d.colorMode,d.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+s+" button--lg button--index":"button "+s+" button--lg",a.createElement(r.Z,{key:String(n),className:m,to:e.to},e.icon&&a.createElement(o.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1649:function(e,t,n){n.r(t),n.d(t,{assets:function(){return u},contentTitle:function(){return k},default:function(){return f},frontMatter:function(){return c},metadata:function(){return h},toc:function(){return g}});var a=n(3117),r=n(102),o=(n(7294),n(3905)),i=n(8793),l=n(541),d=n(5514),p=n(7225),m=n(866),s=["components"],c={id:"windows",title:"Installation for Windows",sidebar_label:"Windows",slug:"/installation/windows",description:"A tutorial about the installation or compilation of the package for Windows."},k=void 0,h={unversionedId:"guides/install/windows",id:"version-3.2.x/guides/install/windows",title:"Installation for Windows",description:"A tutorial about the installation or compilation of the package for Windows.",source:"@site/versioned_docs/version-3.2.x/guides/install/windows.mdx",sourceDirName:"guides/install",slug:"/installation/windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/windows",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/guides/install/windows.mdx",tags:[],version:"3.2.x",frontMatter:{id:"windows",title:"Installation for Windows",sidebar_label:"Windows",slug:"/installation/windows",description:"A tutorial about the installation or compilation of the package for Windows."},sidebar:"docs",previous:{title:"PyPI",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/pypi"},next:{title:"Linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/linux"}},u={},g=[{value:"Install the pre-compiled module",id:"install-the-pre-compiled-module",level:2},{value:"Download mpegCoder",id:"download-mpegcoder",level:3},{value:"Install Numpy",id:"install-numpy",level:3},{value:"Download dependencies",id:"download-dependencies",level:3},{value:"Import",id:"import",level:3},{value:"Compile the module",id:"compile-the-module",level:2}],N={toc:g};function f(e){var t=e.components,n=(0,r.Z)(e,s);return(0,o.kt)("wrapper",(0,a.Z)({},N,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This guide contains steps for installing or compiling the ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," module manually. We recommend users who need to use ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," in a project locally to install the package by this way."),(0,o.kt)("h2",{id:"install-the-pre-compiled-module"},"Install the pre-compiled module"),(0,o.kt)("h3",{id:"download-mpegcoder"},"Download ",(0,o.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,o.kt)("p",null,"First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,o.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,o.kt)("th",{parentName:"tr",align:"center"},"VS"),(0,o.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py310.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.10.4")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py39.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.9.12")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py38.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.22.3")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.8.13")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py37.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.21.5")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.7.12")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.2.0/mpegCoder_3_2_0_Win_py36.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"3.2.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"5.0")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"1.19.5")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"3.6.15")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"2022 (v143)")),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("inlineCode",{parentName:"td"},"Windows 11 21H2"))))),(0,o.kt)("p",null,"After extracting the tarball, we could get ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd"),"."),(0,o.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"Note that the above versions only show the environment when building ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". It does not mean that they are the dependencies of running ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". For example, users could use ",(0,o.kt)("inlineCode",{parentName:"p"},"python 3.9.5")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"numpy 1.22.0")," to run ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,o.kt)("h3",{id:"install-numpy"},"Install Numpy"),(0,o.kt)("p",null,"To run ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", you are required to install ",(0,o.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,o.kt)(l.Z,{mdxType:"IconExternalLink"}))," with the correct version first. The best version for each ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," release has been listed before. If your Numpy version is differnt from the best version too much, ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," may not work. Here is the command for installation."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"python -m pip install numpy==\n")),(0,o.kt)("h3",{id:"download-dependencies"},"Download dependencies"),(0,o.kt)("p",null,"The pre-compiled dependencies are available on our release page. The dependencies contain several ",(0,o.kt)("inlineCode",{parentName:"p"},".dll")," files. Users also need to download the tarball with the correct FFMpeg version, and extract the files."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/dll-win-ffmpeg_5_0.tar.xz"},(0,o.kt)("inlineCode",{parentName:"a"},"5.0"),(0,o.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"})))))),(0,o.kt)("p",null,"The above files are collected from the officially released FFMpeg shared libraries. Users could also find them ",(0,o.kt)("a",{parentName:"p",href:"https://www.gyan.dev/ffmpeg/builds/#release-section",title:"FFMpeg release"},"here",(0,o.kt)(l.Z,{mdxType:"IconExternalLink"})),"."),(0,o.kt)("h3",{id:"import"},"Import"),(0,o.kt)("p",null,"To import the module, users need to place the ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd")," and the dependencies in the same folder. For example,"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},".\n|---mpegCoder.pyd\n|---avcodec-59.dll\n|---avformat-59.dll\n|---avutil-57.dll\n|---swresample-4.dll\n`---swscale-6.dll\n")),(0,o.kt)("p",null,"After that, users could enter the same folder, and import the module by"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import mpegCoder\n")),(0,o.kt)("h2",{id:"compile-the-module"},"Compile the module"),(0,o.kt)("p",null,"If users need to compile the module by themselves, please follow the instructions on Github:"),(0,o.kt)("p",null,(0,o.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/3.2.0/README.md",icon:m.Z,mdxType:"DarkButton"},"Compile with VS2022")))}f.isMDXComponent=!0},866:function(e,t){t.Z={body:'',width:24,height:24}},7225:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/b48ae99e.747f0402.js b/assets/js/b48ae99e.747f0402.js new file mode 100644 index 0000000..01f9a1b --- /dev/null +++ b/assets/js/b48ae99e.747f0402.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[6989],{8241:function(e){e.exports=JSON.parse('{"title":"Troubleshooting","description":"Tackle the issues and questions.","slug":"/category/troubleshooting","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/troubleshooting","navigation":{"previous":{"title":"Server","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/server"},"next":{"title":"Installation","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/installation"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b585adac.f686aee8.js b/assets/js/b585adac.f686aee8.js new file mode 100644 index 0000000..82d0a53 --- /dev/null +++ b/assets/js/b585adac.f686aee8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8370],{3166:function(e,t,n){n.r(t),n.d(t,{assets:function(){return c},contentTitle:function(){return l},default:function(){return u},frontMatter:function(){return r},metadata:function(){return s},toc:function(){return p}});var o=n(3117),a=n(102),i=(n(7294),n(3905)),d=(n(541),["components"]),r={id:"transcoding",title:"Transcoding a video",sidebar_label:"Transcoding",slug:"/examples/transcoding",description:"Example codes for encoding or transcoding a video."},l=void 0,s={unversionedId:"guides/examples/transcoding",id:"version-3.2.x/guides/examples/transcoding",title:"Transcoding a video",description:"Example codes for encoding or transcoding a video.",source:"@site/versioned_docs/version-3.2.x/guides/examples/transcoding.mdx",sourceDirName:"guides/examples",slug:"/examples/transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/transcoding",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/guides/examples/transcoding.mdx",tags:[],version:"3.2.x",frontMatter:{id:"transcoding",title:"Transcoding a video",sidebar_label:"Transcoding",slug:"/examples/transcoding",description:"Example codes for encoding or transcoding a video."},sidebar:"docs",previous:{title:"Decoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/decoding"},next:{title:"Client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/client"}},c={},p=[{value:"Optimize the output video",id:"optimize-the-output-video",level:2},{value:"Rescaling and resampling",id:"rescaling-and-resampling",level:2}],m={toc:p};function u(e){var t=e.components,n=(0,a.Z)(e,d);return(0,i.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The following codes show an example of encoding and muxing a new video file. Although we are transcoding a video, the input of the encoder could be any data."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:'{12,14-15} title="transcoding.py" showLineNumbers',"{12,14-15}":!0,title:'"transcoding.py"',showLineNumbers:!0},"import mpegCoder\n\nd = mpegCoder.MpegDecoder()\nd.setParameter(nthread=4)\nopened = d.FFmpegSetup('test-video.mp4') # Setup the decoder\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', nthread=8) # inherit most of parameters from the decoder.\nopened = opened and e.FFmpegSetup() # Setup the encoder.\nif opened: # If either the decoder or the encoder is not loaded successfully, do not continue.\n p = True\n while p is not None:\n p = d.ExtractGOP() # Extract current GOP.\n if p is not None:\n for i in p: # Iterate every frame.\n e.EncodeFrame(i) # Encode current frame.\n e.FFmpegClose() # End encoding, and flush all frames in cache.\ne.clear() # Clean configs of the encoder.\nd.clear() # Close configs of the decoder.\n")),(0,i.kt)("p",null,"In this example, we decode an existing video file, and encode a new video by ",(0,i.kt)("inlineCode",{parentName:"p"},"x265")," codec. The most widely used video codecs are ",(0,i.kt)("inlineCode",{parentName:"p"},"libxvid"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libx264"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libx265"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libvp9"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libsvtav1"),". Most of the encoder configurations are copied from the opened decoder. So the output video would share the same GOP size, consecutive B frame number, picture size, bit rate and frame rate of the input video. We also reconfigure the thread number of the encoder by ",(0,i.kt)("inlineCode",{parentName:"p"},"8"),"."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Some codec may not work with multi-threading. In this case, after we call ",(0,i.kt)("inlineCode",{parentName:"p"},"FFmpegSetup()"),", the configuration of the threading number would be corrected as ",(0,i.kt)("inlineCode",{parentName:"p"},"1")," automatically."))),(0,i.kt)("p",null,"In each while loop, we read a GOP, iterate the GOP, and encode the data frame-by-frame. After all frames are encoded, the ",(0,i.kt)("inlineCode",{parentName:"p"},"mp4")," file tail would be dumped into the output video."),(0,i.kt)("p",null,"If user trigger ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," during the while loop, the video could be still completed safely. However, if users hit ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," by twice, the output video would be broken, because the video tail has not been written correctly."),(0,i.kt)("h2",{id:"optimize-the-output-video"},"Optimize the output video"),(0,i.kt)("p",null,"In the above example, the output video may not be encoded by an optimized configuration. The x265 codec could accept a maximal consecutive B frame number of ",(0,i.kt)("inlineCode",{parentName:"p"},"<=16"),". We could also configure the output bit rate manually. Therefore, if we change the configuraitons like the following example, the output video file size would be reduced significantly."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16, bitRate=48.0, nthread=8)\nopened = opened and e.FFmpegSetup()\n...\n")),(0,i.kt)("h2",{id:"rescaling-and-resampling"},"Rescaling and resampling"),(0,i.kt)("p",null,"In some cases, we may want to rescale the output video size, and resample the output frames,"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', width=720, height=486, frameRate=(5, 1), nthread=8)\nopened = opened and e.FFmpegSetup()\n...\n")),(0,i.kt)("p",null,"This example would rescale the output frame to 720x486, and resample the output frame rate as 5 FPS. In this case, when we call ",(0,i.kt)("inlineCode",{parentName:"p"},"e.EncodeFrame(i)"),", the frame ",(0,i.kt)("inlineCode",{parentName:"p"},"i")," may be not in the size of 720x486, but ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," could scale it automatically."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ba5e0563.125afa24.js b/assets/js/ba5e0563.125afa24.js new file mode 100644 index 0000000..cdda16d --- /dev/null +++ b/assets/js/ba5e0563.125afa24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[2144],{8793:function(e,t,n){var a=n(7294),i=n(9960),r=n(1954),o=n(2949);t.Z=function(e){var t=(0,a.useState)(!1),n=t[0],l=t[1];(0,a.useEffect)((function(){l(!0)}),[]);var d,p,m,c=(d=(0,o.I)(),p=d.colorMode,d.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return m=e.index?"button "+c+" button--lg button--index":"button "+c+" button--lg",a.createElement(i.Z,{key:String(n),className:m,to:e.to},e.icon&&a.createElement(r.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1646:function(e,t,n){n.r(t),n.d(t,{assets:function(){return f},contentTitle:function(){return g},default:function(){return v},frontMatter:function(){return h},metadata:function(){return N},toc:function(){return C}});var a=n(3117),i=n(102),r=(n(7294),n(3905)),o=n(8793),l=n(541),d=n(5514),p=n(7225),m=n(866),c=n(2895),s=n(5099),u=n(6564),k=["components"],h={id:"linux",title:"Installation for Linux",sidebar_label:"Linux",slug:"/installation/linux",description:"A tutorial about the installation or compilation of the package for Linux."},g=void 0,N={unversionedId:"guides/install/linux",id:"version-3.1.0/guides/install/linux",title:"Installation for Linux",description:"A tutorial about the installation or compilation of the package for Linux.",source:"@site/versioned_docs/version-3.1.0/guides/install/linux.mdx",sourceDirName:"guides/install",slug:"/installation/linux",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/linux",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/install/linux.mdx",tags:[],version:"3.1.0",frontMatter:{id:"linux",title:"Installation for Linux",sidebar_label:"Linux",slug:"/installation/linux",description:"A tutorial about the installation or compilation of the package for Linux."},sidebar:"version-3.1.0/docs",previous:{title:"Windows",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/windows"},next:{title:"Legacy",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/legacy"}},f={},C=[{value:"Install the pre-compiled module",id:"install-the-pre-compiled-module",level:2},{value:"Download mpegCoder",id:"download-mpegcoder",level:3},{value:"Install Numpy",id:"install-numpy",level:3},{value:"Download dependencies",id:"download-dependencies",level:3},{value:"Import",id:"import",level:3},{value:"Compile the module",id:"compile-the-module",level:2},{value:"Compile mpegCoder",id:"compile-mpegcoder",level:3},{value:"Compile FFMpeg",id:"compile-ffmpeg",level:3}],b={toc:C};function v(e){var t=e.components,n=(0,i.Z)(e,k);return(0,r.kt)("wrapper",(0,a.Z)({},b,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This guide contains steps for installing or compiling the ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," module manually. We recommend users who need to use ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," in a project locally to install the package by this way."),(0,r.kt)("h2",{id:"install-the-pre-compiled-module"},"Install the pre-compiled module"),(0,r.kt)("h3",{id:"download-mpegcoder"},"Download ",(0,r.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,r.kt)("p",null,"First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"mpegCoder"),(0,r.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Numpy"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Python"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GCC/G++"),(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py39.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"4.4")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.21.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.9.6")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"8.3.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 10"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py38.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"4.4")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.21.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.8.11")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"8.3.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 10"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py37.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"4.4")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.21.1")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.7.11")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"8.3.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 10"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py36.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"4.4")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.19.5")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.6.14")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"8.3.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 10"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py35.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"3.1.0"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"4.4")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"1.18.5")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"3.5.10")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"8.3.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"Debian 10"))))),(0,r.kt)("p",null,"After extracting the tarball, we could get ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.so"),"."),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Note that the above versions only show the environment when building ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". It does not mean that they are the dependencies of running ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". For example, users could use ",(0,r.kt)("inlineCode",{parentName:"p"},"python 3.9.5")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"numpy 1.19.5")," to run ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,r.kt)("h3",{id:"install-numpy"},"Install Numpy"),(0,r.kt)("p",null,"To run ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", you are required to install ",(0,r.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," with the correct version first. The best version for each ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," release has been listed before. If your Numpy version is differnt from the best version too much, ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," may not work. Here is the command for installation."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"python -m pip install numpy==\n")),(0,r.kt)("h3",{id:"download-dependencies"},"Download dependencies"),(0,r.kt)("p",null,"The pre-compiled dependencies are available on our release page. The dependencies contain several ",(0,r.kt)("inlineCode",{parentName:"p"},".so")," files. Users also need to download the tarball with the correct FFMpeg version, and extract the files."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"FFMpeg"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GCC/G++"),(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz"},(0,r.kt)("inlineCode",{parentName:"a"},"4.4"),(0,r.kt)(d.Z,{icon:p.Z,mdxType:"InlineIcon"}))),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"9.3.0")),(0,r.kt)("td",{parentName:"tr",align:"center"},"Ubuntu ",(0,r.kt)("inlineCode",{parentName:"td"},"20.04.2"))))),(0,r.kt)("p",null,"These files are compiled by myself, because FFMpeg has not released the fully built shared libraries for Linux. To learn how to compile the FFMpeg, please check ",(0,r.kt)("a",{parentName:"p",href:"#compile-the-module"},"the compilation section"),"."),(0,r.kt)("h3",{id:"import"},"Import"),(0,r.kt)("p",null,"Running the pre-compiled ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," requires users to add the required dynamic libraries to your library path. The extracted dependency files should contain two folders:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},".\n|---lib\n`---lib-fix\n")),(0,r.kt)("p",null,"We recommend users to place the two folders in a global domain, for example,"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"/opt/ffmpeg/\n|---lib\n`---lib-fix\n")),(0,r.kt)("p",null,"After that, users could add the following lines to your ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.bashrc")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"export LD_LIBRARY_PATH=/opt/ffmpeg/lib:$LD_LIBRARY_PATH\nexport PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH\nexport PKG_CONFIG_LIBDIR=/opt/ffmpeg/lib/:$PKG_CONFIG_LIBDIR\n")),(0,r.kt)("p",null,"To make the configurations take effects instantly, please run"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"source ~/.bashrc\n")),(0,r.kt)("p",null,"Running the module requires users to install ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc>=2.29"),". Please check the following table and find whether the requirements are fulfilled in your case:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"OS"),(0,r.kt)("th",{parentName:"tr",align:"center"},"GLibC"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Fulfilled"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Ubuntu bionic (",(0,r.kt)("inlineCode",{parentName:"td"},"18.04"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.27")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:s.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Ubuntu focal (",(0,r.kt)("inlineCode",{parentName:"td"},"20.04"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.31")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:c.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian buster (",(0,r.kt)("inlineCode",{parentName:"td"},"10"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.28")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:s.Z,mdxType:"InlineIcon"}))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Debian bullseye (",(0,r.kt)("inlineCode",{parentName:"td"},"11"),")"),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"2.31")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.Z,{icon:c.Z,mdxType:"InlineIcon"}))))),(0,r.kt)("p",null,"If the ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc>=2.29")," is not provided by your OS, we recommend users to compile and install GLibC by themselves. However, if users want a faster hotfix. Please check the extracted dependencies."),(0,r.kt)("p",null,"Take the above steps as an example, then users could link the provided GLibC to your ",(0,r.kt)("inlineCode",{parentName:"p"},"/lib")," folder."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"ln -sf /opt/ffmpeg/lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6\n")),(0,r.kt)("p",null,"After all, users could place ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder.so")," in your project folder, and import the module by"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import mpegCoder\n")),(0,r.kt)("h2",{id:"compile-the-module"},"Compile the module"),(0,r.kt)("h3",{id:"compile-mpegcoder"},"Compile ",(0,r.kt)("inlineCode",{parentName:"h3"},"mpegCoder")),(0,r.kt)("p",null,"If users need to compile the module by themselves, please follow the instructions on Github:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/3.1.0-linux/README.md",icon:m.Z,mdxType:"DarkButton"},"Compile with GCC/G++")),(0,r.kt)("h3",{id:"compile-ffmpeg"},"Compile FFMpeg"),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Users are not required for compiling FFMpeg by themselves, because ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," could be compiled with our provided pre-compiled FFMpeg. But in some cases, user may need to built ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder")," with a specified FFMpeg version."),(0,r.kt)("p",{parentName:"div"},"If users are using their own FFMpeg to compile ",(0,r.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", please check the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/setup.py#L34"},"configuration",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," in the setup file and the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/MpegCoder/MpegBase.h#L11"},"macros",(0,r.kt)(l.Z,{mdxType:"IconExternalLink"}))," in the source codes."))),(0,r.kt)("p",null,"We have provided some scripts for compiling FFMpeg. Please check the following branch:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/tree/deps",icon:u.Z,mdxType:"DarkButton"},"Scripts for compilation")),(0,r.kt)("p",null,"For example, if users want to compile FFMpeg ",(0,r.kt)("inlineCode",{parentName:"p"},"4.4"),", they could run"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"curl -O https://raw.githubusercontent.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/deps/install-ffmpeg-4_4.sh\nchmod +rwx install-ffmpeg-4_4.sh\n./install-ffmpeg-4_4.sh\n")),(0,r.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,r.kt)("div",{parentName:"div",className:"admonition-heading"},(0,r.kt)("h5",{parentName:"div"},(0,r.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,r.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,r.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,r.kt)("div",{parentName:"div",className:"admonition-content"},(0,r.kt)("p",{parentName:"div"},"Note that users may need to modify the scripts according to their own cases. Our script is only tested on ",(0,r.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"GCC 9.3.0"),"."))))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},5099:function(e,t){t.Z={body:''}},866:function(e,t){t.Z={body:'',width:24,height:24}},7225:function(e,t){t.Z={body:'',width:24,height:24}},6564:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/bde96392.84ca8a93.js b/assets/js/bde96392.84ca8a93.js new file mode 100644 index 0000000..9822bb7 --- /dev/null +++ b/assets/js/bde96392.84ca8a93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[6354],{5549:function(e,t,a){a.d(t,{A:function(){return l},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function l(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=d+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},6960:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return h},default:function(){return v},frontMatter:function(){return k},metadata:function(){return N},toc:function(){return g}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),d=a(541),l=a(5514),o=a(6577),m=a(2895),p=a(7508),s=a(5549),c=["components"],k={id:"MpegDecoder",title:"MpegDecoder",sidebar_label:"MpegDecoder",slug:"/apis/MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly."},h=void 0,N={unversionedId:"apis/MpegDecoder",id:"version-3.2.x/apis/MpegDecoder",title:"MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly.",source:"@site/versioned_docs/version-3.2.x/apis/MpegDecoder.mdx",sourceDirName:"apis",slug:"/apis/MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegDecoder",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/apis/MpegDecoder.mdx",tags:[],version:"3.2.x",frontMatter:{id:"MpegDecoder",title:"MpegDecoder",sidebar_label:"MpegDecoder",slug:"/apis/MpegDecoder",description:"This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly."},sidebar:"apis",previous:{title:"setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/setGlobal"},next:{title:"MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegEncoder"}},u={},g=[{value:"Arguments",id:"arguments",level:2},{value:"Requires",id:"requires",level:3},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"ExtractFrame",id:"extractframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractFrameByTime",id:"extractframebytime",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractGOP",id:"extractgop",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ExtractGOPByTime",id:"extractgopbytime",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"ResetGOPPosition",id:"resetgopposition",level:3},{value:"Requires",id:"requires",level:4},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Scale the decoded frame",id:"scale-the-decoded-frame",level:3},{value:"Use multi-thread decoding",id:"use-multi-thread-decoding",level:3}],f={toc:g};function v(e){var t=e.components,a=(0,r.Z)(e,c);return(0,i.kt)("wrapper",(0,n.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(s.q,{mdxType:"Splitter"}),(0,i.kt)(s.A,{ver:"3.2.0",url:"MpegCoder.h#L21",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:p.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec = mpegCoder.MpegDecoder(videoPath=None)\n")),(0,i.kt)("p",null,"The frame-level video decoder used for demuxing a video file."),(0,i.kt)("p",null,"This decoder instance serves as a video file reader. It supports:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Decoding the video frames into ",(0,i.kt)("a",{parentName:"li",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),"."),(0,i.kt)("li",{parentName:"ul"},"Reading video frames consecutively."),(0,i.kt)("li",{parentName:"ul"},"Setting the reading cursor to any position."),(0,i.kt)("li",{parentName:"ul"},"Scaling the decoded video frames to a specific size.")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," requires users to initialize the decoder before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the decoder is destructed."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("h3",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read. Configuring this value will causes the video to be opened by ",(0,i.kt)("a",{parentName:"td",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". We do not recommend users to set this value when initializing the decoder.")))),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"except")," the default video path. If a video is opened by the decoder, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will close the video automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file readers."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.resetPath(videoPath)\n")),(0,i.kt)("p",null,"Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = dec.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current path of the read video. If the video is not opened, will return the default video path.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the read video. This value is determined by the video file.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the read video. This value is determined by the video file.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameCount")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of returned frames in the last frame extraction method.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"coderName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the codec used for decoding the video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"duration")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The total seconds of this video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"estFrameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The estimated total frame number (may be not accurate).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"avgFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The average of the frame rate of the video stream. The unit is FPS.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters. These parameters could serve as ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict")," for ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegEncoder")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegServer"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.setParameter(widthDst=None, heightDst=None, nthread=None)\n")),(0,i.kt)("p",null,"Set the configurations of the decoder. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.FFmpegSetup(videoPath=None)\n")),(0,i.kt)("p",null,"Open the video file, and initialize the decoder. After the decoder initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video is being opened by the decoder now, this video will be closed first, then the new video will be opened."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoPath")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The path of the video to be read. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dec.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = dec.ExtractFrame(framePos=0, frameNum=1)\n")),(0,i.kt)("p",null,"Extract several frames at a specific position."),(0,i.kt)("p",null,"This API is recommended to be used when users only want to fetch few frames. The API will seek the starting position defined by ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos"),", then extract the required number of frames."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used as the starting postion. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of frames that require to be extracted.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")," (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum"),"), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframebytime"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrameByTime")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = dec.ExtractFrameByTime(timePos=0, frameNum=1)\n")),(0,i.kt)("p",null,"Extract several frames at a specific position."),(0,i.kt)("p",null,"The functionality of this API is the same as ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()")),". Instead of using a frame index, this method seek the reading cursor by a time point (the unit is ",(0,i.kt)("inlineCode",{parentName:"p"},"second"),")."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used as the starting postion. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of frames that require to be extracted.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum")," (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than ",(0,i.kt)("inlineCode",{parentName:"td"},"frameNum"),"), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractgop"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractGOP")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ExtractGOP(framePos=-1)\n")),(0,i.kt)("p",null,"Extract a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of Pictures (GOP)",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". The GOP size is determined by the video file. ",(0,i.kt)("del",{parentName:"p"},"Users could use ",(0,i.kt)("a",{parentName:"del",href:"#getparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"getParameter()"))," to find the GOP size.")),(0,i.kt)("p",null,"We recommend to use ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractGOP()")," when a video file needs to be read consecutively. When the returned value is ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),", the read cursor reaches the end of the video."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Each time this method is used with ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos>=0"),", the current reading cursor will be reset by ",(0,i.kt)("inlineCode",{parentName:"p"},"framePos"),"."))),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects, the GOP will be extracted from the current reading cursor position.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"gop")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is the GOP size (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than the GOP size), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractgopbytime"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractGOPByTime")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ExtractGOPByTime(timePos=-1)\n")),(0,i.kt)("p",null,"Extract a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of Pictures",(0,i.kt)(d.Z,{mdxType:"IconExternalLink"})),". Instead of using a frame index, this method uses a time point (the unit is ",(0,i.kt)("inlineCode",{parentName:"p"},"second"),") to seek the starting position."),(0,i.kt)("p",null,"We recommend to use ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractGOPByTime()")," when a video file needs to be read consecutively. When the returned value is ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),", the read cursor reaches the end of the video."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Each time this method is used with ",(0,i.kt)("inlineCode",{parentName:"p"},"timePos>=0"),", the current reading cursor will be reset by ",(0,i.kt)("inlineCode",{parentName:"p"},"timePos"),"."))),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects, the GOP will be extracted from the current reading cursor position.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"gop")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is the GOP size (if the deocder reaches the end of the file, ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," may be smaller than the GOP size), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no frames could be extracted, this method would return ",(0,i.kt)("inlineCode",{parentName:"td"},"None"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetgopposition"},(0,i.kt)("inlineCode",{parentName:"h3"},"ResetGOPPosition")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"gop = dec.ResetGOPPosition(framePos=-1, timePos=-1)\n")),(0,i.kt)("p",null,"Reset the current reading cursor of ",(0,i.kt)("a",{parentName:"p",href:"#extractgop"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractGOP()"))," and ",(0,i.kt)("a",{parentName:"p",href:"#extractgopbytime"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractGOPByTime()")),". The cursor could be set by either a frame index or a time point (",(0,i.kt)("inlineCode",{parentName:"p"},"second"),"). This method is merely a configuration, and will not return the GOP."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"framePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A frame index used for seeking the starting position of the GOP. This position will be used by ",(0,i.kt)("a",{parentName:"td",href:"https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8",title:"av_seek_frame"},(0,i.kt)("inlineCode",{parentName:"a"},"av_seek_frame"),(0,i.kt)(d.Z,{mdxType:"IconExternalLink"}))," at the bottom level. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0"),", this value will not take effects.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"timePos")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"A time index (second) used for seeking the starting position of the GOP. If this value is configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<0")," or the ",(0,i.kt)("inlineCode",{parentName:"td"},"framePos")," is configured, it will not take effects.")))),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(dec)\n")),(0,i.kt)("p",null,"Return a brief report of the current decoder status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the decoder status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/decoding"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Decoding")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"scale-the-decoded-frame"},"Scale the decoded frame"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\ndec.setParameter(widthDst=720, heightDst=486)\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-decoding"},"Use multi-thread decoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ndec = mpegCoder.MpegDecoder()\ndec.setParameter(nthread=8)\n...\n")))}v.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/c0502451.6e129779.js b/assets/js/c0502451.6e129779.js new file mode 100644 index 0000000..bc1cf76 --- /dev/null +++ b/assets/js/c0502451.6e129779.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[423],{7423:function(e,t,n){n.r(t),n.d(t,{assets:function(){return p},contentTitle:function(){return l},default:function(){return u},frontMatter:function(){return r},metadata:function(){return c},toc:function(){return s}});var o=n(3117),a=n(102),i=(n(7294),n(3905)),d=(n(541),["components"]),r={id:"transcoding",title:"Transcoding a video",sidebar_label:"Transcoding",slug:"/examples/transcoding",description:"Example codes for encoding or transcoding a video."},l=void 0,c={unversionedId:"guides/examples/transcoding",id:"guides/examples/transcoding",title:"Transcoding a video",description:"Example codes for encoding or transcoding a video.",source:"@site/docs/guides/examples/transcoding.mdx",sourceDirName:"guides/examples",slug:"/examples/transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/transcoding",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/guides/examples/transcoding.mdx",tags:[],version:"current",frontMatter:{id:"transcoding",title:"Transcoding a video",sidebar_label:"Transcoding",slug:"/examples/transcoding",description:"Example codes for encoding or transcoding a video."},sidebar:"docs",previous:{title:"Decoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/decoding"},next:{title:"Client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/client"}},p={},s=[{value:"Optimize the output video",id:"optimize-the-output-video",level:2},{value:"Rescaling and resampling",id:"rescaling-and-resampling",level:2}],m={toc:s};function u(e){var t=e.components,n=(0,a.Z)(e,d);return(0,i.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The following codes show an example of encoding and muxing a new video file. Although we are transcoding a video, the input of the encoder could be any data."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:'{12,14-15} title="transcoding.py" showLineNumbers',"{12,14-15}":!0,title:'"transcoding.py"',showLineNumbers:!0},"import mpegCoder\n\nd = mpegCoder.MpegDecoder()\nd.setParameter(nthread=4)\nopened = d.FFmpegSetup('test-video.mp4') # Setup the decoder\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', nthread=8) # inherit most of parameters from the decoder.\nopened = opened and e.FFmpegSetup() # Setup the encoder.\nif opened: # If either the decoder or the encoder is not loaded successfully, do not continue.\n p = True\n while p is not None:\n p = d.ExtractGOP() # Extract current GOP.\n if p is not None:\n for i in p: # Iterate every frame.\n e.EncodeFrame(i) # Encode current frame.\n e.FFmpegClose() # End encoding, and flush all frames in cache.\ne.clear() # Clean configs of the encoder.\nd.clear() # Close configs of the decoder.\n")),(0,i.kt)("p",null,"In this example, we decode an existing video file, and encode a new video by ",(0,i.kt)("inlineCode",{parentName:"p"},"x265")," codec. The most widely used video codecs are ",(0,i.kt)("inlineCode",{parentName:"p"},"libxvid"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libx264"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libx265"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libvp9"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"libsvtav1"),". Most of the encoder configurations are copied from the opened decoder. So the output video would share the same GOP size, consecutive B frame number, picture size, bit rate and frame rate of the input video. We also reconfigure the thread number of the encoder by ",(0,i.kt)("inlineCode",{parentName:"p"},"8"),"."),(0,i.kt)("div",{className:"admonition admonition-info alert alert--info"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))),"info")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"Some codec may not work with multi-threading. In this case, after we call ",(0,i.kt)("inlineCode",{parentName:"p"},"FFmpegSetup()"),", the configuration of the threading number would be corrected as ",(0,i.kt)("inlineCode",{parentName:"p"},"1")," automatically."))),(0,i.kt)("p",null,"In each while loop, we read a GOP, iterate the GOP, and encode the data frame-by-frame. After all frames are encoded, the ",(0,i.kt)("inlineCode",{parentName:"p"},"mp4")," file tail would be dumped into the output video."),(0,i.kt)("p",null,"If user trigger ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," during the while loop, the video could be still completed safely. However, if users hit ",(0,i.kt)("kbd",null,"Ctrl"),"+",(0,i.kt)("kbd",null,"C")," by twice, the output video would be broken, because the video tail has not been written correctly."),(0,i.kt)("h2",{id:"optimize-the-output-video"},"Optimize the output video"),(0,i.kt)("p",null,"In the above example, the output video may not be encoded by an optimized configuration. The x265 codec could accept a maximal consecutive B frame number of ",(0,i.kt)("inlineCode",{parentName:"p"},"<=16"),". We could also configure the output bit rate manually. Therefore, if we change the configuraitons like the following example, the output video file size would be reduced significantly."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16, bitRate=48.0, nthread=8)\nopened = opened and e.FFmpegSetup()\n...\n")),(0,i.kt)("h2",{id:"rescaling-and-resampling"},"Rescaling and resampling"),(0,i.kt)("p",null,"In some cases, we may want to rescale the output video size, and resample the output frames,"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\ne = mpegCoder.MpegEncoder()\ne.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', width=720, height=486, frameRate=(5, 1), nthread=8)\nopened = opened and e.FFmpegSetup()\n...\n")),(0,i.kt)("p",null,"This example would rescale the output frame to 720x486, and resample the output frame rate as 5 FPS. In this case, when we call ",(0,i.kt)("inlineCode",{parentName:"p"},"e.EncodeFrame(i)"),", the frame ",(0,i.kt)("inlineCode",{parentName:"p"},"i")," may be not in the size of 720x486, but ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegEncoder")," could scale it automatically."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c0e69b09.71699374.js b/assets/js/c0e69b09.71699374.js new file mode 100644 index 0000000..c044a97 --- /dev/null +++ b/assets/js/c0e69b09.71699374.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8090],{5549:function(e,t,l){l.d(t,{A:function(){return i},q:function(){return d}});var a=l(7294),n=l(9960),r="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",o="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=o+"/"+e.url;break;case"3.1.0":t=r+"/"+e.url}else t=o+"/"+e.url;return a.createElement(n.Z,{to:t,className:"noline"},e.children)}function d(e){return a.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}d.defaultProps={padx:"1ex"}},5643:function(e,t,l){l.r(t),l.d(t,{assets:function(){return g},contentTitle:function(){return u},default:function(){return h},frontMatter:function(){return p},metadata:function(){return m},toc:function(){return b}});var a=l(3117),n=l(102),r=(l(7294),l(3905)),o=l(5514),i=l(7795),d=l(7508),c=l(5549),s=["components"],p={id:"setGlobal",title:"setGlobal",sidebar_label:"setGlobal",slug:"/apis/setGlobal",description:"Set global configurations."},u=void 0,m={unversionedId:"apis/setGlobal",id:"apis/setGlobal",title:"setGlobal",description:"Set global configurations.",source:"@site/docs/apis/setGlobal.mdx",sourceDirName:"apis",slug:"/apis/setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/setGlobal",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/apis/setGlobal.mdx",tags:[],version:"current",frontMatter:{id:"setGlobal",title:"setGlobal",sidebar_label:"setGlobal",slug:"/apis/setGlobal",description:"Set global configurations."},sidebar:"apis",previous:{title:"readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/readme"},next:{title:"MpegDecoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegDecoder"}},g={},b=[{value:"Arguments",id:"arguments",level:2},{value:"Requires",id:"requires",level:3},{value:"Example",id:"example",level:2},{value:"Disable all logs except errors",id:"disable-all-logs-except-errors",level:3}],f={toc:b};function h(e){var t=e.components,l=(0,n.Z)(e,s);return(0,r.kt)("wrapper",(0,a.Z)({},f,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)(o.Z,{icon:i.Z,mdxType:"InlineIcon"})," Function",(0,r.kt)(c.q,{mdxType:"Splitter"}),(0,r.kt)(c.A,{ver:"3.2.0",url:"MpegPyd.h#L131",mdxType:"SourceURL"},(0,r.kt)(o.Z,{icon:d.Z,mdxType:"InlineIcon"})," Source")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=None)\n")),(0,r.kt)("p",null,"A function used for setting global configurations. If a configuration is not specified, that item will not be changed."),(0,r.kt)("h2",{id:"arguments"},"Arguments"),(0,r.kt)("h3",{id:"requires"},"Requires"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"dumpLevel")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"int")),(0,r.kt)("td",{parentName:"tr",align:"center"}),(0,r.kt)("td",{parentName:"tr",align:"left"},"The level of dumped log. This level will only influence ",(0,r.kt)("inlineCode",{parentName:"td"},"mpegCoder")," logs, FFMpeg logs and some codec logs. A few codec, like ",(0,r.kt)("inlineCode",{parentName:"td"},"libx265")," is not influenced by this configuration. Avaliable values: ",(0,r.kt)("inlineCode",{parentName:"td"},"0"),": Silent executing; ",(0,r.kt)("inlineCode",{parentName:"td"},"1"),": (default) Dump basic informations; ",(0,r.kt)("inlineCode",{parentName:"td"},"2"),": Dump all informations.")))),(0,r.kt)("h2",{id:"example"},"Example"),(0,r.kt)("h3",{id:"disable-all-logs-except-errors"},"Disable all logs except errors"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=0)\n")))}h.isMDXComponent=!0},7795:function(e,t){t.Z={body:'',width:24,height:24}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.481a6abc.js b/assets/js/c4f5d8e4.481a6abc.js new file mode 100644 index 0000000..456c182 --- /dev/null +++ b/assets/js/c4f5d8e4.481a6abc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[4195],{403:function(e,t,l){var n,r=l(7294),a=["title","titleId"];function c(){return c=Object.assign||function(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}t.Z=function(e){var t=e.title,l=e.titleId,o=i(e,a);return r.createElement("svg",c({xmlns:"http://www.w3.org/2000/svg",style:{maxWidth:360,height:"auto",maxHeight:360},viewBox:"0 0 360 360","aria-labelledby":l},o),t?r.createElement("title",{id:l},t):null,n||(n=r.createElement("g",{stroke:"null"},r.createElement("path",{d:"M309.616 254.834c2.087-3.615 3.384-7.689 3.384-11.346V116.512c0-3.657-1.295-7.73-3.383-11.345L180 180l129.616 74.834z",fill:"#00599C"}),r.createElement("path",{d:"m191.518 326.925 109.964-63.487c3.168-1.83 6.047-4.988 8.134-8.604L180 180 50.384 254.835c2.087 3.615 4.967 6.774 8.134 8.603l109.964 63.487c6.334 3.658 16.702 3.658 23.036 0z",fill:"#004482"}),r.createElement("path",{d:"M309.617 105.166c-2.088-3.616-4.968-6.775-8.135-8.604L191.518 33.075c-6.334-3.658-16.702-3.658-23.036 0L58.518 96.562C52.183 100.22 47 109.198 47 116.513v126.976c0 3.657 1.296 7.73 3.384 11.346L180 180l129.617-74.834z",fill:"#659AD2"}),r.createElement("path",{d:"M180 268.667c-48.891 0-88.667-39.776-88.667-88.667S131.11 91.334 180 91.334c31.548 0 60.97 16.977 76.784 44.305l-38.372 22.205c-7.915-13.679-22.635-22.177-38.412-22.177-24.446 0-44.333 19.888-44.333 44.333 0 24.445 19.887 44.334 44.333 44.334 15.78 0 30.499-8.498 38.414-22.18l38.373 22.204c-15.814 27.331-45.237 44.31-76.787 44.31z",fill:"#FFF"}),r.createElement("path",{fill:"#FFF",d:"M268.667 175.074h-9.853v-9.851h-9.85v9.851h-9.853v9.852h9.853v9.852h9.85v-9.852h9.853zm36.944 0h-9.852v-9.851h-9.851v9.851h-9.852v9.852h9.852v9.852h9.85v-9.852h9.853z"}))))}},9486:function(e,t,l){var n,r=l(7294),a=["title","titleId"];function c(){return c=Object.assign||function(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}t.Z=function(e){var t=e.title,l=e.titleId,o=i(e,a);return r.createElement("svg",c({xmlns:"http://www.w3.org/2000/svg",style:{maxWidth:360,height:"auto",maxHeight:360},viewBox:"0 0 360 360","aria-labelledby":l},o),t?r.createElement("title",{id:l},t):null,r.createElement("path",{style:{fill:"#72c376"},d:"m324.758 102.971-52.975-26.737-58.154 29.02 54.416 27.322 56.713-29.605zm24.297 12.256 55.544 28.049-57.627 28.935-54.501-27.365 56.584-29.619zm74.191-38.594 57.07 28.621-51.049 25.624L373.61 102.8l49.636-26.167zm-24.568-12.327L347.3 38.539l-50.82 25.368 52.946 26.694 49.252-26.295zm-40.163 221.231v70.111l62.234-31.061-.057-70.138-62.177 31.088zm62.149-55.571-.072-69.397-62.077 30.86v69.426l62.149-30.889zm74.718-12.998v70.381l-53.089 26.481-.043-70.054 53.132-26.808zm0-24.611v-68.969l-53.189 26.437.043 69.54 53.146-27.008z",transform:"translate(-166.297 -17.094)"}),n||(n=r.createElement("path",{d:"m161.912 328.3-35.049-16.824c-3.895-1.87-7.409-6.181-8.981-10.87-1.572-4.689-.811-9.133 1.903-10.891l32.192-20.837-.064-17.08-60.888 39.414c-1.94 1.255-4.275 1.009-7-.298l-42.838-20.563c-3.894-1.869-7.409-6.181-8.981-10.871-1.573-4.689-.812-9.133 1.904-10.89l103.941-67.282-15.186-7.29-74.856 48.452c-2.714 1.759-6.995.579-10.507-2.856-3.899-3.621-6.251-8.686-6.267-13.065l-.176-48.177c-.011-3.069 1.147-5.135 2.697-6.575l18.229-11.802-11.681-5.607c-5.064-2.43-9.366-9.304-9.388-15.438-.023-6.13 4.244-8.893 9.696-6.276l35.05 16.824c3.894 1.87 7.408 6.182 8.98 10.871s.81 9.134-1.904 10.89L50.55 172.098l.06 17.081 60.892-39.415c1.939-.818 4.271-1.011 6.998.298l42.837 20.562c3.893 1.869 7.408 6.18 8.981 10.871 1.573 4.69.811 9.134-1.904 10.89l-103.94 67.282 15.187 7.29 74.853-48.452c2.714-1.759 6.994-.58 10.506 2.857 3.511 3.432 5.864 8.497 5.878 12.876l.175 48.177c.013 3.069-1.146 5.136-2.696 6.577l-18.226 11.8 11.68 5.607c5.454 2.618 9.755 9.492 9.777 15.624.022 6.132-4.243 8.894-9.696 6.277z",fill:"#388e3c"})),r.createElement("path",{d:"M368.891 309.031h-38.878c-4.426-.024-9.64-2.466-13.159-6.065-1.759-1.82-2.999-3.894-3.546-5.828-.552-1.953-.399-3.929.48-5.423l19.863-32.483-6.931-14.3-37.359 61.1c-1.335 2.076-3.759 2.984-6.865 2.999h-47.518c-4.425-.024-9.64-2.466-13.16-6.066-1.759-1.82-2.999-3.894-3.546-5.828-.552-1.952-.398-3.928.482-5.422l64.125-104.875h-15.673l-46.371 75.834c-.93 1.465-2.609 2.483-4.578 2.843-1.95.357-4.329.143-6.712-.656-5.166-1.623-9.623-5.299-11.598-9.324l-21.007-43.356c-1.363-2.887-1.22-5.451-.429-7.496l.015-.039 10.885-17.806h-12.065c-5.751-.039-12.829-4.515-15.594-10.137-1.362-2.867-1.387-5.589-.234-7.475 1.154-1.887 3.574-3.071 6.709-3.097h38.879c4.426.024 9.639 2.467 13.159 6.066 1.758 1.82 2.998 3.895 3.545 5.829.552 1.952.398 3.928-.481 5.422L201.47 215.93l6.928 14.303 37.385-61.14.028-.032c1.455-1.627 3.662-2.895 6.813-2.929h47.517c4.424.024 9.638 2.466 13.159 6.066 1.759 1.82 3 3.894 3.546 5.829.552 1.952.398 3.928-.482 5.422L252.24 288.322h15.674l46.368-75.833c.93-1.465 2.61-2.483 4.578-2.843 1.95-.357 4.332-.142 6.717.659 4.729 1.619 9.187 5.295 11.161 9.321l21.006 43.357c1.363 2.886 1.221 5.451.43 7.497l-.015.039-10.883 17.803h12.064c6.184.039 13.261 4.516 16.026 10.137 1.361 2.867 1.387 5.59.234 7.475-1.153 1.887-3.573 3.071-6.709 3.097zm5.856-3.619c1.016-1.662 1.031-3.866-.281-6.517-2.583-5.417-9.21-9.612-15.126-9.573h-13.848l11.768-19.249c.743-1.885.899-4.018-.416-6.654l-21.006-43.357c-1.842-3.858-6.01-7.278-10.581-8.809-2.268-.777-4.397-.956-6.217-.623-1.8.329-3.148 1.086-3.904 2.381l-46.662 76.311h-18.018l65.054-106.395c.808-1.265.88-2.836.374-4.629-.512-1.81-1.613-3.677-3.302-5.403-3.375-3.496-8.229-5.787-12.441-5.763h-47.517c-2.899-.034-4.703 1.048-6.034 2.557l-38.294 62.628-7.964-16.443 20.143-32.948c.808-1.264.879-2.836.373-4.628-.512-1.811-1.613-3.678-3.301-5.405-3.374-3.495-8.227-5.786-12.441-5.762h-38.879c-2.912-.026-4.841.958-5.856 2.619-1.016 1.662-1.031 3.867.281 6.517 2.583 5.418 9.211 9.612 14.694 9.573h13.849l-11.77 19.252c-.743 1.884-.898 4.016.415 6.653l21.007 43.356c1.843 3.857 6.004 7.275 11.001 8.806 2.268.777 4.409.96 6.229.627 1.801-.33 3.149-1.087 3.904-2.382l46.665-76.312h18.017l-65.055 106.397c-.808 1.265-.88 2.836-.373 4.628.511 1.81 1.613 3.677 3.301 5.404 3.374 3.496 8.229 5.786 12.442 5.762h47.518c2.938.015 4.936-.655 6.013-2.521l38.313-62.662 7.967 16.44-20.147 32.949c-.807 1.265-.878 2.836-.372 4.628.512 1.811 1.614 3.678 3.302 5.405 3.373 3.495 8.227 5.785 12.441 5.761h38.878c2.912.026 4.841-.958 5.856-2.619z",style:{fill:"none"},transform:"rotate(25.641 267.559 237.58)"}),r.createElement("path",{d:"M368.891 309.031h-38.878c-4.426-.024-9.64-2.466-13.159-6.065-1.759-1.82-2.999-3.894-3.546-5.828-.552-1.953-.399-3.929.48-5.423l19.863-32.483-6.931-14.3-37.359 61.1c-1.335 2.076-3.759 2.984-6.865 2.999h-47.518c-4.425-.024-9.64-2.466-13.16-6.066-1.759-1.82-2.999-3.894-3.546-5.828-.552-1.952-.398-3.928.482-5.422l64.125-104.875h-15.673l-46.371 75.834c-.93 1.465-2.609 2.483-4.578 2.843-1.95.357-4.329.143-6.712-.656-5.166-1.623-9.623-5.299-11.598-9.324l-21.007-43.356c-1.363-2.887-1.22-5.451-.429-7.496l.015-.039 10.885-17.806h-12.065c-5.751-.039-12.829-4.515-15.594-10.137-1.362-2.867-1.387-5.589-.234-7.475 1.154-1.887 3.574-3.071 6.709-3.097h38.879c4.426.024 9.639 2.467 13.159 6.066 1.758 1.82 2.998 3.895 3.545 5.829.552 1.952.398 3.928-.481 5.422L201.47 215.93l6.928 14.303 37.385-61.14.028-.032c1.455-1.627 3.662-2.895 6.813-2.929h47.517c4.424.024 9.638 2.466 13.159 6.066 1.759 1.82 3 3.894 3.546 5.829.552 1.952.398 3.928-.482 5.422L252.24 288.322h15.674l46.368-75.833c.93-1.465 2.61-2.483 4.578-2.843 1.95-.357 4.332-.142 6.717.659 4.729 1.619 9.187 5.295 11.161 9.321l21.006 43.357c1.363 2.886 1.221 5.451.43 7.497l-.015.039-10.883 17.803h12.064c6.184.039 13.261 4.516 16.026 10.137 1.361 2.867 1.387 5.59.234 7.475-1.153 1.887-3.573 3.071-6.709 3.097zm5.856-3.619c1.016-1.662 1.031-3.866-.281-6.517-2.583-5.417-9.21-9.612-15.126-9.573h-13.848l11.768-19.249c.743-1.885.899-4.018-.416-6.654l-21.006-43.357c-1.842-3.858-6.01-7.278-10.581-8.809-2.268-.777-4.397-.956-6.217-.623-1.8.329-3.148 1.086-3.904 2.381l-46.662 76.311h-18.018l65.054-106.395c.808-1.265.88-2.836.374-4.629-.512-1.81-1.613-3.677-3.302-5.403-3.375-3.496-8.229-5.787-12.441-5.763h-47.517c-2.899-.034-4.703 1.048-6.034 2.557l-38.294 62.628-7.964-16.443 20.143-32.948c.808-1.264.879-2.836.373-4.628-.512-1.811-1.613-3.678-3.301-5.405-3.374-3.495-8.227-5.786-12.441-5.762h-38.879c-2.912-.026-4.841.958-5.856 2.619-1.016 1.662-1.031 3.867.281 6.517 2.583 5.418 9.211 9.612 14.694 9.573h13.849l-11.77 19.252c-.743 1.884-.898 4.016.415 6.653l21.007 43.356c1.843 3.857 6.004 7.275 11.001 8.806 2.268.777 4.409.96 6.229.627 1.801-.33 3.149-1.087 3.904-2.382l46.665-76.312h18.017l-65.055 106.397c-.808 1.265-.88 2.836-.373 4.628.511 1.81 1.613 3.677 3.301 5.404 3.374 3.496 8.229 5.786 12.442 5.762h47.518c2.938.015 4.936-.655 6.013-2.521l38.313-62.662 7.967 16.44-20.147 32.949c-.807 1.265-.878 2.836-.372 4.628.512 1.811 1.614 3.678 3.302 5.405 3.373 3.495 8.227 5.785 12.441 5.761h38.878c2.912.026 4.841-.958 5.856-2.619z",style:{fill:"none"},transform:"rotate(25.641 267.559 237.58)"}),r.createElement("path",{d:"M368.891 309.031h-38.878c-4.426-.024-9.64-2.466-13.159-6.065-1.759-1.82-2.999-3.894-3.546-5.828-.552-1.953-.399-3.929.48-5.423l19.863-32.483-6.931-14.3-37.359 61.1c-1.335 2.076-3.759 2.984-6.865 2.999h-47.518c-4.425-.024-9.64-2.466-13.16-6.066-1.759-1.82-2.999-3.894-3.546-5.828-.552-1.952-.398-3.928.482-5.422l64.125-104.875h-15.673l-46.371 75.834c-.93 1.465-2.609 2.483-4.578 2.843-1.95.357-4.329.143-6.712-.656-5.166-1.623-9.623-5.299-11.598-9.324l-21.007-43.356c-1.363-2.887-1.22-5.451-.429-7.496l.015-.039 10.885-17.806h-12.065c-5.751-.039-12.829-4.515-15.594-10.137-1.362-2.867-1.387-5.589-.234-7.475 1.154-1.887 3.574-3.071 6.709-3.097h38.879c4.426.024 9.639 2.467 13.159 6.066 1.758 1.82 2.998 3.895 3.545 5.829.552 1.952.398 3.928-.481 5.422L201.47 215.93l6.928 14.303 37.385-61.14.028-.032c1.455-1.627 3.662-2.895 6.813-2.929h47.517c4.424.024 9.638 2.466 13.159 6.066 1.759 1.82 3 3.894 3.546 5.829.552 1.952.398 3.928-.482 5.422L252.24 288.322h15.674l46.368-75.833c.93-1.465 2.61-2.483 4.578-2.843 1.95-.357 4.332-.142 6.717.659 4.729 1.619 9.187 5.295 11.161 9.321l21.006 43.357c1.363 2.886 1.221 5.451.43 7.497l-.015.039-10.883 17.803h12.064c6.184.039 13.261 4.516 16.026 10.137 1.361 2.867 1.387 5.59.234 7.475-1.153 1.887-3.573 3.071-6.709 3.097zm5.856-3.619c1.016-1.662 1.031-3.866-.281-6.517-2.583-5.417-9.21-9.612-15.126-9.573h-13.848l11.768-19.249c.743-1.885.899-4.018-.416-6.654l-21.006-43.357c-1.842-3.858-6.01-7.278-10.581-8.809-2.268-.777-4.397-.956-6.217-.623-1.8.329-3.148 1.086-3.904 2.381l-46.662 76.311h-18.018l65.054-106.395c.808-1.265.88-2.836.374-4.629-.512-1.81-1.613-3.677-3.302-5.403-3.375-3.496-8.229-5.787-12.441-5.763h-47.517c-2.899-.034-4.703 1.048-6.034 2.557l-38.294 62.628-7.964-16.443 20.143-32.948c.808-1.264.879-2.836.373-4.628-.512-1.811-1.613-3.678-3.301-5.405-3.374-3.495-8.227-5.786-12.441-5.762h-38.879c-2.912-.026-4.841.958-5.856 2.619-1.016 1.662-1.031 3.867.281 6.517 2.583 5.418 9.211 9.612 14.694 9.573h13.849l-11.77 19.252c-.743 1.884-.898 4.016.415 6.653l21.007 43.356c1.843 3.857 6.004 7.275 11.001 8.806 2.268.777 4.409.96 6.229.627 1.801-.33 3.149-1.087 3.904-2.382l46.665-76.312h18.017l-65.055 106.397c-.808 1.265-.88 2.836-.373 4.628.511 1.81 1.613 3.677 3.301 5.404 3.374 3.496 8.229 5.786 12.442 5.762h47.518c2.938.015 4.936-.655 6.013-2.521l38.313-62.662 7.967 16.44-20.147 32.949c-.807 1.265-.878 2.836-.372 4.628.512 1.811 1.614 3.678 3.302 5.405 3.373 3.495 8.227 5.785 12.441 5.761h38.878c2.912.026 4.841-.958 5.856-2.619z",style:{fill:"none"},transform:"rotate(25.641 267.559 237.58)"}))}},4212:function(e,t,l){var n,r,a=l(7294),c=["title","titleId"];function i(){return i=Object.assign||function(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}t.Z=function(e){var t=e.title,l=e.titleId,s=o(e,c);return a.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{maxWidth:360,height:"auto",maxHeight:360},viewBox:"0 0 360 360","aria-labelledby":l},s),t?a.createElement("title",{id:l},t):null,n||(n=a.createElement("defs",null,a.createElement("linearGradient",{id:"a"},a.createElement("stop",{stopColor:"#ffe052",offset:0}),a.createElement("stop",{stopColor:"#ffc331",offset:1})),a.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",xlinkHref:"#a",id:"d",x1:89.137,y1:111.921,x2:147.777,y2:168.101,gradientUnits:"userSpaceOnUse"}),a.createElement("linearGradient",{id:"b"},a.createElement("stop",{stopColor:"#387eb8",offset:0}),a.createElement("stop",{stopColor:"#366994",offset:1})),a.createElement("linearGradient",{gradientTransform:"translate(-33.022 -67.786) scale(2.57579)",href:"#b",xlinkHref:"#b",id:"c",x1:55.549,y1:77.07,x2:110.149,y2:131.853,gradientUnits:"userSpaceOnUse"}))),r||(r=a.createElement("g",{stroke:"null"},a.createElement("path",{fill:"url(#c)",d:"M223.912 105.999c-72.204 0-67.695 31.312-67.695 31.312l.08 32.438H225.2v9.74h-96.27s-46.203-5.24-46.203 67.614c0 72.855 40.327 70.271 40.327 70.271h24.068v-33.807s-1.298-40.327 39.683-40.327h68.339s38.395.62 38.395-37.108V143.75s5.83-37.75-69.627-37.75zm-37.993 21.813a12.384 12.384 0 0 1 12.396 12.396c0 6.856-5.54 12.396-12.396 12.396a12.384 12.384 0 0 1-12.396-12.396 12.385 12.385 0 0 1 12.396-12.396z",transform:"translate(-44.938 -67.469)"}),a.createElement("path",{fill:"url(#d)",d:"M225.963 388.939c72.204 0 67.695-31.312 67.695-31.312l-.08-32.439h-68.903v-9.74h96.27s46.203 5.24 46.203-67.614-40.327-70.27-40.327-70.27h-24.068v33.807s1.298 40.327-39.683 40.327h-68.339s-38.395-.621-38.395 37.107v62.382s-5.83 37.752 69.627 37.752zm37.993-21.814a12.384 12.384 0 0 1-12.396-12.396c0-6.855 5.54-12.396 12.396-12.396 6.855 0 12.396 5.54 12.396 12.396a12.385 12.385 0 0 1-12.396 12.396z",transform:"translate(-44.938 -67.469)"}))))}},8793:function(e,t,l){var n=l(7294),r=l(9960),a=l(1954),c=l(2949);t.Z=function(e){var t=(0,n.useState)(!1),l=t[0],i=t[1];(0,n.useEffect)((function(){i(!0)}),[]);var o,s,h,m=(o=(0,c.I)(),s=o.colorMode,o.setColorMode,"dark"===s?"button--secondary button--outline":"button--secondary");return h=e.index?"button "+m+" button--lg button--index":"button "+m+" button--lg",n.createElement(r.Z,{key:String(l),className:h,to:e.to},e.icon&&n.createElement(a.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},8806:function(e,t,l){l.r(t),l.d(t,{default:function(){return j}});var n,r,a,c=l(7294),i=l(6010),o=l(3746),s=l(2263),h="heroBanner_jHI5",m="buttons_Pntg",d="title-logo_x3SF",f=l(8793),u=l(3117),p=l(9960),y=l(541),v="features_xdhU",g="featureSvg__8YW",b=l(5999),E=[{title:(0,b.I)({id:"index.feat.python.title",description:"Feature title for Python-C-API.",message:"Python without depdencies"}),Svg:l(4212).Z,description:c.createElement(c.Fragment,null,c.createElement(b.Z,{id:"index.feat.python.descr",description:"Feature description for Python-C-API.",values:{python:c.createElement(p.Z,{href:"https://docs.python.org/3/c-api/index.html",label:"Python-C-API"},"Python-C-API",c.createElement(y.Z,null)),numpy:c.createElement(p.Z,{href:"https://numpy.org",label:"numpy"},"Numpy",c.createElement(y.Z,null))}},"Implemented by the {python}. This feature has been included in stdlib. No matter when you need to compile or use this package, the only dependency is {numpy}."))},{title:(0,b.I)({id:"index.feat.ffmpeg.title",description:"Feature title for FFMpeg.",message:"Fully based on FFMpeg"}),Svg:l(9486).Z,description:c.createElement(c.Fragment,null,c.createElement(b.Z,{id:"index.feat.ffmpeg.descr",description:"Feature description for FFMpeg.",values:{ffmpeg:c.createElement(p.Z,{href:"https://ffmpeg.org",label:"FFMpeg"},"FFMpeg",c.createElement(y.Z,null)),numpy:c.createElement(p.Z,{href:"https://numpy.org",label:"numpy"},"Numpy",c.createElement(y.Z,null))}},"Combine the shared-lib-enabled {ffmpeg} and {numpy} together. Both the two libraries are not modifed. Users could benefit from user-friendly Numpy APIs and all FFMpeg features."))},{title:(0,b.I)({id:"index.feat.cpp.title",description:"Feature title for CPP11.",message:"Compiled by C++"}),Svg:l(403).Z,description:c.createElement(c.Fragment,null,c.createElement(b.Z,{id:"index.feat.cpp.descr",description:"Feature description for CPP11.",values:{license:c.createElement(p.Z,{href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE",label:"GPL v3"},"GPL v3 License",c.createElement(y.Z,null))}},"Compiled by C++ on both Windows and Linux. The Win version and the Linux version are compiled by VC++ and G++ respectively. All source codes of this project are open-sourced by {license}."))}];function x(e){var t=e.Svg,l=e.title,n=e.description;return c.createElement("div",{className:(0,i.Z)("col col--4")},c.createElement("div",{className:"text--center"},c.createElement(t,{className:g,alt:l})),c.createElement("div",{className:"text--left padding-horiz--md"},c.createElement("h3",{className:"text--center"},l),c.createElement("p",null,n)))}function w(){return c.createElement("section",{className:v},c.createElement("div",{className:"container"},c.createElement("div",{className:"row"},E.map((function(e,t){return c.createElement(x,(0,u.Z)({key:t},e))})))))}var O=["title","titleId"];function z(){return z=Object.assign||function(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}var F=function(e){var t=e.title,l=e.titleId,i=P(e,O);return c.createElement("svg",z({xmlns:"http://www.w3.org/2000/svg",style:{maxWidth:640,height:"auto",maxHeight:640},viewBox:"0 0 640 640","aria-labelledby":l},i),t?c.createElement("title",{id:l},t):null,c.createElement("path",{style:{fill:"#fff"},d:"M235.068 146.268h69.796v69.796h-69.796z",transform:"translate(-1897.722 -1168.246) scale(8.2148)"}),n||(n=c.createElement("path",{d:"M48.405 48.407h543.187v543.187H48.405z"})),c.createElement("g",{transform:"translate(-2028.744 -1252.236) scale(8.69297)"},c.createElement("rect",{x:260.189,y:160.863,width:20,height:40,rx:10,ry:5,style:{fill:"#fff"}}),c.createElement("rect",{x:250.189,y:170.863,width:40,height:20,rx:5,ry:10,style:{fill:"#fff"}}),r||(r=c.createElement("circle",{cx:264.689,cy:165.863,r:1.85})),a||(a=c.createElement("circle",{cx:275.689,cy:195.863,r:1.85})),c.createElement("path",{style:{stroke:"#000"},d:"M260.189 170.363h10m0 21h10"}),c.createElement("path",{d:"M259.689 190.863c0-2.5.156-4.375.508-5.781.352-1.406.899-2.344 1.68-2.969.781-.625 1.797-.937 3.086-1.094 1.289-.156 2.851-.156 4.726-.156 2.125 0 3.875 0 5.305-.156 1.43-.156 2.539-.469 3.383-1.094.844-.625 1.422-1.562 1.789-2.969.367-1.406.523-3.281.523-5.781",fill:"none",style:{stroke:"#000"}})),c.createElement("path",{style:{fill:"#fff"},d:"M231.012 142.212h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.955 0h7.304v6.087h-7.304z",transform:"translate(-1832.72 -1106.244) scale(8.2148)"}),c.createElement("path",{style:{fill:"#fff"},d:"M231.012 142.212h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.956 0h7.304v6.087h-7.304zm10.955 0h7.304v6.087h-7.304z",transform:"translate(-1832.72 -640.244) scale(8.2148)"}))};function Z(){var e=(0,s.Z)().siteConfig;return c.createElement("header",{className:(0,i.Z)("hero hero--primary",h)},c.createElement("div",{className:"container"},c.createElement("h1",{className:"hero__title"},c.createElement("span",null,c.createElement(F,{className:d,alt:e.title}))," ",e.title),c.createElement("p",{className:"hero__subtitle"},c.createElement(b.Z,{id:"index.sub-title",description:"Sub-title text in the cover.",values:{subtitle:e.tagline}},"{subtitle}")),c.createElement("div",{className:"buttons "+m},c.createElement(f.Z,{index:!0,to:"/docs/"},c.createElement(b.Z,{id:"index.button.start",description:"Text of the index button: Get started"},"Getting started")),c.createElement(f.Z,{index:!0,to:"https://pypi.org/project/mpegCoder/"},c.createElement(b.Z,{id:"index.button.pypi",description:"Text of the index button: PYPI Project"},"PyPI Project")))))}function j(){var e=(0,s.Z)().siteConfig;return c.createElement(o.Z,{title:(0,b.I)({id:"index.layout.title",description:"The title displayed in the website head.",message:"Hello from {title}"},{title:e.title}),description:(0,b.I)({id:"index.layout.descr",description:"The description displayed in the website head.",message:"A python package for intergrating FFMpeg and Numpy by Python-C-API."})},c.createElement(Z,null),c.createElement("main",null,c.createElement(w,null)))}}}]); \ No newline at end of file diff --git a/assets/js/cc9716ce.79c5deb5.js b/assets/js/cc9716ce.79c5deb5.js new file mode 100644 index 0000000..5b604f5 --- /dev/null +++ b/assets/js/cc9716ce.79c5deb5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[1073],{8879:function(e){e.exports=JSON.parse('{"title":"Installation","description":"Learn about how to install or compile mpegCoder.","slug":"/category/installation","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/installation","navigation":{"previous":{"title":"Introduction","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/"},"next":{"title":"PyPI","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/pypi"}}}')}}]); \ No newline at end of file diff --git a/assets/js/common.29e6ac7c.js b/assets/js/common.29e6ac7c.js new file mode 100644 index 0000000..89cd542 --- /dev/null +++ b/assets/js/common.29e6ac7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8592],{3905:function(t,e,n){n.d(e,{Zo:function(){return f},kt:function(){return d}});var o=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function c(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var a=o.createContext({}),l=function(t){var e=o.useContext(a),n=e;return t&&(n="function"==typeof t?t(e):c(c({},e),t)),n},f=function(t){var e=l(t.components);return o.createElement(a.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return o.createElement(o.Fragment,{},e)}},p=o.forwardRef((function(t,e){var n=t.components,r=t.mdxType,i=t.originalType,a=t.parentName,f=s(t,["components","mdxType","originalType","parentName"]),p=l(n),d=r,h=p["".concat(a,".").concat(d)]||p[d]||u[d]||i;return n?o.createElement(h,c(c({ref:e},f),{},{components:n})):o.createElement(h,c({ref:e},f))}));function d(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=n.length,c=new Array(i);c[0]=p;var s={};for(var a in e)hasOwnProperty.call(e,a)&&(s[a]=e[a]);s.originalType=t,s.mdxType="string"==typeof t?t:r,c[1]=s;for(var l=2;l{const r=t.split(":");if("@"===t.slice(0,1)){if(r.length<2||r.length>3)return null;o=r.shift().slice(1)}if(r.length>3||!r.length)return null;if(r.length>1){const t=r.pop(),n=r.pop(),i={provider:r.length>0?r[0]:o,prefix:n,name:t};return e&&!a(i)?null:i}const i=r[0],c=i.split("-");if(c.length>1){const t={provider:o,prefix:c.shift(),name:c.join("-")};return e&&!a(t)?null:t}if(n&&""===o){const t={provider:o,prefix:"",name:i};return e&&!a(t,n)?null:t}return null},a=(t,e)=>!!t&&!(""!==t.provider&&!t.provider.match(r)||!(e&&""===t.prefix||t.prefix.match(r))||!t.name.match(r));function l(t,e,n=!1){const o=function e(n,o){if(void 0!==t.icons[n])return Object.assign({},t.icons[n]);if(o>5)return null;const r=t.aliases;if(r&&void 0!==r[n]){const t=r[n],c=e(t.parent,o+1);return c?function(t,e){const n={...t};for(const o in i){const t=o;if(void 0!==e[t]){const o=e[t];if(void 0===n[t]){n[t]=o;continue}switch(t){case"rotate":n[t]=(n[t]+o)%4;break;case"hFlip":case"vFlip":n[t]=o!==n[t];break;default:n[t]=o}}}return n}(c,t):c}const c=t.chars;return!o&&c&&void 0!==c[n]?e(c[n],o+1):null}(e,0);if(o)for(const r in i)void 0===o[r]&&void 0!==t[r]&&(o[r]=t[r]);return o&&n?c(o):o}function f(t,e,n){n=n||{};const o=[];if("object"!=typeof t||"object"!=typeof t.icons)return o;t.not_found instanceof Array&&t.not_found.forEach((t=>{e(t,null),o.push(t)}));const r=t.icons;Object.keys(r).forEach((n=>{const r=l(t,n,!0);r&&(e(n,r),o.push(n))}));const c=n.aliases||"all";if("none"!==c&&"object"==typeof t.aliases){const n=t.aliases;Object.keys(n).forEach((r=>{if("variations"===c&&function(t){for(const e in i)if(void 0!==t[e])return!0;return!1}(n[r]))return;const s=l(t,r,!0);s&&(e(r,s),o.push(r))}))}return o}const u={provider:"string",aliases:"object",not_found:"object"};for(const Rt in i)u[Rt]=typeof i[Rt];function p(t){if("object"!=typeof t||null===t)return null;const e=t;if("string"!=typeof e.prefix||!t.icons||"object"!=typeof t.icons)return null;for(const r in u)if(void 0!==t[r]&&typeof t[r]!==u[r])return null;const n=e.icons;for(const c in n){const t=n[c];if(!c.match(r)||"string"!=typeof t.body)return null;for(const e in i)if(void 0!==t[e]&&typeof t[e]!=typeof i[e])return null}const o=e.aliases;if(o)for(const c in o){const t=o[c],e=t.parent;if(!c.match(r)||"string"!=typeof e||!n[e]&&!o[e])return null;for(const n in i)if(void 0!==t[n]&&typeof t[n]!=typeof i[n])return null}return e}let d=Object.create(null);try{const t=window||self;t&&1===t._iconifyStorage.version&&(d=t._iconifyStorage.storage)}catch(Lt){}function h(t,e){void 0===d[t]&&(d[t]=Object.create(null));const n=d[t];return void 0===n[e]&&(n[e]=function(t,e){return{provider:t,prefix:e,icons:Object.create(null),missing:Object.create(null)}}(t,e)),n[e]}function g(t,e){if(!p(e))return[];const n=Date.now();return f(e,((e,o)=>{o?t.icons[e]=o:t.missing[e]=n}))}function y(t,e){const n=t.icons[e];return void 0===n?null:n}let b=!1;function v(t){return"boolean"==typeof t&&(b=t),b}function m(t){const e="string"==typeof t?s(t,!0,b):t;return e?y(h(e.provider,e.prefix),e.name):null}function x(t,e){const n=s(t,!0,b);if(!n)return!1;return function(t,e,n){try{if("string"==typeof n.body)return t.icons[e]=Object.freeze(c(n)),!0}catch(Lt){}return!1}(h(n.provider,n.prefix),n.name,e)}const w=Object.freeze({inline:!1,width:null,height:null,hAlign:"center",vAlign:"middle",slice:!1,hFlip:!1,vFlip:!1,rotate:0});function j(t,e){const n={};for(const o in t){const r=o;if(n[r]=t[r],void 0===e[r])continue;const i=e[r];switch(r){case"inline":case"slice":"boolean"==typeof i&&(n[r]=i);break;case"hFlip":case"vFlip":!0===i&&(n[r]=!n[r]);break;case"hAlign":case"vAlign":"string"==typeof i&&""!==i&&(n[r]=i);break;case"width":case"height":("string"==typeof i&&""!==i||"number"==typeof i&&i||null===i)&&(n[r]=i);break;case"rotate":"number"==typeof i&&(n[r]+=i)}}return n}const O=/(-?[0-9.]*[0-9]+[0-9.]*)/g,k=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function _(t,e,n){if(1===e)return t;if(n=void 0===n?100:n,"number"==typeof t)return Math.ceil(t*e*n)/n;if("string"!=typeof t)return t;const o=t.split(O);if(null===o||!o.length)return t;const r=[];let i=o.shift(),c=k.test(i);for(;;){if(c){const t=parseFloat(i);isNaN(t)?r.push(i):r.push(Math.ceil(t*e*n)/n)}else r.push(i);if(i=o.shift(),void 0===i)return r.join("");c=!c}}function E(t){let e="";switch(t.hAlign){case"left":e+="xMin";break;case"right":e+="xMax";break;default:e+="xMid"}switch(t.vAlign){case"top":e+="YMin";break;case"bottom":e+="YMax";break;default:e+="YMid"}return e+=t.slice?" slice":" meet",e}function S(t,e){const n={left:t.left,top:t.top,width:t.width,height:t.height};let o,r,i=t.body;[t,e].forEach((t=>{const e=[],o=t.hFlip,r=t.vFlip;let c,s=t.rotate;switch(o?r?s+=2:(e.push("translate("+(n.width+n.left).toString()+" "+(0-n.top).toString()+")"),e.push("scale(-1 1)"),n.top=n.left=0):r&&(e.push("translate("+(0-n.left).toString()+" "+(n.height+n.top).toString()+")"),e.push("scale(1 -1)"),n.top=n.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:c=n.height/2+n.top,e.unshift("rotate(90 "+c.toString()+" "+c.toString()+")");break;case 2:e.unshift("rotate(180 "+(n.width/2+n.left).toString()+" "+(n.height/2+n.top).toString()+")");break;case 3:c=n.width/2+n.left,e.unshift("rotate(-90 "+c.toString()+" "+c.toString()+")")}s%2==1&&(0===n.left&&0===n.top||(c=n.left,n.left=n.top,n.top=c),n.width!==n.height&&(c=n.width,n.width=n.height,n.height=c)),e.length&&(i=''+i+"")})),null===e.width&&null===e.height?(r="1em",o=_(r,n.width/n.height)):null!==e.width&&null!==e.height?(o=e.width,r=e.height):null!==e.height?(r=e.height,o=_(r,n.width/n.height)):(o=e.width,r=_(o,n.height/n.width)),"auto"===o&&(o=n.width),"auto"===r&&(r=n.height),o="string"==typeof o?o:o.toString()+"",r="string"==typeof r?r:r.toString()+"";const c={attributes:{width:o,height:r,preserveAspectRatio:E(e),viewBox:n.left.toString()+" "+n.top.toString()+" "+n.width.toString()+" "+n.height.toString()},body:i};return e.inline&&(c.inline=!0),c}const I=/\sid="(\S+)"/g,T="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let A=0;function M(t,e=T){const n=[];let o;for(;o=I.exec(t);)n.push(o[1]);return n.length?(n.forEach((n=>{const o="function"==typeof e?e(n):e+(A++).toString(),r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+r+')([")]|\\.[a-z])',"g"),"$1"+o+"$3")})),t):t}const D=Object.create(null);function P(t,e){D[t]=e}function F(t){return D[t]||D[""]}function L(t){let e;if("string"==typeof t.resources)e=[t.resources];else if(e=t.resources,!(e instanceof Array&&e.length))return null;return{resources:e,path:void 0===t.path?"/":t.path,maxURL:t.maxURL?t.maxURL:500,rotate:t.rotate?t.rotate:750,timeout:t.timeout?t.timeout:5e3,random:!0===t.random,index:t.index?t.index:0,dataAfterTimeout:!1!==t.dataAfterTimeout}}const N=Object.create(null),R=["https://api.simplesvg.com","https://api.unisvg.com"],C=[];for(;R.length>0;)1===R.length||Math.random()>.5?C.push(R.shift()):C.push(R.pop());function U(t,e){const n=L(e);return null!==n&&(N[t]=n,!0)}function z(t){return N[t]}N[""]=L({resources:["https://api.iconify.design"].concat(C)});const $=(t,e)=>{let n=t,o=-1!==n.indexOf("?");return Object.keys(e).forEach((t=>{let r;try{r=function(t){switch(typeof t){case"boolean":return t?"true":"false";case"number":case"string":return encodeURIComponent(t);default:throw new Error("Invalid parameter")}}(e[t])}catch(Lt){return}n+=(o?"&":"?")+encodeURIComponent(t)+"="+r,o=!0})),n},q={},W={};let Y=(()=>{let t;try{if(t=fetch,"function"==typeof t)return t}catch(Lt){}return null})();const H={prepare:(t,e,n)=>{const o=[];let r=q[e];void 0===r&&(r=function(t,e){const n=z(t);if(!n)return 0;let o;if(n.maxURL){let t=0;n.resources.forEach((e=>{const n=e;t=Math.max(t,n.length)}));const r=$(e+".json",{icons:""});o=n.maxURL-t-n.path.length-r.length}else o=0;const r=t+":"+e;return W[t]=n.path,q[r]=o,o}(t,e));const i="icons";let c={type:i,provider:t,prefix:e,icons:[]},s=0;return n.forEach(((n,a)=>{s+=n.length+1,s>=r&&a>0&&(o.push(c),c={type:i,provider:t,prefix:e,icons:[]},s=n.length),c.icons.push(n)})),o.push(c),o},send:(t,e,n)=>{if(!Y)return void n("abort",424);let o=function(t){if("string"==typeof t){if(void 0===W[t]){const e=z(t);if(!e)return"/";W[t]=e.path}return W[t]}return"/"}(e.provider);switch(e.type){case"icons":{const t=e.prefix,n=e.icons.join(",");o+=$(t+".json",{icons:n});break}case"custom":{const t=e.uri;o+="/"===t.slice(0,1)?t.slice(1):t;break}default:return void n("abort",400)}let r=503;Y(t+o).then((t=>{const e=t.status;if(200===e)return r=501,t.json();setTimeout((()=>{n(function(t){return 404===t}(e)?"abort":"next",e)}))})).then((t=>{"object"==typeof t&&null!==t?setTimeout((()=>{n("success",t)})):setTimeout((()=>{n("next",r)}))})).catch((()=>{n("next",r)}))}};const J=Object.create(null),X=Object.create(null);function Z(t,e){t.forEach((t=>{const n=t.provider;if(void 0===J[n])return;const o=J[n],r=t.prefix,i=o[r];i&&(o[r]=i.filter((t=>t.id!==e)))}))}let B=0;var G={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function K(t,e,n,o){const r=t.resources.length,i=t.random?Math.floor(Math.random()*r):t.index;let c;if(t.random){let e=t.resources.slice(0);for(c=[];e.length>1;){const t=Math.floor(Math.random()*e.length);c.push(e[t]),e=e.slice(0,t).concat(e.slice(t+1))}c=c.concat(e)}else c=t.resources.slice(i).concat(t.resources.slice(0,i));const s=Date.now();let a,l="pending",f=0,u=null,p=[],d=[];function h(){u&&(clearTimeout(u),u=null)}function g(){"pending"===l&&(l="aborted"),h(),p.forEach((t=>{"pending"===t.status&&(t.status="aborted")})),p=[]}function y(t,e){e&&(d=[]),"function"==typeof t&&d.push(t)}function b(){l="failed",d.forEach((t=>{t(void 0,a)}))}function v(){p.forEach((t=>{"pending"===t.status&&(t.status="aborted")})),p=[]}function m(){if("pending"!==l)return;h();const o=c.shift();if(void 0===o)return p.length?void(u=setTimeout((()=>{h(),"pending"===l&&(v(),b())}),t.timeout)):void b();const r={status:"pending",resource:o,callback:(e,n)=>{!function(e,n,o){const r="success"!==n;switch(p=p.filter((t=>t!==e)),l){case"pending":break;case"failed":if(r||!t.dataAfterTimeout)return;break;default:return}if("abort"===n)return a=o,void b();if(r)return a=o,void(p.length||(c.length?m():b()));if(h(),v(),!t.random){const n=t.resources.indexOf(e.resource);-1!==n&&n!==t.index&&(t.index=n)}l="completed",d.forEach((t=>{t(o)}))}(r,e,n)}};p.push(r),f++,u=setTimeout(m,t.rotate),n(o,e,r.callback)}return"function"==typeof o&&d.push(o),setTimeout(m),function(){return{startTime:s,payload:e,status:l,queriesSent:f,queriesPending:p.length,subscribe:y,abort:g}}}function Q(t){const e=function(t){if(!("object"==typeof t&&"object"==typeof t.resources&&t.resources instanceof Array&&t.resources.length))throw new Error("Invalid Reduncancy configuration");const e=Object.create(null);let n;for(n in G)void 0!==t[n]?e[n]=t[n]:e[n]=G[n];return e}(t);let n=[];function o(){n=n.filter((t=>"pending"===t().status))}return{query:function(t,r,i){const c=K(e,t,r,((t,e)=>{o(),i&&i(t,e)}));return n.push(c),c},find:function(t){const e=n.find((e=>t(e)));return void 0!==e?e:null},setIndex:t=>{e.index=t},getIndex:()=>e.index,cleanup:o}}function V(){}const tt=Object.create(null);function et(t,e,n){let o,r;if("string"==typeof t){const e=F(t);if(!e)return n(void 0,424),V;r=e.send;const i=function(t){if(void 0===tt[t]){const e=z(t);if(!e)return;const n={config:e,redundancy:Q(e)};tt[t]=n}return tt[t]}(t);i&&(o=i.redundancy)}else{const e=L(t);if(e){o=Q(e);const n=F(t.resources?t.resources[0]:"");n&&(r=n.send)}}return o&&r?o.query(e,r,n)().abort:(n(void 0,424),V)}const nt={};function ot(){}const rt=Object.create(null),it=Object.create(null),ct=Object.create(null),st=Object.create(null);function at(t,e){void 0===ct[t]&&(ct[t]=Object.create(null));const n=ct[t];n[e]||(n[e]=!0,setTimeout((()=>{n[e]=!1,function(t,e){void 0===X[t]&&(X[t]=Object.create(null));const n=X[t];n[e]||(n[e]=!0,setTimeout((()=>{if(n[e]=!1,void 0===J[t]||void 0===J[t][e])return;const o=J[t][e].slice(0);if(!o.length)return;const r=h(t,e);let i=!1;o.forEach((n=>{const o=n.icons,c=o.pending.length;o.pending=o.pending.filter((n=>{if(n.prefix!==e)return!0;const c=n.name;if(void 0!==r.icons[c])o.loaded.push({provider:t,prefix:e,name:c});else{if(void 0===r.missing[c])return i=!0,!0;o.missing.push({provider:t,prefix:e,name:c})}return!1})),o.pending.length!==c&&(i||Z([{provider:t,prefix:e}],n.id),n.callback(o.loaded.slice(0),o.missing.slice(0),o.pending.slice(0),n.abort))}))})))}(t,e)})))}const lt=Object.create(null);function ft(t,e,n){void 0===it[t]&&(it[t]=Object.create(null));const o=it[t];void 0===st[t]&&(st[t]=Object.create(null));const r=st[t];void 0===rt[t]&&(rt[t]=Object.create(null));const i=rt[t];void 0===o[e]?o[e]=n:o[e]=o[e].concat(n).sort(),r[e]||(r[e]=!0,setTimeout((()=>{r[e]=!1;const n=o[e];delete o[e];const c=F(t);if(!c)return void function(){const n=(""===t?"":"@"+t+":")+e,o=Math.floor(Date.now()/6e4);lt[n]{et(t,n,((o,r)=>{const c=h(t,e);if("object"!=typeof o){if(404!==r)return;const t=Date.now();n.icons.forEach((e=>{c.missing[e]=t}))}else try{const n=g(c,o);if(!n.length)return;const r=i[e];n.forEach((t=>{delete r[t]})),nt.store&&nt.store(t,o)}catch(s){console.error(s)}at(t,e)}))}))})))}const ut=(t,e)=>{const n=function(t,e=!0,n=!1){const o=[];return t.forEach((t=>{const r="string"==typeof t?s(t,!1,n):t;e&&!a(r,n)||o.push({provider:r.provider,prefix:r.prefix,name:r.name})})),o}(t,!0,v()),o=function(t){const e={loaded:[],missing:[],pending:[]},n=Object.create(null);t.sort(((t,e)=>t.provider!==e.provider?t.provider.localeCompare(e.provider):t.prefix!==e.prefix?t.prefix.localeCompare(e.prefix):t.name.localeCompare(e.name)));let o={provider:"",prefix:"",name:""};return t.forEach((t=>{if(o.name===t.name&&o.prefix===t.prefix&&o.provider===t.provider)return;o=t;const r=t.provider,i=t.prefix,c=t.name;void 0===n[r]&&(n[r]=Object.create(null));const s=n[r];void 0===s[i]&&(s[i]=h(r,i));const a=s[i];let l;l=void 0!==a.icons[c]?e.loaded:""===i||void 0!==a.missing[c]?e.missing:e.pending;const f={provider:r,prefix:i,name:c};l.push(f)})),e}(n);if(!o.pending.length){let t=!0;return e&&setTimeout((()=>{t&&e(o.loaded,o.missing,o.pending,ot)})),()=>{t=!1}}const r=Object.create(null),i=[];let c,l;o.pending.forEach((t=>{const e=t.provider,n=t.prefix;if(n===l&&e===c)return;c=e,l=n,i.push({provider:e,prefix:n}),void 0===rt[e]&&(rt[e]=Object.create(null));const o=rt[e];void 0===o[n]&&(o[n]=Object.create(null)),void 0===r[e]&&(r[e]=Object.create(null));const s=r[e];void 0===s[n]&&(s[n]=[])}));const f=Date.now();return o.pending.forEach((t=>{const e=t.provider,n=t.prefix,o=t.name,i=rt[e][n];void 0===i[o]&&(i[o]=f,r[e][n].push(o))})),i.forEach((t=>{const e=t.provider,n=t.prefix;r[e][n].length&&ft(e,n,r[e][n])})),e?function(t,e,n){const o=B++,r=Z.bind(null,n,o);if(!e.pending.length)return r;const i={id:o,icons:e,callback:t,abort:r};return n.forEach((t=>{const e=t.provider,n=t.prefix;void 0===J[e]&&(J[e]=Object.create(null));const o=J[e];void 0===o[n]&&(o[n]=[]),o[n].push(i)})),r}(e,o,i):ot},pt="iconify2",dt="iconify",ht="iconify-count",gt="iconify-version",yt=36e5,bt={local:!0,session:!0};let vt=!1;const mt={local:0,session:0},xt={local:[],session:[]};let wt="undefined"==typeof window?{}:window;function jt(t){const e=t+"Storage";try{if(wt&&wt[e]&&"number"==typeof wt[e].length)return wt[e]}catch(Lt){}return bt[t]=!1,null}function Ot(t,e,n){try{return t.setItem(ht,n.toString()),mt[e]=n,!0}catch(Lt){return!1}}function kt(t){const e=t.getItem(ht);if(e){const t=parseInt(e);return t||0}return 0}const _t=()=>{if(vt)return;vt=!0;const t=Math.floor(Date.now()/yt)-168;function e(e){const n=jt(e);if(!n)return;const o=e=>{const o=dt+e.toString(),r=n.getItem(o);if("string"!=typeof r)return!1;let i=!0;try{const e=JSON.parse(r);if("object"!=typeof e||"number"!=typeof e.cached||e.cached0}}catch(Lt){i=!1}return i||n.removeItem(o),i};try{const t=n.getItem(gt);if(t!==pt)return t&&function(t){try{const e=kt(t);for(let n=0;n=0;n--)o(n)||(n===r-1?r--:xt[e].push(n));Ot(n,e,r)}catch(Lt){}}for(const n in bt)e(n)},Et=(t,e)=>{function n(n){if(!bt[n])return!1;const o=jt(n);if(!o)return!1;let r=xt[n].shift();if(void 0===r&&(r=mt[n],!Ot(o,n,r+1)))return!1;try{const n={cached:Math.floor(Date.now()/yt),provider:t,data:e};o.setItem(dt+r.toString(),JSON.stringify(n))}catch(Lt){return!1}return!0}vt||_t(),Object.keys(e.icons).length&&(e.not_found&&delete(e=Object.assign({},e)).not_found,n("local")||n("session"))};const St=/[\s,]+/;function It(t,e){e.split(St).forEach((e=>{switch(e.trim()){case"horizontal":t.hFlip=!0;break;case"vertical":t.vFlip=!0}}))}function Tt(t,e){e.split(St).forEach((e=>{const n=e.trim();switch(n){case"left":case"center":case"right":t.hAlign=n;break;case"top":case"middle":case"bottom":t.vAlign=n;break;case"slice":case"crop":t.slice=!0;break;case"meet":t.slice=!1}}))}function At(t,e=0){const n=t.replace(/^-?[0-9.]*/,"");function o(t){for(;t<0;)t+=4;return t%4}if(""===n){const e=parseInt(t);return isNaN(e)?0:o(e)}if(n!==t){let e=0;switch(n){case"%":e=25;break;case"deg":e=90}if(e){let r=parseFloat(t.slice(0,t.length-n.length));return isNaN(r)?0:(r/=e,r%1==0?o(r):0)}}return e}const Mt={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img",style:{}},Dt={...w,inline:!0};if(v(!0),P("",H),"undefined"!=typeof document&&"undefined"!=typeof window){nt.store=Et,_t();const t=window;if(void 0!==t.IconifyPreload){const e=t.IconifyPreload,n="Invalid IconifyPreload syntax.";"object"==typeof e&&null!==e&&(e instanceof Array?e:[e]).forEach((t=>{try{("object"!=typeof t||null===t||t instanceof Array||"object"!=typeof t.icons||"string"!=typeof t.prefix||!function(t,e){if("object"!=typeof t)return!1;if("string"!=typeof e&&(e="string"==typeof t.provider?t.provider:""),b&&""===e&&("string"!=typeof t.prefix||""===t.prefix)){let e=!1;return p(t)&&(t.prefix="",f(t,((t,n)=>{n&&x(t,n)&&(e=!0)}))),e}return!("string"!=typeof t.prefix||!a({provider:e,prefix:t.prefix,name:"a"}))&&!!g(h(e,t.prefix),t)}(t))&&console.error(n)}catch(e){console.error(n)}}))}if(void 0!==t.IconifyProviders){const e=t.IconifyProviders;if("object"==typeof e&&null!==e)for(let t in e){const n="IconifyProviders["+t+"] is invalid.";try{const o=e[t];if("object"!=typeof o||!o||void 0===o.resources)continue;U(t,o)||console.error(n)}catch(Nt){console.error(n)}}}}class Pt extends o.Component{constructor(t){super(t),this.state={icon:null}}_abortLoading(){this._loading&&(this._loading.abort(),this._loading=null)}_setData(t){this.state.icon!==t&&this.setState({icon:t})}_checkIcon(t){const e=this.state,n=this.props.icon;if("object"==typeof n&&null!==n&&"string"==typeof n.body)return this._icon="",this._abortLoading(),void((t||null===e.icon)&&this._setData({data:c(n)}));let o;if("string"!=typeof n||null===(o=s(n,!1,!0)))return this._abortLoading(),void this._setData(null);const r=m(o);if(null!==r){if(this._icon!==n||null===e.icon){this._abortLoading(),this._icon=n;const t=["iconify"];""!==o.prefix&&t.push("iconify--"+o.prefix),""!==o.provider&&t.push("iconify--"+o.provider),this._setData({data:r,classes:t}),this.props.onLoad&&this.props.onLoad(n)}}else this._loading&&this._loading.name===n||(this._abortLoading(),this._icon="",this._setData(null),this._loading={name:n,abort:ut([o],this._checkIcon.bind(this,!1))})}componentDidMount(){this._checkIcon(!1)}componentDidUpdate(t){t.icon!==this.props.icon&&this._checkIcon(!0)}componentWillUnmount(){this._abortLoading()}render(){const t=this.props,e=this.state.icon;if(null===e)return t.children?t.children:o.createElement("span",{});let n=t;return e.classes&&(n={...t,className:("string"==typeof t.className?t.className+" ":"")+e.classes.join(" ")}),((t,e,n,r)=>{const i=n?Dt:w,c=j(i,e),s="object"==typeof e.style&&null!==e.style?e.style:{},a={...Mt,ref:r,style:s};for(let o in e){const t=e[o];if(void 0!==t)switch(o){case"icon":case"style":case"children":case"onLoad":case"_ref":case"_inline":break;case"inline":case"hFlip":case"vFlip":c[o]=!0===t||"true"===t||1===t;break;case"flip":"string"==typeof t&&It(c,t);break;case"align":"string"==typeof t&&Tt(c,t);break;case"color":s.color=t;break;case"rotate":"string"==typeof t?c[o]=At(t):"number"==typeof t&&(c[o]=t);break;case"ariaHidden":case"aria-hidden":!0!==t&&"true"!==t&&delete a["aria-hidden"];break;default:void 0===i[o]&&(a[o]=t)}}const l=S(t,c);let f=0,u=e.id;"string"==typeof u&&(u=u.replace(/-/g,"_")),a.dangerouslySetInnerHTML={__html:M(l.body,u?()=>u+"ID"+f++:"iconifyReact")};for(let o in l.attributes)a[o]=l.attributes[o];return l.inline&&void 0===s.verticalAlign&&(s.verticalAlign="-0.125em"),o.createElement("svg",a)})(e.data,n,t._inline,t._ref)}}o.forwardRef((function(t,e){const n={...t,_ref:e,_inline:!1};return o.createElement(Pt,n)}));const Ft=o.forwardRef((function(t,e){const n={...t,_ref:e,_inline:!0};return o.createElement(Pt,n)}))}}]); \ No newline at end of file diff --git a/assets/js/d2e57876.55360a13.js b/assets/js/d2e57876.55360a13.js new file mode 100644 index 0000000..22963ef --- /dev/null +++ b/assets/js/d2e57876.55360a13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[5363],{5549:function(e,t,a){a.d(t,{A:function(){return d},q:function(){return o}});var n=a(7294),r=a(9960),i="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",l="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function d(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=l+"/"+e.url;break;case"3.1.0":t=i+"/"+e.url}else t=l+"/"+e.url;return n.createElement(r.Z,{to:t,className:"noline"},e.children)}function o(e){return n.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}o.defaultProps={padx:"1ex"}},7351:function(e,t,a){a.r(t),a.d(t,{assets:function(){return u},contentTitle:function(){return h},default:function(){return f},frontMatter:function(){return c},metadata:function(){return k},toc:function(){return N}});var n=a(3117),r=a(102),i=(a(7294),a(3905)),l=(a(541),a(5514)),d=a(6577),o=a(2895),m=a(7508),p=a(5549),s=["components"],c={id:"MpegClient",title:"MpegClient",sidebar_label:"MpegClient",slug:"/apis/MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly."},h=void 0,k={unversionedId:"apis/MpegClient",id:"version-3.2.x/apis/MpegClient",title:"MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly.",source:"@site/versioned_docs/version-3.2.x/apis/MpegClient.mdx",sourceDirName:"apis",slug:"/apis/MpegClient",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegClient",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/apis/MpegClient.mdx",tags:[],version:"3.2.x",frontMatter:{id:"MpegClient",title:"MpegClient",sidebar_label:"MpegClient",slug:"/apis/MpegClient",description:"This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly."},sidebar:"apis",previous:{title:"MpegEncoder",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegEncoder"},next:{title:"MpegServer",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegServer"}},u={},N=[{value:"Arguments",id:"arguments",level:2},{value:"Methods",id:"methods",level:2},{value:"clear",id:"clear",level:3},{value:"resetPath",id:"resetpath",level:3},{value:"Requires",id:"requires",level:4},{value:"getParameter",id:"getparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"setParameter",id:"setparameter",level:3},{value:"Requires",id:"requires",level:4},{value:"FFmpegSetup",id:"ffmpegsetup",level:3},{value:"Requires",id:"requires",level:4},{value:"dumpFile",id:"dumpfile",level:3},{value:"start",id:"start",level:3},{value:"terminate",id:"terminate",level:3},{value:"ExtractFrame",id:"extractframe",level:3},{value:"Requires",id:"requires",level:4},{value:"Returns",id:"returns",level:4},{value:"Operators",id:"operators",level:2},{value:"__str__",id:"__str__",level:3},{value:"Returns",id:"returns",level:4},{value:"Examples",id:"examples",level:2},{value:"Scale the decoded frame",id:"scale-the-decoded-frame",level:3},{value:"Configure the cache size",id:"configure-the-cache-size",level:3},{value:"Use multi-thread decoding",id:"use-multi-thread-decoding",level:3}],g={toc:N};function f(e){var t=e.components,a=(0,r.Z)(e,s);return(0,i.kt)("wrapper",(0,n.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)(l.Z,{icon:d.Z,mdxType:"InlineIcon"})," Class",(0,i.kt)(p.q,{mdxType:"Splitter"}),(0,i.kt)(p.A,{ver:"3.2.0",url:"MpegStreamer.h#L49",mdxType:"SourceURL"},(0,i.kt)(l.Z,{icon:m.Z,mdxType:"InlineIcon"})," Source")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln = mpegCoder.MpegClient()\n")),(0,i.kt)("p",null,"The frame-level video stream client used for demuxing an online video stream."),(0,i.kt)("p",null,"This client instance is integrated with the features of ",(0,i.kt)("a",{parentName:"p",href:"./MpegDecoder"},(0,i.kt)("inlineCode",{parentName:"a"},"MpegDecoder")),". The connection to the video server is established by ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". When the client is working, it will manage a background sub-thread for fetching the remote frames consecutively. The fetched frames are saved in a circular buffer. The method ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()"))," always return the latest received frames. To learn more details, please review the ",(0,i.kt)("a",{parentName:"p",href:"../examples/client#introduction"},"description of the theory"),"."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MpegClient")," requires users to initialize the decoding before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the client is destructed. ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegClient")," also supports threading control. When the client is connected to the server, users could use ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()"))," to keep the buffer synchronized with the video stream. Calling ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," will force the buffer updating to stop. In this case, the method ",(0,i.kt)("a",{parentName:"p",href:"#extractframe"},(0,i.kt)("inlineCode",{parentName:"a"},"ExtractFrame()"))," will always return the same results."),(0,i.kt)("h2",{id:"arguments"},"Arguments"),(0,i.kt)("p",null,"This class does not has initialization arguments."),(0,i.kt)("h2",{id:"methods"},"Methods"),(0,i.kt)("h3",{id:"clear"},(0,i.kt)("inlineCode",{parentName:"h3"},"clear")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.clear()\n")),(0,i.kt)("p",null,"Clear all configurations ",(0,i.kt)("strong",{parentName:"p"},"except")," the default video address. If a video stream is alredy opened, ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," will release the connection automatically."),(0,i.kt)("div",{className:"admonition admonition-tip alert alert--success"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"16",viewBox:"0 0 12 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))),"tip")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"We suggest that users should call ",(0,i.kt)("inlineCode",{parentName:"p"},"clear()")," manually, like using other file readers. No matter when ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()"))," is called, this method could be used safely without calling ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()")),"."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"resetpath"},(0,i.kt)("inlineCode",{parentName:"h3"},"resetPath")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.resetPath(videoAddress)\n")),(0,i.kt)("p",null,"Reset the default video address to a specific value. Configuring this value will not cause the video stream to be opened. This method is merely used as a configuration."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)(l.Z,{icon:o.Z,mdxType:"InlineIcon"})),(0,i.kt)("td",{parentName:"tr",align:"left"},"The address of the video to be read.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"getparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"getParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"param = cln.getParameter(paramName=None)\n")),(0,i.kt)("p",null,"Get the video parameter or configuration value. Each time ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName")," only accepts one parameter name."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a ",(0,i.kt)("inlineCode",{parentName:"td"},"dict"),".")))),(0,i.kt)("p",null,"Here is a list of checkable ",(0,i.kt)("inlineCode",{parentName:"p"},"paramName"),":"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Parameter"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The current address of the read video. If the video stream is not opened, will return the default video address.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"width")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of the read video. This value is determined by the video stream.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"height")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of the read video. This value is determined by the video stream.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frameCount")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of returned frames in the last frame extraction method.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"coderName")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The name of the codec used for decoding the video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"duration")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The total seconds of this video.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"estFrameNum")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The estimated total frame number (may be not accurate).")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"srcFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"float")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The average frame rate of the source video stream. The unit is FPS. The actual frame rate may be changed on client side.")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"param")),(0,i.kt)("td",{parentName:"tr",align:"center"},"Determined by ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")),(0,i.kt)("td",{parentName:"tr",align:"left"},"The returned value of the parameter. If no ",(0,i.kt)("inlineCode",{parentName:"td"},"paramName")," is given, will return all important parameters. These parameters could serve as ",(0,i.kt)("inlineCode",{parentName:"td"},"configDict")," for ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegEncoder")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"MpegServer"),".")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"setparameter"},(0,i.kt)("inlineCode",{parentName:"h3"},"setParameter")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.setParameter(widthDst=None, heightDst=None, cacheSize=None, readSize=None, dstFrameRate=None, nthread=None)\n")),(0,i.kt)("p",null,"Set the configurations of the client. To make the configurations take effects, these parameters need to be configured before ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The width of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The height of extracted frames. Configuring both ",(0,i.kt)("inlineCode",{parentName:"td"},"widthDst")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"heightDst")," will cause the frames to be scaled. If a value ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0")," is given, this value would take no effect.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"cacheSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of allocated avaliable frames in the cache. We recommend to configure this value as ",(0,i.kt)("inlineCode",{parentName:"td"},"2*readSize"),".")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"dstFrameRate")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"tuple")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The destination FPS of the stream. This value should be formatted as a factor defined as ",(0,i.kt)("inlineCode",{parentName:"td"},"(numerator, denominator)"),". Configuing this value will cause the received frames to be resampled.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"nthread")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of decoder threads.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"h3"},"FFmpegSetup")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.FFmpegSetup(videoAddress=None)\n")),(0,i.kt)("p",null,"Open the online video stream, and initialize the decoder. After the client initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video stream connection is established by the client now, this connection will be released first, then the new video stream will be opened."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"videoAddress")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")," or ",(0,i.kt)("inlineCode",{parentName:"td"},"bytes")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The address of the video stream to be read. If not given, will use the default path configured by ",(0,i.kt)("a",{parentName:"td",href:"#resetpath"},(0,i.kt)("inlineCode",{parentName:"a"},"resetPath()")),". Setting this argument will also cause the default video path to change.")))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"dumpfile"},(0,i.kt)("inlineCode",{parentName:"h3"},"dumpFile")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.dumpFile()\n")),(0,i.kt)("p",null,"Print out a brief preview of the video meta-data to the standard output."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method is based on C stdout. Therefore, these results could not be redirected or catched by python."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"start"},(0,i.kt)("inlineCode",{parentName:"h3"},"start")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.start()\n")),(0,i.kt)("p",null,"Start the demuxing thread. The started sub-thread will keep receiving remote frames to ensure the client buffer is synchronized with the online video stream."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method must be called after ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". Once this method is called, users are not allowed to call it again until ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," is called or the client is restarted by ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),"."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"terminate"},(0,i.kt)("inlineCode",{parentName:"h3"},"terminate")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"cln.terminate()\n")),(0,i.kt)("p",null,"Terminate the current demuxing thread. This method is required to be called after ",(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()")),'. It will stop the frame receiving, and make the played video to be "paused". In this case, the frame receiving could be started again by ',(0,i.kt)("a",{parentName:"p",href:"#start"},(0,i.kt)("inlineCode",{parentName:"a"},"start()")),"."),(0,i.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,i.kt)("div",{parentName:"div",className:"admonition-heading"},(0,i.kt)("h5",{parentName:"div"},(0,i.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,i.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,i.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,i.kt)("div",{parentName:"div",className:"admonition-content"},(0,i.kt)("p",{parentName:"div"},"This method must be called after ",(0,i.kt)("a",{parentName:"p",href:"#ffmpegsetup"},(0,i.kt)("inlineCode",{parentName:"a"},"FFmpegSetup()")),". Calling this method will not cause the current connection aborted. Only ",(0,i.kt)("a",{parentName:"p",href:"#clear"},(0,i.kt)("inlineCode",{parentName:"a"},"clear()"))," could release the connection explicitly."))),(0,i.kt)("hr",null),(0,i.kt)("h3",{id:"extractframe"},(0,i.kt)("inlineCode",{parentName:"h3"},"ExtractFrame")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"frames = cln.ExtractFrame(readSize=0)\n")),(0,i.kt)("p",null,"Read the latest several frames from the circular buffer."),(0,i.kt)("p",null,"This method is merely a reading method, and not decode frames. Instead, the decoding is managed by the sub-thread. ",(0,i.kt)("inlineCode",{parentName:"p"},"ExtractFrame()")," always fetch the several frames that are latestly decoded. Even ",(0,i.kt)("a",{parentName:"p",href:"#terminate"},(0,i.kt)("inlineCode",{parentName:"a"},"terminate()"))," is called, this method could be still used safely."),(0,i.kt)("h4",{id:"requires"},"Requires"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Required"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"readSize")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"int")),(0,i.kt)("td",{parentName:"tr",align:"center"}),(0,i.kt)("td",{parentName:"tr",align:"left"},"The number of the frames to be read. If configured as ",(0,i.kt)("inlineCode",{parentName:"td"},"<=0"),", will use the default ",(0,i.kt)("inlineCode",{parentName:"td"},"readSize")," configured by ",(0,i.kt)("a",{parentName:"td",href:"#setparameter"},(0,i.kt)("inlineCode",{parentName:"a"},"setParameter()")),".")))),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"frames")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"np.ndarray")),(0,i.kt)("td",{parentName:"tr",align:"left"},"An array with a shape of ",(0,i.kt)("inlineCode",{parentName:"td"},"(N, H, W, C)"),", where ",(0,i.kt)("inlineCode",{parentName:"td"},"N")," is given by ",(0,i.kt)("inlineCode",{parentName:"td"},"readSize")," (no matter whether the video reaches its end), ",(0,i.kt)("inlineCode",{parentName:"td"},"(H, W)")," are the height and width of the returned frames respectively. ",(0,i.kt)("inlineCode",{parentName:"td"},"C")," means the 3 RGB channel. If no valid frames are received, this method would return several frames that are totally black.")))),(0,i.kt)("h2",{id:"operators"},"Operators"),(0,i.kt)("h3",{id:"__str__"},(0,i.kt)("inlineCode",{parentName:"h3"},"__str__")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"info = str(cln)\n")),(0,i.kt)("p",null,"Return a brief report of the current client status."),(0,i.kt)("h4",{id:"returns"},"Returns"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"Argument"),(0,i.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,i.kt)("th",{parentName:"tr",align:"left"},(0,i.kt)("div",{className:"center"},"Description")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"info")),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("inlineCode",{parentName:"td"},"str")),(0,i.kt)("td",{parentName:"tr",align:"left"},"A brief report of the client status, the configurations and parameters will be listed as formatted texts.")))),(0,i.kt)("h2",{id:"examples"},"Examples"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"../examples/client"},(0,i.kt)("em",{parentName:"a"},(0,i.kt)("inlineCode",{parentName:"em"},"Client")))," in the tutorial. Here we also show some specific configurations:"),(0,i.kt)("h3",{id:"scale-the-decoded-frame"},"Scale the decoded frame"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\ncln.setParameter(widthDst=720, heightDst=486)\n...\n")),(0,i.kt)("h3",{id:"configure-the-cache-size"},"Configure the cache size"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\n# Assume that the source frame rate is 29.997\ncln.setParameter(readSize=30, cacheSize=60)\n...\n")),(0,i.kt)("h3",{id:"use-multi-thread-decoding"},"Use multi-thread decoding"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"...\ncln = mpegCoder.MpegClient()\ncln.setParameter(nthread=8)\n...\n")))}f.isMDXComponent=!0},2895:function(e,t){t.Z={body:''}},6577:function(e,t){t.Z={body:''}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/d6b25b21.fce435e8.js b/assets/js/d6b25b21.fce435e8.js new file mode 100644 index 0000000..f2b4c62 --- /dev/null +++ b/assets/js/d6b25b21.fce435e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[5988],{8793:function(e,t,n){var o=n(7294),r=n(9960),a=n(1954),i=n(2949);t.Z=function(e){var t=(0,o.useState)(!1),n=t[0],l=t[1];(0,o.useEffect)((function(){l(!0)}),[]);var s,u,p,d=(s=(0,i.I)(),u=s.colorMode,s.setColorMode,"dark"===u?"button--secondary button--outline":"button--secondary");return p=e.index?"button "+d+" button--lg button--index":"button "+d+" button--lg",o.createElement(r.Z,{key:String(n),className:p,to:e.to},e.icon&&o.createElement(a.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},4222:function(e,t,n){n.r(t),n.d(t,{assets:function(){return c},contentTitle:function(){return d},default:function(){return k},frontMatter:function(){return p},metadata:function(){return m},toc:function(){return h}});var o=n(3117),r=n(102),a=(n(7294),n(3905)),i=n(8793),l=n(541),s=n(3807),u=["components"],p={id:"running",title:"Troubleshooting for running",sidebar_label:"Running",slug:"/troubleshooting/running",description:"The troubleshooting for running mpegCoder."},d=void 0,m={unversionedId:"troubleshooting/running",id:"version-3.2.x/troubleshooting/running",title:"Troubleshooting for running",description:"The troubleshooting for running mpegCoder.",source:"@site/versioned_docs/version-3.2.x/troubleshooting/running.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/running",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.2.x/troubleshooting/running.mdx",tags:[],version:"3.2.x",frontMatter:{id:"running",title:"Troubleshooting for running",sidebar_label:"Running",slug:"/troubleshooting/running",description:"The troubleshooting for running mpegCoder."},sidebar:"docs",previous:{title:"Installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/installation"},next:{title:"Q&A",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/qna"}},c={},h=[{value:"Introduction",id:"introduction",level:2},{value:"Questions and answers",id:"questions-and-answers",level:2},{value:"Fail to decode first frame",id:"fail-to-decode-first-frame",level:3},{value:"Fail to encode frames",id:"fail-to-encode-frames",level:3},{value:"Bad output video",id:"bad-output-video",level:3},{value:"Stuck of the streamer",id:"stuck-of-the-streamer",level:3},{value:"Fail to push the stream",id:"fail-to-push-the-stream",level:3},{value:"Set log level",id:"set-log-level",level:3},{value:"Reuse the instances",id:"reuse-the-instances",level:3}],g={toc:h};function k(e){var t=e.components,n=(0,r.Z)(e,u);return(0,a.kt)("wrapper",(0,o.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"If you could not find your problem in this page, please fire an issue:"),(0,a.kt)("p",null,(0,a.kt)(i.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/new/choose",icon:s.Z,mdxType:"DarkButton"},"Fire an issue")),(0,a.kt)("h2",{id:"questions-and-answers"},"Questions and answers"),(0,a.kt)("h3",{id:"fail-to-decode-first-frame"},"Fail to decode first frame"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Why is the first frame not able to be decoded correctly? The returned frame is totally black.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem often occurs when using ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegClient"),", especially when demuxing the RTSP stream. In some video codec formats, there are I, P, and B frames. The I frame is required for decoding other frames. If the first received frame from the remote stream is not an I frame, you could not decode the frame correctly. This problem should be fixed if you let your client running for a while."))),(0,a.kt)("h3",{id:"fail-to-encode-frames"},"Fail to encode frames"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When encoding frames, why does ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," collapse?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": You may send incorrect data to ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegEncoder.EncodeFrame()"),". The input value should be a 3D ",(0,a.kt)("a",{parentName:"p",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,a.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,a.kt)(l.Z,{mdxType:"IconExternalLink"})),". The size of this array requires to be consistent with the configuration of the encoder."))),(0,a.kt)("h3",{id:"bad-output-video"},"Bad output video"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I am working with ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegEncoder"),". Why is the output video broken?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": There are two typical cases for the bad output video. Please check whether you meet such cases:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"The video tail is not written correctly. This problem is often caused by a sudden termination of the program."),(0,a.kt)("li",{parentName:"ul"},"Some of the input frames are not correctly written.")))),(0,a.kt)("h3",{id:"stuck-of-the-streamer"},"Stuck of the streamer"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When using ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegClient")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer"),", why is the program stucked?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem is often caused by ",(0,a.kt)("inlineCode",{parentName:"p"},"streamer.FFmpegSetup()"),", especially when the remote server program is not launched, or the stream protocol is not accepted by the server. I have to admit that I should add a timeout option in the future."))),(0,a.kt)("h3",{id:"fail-to-push-the-stream"},"Fail to push the stream"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I could connect the server by ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer.FFmpegSetup()")," successfully. Why am I not able to serve the first frame by ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem is often caused by using a wrong codec. Not all codecs are supported for the online streaming. We recommend users to use ",(0,a.kt)("inlineCode",{parentName:"p"},"libx264"),"."))),(0,a.kt)("h3",{id:"set-log-level"},"Set log level"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I do not want the logs shown in the prompt, how to disable them?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": We provide a global configuration method to do that:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.setGlobal(dumpLevel=0)\n")),(0,a.kt)("p",{parentName:"li"},"This value could be ",(0,a.kt)("inlineCode",{parentName:"p"},"0")," (only show errors), ",(0,a.kt)("inlineCode",{parentName:"p"},"1")," (show basic logs), ",(0,a.kt)("inlineCode",{parentName:"p"},"2")," (show detailed logs)."))),(0,a.kt)("h3",{id:"reuse-the-instances"},"Reuse the instances"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Can I reuse the same instance of ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", for example, the ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegDecoder"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Of course. Remember to call ",(0,a.kt)("inlineCode",{parentName:"p"},"clear()")," before reusing the instance."))))}k.isMDXComponent=!0},3807:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/d8b6944d.268f764e.js b/assets/js/d8b6944d.268f764e.js new file mode 100644 index 0000000..89f233c --- /dev/null +++ b/assets/js/d8b6944d.268f764e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9156],{8793:function(e,t,n){var o=n(7294),i=n(9960),a=n(1954),r=n(2949);t.Z=function(e){var t=(0,o.useState)(!1),n=t[0],l=t[1];(0,o.useEffect)((function(){l(!0)}),[]);var p,d,s,m=(p=(0,r.I)(),d=p.colorMode,p.setColorMode,"dark"===d?"button--secondary button--outline":"button--secondary");return s=e.index?"button "+m+" button--lg button--index":"button "+m+" button--lg",o.createElement(i.Z,{key:String(n),className:s,to:e.to},e.icon&&o.createElement(a.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},7881:function(e,t,n){n.r(t),n.d(t,{assets:function(){return k},contentTitle:function(){return h},default:function(){return f},frontMatter:function(){return u},metadata:function(){return c},toc:function(){return g}});var o=n(3117),i=n(102),a=(n(7294),n(3905)),r=n(8793),l=n(541),p=n(5514),d=n(3807),s=n(7225),m=["components"],u={id:"installation",title:"Troubleshooting for installation",sidebar_label:"Installation",slug:"/troubleshooting/installation",description:"The troubleshooting for installation."},h=void 0,c={unversionedId:"troubleshooting/installation",id:"troubleshooting/installation",title:"Troubleshooting for installation",description:"The troubleshooting for installation.",source:"@site/docs/troubleshooting/installation.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/installation",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/troubleshooting/installation.mdx",tags:[],version:"current",frontMatter:{id:"installation",title:"Troubleshooting for installation",sidebar_label:"Installation",slug:"/troubleshooting/installation",description:"The troubleshooting for installation."},sidebar:"docs",previous:{title:"Troubleshooting",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/troubleshooting"},next:{title:"Running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/running"}},k={},g=[{value:"Introduction",id:"introduction",level:2},{value:"Questions and answers",id:"questions-and-answers",level:2},{value:"Meet permission denied and import failure during the first run",id:"meet-permission-denied-and-import-failure-during-the-first-run",level:3},{value:"DLL not found",id:"dll-not-found",level:3},{value:".so not found",id:"so-not-found",level:3},{value:"numpy.core.multiarray not found",id:"numpycoremultiarray-not-found",level:3},{value:"GLibC 2.29 not found",id:"glibc-2-29-not-found",level:3},{value:"GLibC 2.28 not found",id:"glibc-2-28-not-found",level:3},{value:"libcrypyto not found",id:"libcrypyto-not-found",level:3},{value:"Incorrect dependencies",id:"incorrect-dependencies",level:3},{value:"tqdm has no attribute wrapattr",id:"tqdm-has-no-attribute-wrapattr",level:3}],N={toc:g};function f(e){var t=e.components,n=(0,i.Z)(e,m);return(0,a.kt)("wrapper",(0,o.Z)({},N,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"If you could not find your problem in this page, please fire an issue:"),(0,a.kt)("p",null,(0,a.kt)(r.Z,{to:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/new/choose",icon:d.Z,mdxType:"DarkButton"},"Fire an issue")),(0,a.kt)("h2",{id:"questions-and-answers"},"Questions and answers"),(0,a.kt)("h3",{id:"meet-permission-denied-and-import-failure-during-the-first-run"},"Meet permission denied and import failure during the first run"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When I import ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," for the first time, why it fails to download something into the ",(0,a.kt)("inlineCode",{parentName:"p"},"site-pacakges")," folder?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": To reduce the size of the ",(0,a.kt)("inlineCode",{parentName:"p"},".whl")," package, in the newer release, I decide to not pack the ",(0,a.kt)("inlineCode",{parentName:"p"},".dll")," / ",(0,a.kt)("inlineCode",{parentName:"p"},".so")," dependencies with ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". Instead, when importing ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," for the first time, it will automatically download the dependencies into the package folder. To ensure that you have the permission to fetch the dependencies, I recommend the following to solutions:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"The first solution is to install ",(0,a.kt)("inlineCode",{parentName:"li"},"mpegCoder")," in a virtual environment where you own the permission."),(0,a.kt)("li",{parentName:"ul"},"The second solution is to run ",(0,a.kt)("inlineCode",{parentName:"li"},'python -c "import mpegCoder"')," in Administrator mode or ",(0,a.kt)("inlineCode",{parentName:"li"},"sudo")," mode. This command will let ",(0,a.kt)("inlineCode",{parentName:"li"},"mpegCoder")," start to download the dependencies.")))),(0,a.kt)("h3",{id:"dll-not-found"},"DLL not found"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"ImportError: DLL load failed while importing mpegCoder: The specified module could not be found.\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": It seems that this error will only occurs when both the following conditions are satisfied:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"You are using Windows."),(0,a.kt)("li",{parentName:"ul"},"You are using the maunally installed ",(0,a.kt)("inlineCode",{parentName:"li"},"mpegCoder"),", not the pip version.")),(0,a.kt)("p",{parentName:"li"},"This error is caused by the absent of required dependencies. It is typically caused when:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Your python version does not match the ",(0,a.kt)("inlineCode",{parentName:"li"},"mpegCoder")," module."),(0,a.kt)("li",{parentName:"ul"},"The required DLL files are neither in the same folder of ",(0,a.kt)("inlineCode",{parentName:"li"},"mpegCoder.pyd"),", nor in the path (environment variable ",(0,a.kt)("inlineCode",{parentName:"li"},"PATH"),")."))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": Download the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/dll-win-ffmpeg_5_0.tar.xz"},"dependencies",(0,a.kt)(p.Z,{icon:s.Z,mdxType:"InlineIcon"}))," and extract the DLLs in the same folder of ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder.pyd"),"."))),(0,a.kt)("h3",{id:"so-not-found"},(0,a.kt)("inlineCode",{parentName:"h3"},".so")," not found"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"ImportError: lib*****.so.**: cannot open shared object file: No such file or directory\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": It seems that this error will only occurs when both the following conditions are satisfied:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"You are using Linux."),(0,a.kt)("li",{parentName:"ul"},"You are using the maunally installed ",(0,a.kt)("inlineCode",{parentName:"li"},"mpegCoder"),", not the pip version.")),(0,a.kt)("p",{parentName:"li"},"This error is caused by the absent of required dependencies. It is typically caused when:"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Your python version does not match the ",(0,a.kt)("inlineCode",{parentName:"li"},"mpegCoder")," module, in this case, the library name should be ",(0,a.kt)("inlineCode",{parentName:"li"},"libpython3.*.so.**"),"."),(0,a.kt)("li",{parentName:"ul"},"The required dependencies files are not in your environment variable ",(0,a.kt)("inlineCode",{parentName:"li"},"$LD_LIBRARY_PATH"),"."))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": Download the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/so-linux-ffmpeg_5_0.tar.xz"},"dependencies",(0,a.kt)(p.Z,{icon:s.Z,mdxType:"InlineIcon"}))," and extract the missing ",(0,a.kt)("inlineCode",{parentName:"p"},".so")," to a folder in ",(0,a.kt)("inlineCode",{parentName:"p"},"$LD_LIBRARY_PATH"),"."))),(0,a.kt)("h3",{id:"numpycoremultiarray-not-found"},(0,a.kt)("inlineCode",{parentName:"h3"},"numpy.core.multiarray")," not found"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"ImportError: numpy.core.multiarray failed to import\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": You may not install ",(0,a.kt)("a",{parentName:"p",href:"https://numpy.org",title:"Numpy"},"Numpy",(0,a.kt)(l.Z,{mdxType:"IconExternalLink"})),", or your Numpy version is not match the pre-compiled ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". In most cases, a little bit mismatch of the Numpy would not cause this error. Maybe your Numpy version is different from the requirement too much. See ",(0,a.kt)("a",{parentName:"p",href:"../installation/windows#download-mpegcoder"},"Compilation list (Win)")," or ",(0,a.kt)("a",{parentName:"p",href:"../installation/linux#download-mpegcoder"},"Compilation list (Linux)")," to find the best Numpy version.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": Reinstall Numpy, or compile ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," by yourself."))),(0,a.kt)("h3",{id:"glibc-2-29-not-found"},"GLibC 2.29 not found"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ******/mpegCoder/lib/libsrt.so.1.4)\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Your GLibC version is not ",(0,a.kt)("inlineCode",{parentName:"p"},">=2.29"),". To verify that, you could run"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"ldd --version\n")),(0,a.kt)("p",{parentName:"li"},"This problem often occurs when you are using an older Linux OS. The supported OS list could be found ",(0,a.kt)("a",{parentName:"p",href:"../installation/linux#import"},"here"),".")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": We recommend to compile and install GLibC ",(0,a.kt)("inlineCode",{parentName:"p"},">=2.31"),". However, if users want a faster hotfix. Please follow the follwing instructions."),(0,a.kt)("p",{parentName:"li"},"If you are using ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," from pip. You could find a folder named ",(0,a.kt)("inlineCode",{parentName:"p"},"lib-fix")," in where ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," is installed, then run the following command:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"ln -sf /lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6\n")),(0,a.kt)("p",{parentName:"li"},"The same file (",(0,a.kt)("inlineCode",{parentName:"p"},"libm-2.31.so"),") could be also found in the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.2.0/so-linux-ffmpeg_5_0.tar.xz"},"Linux dependencies",(0,a.kt)(p.Z,{icon:s.Z,mdxType:"InlineIcon"})),"."))),(0,a.kt)("h3",{id:"glibc-2-28-not-found"},"GLibC 2.28 not found"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"OSError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by ******/mpegCoder/lib/librav1e.so.0)\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Your GLibC version is not ",(0,a.kt)("inlineCode",{parentName:"p"},">=2.28"),". To verify that, you could run"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"ldd --version\n")),(0,a.kt)("p",{parentName:"li"},"This problem often occurs when you are using an older Linux OS. The supported OS list could be found ",(0,a.kt)("a",{parentName:"p",href:"../installation/linux#import"},"here"),".")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": To our knowledge, this issue cannot be solved if you do not upgrade to a newer OS release or compile GLibC by yourself. In the next version, we will try to build our toolchain with compiling GLibC first. This change may eliminate this issue in the future release of ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,a.kt)("h3",{id:"libcrypyto-not-found"},"libcrypyto not found"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"OSError: libcrypto.so.1.1: cannot open shared object file: No such file or directory\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem is caused by a small mistake in the packaging. This dependency should be, but is actually not bundled with our ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". When using a non-conda environment on Ubuntu 22.04, you may meet this problem.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": To solve this issue, please upgrade to ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder>=3.1.1"),", or install a ",(0,a.kt)("inlineCode",{parentName:"p"},"conda")," environment. If you do not want to do so, you can also use ",(0,a.kt)("inlineCode",{parentName:"p"},"Debian 11")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04"),"."))),(0,a.kt)("h3",{id:"incorrect-dependencies"},"Incorrect dependencies"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": I have not installed any dependencies, and I am not using the PyPI version. Why could I import ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," successfully?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": You may have installed FFMpeg before. The FFMpeg libraries are already in your environment. It is danger to work with an incorrect FFMpeg version, because the FFMpeg APIs are keeping changing. Please ensure that your ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," version and your FFMpeg version are consistent.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": Install ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," from PyPI, or download our dependencies, or compile ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," by yourself."))),(0,a.kt)("h3",{id:"tqdm-has-no-attribute-wrapattr"},(0,a.kt)("inlineCode",{parentName:"h3"},"tqdm")," has no attribute ",(0,a.kt)("inlineCode",{parentName:"h3"},"wrapattr")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": When importing the module, why meeting the following error?"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},"AttributeError: type object 'tqdm' has no attribute 'wrapattr'\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": This problem only exists from ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder==3.1.0b0")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder==3.2.3"),", where ",(0,a.kt)("inlineCode",{parentName:"p"},"tqdm")," is an optional package and not listed in the dependencies. However, this optional ",(0,a.kt)("inlineCode",{parentName:"p"},"tqdm")," requires to have the feature ",(0,a.kt)("a",{parentName:"p",href:"https://tqdm.github.io/docs/tqdm/#wrapattr",title:"tqdm.tqdm.wrapattr"},(0,a.kt)("inlineCode",{parentName:"a"},"tqdm.tqdm.wrapattr"),(0,a.kt)(l.Z,{mdxType:"IconExternalLink"}))," which was firstly introduced in ",(0,a.kt)("inlineCode",{parentName:"p"},"tqdm==4.40.0"),". In other words, if a user has installed ",(0,a.kt)("inlineCode",{parentName:"p"},"tqdm<4.40.0"),", this bug will trigger. On the other hand, if ",(0,a.kt)("inlineCode",{parentName:"p"},"tqdm")," is not installed or with a version ",(0,a.kt)("inlineCode",{parentName:"p"},"tqdm>=4.40.0"),", this bug should not happen.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Fix"),": To solve this issue, please upgrade to ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder>=3.2.4"),", or run the following command for upgrading your ",(0,a.kt)("inlineCode",{parentName:"p"},"tqdm"),":"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'python -m pip install "tqdm>=4.40.0"\n')))))}f.isMDXComponent=!0},7225:function(e,t){t.Z={body:'',width:24,height:24}},3807:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/e21e09a4.b6f6ac83.js b/assets/js/e21e09a4.b6f6ac83.js new file mode 100644 index 0000000..11260a2 --- /dev/null +++ b/assets/js/e21e09a4.b6f6ac83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7150],{4673:function(e,n,o){o.r(n),o.d(n,{assets:function(){return l},contentTitle:function(){return p},default:function(){return u},frontMatter:function(){return c},metadata:function(){return s},toc:function(){return m}});var t=o(3117),d=o(102),i=(o(7294),o(3905)),r=o(541),a=["components"],c={id:"decoding",title:"Decoding a video",sidebar_label:"Decoding",slug:"/examples/decoding",description:"Example codes for decoding a video."},p=void 0,s={unversionedId:"guides/examples/decoding",id:"version-3.1.0/guides/examples/decoding",title:"Decoding a video",description:"Example codes for decoding a video.",source:"@site/versioned_docs/version-3.1.0/guides/examples/decoding.mdx",sourceDirName:"guides/examples",slug:"/examples/decoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/decoding",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/examples/decoding.mdx",tags:[],version:"3.1.0",frontMatter:{id:"decoding",title:"Decoding a video",sidebar_label:"Decoding",slug:"/examples/decoding",description:"Example codes for decoding a video."},sidebar:"version-3.1.0/docs",previous:{title:"Legacy",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/legacy"},next:{title:"Transcoding",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/transcoding"}},l={},m=[{value:"Decoder rescaling",id:"decoder-rescaling",level:2}],g={toc:m};function u(e){var n=e.components,o=(0,d.Z)(e,a);return(0,i.kt)("wrapper",(0,t.Z)({},g,o,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The following codes will demux, decode and iterate a video file. The video could be in any valid format. The ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegDecoder")," could recognize the video codec automatically."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:'{7,8} title="decoding.py"',"{7,8}":!0,title:'"decoding.py"'},"import mpegCoder\n\nd = mpegCoder.MpegDecoder()\nopened = d.FFmpegSetup('test-video.mp4')\nif opened: # If encoder is not loaded successfully, do not continue.\n gop = True\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\nd.clear() # Close the input video.\n")),(0,i.kt)("p",null,"In each while loop, a ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Group_of_pictures",title:"Group of pictures | Wikipedia"},"Group of pictures (GOP)",(0,i.kt)(r.Z,{mdxType:"IconExternalLink"}))," would be extracted. The GOP is a collection of video frames, and also the minimal data unit of the video compression algorithm. In ",(0,i.kt)("inlineCode",{parentName:"p"},"mpegCoder"),", the GOP is arranged as a 4D ",(0,i.kt)("a",{parentName:"p",href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",title:"np.ndarray"},(0,i.kt)("inlineCode",{parentName:"a"},"np.ndarray"),(0,i.kt)(r.Z,{mdxType:"IconExternalLink"})),". The shape ",(0,i.kt)("inlineCode",{parentName:"p"},"(N, H, W, C)")," means frame number, height, width, and channel number respectively. Each frame has been converted to RGB (",(0,i.kt)("inlineCode",{parentName:"p"},"uint8"),") space. If the video reaches its end, the returned ",(0,i.kt)("inlineCode",{parentName:"p"},"gop")," would be ",(0,i.kt)("inlineCode",{parentName:"p"},"None"),"."),(0,i.kt)("h2",{id:"decoder-rescaling"},"Decoder rescaling"),(0,i.kt)("p",null,"Users could configure ",(0,i.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and scale the video frames. For example, the following codes would scale the frame to 720x486, no matter which picture size the video file is."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python",metastring:"{3}","{3}":!0},"...\nd = mpegCoder.MpegDecoder()\nd.setParameter(widthDst=720, heightDst=486)\nopened = d.FFmpegSetup('test-video.mp4')\n...\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e322ec81.bec9abb1.js b/assets/js/e322ec81.bec9abb1.js new file mode 100644 index 0000000..de90a4e --- /dev/null +++ b/assets/js/e322ec81.bec9abb1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[8008],{9987:function(e){e.exports=JSON.parse('{"title":"Installation","description":"Learn about how to install or compile mpegCoder.","slug":"/category/installation","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/category/installation","navigation":{"previous":{"title":"Introduction","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/"},"next":{"title":"PyPI","permalink":"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/pypi"}}}')}}]); \ No newline at end of file diff --git a/assets/js/e72c9c49.d65967da.js b/assets/js/e72c9c49.d65967da.js new file mode 100644 index 0000000..ef37ac2 --- /dev/null +++ b/assets/js/e72c9c49.d65967da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[7759],{8402:function(e,n,t){t.r(n),t.d(n,{assets:function(){return g},contentTitle:function(){return h},default:function(){return k},frontMatter:function(){return c},metadata:function(){return u},toc:function(){return v}});var r=t(3117),a=t(102),o=(t(7294),t(3905)),i=t(541),s=t(5514),l=t(2895),d=t(5099),p=t(1533),m=["components"],c={id:"server",title:"Pushing a video stream",sidebar_label:"Server",slug:"/examples/server",description:"Example codes for pushing a stream on the server side."},h=void 0,u={unversionedId:"guides/examples/server",id:"version-3.1.0/guides/examples/server",title:"Pushing a video stream",description:"Example codes for pushing a stream on the server side.",source:"@site/versioned_docs/version-3.1.0/guides/examples/server.mdx",sourceDirName:"guides/examples",slug:"/examples/server",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/server",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/guides/examples/server.mdx",tags:[],version:"3.1.0",frontMatter:{id:"server",title:"Pushing a video stream",sidebar_label:"Server",slug:"/examples/server",description:"Example codes for pushing a stream on the server side."},sidebar:"version-3.1.0/docs",previous:{title:"Client",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/client"},next:{title:"Installation",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/installation"}},g={},v=[{value:"Preparation",id:"preparation",level:2},{value:"Non-blocking example",id:"non-blocking-example",level:2},{value:"Dual-process example",id:"dual-process-example",level:2}],f={toc:v};function k(e){var n=e.components,t=(0,a.Z)(e,m);return(0,o.kt)("wrapper",(0,r.Z)({},f,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"preparation"},"Preparation"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"ffserver")," has been removed after FFMpeg ",(0,o.kt)("inlineCode",{parentName:"p"},"3.4")," (see the docs ",(0,o.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/ffserver",title:"ffserver"},"here",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"})),"). In other words, FFMpeg could not work without a server program. The same case exists in our ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". Users need to start a server program first. The server program will keeps listening and waiting for any pushed streams. After that, ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," would push the stream to the server by ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegServer"),"."),(0,o.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"It is also supported if you push a stream with ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," and receive the same stream with ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder.MpegClient")," in the same time. But we recommend users to run ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegClient")," on different devices, because the encoder implemented in ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," may occupy a lot of system resources."))),(0,o.kt)("p",null,"We recommend the following video server projects. User could choose one from them according to their requirements."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"Project"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Windows"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Linux"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/aler9/rtsp-simple-server",title:"RTSP Simple Server"},"RTSP Simple Server",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"}))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://github.com/klaxa/mkvserver_mk2/blob/master/Makefile",title:"Matroska Server Mk2"},"Matroska Server Mk2",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"}))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)("a",{parentName:"td",href:"https://ossrs.net/releases",title:"Simple Realtime Server"},"Simple Realtime Server",(0,o.kt)(i.Z,{mdxType:"IconExternalLink"}))),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:d.Z,mdxType:"InlineIcon"})),(0,o.kt)("td",{parentName:"tr",align:"center"},(0,o.kt)(s.Z,{icon:l.Z,mdxType:"InlineIcon"}))))),(0,o.kt)("p",null,"Take ",(0,o.kt)("em",{parentName:"p"},"RTSP Simple Server")," on Windows as an example. We only need to launch the server program by one command:"),(0,o.kt)("p",null,(0,o.kt)("img",{style:{maxWidth:"800px",width:"100%"},src:p.Z,alt:"Launch the RTSP Simple Server"})),(0,o.kt)("p",null,"When the server is listening, we could use the following addresses for the testings"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"rtsp://localhost:8554/\nrtmp://localhost:1935/\n")),(0,o.kt)("h2",{id:"non-blocking-example"},"Non-blocking example"),(0,o.kt)("p",null,"This example is based on the non-blocking API ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),". Synchronization is an important problem when pushing a stream. If we keeps using ",(0,o.kt)("inlineCode",{parentName:"p"},"ServeFrame()"),", the frames would be sent as many as possible. The newly income frames would override the previous pushed frames. In some cases, the server would be broken, because the server could not accept so many frames."),(0,o.kt)("p",null,"To make the server works properly, we need to push the frames according to the video timestamp. When ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.FFmpegSetup()")," is called, we mark this time point as a starting time. ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," will maintain a timer. Everytime users call ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.getParemeter('waitRef')"),", the method would returns a waiting period, indicating how long the pushed video stream is ahead of the playing time. The waiting period is half of the aforementioned time lag (the unit of the returned value is ",(0,o.kt)("em",{parentName:"p"},"second"),"). If we have pushed too much frames, we need to let the server wait for a while."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python",metastring:'{16,19-20} title="server-non-blocking.py"',"{16,19-20}":!0,title:'"server-non-blocking.py"'},"import time\nimport mpegCoder\n\nd = mpegCoder.MpegDecoder()\nopened = d.FFmpegSetup('test-video.mp4')\ne = mpegCoder.MpegServer()\ne.setParameter(configDict=d.getParameter(), codecName='libx264', videoAddress='rtsp://localhost:8554/video') # inherit most of parameters from the decoder.\nopened = opened and e.FFmpegSetup() # Load the pusher.\nif opened: # If the decoder and the pusher are not loaded successfully, do not continue.\n gop = True\n s = 0\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\n if gop is not None:\n for i in gop: # Select every frame.\n e.ServeFrame(i) # Serve current frame.\n s += 1\n if s == 10: # Wait for synchronization for each 10 frames.\n wait = e.getParameter('waitRef')\n time.sleep(wait)\n s = 0\n e.FFmpegClose() # End encoding and pushing, and flush all frames in cache.\nelse:\n print(e)\ne.clear() # Close the pusher.\nd.clear() # Close the decoder.\n")),(0,o.kt)("h2",{id:"dual-process-example"},"Dual-process example"),(0,o.kt)("p",null,"The above example is not an elegant implementation, because ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," occupy the same main thread. When decoder takes a lot of time, there would be an obvious latency. Therefore, we suggest users to split ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," to two different sub-processes. The following codes are implemented by this way. The decoder and the streamer are synchronized by a shared queue. Instead of using ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrame()"),", we use ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.ServeFrameBlock()")," here. Each time this method is called, ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer")," will check the current playing time first, and ensure that the timestamp of the newly incoming frame is not ahead of the playing time too much. If the time lag between the new frame and the playing time is too long, the method will wait until the time lag becomes small enough."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python",metastring:'{14,21,23,37,43,45} title="server-dual-procs.py"',"{14,21,23,37,43,45}":!0,title:'"server-dual-procs.py"'},"import mpegCoder\nimport multiprocessing\n\n\nclass Decoder(multiprocessing.Process):\n def __init__(self, video_name='test-video.mp4', q_o=None, name=None, daemon=None):\n super().__init__(name=name, daemon=daemon)\n self.video_name = video_name\n self.q_o = q_o\n\n def run(self):\n d = mpegCoder.MpegDecoder()\n opened = d.FFmpegSetup(self.video_name)\n self.q_o.put(d.getParameter())\n if opened:\n gop = True\n while gop is not None:\n gop = d.ExtractGOP() # Extract current GOP.\n if gop is not None:\n for i in gop: # Select every frame.\n self.q_o.put(i)\n else:\n self.q_o.put(None)\n else:\n print(d)\n d.clear()\n\n\nclass Encoder(multiprocessing.Process):\n def __init__(self, video_addr='rtsp://localhost:8554/video', q_i=None, name=None, daemon=None):\n super().__init__(name=name, daemon=daemon)\n self.video_addr = video_addr\n self.q_i = q_i\n\n def run(self):\n e = mpegCoder.MpegServer()\n config_dict = self.q_i.get() # Get decoder configurations.\n e.setParameter(configDict=config_dict, codecName='libx264', maxBframe=16, videoAddress=self.video_addr)\n opened = e.FFmpegSetup()\n if opened: # If pusher is not loaded successfully, do not continue.\n frame = True\n while frame is not None:\n frame = self.q_i.get() # Get one frame.\n if frame is not None:\n e.ServeFrameBlock(frame) # Encode and serve the current frame.\n e.FFmpegClose() # End encoding, and flush all frames in cache.\n else:\n print(e)\n e.clear()\n\n\nif __name__ == '__main__':\n queue_data = multiprocessing.Queue(maxsize=20)\n proc_dec = Decoder(video_name='test-video.mp4', q_o=queue_data, daemon=True)\n proc_enc = Encoder(video_addr='rtsp://localhost:8554/video', q_i=queue_data, daemon=True)\n proc_dec.start()\n proc_enc.start()\n proc_enc.join()\n proc_dec.join()\n")),(0,o.kt)("div",{className:"admonition admonition-caution alert alert--warning"},(0,o.kt)("div",{parentName:"div",className:"admonition-heading"},(0,o.kt)("h5",{parentName:"div"},(0,o.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,o.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16"},(0,o.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))),"caution")),(0,o.kt)("div",{parentName:"div",className:"admonition-content"},(0,o.kt)("p",{parentName:"div"},"In the above examples, we use ",(0,o.kt)("inlineCode",{parentName:"p"},"configDict")," for ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegServer.setParameter()"),". The input value is a python dict returned by ",(0,o.kt)("inlineCode",{parentName:"p"},"MpegDecoder.getParameter()"),". This API is equivalent to using ",(0,o.kt)("inlineCode",{parentName:"p"},"e.setParameter(decoder=d)"),". However, we have to use the equivalent API here, because all classes of ",(0,o.kt)("inlineCode",{parentName:"p"},"mpegCoder")," could not be pickled."))))}k.isMDXComponent=!0},1533:function(e,n,t){n.Z=t.p+"assets/images/server-dd63ab08f996ce882cf07555a28f9091.png"},2895:function(e,n){n.Z={body:''}},5099:function(e,n){n.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/f52644b6.4f4a2bce.js b/assets/js/f52644b6.4f4a2bce.js new file mode 100644 index 0000000..75d02ae --- /dev/null +++ b/assets/js/f52644b6.4f4a2bce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9247],{5549:function(e,t,n){n.d(t,{A:function(){return i},q:function(){return l}});var r=n(7294),a=n(9960),o="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=o+"/"+e.url}else t=d+"/"+e.url;return r.createElement(a.Z,{to:t,className:"noline"},e.children)}function l(e){return r.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}l.defaultProps={padx:"1ex"}},3984:function(e,t,n){n.r(t),n.d(t,{assets:function(){return f},contentTitle:function(){return p},default:function(){return v},frontMatter:function(){return u},metadata:function(){return m},toc:function(){return h}});var r=n(3117),a=n(102),o=(n(7294),n(3905)),d=n(5514),i=n(7795),l=n(7508),s=n(5549),c=["components"],u={id:"readme",title:"readme",sidebar_label:"readme",slug:"/apis/readme",description:"Use it to see README and some useful instructions."},p=void 0,m={unversionedId:"apis/readme",id:"version-3.1.0/apis/readme",title:"readme",description:"Use it to see README and some useful instructions.",source:"@site/versioned_docs/version-3.1.0/apis/readme.mdx",sourceDirName:"apis",slug:"/apis/readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/readme",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/versioned_docs/version-3.1.0/apis/readme.mdx",tags:[],version:"3.1.0",frontMatter:{id:"readme",title:"readme",sidebar_label:"readme",slug:"/apis/readme",description:"Use it to see README and some useful instructions."},sidebar:"version-3.1.0/apis",previous:{title:"Overview",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/"},next:{title:"setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/setGlobal"}},f={},h=[{value:"Arguments",id:"arguments",level:2},{value:"Example",id:"example",level:2}],g={toc:h};function v(e){var t=e.components,n=(0,a.Z)(e,c);return(0,o.kt)("wrapper",(0,r.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)(d.Z,{icon:i.Z,mdxType:"InlineIcon"})," Function",(0,o.kt)(s.q,{mdxType:"Splitter"}),(0,o.kt)(s.A,{ver:"3.1.0",url:"MpegPyd.h#L158",mdxType:"SourceURL"},(0,o.kt)(d.Z,{icon:l.Z,mdxType:"InlineIcon"})," Source")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.readme()\n")),(0,o.kt)("p",null,"A function used for showing a short README and updating logs."),(0,o.kt)("h2",{id:"arguments"},"Arguments"),(0,o.kt)("p",null,"This function does not has arguments."),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.readme()\n")))}v.isMDXComponent=!0},7795:function(e,t){t.Z={body:'',width:24,height:24}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/f74e2128.d02e08c2.js b/assets/js/f74e2128.d02e08c2.js new file mode 100644 index 0000000..3fc9500 --- /dev/null +++ b/assets/js/f74e2128.d02e08c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[312],{5549:function(e,t,n){n.d(t,{A:function(){return i},q:function(){return l}});var r=n(7294),a=n(9960),o="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",d="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function i(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=d+"/"+e.url;break;case"3.1.0":t=o+"/"+e.url}else t=d+"/"+e.url;return r.createElement(a.Z,{to:t,className:"noline"},e.children)}function l(e){return r.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}l.defaultProps={padx:"1ex"}},3542:function(e,t,n){n.r(t),n.d(t,{assets:function(){return f},contentTitle:function(){return p},default:function(){return v},frontMatter:function(){return u},metadata:function(){return m},toc:function(){return h}});var r=n(3117),a=n(102),o=(n(7294),n(3905)),d=n(5514),i=n(7795),l=n(7508),c=n(5549),s=["components"],u={id:"readme",title:"readme",sidebar_label:"readme",slug:"/apis/readme",description:"Use it to see README and some useful instructions."},p=void 0,m={unversionedId:"apis/readme",id:"apis/readme",title:"readme",description:"Use it to see README and some useful instructions.",source:"@site/docs/apis/readme.mdx",sourceDirName:"apis",slug:"/apis/readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/readme",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/apis/readme.mdx",tags:[],version:"current",frontMatter:{id:"readme",title:"readme",sidebar_label:"readme",slug:"/apis/readme",description:"Use it to see README and some useful instructions."},sidebar:"apis",previous:{title:"Overview",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/"},next:{title:"setGlobal",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/setGlobal"}},f={},h=[{value:"Arguments",id:"arguments",level:2},{value:"Example",id:"example",level:2}],g={toc:h};function v(e){var t=e.components,n=(0,a.Z)(e,s);return(0,o.kt)("wrapper",(0,r.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)(d.Z,{icon:i.Z,mdxType:"InlineIcon"})," Function",(0,o.kt)(c.q,{mdxType:"Splitter"}),(0,o.kt)(c.A,{ver:"3.2.0",url:"MpegPyd.h#L158",mdxType:"SourceURL"},(0,o.kt)(d.Z,{icon:l.Z,mdxType:"InlineIcon"})," Source")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.readme()\n")),(0,o.kt)("p",null,"A function used for showing a short README and updating logs."),(0,o.kt)("h2",{id:"arguments"},"Arguments"),(0,o.kt)("p",null,"This function does not has arguments."),(0,o.kt)("h2",{id:"example"},"Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"mpegCoder.readme()\n")))}v.isMDXComponent=!0},7795:function(e,t){t.Z={body:'',width:24,height:24}},7508:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/f92bbe7d.19f9f0ca.js b/assets/js/f92bbe7d.19f9f0ca.js new file mode 100644 index 0000000..f34323a --- /dev/null +++ b/assets/js/f92bbe7d.19f9f0ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[4866],{8793:function(e,t,n){var o=n(7294),i=n(9960),a=n(1954),r=n(2949);t.Z=function(e){var t=(0,o.useState)(!1),n=t[0],l=t[1];(0,o.useEffect)((function(){l(!0)}),[]);var s,p,u,c=(s=(0,r.I)(),p=s.colorMode,s.setColorMode,"dark"===p?"button--secondary button--outline":"button--secondary");return u=e.index?"button "+c+" button--lg button--index":"button "+c+" button--lg",o.createElement(i.Z,{key:String(n),className:u,to:e.to},e.icon&&o.createElement(a.Wb,{icon:e.icon,width:"1.35rem",style:{verticalAlign:"-0.3rem",marginRight:"1ex"}}),e.children)}},1415:function(e,t,n){n.r(t),n.d(t,{assets:function(){return h},contentTitle:function(){return m},default:function(){return f},frontMatter:function(){return d},metadata:function(){return g},toc:function(){return b}});var o=n(3117),i=n(102),a=(n(7294),n(3905)),r=n(8793),l=n(5514),s=n(541),p=n(3751),u=n(3119),c=["components"],d={id:"qna",title:"Questions and answers",sidebar_label:"Q&A",slug:"/troubleshooting/qna",description:"The questions and answers for mpegCoder."},m=void 0,g={unversionedId:"troubleshooting/qna",id:"troubleshooting/qna",title:"Questions and answers",description:"The questions and answers for mpegCoder.",source:"@site/docs/troubleshooting/qna.mdx",sourceDirName:"troubleshooting",slug:"/troubleshooting/qna",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/qna",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/troubleshooting/qna.mdx",tags:[],version:"current",frontMatter:{id:"qna",title:"Questions and answers",sidebar_label:"Q&A",slug:"/troubleshooting/qna",description:"The questions and answers for mpegCoder."},sidebar:"docs",previous:{title:"Running",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/running"},next:{title:"Changelog",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/changelog"}},h={},b=[{value:"Introduction",id:"introduction",level:2},{value:"The balance between vulnerability and compatibility",id:"the-balance-between-vulnerability-and-compatibility",level:3},{value:"Plan for audio processing",id:"plan-for-audio-processing",level:3},{value:"Plan for no-encoding streaming",id:"plan-for-no-encoding-streaming",level:3},{value:"Commercial plan",id:"commercial-plan",level:3}],k={toc:b};function f(e){var t=e.components,n=(0,i.Z)(e,c);return(0,a.kt)("wrapper",(0,o.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"If you feel like asking more questions, please contact me by the email:"),(0,a.kt)("p",null,(0,a.kt)(r.Z,{to:"mailto:cainmagi@gmail.com",icon:p.Z,mdxType:"DarkButton"},"Contact me")),(0,a.kt)("h3",{id:"the-balance-between-vulnerability-and-compatibility"},"The balance between vulnerability and compatibility"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Is it OK to report a security vulnerability issue?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Sure, because the FFMpeg used in the Linux version is compiled by myself. A good example can be found ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/issues/4"},(0,a.kt)(l.Z,{icon:u.Z,mdxType:"InlineIcon"})," here #4"),". However, there is an exception case. For most dependencies, I can pack them together with the release of ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),". But some essenstial libraries, like ",(0,a.kt)("inlineCode",{parentName:"p"},"GLibC")," is impossible to be loaded locally. In this case, the compatibility is more important than the vulnerability. For example, if a newer ",(0,a.kt)("inlineCode",{parentName:"p"},"GlibC")," version can solve a vulnerability issue, but it is only provided in the devel versions of the Debian / Ubuntu releases, I will prefer to preserve the current low version. If I bump into a new version, users with a stable Debian / Ubuntu releases may have to compile ",(0,a.kt)("inlineCode",{parentName:"p"},"GlibC")," before using ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"."))),(0,a.kt)("h3",{id:"plan-for-audio-processing"},"Plan for audio processing"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": The audio processing is not supported by ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.x"),". Will it be implemented future?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": Sure. The audio processing would be supported since ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder 4.x"),". But I do not have enough time on this project, so it may take a long time to implement. I am very glad if there is anyone willing to send me a pull request (PR) about this."))),(0,a.kt)("h3",{id:"plan-for-no-encoding-streaming"},"Plan for no-encoding streaming"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": In ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder 3.x"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"MpegServer")," only support streaming while encoding. Will there be a class for reading a video while pushing it as a stream?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": No. I believe that using the official FFMpeg is a good enough solution. We recommend users to use a server program together with the official ",(0,a.kt)("a",{parentName:"p",href:"https://trac.ffmpeg.org/wiki/StreamingGuide",title:"FFMpeg used for streaming"},"FFMpeg",(0,a.kt)(s.Z,{mdxType:"IconExternalLink"}))," streaming features."))),(0,a.kt)("h3",{id:"commercial-plan"},"Commercial plan"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Question"),": Will there be a commercial plan for ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder"),"?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Answer"),": No. ",(0,a.kt)("inlineCode",{parentName:"p"},"mpegCoder")," shares exactly the same license (GPL v3) of FFMpeg. This project is totally open-sourced. Although GPLv3 enables coders to add a commercial plan, such a plan would be a burden for me. I will not concern anything about the commercial plan for this project, even sponsorship."))))}f.isMDXComponent=!0},3751:function(e,t){t.Z={body:'',width:24,height:24}},3119:function(e,t){t.Z={body:''}}}]); \ No newline at end of file diff --git a/assets/js/fa2a2d76.3ff22104.js b/assets/js/fa2a2d76.3ff22104.js new file mode 100644 index 0000000..0362591 --- /dev/null +++ b/assets/js/fa2a2d76.3ff22104.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[9643],{7370:function(e,t,a){var l,n,r,s,m,i,c,d,o,f,h,p,x,y,E,v,u,k,N,b,M,H,g,w,z,C,V,T,I,L,F,Z,D,O,P,S,A,j,U,R,_,q,G,B,X,J,W,K,Q,Y,$,ee,te,ae,le,ne,re,se,me,ie,ce,de,oe,fe,he,pe,xe,ye,Ee,ve,ue,ke,Ne,be,Me,He,ge,we,ze,Ce,Ve,Te,Ie,Le,Fe,Ze,De,Oe,Pe,Se,Ae,je=a(7294),Ue=["title","titleId"];function Re(){return Re=Object.assign||function(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}t.Z=function(e){var t=e.title,a=e.titleId,qe=_e(e,Ue);return je.createElement("svg",Re({id:"graph-div",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{maxWidth:"399.5px",height:"auto",maxHeight:"291.5px"},width:"100%",viewBox:"0 0 399.5 291.5","aria-labelledby":a},qe),t?je.createElement("title",{id:a},t):null,l||(l=je.createElement("style",null,"#graph-div .stk-n{stroke:none}#graph-div .font-d{fill:#555;fill-opacity:1}#graph-div .font-e{fill:#333;fill-opacity:1}#graph-div .class-box,#graph-div .d-line,#graph-div .func-box{stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:10}#graph-div .class-box{fill-rule:evenodd;fill:#ececff;fill-opacity:1;stroke:#9370db}#graph-div .d-line,#graph-div .func-box{stroke:#999}#graph-div .func-box{fill-rule:evenodd;fill:#eee;fill-opacity:1}#graph-div .d-line{fill:none}")),n||(n=je.createElement("defs",null,je.createElement("symbol",{overflow:"visible",id:"a"},je.createElement("path",{className:"stk-n",d:"M1.156-7.719V0h1.235v-4.86c0-1.109.796-2.015 1.812-2.015.89 0 1.422.578 1.422 1.547V0h1.25v-4.86c0-1.109.813-2.015 1.797-2.015.906 0 1.437.578 1.437 1.547V0h1.235v-5.797c0-1.39-.781-2.156-2.235-2.156-1.03 0-1.64.297-2.375 1.187-.453-.828-1.078-1.187-2.078-1.187-1.047 0-1.765.406-2.36 1.328v-1.094zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"b"},je.createElement("path",{className:"stk-n",d:"M.875 3.203h1.219V-.812C2.75-.016 3.469.327 4.469.327c2 0 3.297-1.61 3.297-4.062 0-2.594-1.266-4.22-3.297-4.22-1.063 0-1.969.516-2.453 1.391V-7.72H.875zm3.39-10C5.61-6.797 6.5-5.609 6.5-3.766c0 1.75-.906 2.938-2.234 2.938C2.937-.828 2.094-2 2.094-3.813c0-1.812.86-2.984 2.172-2.984zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"c"},je.createElement("path",{className:"stk-n",d:"M7.625-3.453c.016-1.11-.078-1.813-.281-2.36-.453-1.328-1.657-2.14-3.14-2.14-2.157 0-3.548 1.64-3.548 4.203C.656-1.203 2 .344 4.172.344c1.75 0 3-1 3.297-2.688H6.234C5.891-1.328 5.188-.797 4.22-.797c-.766 0-1.407-.328-1.828-.937-.329-.454-.438-.907-.454-1.72zm-5.64-1c.077-1.422.952-2.36 2.202-2.36s2.125.985 2.11 2.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"d"},je.createElement("path",{className:"stk-n",d:"M6.156-7.719v1.125c-.625-.937-1.375-1.36-2.36-1.36-1.968 0-3.28 1.72-3.28 4.235 0 1.266.328 2.297.968 3.031C2.063-.046 2.875.345 3.688.345c.968 0 1.671-.422 2.343-1.39v.405c0 1.032-.14 1.657-.437 2.094-.328.453-.953.719-1.703.719-.547 0-1.063-.125-1.391-.39-.297-.204-.422-.438-.469-.891H.766c.14 1.453 1.28 2.312 3.062 2.312 1.156 0 2.14-.375 2.656-.984.579-.703.813-1.656.813-3.485v-6.453zm-2.218.89c1.312 0 2.093 1.126 2.093 3.063 0 1.844-.797 2.97-2.093 2.97-1.344 0-2.157-1.141-2.157-3.016 0-1.86.828-3.016 2.157-3.016zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"e"},je.createElement("path",{className:"stk-n",d:"M9.86-7.406c-.438-2.375-1.797-3.516-4.141-3.516-1.453 0-2.61.453-3.407 1.344-.984 1.078-1.5 2.61-1.5 4.344 0 1.75.547 3.28 1.563 4.312C3.188-.062 4.25.344 5.656.344c2.625 0 4.094-1.422 4.422-4.266H8.672c-.125.719-.25 1.172-.469 1.61-.437.937-1.344 1.437-2.531 1.437-2.125 0-3.5-1.703-3.5-4.39 0-2.75 1.297-4.438 3.39-4.438.829 0 1.61.234 2.063.625.438.36.656.828.813 1.672zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"f"},je.createElement("path",{className:"stk-n",d:"M4.078-7.953c-2.187 0-3.484 1.547-3.484 4.14C.594-1.203 1.89.329 4.078.329c2.172 0 3.5-1.547 3.5-4.078 0-2.672-1.281-4.203-3.5-4.203zm0 1.14c1.39 0 2.219 1.125 2.219 3.032 0 1.828-.86 2.969-2.219 2.969-1.36 0-2.203-1.141-2.203-3 0-1.86.844-3 2.203-3zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"g"},je.createElement("path",{className:"stk-n",d:"M7.375-10.734H6.156v3.968c-.531-.78-1.343-1.187-2.375-1.187C1.766-7.953.47-6.343.47-3.891.47-1.266 1.735.344 3.83.344c1.062 0 1.765-.39 2.452-1.36V0h1.094zm-3.39 3.937c1.328 0 2.171 1.172 2.171 3.031 0 1.782-.86 2.954-2.172 2.954-1.343 0-2.25-1.204-2.25-3 0-1.782.907-2.985 2.25-2.985zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"h"},je.createElement("path",{className:"stk-n",d:"M1.063-7.719V0h1.234v-4c0-1.063.25-1.797.812-2.219.407-.328.766-.406 1.657-.422v-1.265a2.946 2.946 0 0 0-.47-.047c-.796 0-1.468.516-2.093 1.64v-1.406zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"w"},je.createElement("path",{className:"stk-n",d:"M7-5.125c-.063-.719-.188-1.188-.469-1.61-.515-.765-1.468-1.218-2.578-1.218-2.078 0-3.422 1.656-3.422 4.219C.531-1.25 1.844.328 3.937.328c1.86 0 3-1.094 3.157-2.984h-1.25C5.656-1.422 5.03-.812 3.969-.812c-1.36 0-2.172-1.094-2.172-2.922 0-1.938.797-3.079 2.14-3.079 1.032 0 1.688.61 1.844 1.688zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"x"},je.createElement("path",{className:"stk-n",d:"M2.266-10.734H1.03V0h1.235zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"y"},je.createElement("path",{className:"stk-n",d:"M7.953-.719c-.125.031-.187.031-.266.031-.421 0-.671-.218-.671-.609v-4.516c0-1.406-.985-2.14-2.891-2.14-1.094 0-1.984.297-2.516.86-.375.405-.546.859-.578 1.655h1.25c.094-.937.64-1.375 1.797-1.375 1.11 0 1.734.407 1.734 1.172v.313c0 .531-.328.734-1.28.86-1.704.202-1.954.25-2.407.437C1.172-3.656.687-2.97.687-1.938.688-.546 1.672.345 3.22.345c.984 0 1.765-.328 2.625-1.14.093.796.468 1.14 1.265 1.14.266 0 .422-.031.844-.14zm-2.14-1.703c0 .406-.125.672-.485 1A2.66 2.66 0 0 1 3.5-.734c-.969 0-1.531-.47-1.531-1.235 0-.812.531-1.218 1.86-1.406 1.312-.188 1.577-.234 1.983-.438zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"z"},je.createElement("path",{className:"stk-n",d:"M6.531-5.563c-.015-1.53-1.031-2.39-2.812-2.39S.766-7.016.766-5.578c0 1.219.625 1.781 2.437 2.219l1.156.28c.844.22 1.188.517 1.188 1.063 0 .735-.719 1.22-1.797 1.22-.625 0-1.188-.173-1.5-.485-.219-.219-.297-.438-.39-1.016H.561C.625-.516 1.625.343 3.642.343c1.937 0 3.187-.952 3.187-2.437 0-1.156-.64-1.812-2.172-2.172L3.47-4.53c-1-.219-1.406-.563-1.406-1.11 0-.718.624-1.171 1.624-1.171.985 0 1.5.421 1.547 1.25zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"D"},je.createElement("path",{className:"stk-n",d:"M3.781-7.719H2.5v-2.125H1.297v2.125H.234v1h1.063V-.89c0 .782.516 1.22 1.484 1.22.313 0 .578-.032 1-.11V-.797a3.266 3.266 0 0 1-.594.047c-.53 0-.687-.156-.687-.672v-5.297h1.281zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"E"},je.createElement("path",{className:"stk-n",d:"M1.11-10.734V0h1.218v-4.266c0-1.562.828-2.609 2.094-2.609 1 0 1.594.578 1.594 1.516V0h1.218v-5.828c0-1.313-.937-2.125-2.421-2.125-1.11 0-1.766.344-2.485 1.281v-4.062zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"i"},je.createElement("path",{className:"stk-n",d:"m7.469 0 3.234-9.61V0h1.375v-11.453h-2.015L6.719-1.484l-3.407-9.97H1.297V0h1.375v-9.61L5.937 0zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"j"},je.createElement("path",{className:"stk-n",d:"M.922 3.422h1.312V-.86C2.922-.016 3.704.359 4.766.359 6.89.36 8.28-1.359 8.28-3.984c0-2.766-1.36-4.5-3.515-4.5-1.141 0-2.094.546-2.625 1.468v-1.218H.92zM4.547-7.25c1.437 0 2.375 1.266 2.375 3.234 0 1.875-.953 3.141-2.375 3.141-1.406 0-2.313-1.25-2.313-3.188 0-1.937.922-3.187 2.313-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"k"},je.createElement("path",{className:"stk-n",d:"M8.125-3.688c.016-1.171-.078-1.921-.281-2.515-.5-1.406-1.782-2.281-3.36-2.281C2.172-8.484.704-6.734.704-4c0 2.719 1.421 4.375 3.75 4.375C6.312.375 7.64-.703 7.968-2.5H6.656C6.281-1.422 5.531-.844 4.5-.844c-.813 0-1.516-.36-1.953-1.015-.344-.485-.469-.954-.485-1.829zM2.109-4.75c.094-1.516 1.032-2.516 2.36-2.516 1.328 0 2.265 1.047 2.25 2.516zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"l"},je.createElement("path",{className:"stk-n",d:"M6.563-8.234v1.187c-.657-.984-1.454-1.437-2.516-1.437-2.094 0-3.5 1.828-3.5 4.515 0 1.344.344 2.453 1.031 3.235.61.687 1.5 1.109 2.36 1.109 1.015 0 1.78-.453 2.5-1.5v.438c0 1.109-.157 1.78-.47 2.234-.359.484-1.03.766-1.827.766-.579 0-1.11-.141-1.47-.407-.312-.218-.452-.468-.515-.968H.812C.954 2.5 2.173 3.421 4.079 3.421c1.234 0 2.297-.39 2.828-1.047.625-.766.875-1.781.875-3.719v-6.89zm-2.375.953c1.406 0 2.25 1.203 2.25 3.265 0 1.97-.86 3.172-2.25 3.172-1.422 0-2.282-1.219-2.282-3.219 0-1.984.875-3.218 2.282-3.218zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"m"},je.createElement("path",{className:"stk-n",d:"M10.516-7.906c-.47-2.532-1.907-3.735-4.422-3.735-1.547 0-2.782.47-3.625 1.422-1.047 1.14-1.61 2.781-1.61 4.64 0 1.86.594 3.5 1.672 4.61.875.906 2 1.344 3.5 1.344 2.797 0 4.375-1.531 4.719-4.547h-1.5c-.125.75-.281 1.25-.5 1.703-.469 1-1.438 1.547-2.703 1.547-2.266 0-3.734-1.828-3.734-4.687 0-2.938 1.39-4.75 3.624-4.75.875 0 1.704.265 2.188.671.469.391.703.891.89 1.782zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"n"},je.createElement("path",{className:"stk-n",d:"M2.422-11.453H1.109V0h1.313zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"o"},je.createElement("path",{className:"stk-n",d:"M2.39-8.234H1.095V0H2.39zm0-3.22H1.079v1.642h1.313zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"p"},je.createElement("path",{className:"stk-n",d:"M1.188-8.234V0H2.5v-4.547c0-1.687.875-2.781 2.219-2.781 1.047 0 1.703.625 1.703 1.61V0h1.312v-6.219c0-1.36-1.046-2.265-2.609-2.265-1.234 0-2.063.5-2.719 1.625v-1.375zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"q"},je.createElement("path",{className:"stk-n",d:"M4.031-8.234h-1.36V-10.5H1.376v2.266H.25v1.062h1.125v6.234c0 .829.563 1.297 1.578 1.297.344 0 .625-.046 1.078-.125V-.844a3.642 3.642 0 0 1-.625.047c-.578 0-.734-.156-.734-.719v-5.656h1.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"r"},je.createElement("path",{className:"stk-n",d:"M1.5 0h4.422c2.875 0 4.656-2.172 4.656-5.734 0-3.547-1.781-5.72-4.656-5.72H1.5zm1.453-1.297v-8.86h2.703c2.266 0 3.469 1.516 3.469 4.423 0 2.921-1.203 4.437-3.469 4.437zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"s"},je.createElement("path",{className:"stk-n",d:"M7.469-5.469c-.063-.765-.203-1.265-.516-1.718C6.422-8 5.406-8.485 4.22-8.485 2-8.484.562-6.72.562-3.984.563-1.328 1.97.359 4.204.359c1.969 0 3.203-1.171 3.36-3.187h-1.33c-.203 1.312-.875 1.969-2 1.969-1.453 0-2.312-1.172-2.312-3.125 0-2.063.844-3.282 2.281-3.282 1.094 0 1.797.641 1.953 1.797zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"t"},je.createElement("path",{className:"stk-n",d:"M4.36-8.484C2.015-8.484.64-6.828.64-4.063.64-1.28 2.017.36 4.36.36 6.671.36 8.077-1.297 8.077-4c0-2.844-1.36-4.484-3.719-4.484zm0 1.218c1.484 0 2.359 1.204 2.359 3.235 0 1.953-.907 3.172-2.36 3.172C2.891-.86 2-2.08 2-4.063c0-1.984.89-3.203 2.36-3.203zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"u"},je.createElement("path",{className:"stk-n",d:"M7.875-11.453H6.562v4.234C6-8.047 5.141-8.484 4.033-8.484 1.89-8.484.5-6.766.5-4.141.5-1.344 1.86.375 4.078.375c1.14 0 1.89-.422 2.625-1.469V0h1.172zM4.25-7.25c1.406 0 2.313 1.25 2.313 3.234 0 1.907-.922 3.157-2.313 3.157-1.438 0-2.39-1.282-2.39-3.204 0-1.906.952-3.187 2.39-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"v"},je.createElement("path",{className:"stk-n",d:"M1.14-8.234V0h1.313v-4.266c0-1.14.266-1.906.86-2.375.437-.328.812-.437 1.78-.453v-1.343a3.67 3.67 0 0 0-.515-.047c-.844 0-1.547.546-2.219 1.75v-1.5zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"A"},je.createElement("path",{className:"stk-n",d:"M9.453-8.094v-.203c0-.656-.187-1.234-.562-1.781-.704-1.047-1.938-1.563-3.625-1.563-2.516 0-4.063 1.266-4.063 3.36 0 1.406.734 2.281 2.234 2.687l2.844.735c1.469.375 2.125.953 2.125 1.843 0 .61-.328 1.25-.828 1.594-.453.313-1.172.484-2.11.484-1.218 0-2.03-.296-2.593-.906-.438-.5-.656-1.062-.656-1.797H.844c.015 1 .203 1.672.61 2.266C2.218-.235 3.577.359 5.39.359 6.75.36 7.859.047 8.594-.53a3.455 3.455 0 0 0 1.265-2.625c0-1.422-.89-2.438-2.453-2.86l-2.86-.765c-1.39-.39-1.89-.828-1.89-1.703 0-1.157 1.031-1.938 2.563-1.938 1.828 0 2.828.828 2.86 2.328zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"B"},je.createElement("path",{className:"stk-n",d:"m4.547 0 3.156-8.234H6.22L3.89-1.563l-2.171-6.67h-1.5L3.125 0zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"C"},je.createElement("path",{className:"stk-n",d:"M2.953-5.219h6.25v-1.297h-6.25v-3.64h6.485v-1.297H1.5V0h8.234v-1.297h-6.78zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"F"},je.createElement("path",{className:"stk-n",d:"M6.953-5.938C6.937-7.563 5.875-8.483 3.97-8.483s-3.156 1-3.156 2.53c0 1.298.671 1.907 2.609 2.376l1.234.297c.89.219 1.266.547 1.266 1.14 0 .782-.766 1.297-1.922 1.297-.672 0-1.266-.203-1.594-.515-.25-.235-.328-.485-.422-1.094H.61C.672-.547 1.734.375 3.891.375c2.062 0 3.39-1.031 3.39-2.61 0-1.234-.687-1.921-2.328-2.312l-1.25-.281c-1.062-.25-1.515-.61-1.515-1.188 0-.765.671-1.25 1.75-1.25 1.03 0 1.593.454 1.64 1.329zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"G"},je.createElement("path",{className:"stk-n",d:"M11.25-6.047H6.469v1.281h3.484v2.454C8.406-1.298 7.47-.938 6.281-.938c-1.093 0-2.14-.437-2.812-1.156-.75-.797-1.219-2.187-1.219-3.61 0-2.796 1.61-4.655 4.016-4.655 1.765 0 3.015.906 3.312 2.375h1.516c-.406-2.313-2.188-3.657-4.813-3.657-1.39 0-2.515.36-3.422 1.094C1.547-9.437.797-7.657.797-5.609.797-2.125 2.953.359 5.984.359c.844 0 2-.265 2.938-.64.719-.313 1.25-.61 2.328-1.36zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"H"},je.createElement("path",{className:"stk-n",d:"M.922-11.453V0h1.187v-1.063C2.672-.125 3.547.375 4.72.375c2.156 0 3.562-1.781 3.562-4.516 0-2.687-1.344-4.343-3.515-4.343-1.141 0-1.922.421-2.547 1.359v-4.328zm3.61 4.203c1.452 0 2.39 1.266 2.39 3.234 0 1.875-.969 3.157-2.39 3.157-1.391 0-2.313-1.25-2.313-3.204 0-1.921.922-3.187 2.312-3.187zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"I"},je.createElement("path",{className:"stk-n",d:"M8.484-.766c-.125.032-.203.032-.296.032-.438 0-.704-.22-.704-.641v-4.828c0-1.5-1.046-2.281-3.078-2.281-1.172 0-2.125.328-2.687.921-.407.422-.578.907-.61 1.766h1.329c.093-1 .687-1.469 1.921-1.469 1.172 0 1.829.438 1.829 1.25v.329c0 .562-.329.796-1.36.921-1.797.22-2.078.266-2.562.47C1.25-3.907.734-3.173.734-2.063.734-.579 1.781.374 3.438.374c1.046 0 1.874-.36 2.796-1.219.11.844.5 1.219 1.344 1.219.297 0 .453-.031.906-.156zM6.188-2.578c0 .437-.125.703-.5 1.062a2.91 2.91 0 0 1-1.954.735c-1.03 0-1.64-.5-1.64-1.313 0-.86.578-1.312 1.984-1.5 1.406-.203 1.688-.265 2.11-.469zm0 0"})),je.createElement("symbol",{overflow:"visible",id:"J"},je.createElement("path",{className:"stk-n",d:"M1.234-8.234V0h1.313v-5.188c0-1.187.86-2.14 1.937-2.14.954 0 1.516.61 1.516 1.64V0h1.328v-5.188c0-1.187.86-2.14 1.922-2.14.969 0 1.531.61 1.531 1.64V0h1.313v-6.172c0-1.484-.828-2.312-2.375-2.312-1.094 0-1.75.328-2.531 1.265-.485-.875-1.157-1.265-2.235-1.265-1.094 0-1.86.437-2.5 1.406v-1.156zm0 0"})))),je.createElement("path",{className:"module-box","data-tstyle":"module-box",d:"M0 0h-198v288h396V0zm0 0",transform:"matrix(1 0 0 -1 199.75 289.75)",style:{fillRule:"evenodd",fill:"#ffffde",fillOpacity:1,strokeWidth:1.5,strokeLinecap:"butt",strokeLinejoin:"round",stroke:"#aa3",strokeOpacity:1,strokeMiterlimit:10}}),je.createElement("g",{className:"font-f","data-tstyle":"font-f",style:{fill:"#000",fillOpacity:1}},r||(r=je.createElement("use",{xlinkHref:"#a",x:160.45,y:22.25})),s||(s=je.createElement("use",{xlinkHref:"#b",x:172.945,y:22.25})),m||(m=je.createElement("use",{xlinkHref:"#c",x:181.33,y:22.25})),i||(i=je.createElement("use",{xlinkHref:"#d",x:189.715,y:22.25})),c||(c=je.createElement("use",{xlinkHref:"#e",x:198.1,y:22.25})),d||(d=je.createElement("use",{xlinkHref:"#f",x:208.9,y:22.25})),o||(o=je.createElement("use",{xlinkHref:"#g",x:217.285,y:22.25})),f||(f=je.createElement("use",{xlinkHref:"#c",x:225.67,y:22.25})),h||(h=je.createElement("use",{xlinkHref:"#h",x:234.055,y:22.25}))),p||(p=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M0 0c-1.7 0-3.302-1.698-3.302-3.402v-29.296C-3.302-34.3-1.7-36 0-36h137.3c1.7 0 3.398 1.699 3.398 3.3v29.297c0 1.704-1.699 3.403-3.398 3.403zm0 0",transform:"matrix(1 0 0 -1 215.45 70.95)"})),x||(x=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:243.75,y:94.65}),je.createElement("use",{xlinkHref:"#j",x:257.046,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:265.942,y:94.65}),je.createElement("use",{xlinkHref:"#l",x:274.742,y:94.65}),je.createElement("use",{xlinkHref:"#m",x:283.638,y:94.65}),je.createElement("use",{xlinkHref:"#n",x:295.142,y:94.65}),je.createElement("use",{xlinkHref:"#o",x:298.726,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:302.31,y:94.65}),je.createElement("use",{xlinkHref:"#p",x:311.206,y:94.65}),je.createElement("use",{xlinkHref:"#q",x:320.102,y:94.65}))),y||(y=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 199.75 178.15)"})),E||(E=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.4",transform:"matrix(1 0 0 -1 170.95 178.15)"})),v||(v=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002H-14.4",transform:"matrix(1 0 0 -1 142.15 178.15)"})),u||(u=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 113.35 178.15)"})),k||(k=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.402",transform:"matrix(1 0 0 -1 84.55 178.15)"})),N||(N=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 55.75 178.15)"})),b||(b=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-7.2V7.2",transform:"matrix(1 0 0 -1 26.95 178.15)"})),M||(M=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.402",transform:"matrix(1 0 0 -1 19.75 156.55)"})),H||(H=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.398",transform:"matrix(1 0 0 -1 19.75 127.75)"})),g||(g=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.4",transform:"matrix(1 0 0 -1 19.75 98.95)"})),w||(w=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002V14.4",transform:"matrix(1 0 0 -1 19.75 70.15)"})),z||(z=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002V3.6h10.8",transform:"matrix(1 0 0 -1 19.75 41.35)"})),C||(C=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 44.95 37.75)"})),V||(V=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 73.75 37.75)"})),T||(T=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.4",transform:"matrix(1 0 0 -1 102.55 37.75)"})),I||(I=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0H14.4",transform:"matrix(1 0 0 -1 131.35 37.75)"})),L||(L=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0h14.403",transform:"matrix(1 0 0 -1 160.15 37.75)"})),F||(F=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 188.95 37.75)"})),Z||(Z=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 217.75 37.75)"})),D||(D=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.4",transform:"matrix(1 0 0 -1 246.55 37.75)"})),O||(O=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0H14.4",transform:"matrix(1 0 0 -1 275.35 37.75)"})),P||(P=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0h14.403",transform:"matrix(1 0 0 -1 304.15 37.75)"})),S||(S=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.402",transform:"matrix(1 0 0 -1 332.95 37.75)"})),A||(A=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h14.398",transform:"matrix(1 0 0 -1 361.75 37.75)"})),j||(j=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.4",transform:"matrix(1 0 0 -1 379.75 48.55)"})),U||(U=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002V-14.4",transform:"matrix(1 0 0 -1 379.75 77.35)"})),R||(R=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002v-14.403",transform:"matrix(1 0 0 -1 379.75 106.15)"})),_||(_=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.402",transform:"matrix(1 0 0 -1 379.75 134.95)"})),q||(q=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.398",transform:"matrix(1 0 0 -1 379.75 163.75)"})),G||(G=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 365.35 178.15)"})),B||(B=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.402",transform:"matrix(1 0 0 -1 336.55 178.15)"})),X||(X=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.398",transform:"matrix(1 0 0 -1 307.75 178.15)"})),J||(J=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h-14.4",transform:"matrix(1 0 0 -1 278.95 178.15)"})),W||(W=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002H-14.4",transform:"matrix(1 0 0 -1 250.15 178.15)"})),K||(K=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002h-14.403",transform:"matrix(1 0 0 -1 221.35 178.15)"})),Q||(Q=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M.002 0c-1.704 0-3.403-1.698-3.403-3.402v-29.296C-3.4-34.3-1.7-36 .002-36h137.296c1.602 0 3.301 1.699 3.301 3.3v29.297c0 1.704-1.699 3.403-3.3 3.403zm0 0",transform:"matrix(1 0 0 -1 46.85 70.95)"})),Y||(Y=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:65.35,y:94.65}),je.createElement("use",{xlinkHref:"#j",x:78.742,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:87.542,y:94.65}),je.createElement("use",{xlinkHref:"#l",x:96.438,y:94.65}),je.createElement("use",{xlinkHref:"#r",x:105.334,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:116.838,y:94.65}),je.createElement("use",{xlinkHref:"#s",x:125.734,y:94.65}),je.createElement("use",{xlinkHref:"#t",x:133.638,y:94.65}),je.createElement("use",{xlinkHref:"#u",x:142.534,y:94.65}),je.createElement("use",{xlinkHref:"#k",x:151.43,y:94.65}),je.createElement("use",{xlinkHref:"#v",x:160.326,y:94.65}))),$||($=je.createElement("g",{className:"font-d","data-tstyle":"font-d"},je.createElement("use",{xlinkHref:"#w",x:319.35,y:58.95}),je.createElement("use",{xlinkHref:"#x",x:326.94,y:58.95}),je.createElement("use",{xlinkHref:"#y",x:330.24,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:338.625,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:346.215,y:58.95}),je.createElement("use",{xlinkHref:"#c",x:353.805,y:58.95}),je.createElement("use",{xlinkHref:"#z",x:362.1,y:58.95}))),ee||(ee=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M0 0c-1.698 0-3.402-1.698-3.402-3.402v-29.296C-3.402-34.3-1.698-36 .001-36h137.3c1.598 0 3.297 1.699 3.297 3.3v29.297c0 1.704-1.699 3.403-3.296 3.403zm0 0",transform:"matrix(1 0 0 -1 215.55 124.95)"})),te||(te=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:240.65,y:148.65}),je.createElement("use",{xlinkHref:"#j",x:253.946,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:262.842,y:148.65}),je.createElement("use",{xlinkHref:"#l",x:271.738,y:148.65}),je.createElement("use",{xlinkHref:"#A",x:280.634,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:291.226,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:300.122,y:148.65}),je.createElement("use",{xlinkHref:"#B",x:305.914,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:313.514,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:322.314,y:148.65}))),ae||(ae=je.createElement("path",{className:"class-box","data-tstyle":"class-box",d:"M.002 0c-1.704 0-3.403-1.698-3.403-3.402v-29.296C-3.4-34.3-1.7-36 .002-36h137.296c1.704 0 3.403 1.699 3.403 3.3v29.297c0 1.704-1.7 3.403-3.403 3.403zm0 0",transform:"matrix(1 0 0 -1 46.85 124.95)"})),le||(le=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#i",x:65.85,y:148.65}),je.createElement("use",{xlinkHref:"#j",x:79.146,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:88.042,y:148.65}),je.createElement("use",{xlinkHref:"#l",x:96.842,y:148.65}),je.createElement("use",{xlinkHref:"#C",x:105.738,y:148.65}),je.createElement("use",{xlinkHref:"#p",x:116.426,y:148.65}),je.createElement("use",{xlinkHref:"#s",x:125.322,y:148.65}),je.createElement("use",{xlinkHref:"#t",x:133.226,y:148.65}),je.createElement("use",{xlinkHref:"#u",x:142.122,y:148.65}),je.createElement("use",{xlinkHref:"#k",x:151.018,y:148.65}),je.createElement("use",{xlinkHref:"#v",x:159.914,y:148.65}))),ne||(ne=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 199.75 278.95)"})),re||(re=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.4",transform:"matrix(1 0 0 -1 170.95 278.95)"})),se||(se=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0H-14.4",transform:"matrix(1 0 0 -1 142.15 278.95)"})),me||(me=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 113.35 278.95)"})),ie||(ie=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.402",transform:"matrix(1 0 0 -1 84.55 278.95)"})),ce||(ce=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 55.75 278.95)"})),de||(de=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-7.2v7.2",transform:"matrix(1 0 0 -1 26.95 278.95)"})),oe||(oe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0-.002v14.403",transform:"matrix(1 0 0 -1 19.75 257.35)"})),fe||(fe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v14.402",transform:"matrix(1 0 0 -1 19.75 228.55)"})),he||(he=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v3.602h10.8",transform:"matrix(1 0 0 -1 19.75 199.75)"})),pe||(pe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 44.95 196.15)"})),xe||(xe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 73.75 196.15)"})),ye||(ye=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.4",transform:"matrix(1 0 0 -1 102.55 196.15)"})),Ee||(Ee=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002H14.4",transform:"matrix(1 0 0 -1 131.35 196.15)"})),ve||(ve=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002h14.403",transform:"matrix(1 0 0 -1 160.15 196.15)"})),ue||(ue=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 188.95 196.15)"})),ke||(ke=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 217.75 196.15)"})),Ne||(Ne=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.4",transform:"matrix(1 0 0 -1 246.55 196.15)"})),be||(be=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002.002H14.4",transform:"matrix(1 0 0 -1 275.35 196.15)"})),Me||(Me=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002.002h14.403",transform:"matrix(1 0 0 -1 304.15 196.15)"})),He||(He=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.402",transform:"matrix(1 0 0 -1 332.95 196.15)"})),ge||(ge=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 .002h14.398",transform:"matrix(1 0 0 -1 361.75 196.15)"})),we||(we=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.402",transform:"matrix(1 0 0 -1 379.75 206.95)"})),ze||(ze=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.398",transform:"matrix(1 0 0 -1 379.75 235.75)"})),Ce||(Ce=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0v-14.4",transform:"matrix(1 0 0 -1 379.75 264.55)"})),Ve||(Ve=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 365.35 278.95)"})),Te||(Te=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.402",transform:"matrix(1 0 0 -1 336.55 278.95)"})),Ie||(Ie=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.398",transform:"matrix(1 0 0 -1 307.75 278.95)"})),Le||(Le=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M0 0h-14.4",transform:"matrix(1 0 0 -1 278.95 278.95)"})),Fe||(Fe=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M-.002 0H-14.4",transform:"matrix(1 0 0 -1 250.15 278.95)"})),Ze||(Ze=je.createElement("path",{className:"d-line","data-tstyle":"d-line",d:"M.002 0h-14.403",transform:"matrix(1 0 0 -1 221.35 278.95)"})),De||(De=je.createElement("g",{className:"font-d","data-tstyle":"font-d"},je.createElement("use",{xlinkHref:"#a",x:311.75,y:217.35}),je.createElement("use",{xlinkHref:"#c",x:324.245,y:217.35}),je.createElement("use",{xlinkHref:"#D",x:332.54,y:217.35}),je.createElement("use",{xlinkHref:"#E",x:336.635,y:217.35}),je.createElement("use",{xlinkHref:"#f",x:345.02,y:217.35}),je.createElement("use",{xlinkHref:"#g",x:353.405,y:217.35}),je.createElement("use",{xlinkHref:"#z",x:361.79,y:217.35}))),Oe||(Oe=je.createElement("path",{className:"func-box","data-tstyle":"func-box",d:"M0 0h-72v36H72V0zm0 0",transform:"matrix(1 0 0 -1 115.45 264.55)"})),Pe||(Pe=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#F",x:81.85,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:89.754,y:252.25}),je.createElement("use",{xlinkHref:"#q",x:98.458,y:252.25}),je.createElement("use",{xlinkHref:"#G",x:102.938,y:252.25}),je.createElement("use",{xlinkHref:"#n",x:115.242,y:252.25}),je.createElement("use",{xlinkHref:"#t",x:118.826,y:252.25}),je.createElement("use",{xlinkHref:"#H",x:127.722,y:252.25}),je.createElement("use",{xlinkHref:"#I",x:136.618,y:252.25}),je.createElement("use",{xlinkHref:"#n",x:145.514,y:252.25}))),Se||(Se=je.createElement("path",{className:"func-box","data-tstyle":"func-box",d:"M.002 0h-72v36h144V0zm0 0",transform:"matrix(1 0 0 -1 284.85 264.55)"})),Ae||(Ae=je.createElement("g",{className:"font-e","data-tstyle":"font-e"},je.createElement("use",{xlinkHref:"#v",x:257.95,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:263.054,y:252.25}),je.createElement("use",{xlinkHref:"#I",x:271.95,y:252.25}),je.createElement("use",{xlinkHref:"#u",x:280.846,y:252.25}),je.createElement("use",{xlinkHref:"#J",x:289.742,y:252.25}),je.createElement("use",{xlinkHref:"#k",x:303.038,y:252.25}))))}},5549:function(e,t,a){a.d(t,{A:function(){return m},q:function(){return i}});var l=a(7294),n=a(9960),r="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder",s="https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/1553da11d08463ca7b007bcdd68685503da45a5f/MpegCoder";function m(e){var t;if(void 0!==e.ver)switch(e.ver){case"3.2.0":default:t=s+"/"+e.url;break;case"3.1.0":t=r+"/"+e.url}else t=s+"/"+e.url;return l.createElement(n.Z,{to:t,className:"noline"},e.children)}function i(e){return l.createElement("span",{style:{padding:"0 "+e.padx}},"\xb7")}i.defaultProps={padx:"1ex"}},7163:function(e,t,a){a.r(t),a.d(t,{assets:function(){return y},contentTitle:function(){return p},default:function(){return u},frontMatter:function(){return h},metadata:function(){return x},toc:function(){return E}});var l=a(3117),n=a(102),r=(a(7294),a(3905)),s=a(541),m=a(5514),i=a(6577),c=a(7795),d=a(5549),o=a(7370),f=["components"],h={id:"apis",title:"Overview",description:"The overview of all APIs.",slug:"/apis/"},p=void 0,x={unversionedId:"apis",id:"apis",title:"Overview",description:"The overview of all APIs.",source:"@site/docs/api-overview.mdx",sourceDirName:".",slug:"/apis/",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/",draft:!1,editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/docs/api-overview.mdx",tags:[],version:"current",frontMatter:{id:"apis",title:"Overview",description:"The overview of all APIs.",slug:"/apis/"},sidebar:"apis",next:{title:"readme",permalink:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/readme"}},y={},E=[{value:"Classes",id:"classes",level:2},{value:"Functions",id:"functions",level:2}],v={toc:E};function u(e){var t=e.components,a=(0,n.Z)(e,f);return(0,r.kt)("wrapper",(0,l.Z)({},v,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This package is a single-module package. The classes are shown in the following figure:"),(0,r.kt)("p",null,(0,r.kt)(o.Z,{className:"mermaid",mdxType:"OverviewSvg"})),(0,r.kt)("p",null,"In most APIs, the ",(0,r.kt)("inlineCode",{parentName:"p"},"string")," formatted arguments accept both ",(0,r.kt)("inlineCode",{parentName:"p"},"str")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"bytes")," objects. If a ",(0,r.kt)("inlineCode",{parentName:"p"},"str")," object is given, its coding will be recognized by the file system encoding, see ",(0,r.kt)("a",{parentName:"p",href:"https://docs.python.org/zh-cn/3/c-api/unicode.html#c.PyUnicode_DecodeFSDefaultAndSize",title:"PyUnicode_DecodeFSDefaultAndSize"},(0,r.kt)("inlineCode",{parentName:"a"},"PyUnicode_DecodeFSDefaultAndSize"),(0,r.kt)(s.Z,{mdxType:"IconExternalLink"})),". If a ",(0,r.kt)("inlineCode",{parentName:"p"},"bytes")," object is given, the contents will be converted to a ",(0,r.kt)("inlineCode",{parentName:"p"},"std::string")," directly. Therefore, if users want to use an argument with a specific encoding, they could use ",(0,r.kt)("inlineCode",{parentName:"p"},"str_argu.encode('...')")," instead of using ",(0,r.kt)("inlineCode",{parentName:"p"},"str_argu")," directly."),(0,r.kt)("h2",{id:"classes"},"Classes"),(0,r.kt)("p",null,"The module contains four classes:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Classes"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegCoder.h#L21",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegDecoder"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg decoder. It could be used for demuxing a video file, and return the extracted frames or GOPs.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegCoder.h#L82",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegEncoder"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg encoder. It is used for writing a video file. The data is encoded frame-by-frame.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegStreamer.h#L49",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegClient"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg decoder designed for pulling and demuxing a remote video stream. This class manages a ",(0,r.kt)("inlineCode",{parentName:"td"},"std::thread"),", and use the thread to synchronize the decoder with the real-time stream.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegStreamer.h#L114",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:i.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"MpegServer"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The FFMpeg encoder designed for muxing and pushing a remote video stream. The stream is pushed frame-by-frame. Note that this class is required to be used with an active server.")))),(0,r.kt)("h2",{id:"functions"},"Functions"),(0,r.kt)("p",null,"The following functions are global methods of the module."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Functions"),(0,r.kt)("th",{parentName:"tr",align:"left"},(0,r.kt)("div",{className:"center"},"Description")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegPyd.h#L131",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:c.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"setGlobal"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"Used for setting the global configurations of the module.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)(d.A,{ver:"3.2.0",url:"MpegPyd.h#L158",mdxType:"SourceURL"},(0,r.kt)(m.Z,{icon:c.Z,mdxType:"InlineIcon"})," ",(0,r.kt)("inlineCode",{parentName:"td"},"readme"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"Readme function. This method is used for printing brief instructions and updating reports of the module.")))))}u.isMDXComponent=!0},6577:function(e,t){t.Z={body:''}},7795:function(e,t){t.Z={body:'',width:24,height:24}}}]); \ No newline at end of file diff --git a/assets/js/main.e630ffce.js b/assets/js/main.e630ffce.js new file mode 100644 index 0000000..49d7cd7 --- /dev/null +++ b/assets/js/main.e630ffce.js @@ -0,0 +1,2 @@ +/*! For license information please see main.e630ffce.js.LICENSE.txt */ +(self.webpackChunkmpeg_coder=self.webpackChunkmpeg_coder||[]).push([[179],{830:function(e,t,n){"use strict";n.d(t,{W:function(){return o}});var r=n(7294);function o(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},9782:function(e,t,n){"use strict";n.r(t),t.default={title:"mpegCoder",tagline:"This is a C++ based FFmpeg Encoder/Decoder for Python 3.6+ & Numpy 1.19+. Both Linux & Win versions are provided. Theoretically you do not need to install FFmpeg for using this library.",url:"https://cainmagi.github.io",baseUrl:"/FFmpeg-Encoder-Decoder-for-Python/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",trailingSlash:!1,favicon:"img/favicon.ico",organizationName:"cainmagi",projectName:"mpegCoder",plugins:["docusaurus-plugin-sass"],i18n:{defaultLocale:"en",locales:["en","zh-cn"],localeConfigs:{}},themeConfig:{navbar:{title:"mpegCoder",logo:{alt:"mpegCoder Logo",src:"img/logo.svg"},items:[{type:"doc",docId:"introduction",position:"left",label:"Tutorial"},{type:"doc",docId:"apis",position:"left",label:"APIs"},{type:"docsVersionDropdown",position:"right",dropdownActiveClassDisabled:!0,dropdownItemsAfter:[{to:"/versions",label:"All versions"}],dropdownItemsBefore:[]},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{href:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python",position:"right",className:"header-github-link","aria-label":"GitHub repository"},{href:"https://pypi.org/project/mpegCoder",position:"right",className:"header-pypi-link","aria-label":"PyPI repository"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Tutorial",to:"/docs/"},{label:"APIs",to:"/docs/apis/"}]},{title:"Contact the author",items:[{label:"Website",href:"https://cainmagi.github.io/"},{label:"Email",href:"mailto:cainmagi@gmail.com"},{label:"Github",href:"https://github.com/cainmagi"}]},{title:"Community",items:[{label:"UH MODAL Lib",href:"https://modal.ece.uh.edu/"},{label:"University of Houston",href:"https://www.uh.edu/"}]}],copyright:"Copyright \xa9 2022 mpegCoder, Yuchen Jin. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},algolia:{apiKey:"860fac8f443a1afd20afd7960cec9441",indexName:"mpegcoder",appId:"BH4D9OD16A",contextualSearch:!0,searchParameters:{facetFilters:["type:content"]},debug:!1,searchPagePath:"search"},docs:{sidebar:{hideable:!0,autoCollapseCategories:!0},versionPersistence:"localStorage"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/home/runner/work/FFmpeg-Encoder-Decoder-for-Python/FFmpeg-Encoder-Decoder-for-Python/sidebars.js",editUrl:"https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/",remarkPlugins:[null],rehypePlugins:[null],lastVersion:"3.2.x",onlyIncludeVersions:["current","3.2.x","3.1.0"],versions:{current:{label:"Next"},"3.1.0":{label:"3.1.0"}}},theme:{customCss:"/home/runner/work/FFmpeg-Encoder-Decoder-for-Python/FFmpeg-Encoder-Decoder-for-Python/src/css/custom.scss"},gtag:{trackingID:"G-VY4XPTJXNM",anonymizeIP:!0}}]],stylesheets:[{href:"https://cdn.jsdelivr.net/npm/katex@0.15.3/dist/katex.min.css",integrity:"sha384-KiWOvVjnN8qwAZbuQyWDIbfCLFhLXNETzBQjA/92pIowpC0d2O3nppDGQVgwd2nB",crossorigin:"anonymous"}],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},723:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var r=n(7294),o=n(3117),a=n(8356),i=n.n(a);function l(e){var t=e.error,n=e.retry,o=e.pastDelay;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var s=n(6887),c={"05a6b305":[function(){return n.e(3466).then(n.t.bind(n,4555,19))},"~docs/default/category-ffmpeg-encoder-decoder-for-pythondocsnext-docs-category-examples-27c.json",4555],"06d76465":[function(){return Promise.all([n.e(8592),n.e(3683)]).then(n.bind(n,6616))},"@site/versioned_docs/version-3.2.x/troubleshooting/installation.mdx",6616],"0721e2d4":[function(){return Promise.all([n.e(8592),n.e(8216)]).then(n.bind(n,2707))},"@site/docs/guides/install/pypi.mdx",2707],"07e76464":[function(){return Promise.all([n.e(8592),n.e(1209)]).then(n.bind(n,6862))},"@site/versioned_docs/version-3.2.x/apis/MpegEncoder.mdx",6862],"12bcf886":[function(){return Promise.all([n.e(8592),n.e(7350)]).then(n.bind(n,5913))},"@site/versioned_docs/version-3.2.x/apis/setGlobal.mdx",5913],"14ad129b":[function(){return Promise.all([n.e(8592),n.e(9)]).then(n.bind(n,4186))},"@site/versioned_docs/version-3.1.0/troubleshooting/qna.mdx",4186],"14eb3368":[function(){return Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,8507))},"@theme/DocCategoryGeneratedIndexPage",8507],"15c68e3a":[function(){return n.e(1428).then(n.t.bind(n,8450,19))},"~docs/default/version-3-2-x-metadata-prop-7ef.json",8450],"15cbd20d":[function(){return Promise.all([n.e(8592),n.e(8719)]).then(n.bind(n,7777))},"@site/versioned_docs/version-3.2.x/guides/install/linux.mdx",7777],"16f671b0":[function(){return Promise.all([n.e(532),n.e(8592),n.e(3480)]).then(n.bind(n,7901))},"@site/versioned_docs/version-3.1.0/introduction.mdx",7901],17896441:[function(){return Promise.all([n.e(532),n.e(8592),n.e(2724),n.e(7918)]).then(n.bind(n,8614))},"@theme/DocItem",8614],"18b93cb3":[function(){return Promise.all([n.e(8592),n.e(3042)]).then(n.bind(n,3917))},"@site/src/pages/versions.js",3917],"1a4e3797":[function(){return Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,6675))},"@theme/SearchPage",6675],"1be78505":[function(){return Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9068))},"@theme/DocPage",9068],"1e4282d6":[function(){return Promise.all([n.e(8592),n.e(1362)]).then(n.bind(n,8632))},"@site/versioned_docs/version-3.2.x/guides/install/pypi.mdx",8632],"1e9bcdaa":[function(){return Promise.all([n.e(8592),n.e(1844)]).then(n.bind(n,8768))},"@site/versioned_docs/version-3.1.0/apis/MpegClient.mdx",8768],"1f391b9e":[function(){return Promise.all([n.e(532),n.e(8592),n.e(2724),n.e(3085)]).then(n.bind(n,6416))},"@theme/MDXPage",6416],"1f768be3":[function(){return Promise.all([n.e(8592),n.e(1250)]).then(n.bind(n,9412))},"@site/docs/guides/examples/decoding.mdx",9412],"28f61e17":[function(){return Promise.all([n.e(8592),n.e(3561)]).then(n.bind(n,7324))},"@site/versioned_docs/version-3.1.0/apis/MpegEncoder.mdx",7324],"29ec2692":[function(){return Promise.all([n.e(8592),n.e(7617)]).then(n.bind(n,1897))},"@site/versioned_docs/version-3.1.0/troubleshooting/running.mdx",1897],"3383f9bc":[function(){return Promise.all([n.e(532),n.e(8592),n.e(3233)]).then(n.bind(n,1279))},"@site/versioned_docs/version-3.2.x/introduction.mdx",1279],"365d81ba":[function(){return Promise.all([n.e(8592),n.e(7690)]).then(n.bind(n,5897))},"@site/versioned_docs/version-3.2.x/api-overview.mdx",5897],"393be207":[function(){return Promise.all([n.e(8592),n.e(7414)]).then(n.bind(n,3123))},"@site/src/pages/markdown-page.md",3123],"39fecf1d":[function(){return Promise.all([n.e(8592),n.e(760)]).then(n.bind(n,7380))},"@site/versioned_docs/version-3.1.0/guides/examples/client.mdx",7380],"3a1913d6":[function(){return Promise.all([n.e(8592),n.e(7214)]).then(n.bind(n,7407))},"@site/versioned_docs/version-3.2.x/guides/examples/decoding.mdx",7407],"3e94fd6d":[function(){return Promise.all([n.e(8592),n.e(7660)]).then(n.bind(n,4616))},"@site/versioned_docs/version-3.1.0/guides/install/windows.mdx",4616],"40837ce5":[function(){return Promise.all([n.e(8592),n.e(3639)]).then(n.bind(n,508))},"@site/versioned_docs/version-3.1.0/changelog.mdx",508],"430c2275":[function(){return Promise.all([n.e(8592),n.e(8870)]).then(n.bind(n,7279))},"@site/versioned_docs/version-3.2.x/troubleshooting/qna.mdx",7279],"43241b81":[function(){return Promise.all([n.e(8592),n.e(4303)]).then(n.bind(n,6557))},"@site/versioned_docs/version-3.1.0/guides/install/pypi.mdx",6557],"483af01e":[function(){return Promise.all([n.e(8592),n.e(9011)]).then(n.bind(n,5220))},"@site/versioned_docs/version-3.1.0/api-overview.mdx",5220],"4eefc1d0":[function(){return Promise.all([n.e(8592),n.e(507)]).then(n.bind(n,236))},"@site/versioned_docs/version-3.2.x/guides/examples/server.mdx",236],"50d57345":[function(){return Promise.all([n.e(8592),n.e(5121)]).then(n.bind(n,390))},"@site/versioned_docs/version-3.1.0/apis/MpegDecoder.mdx",390],"50f50aa1":[function(){return Promise.all([n.e(8592),n.e(3655)]).then(n.bind(n,2035))},"@site/docs/apis/MpegEncoder.mdx",2035],"5324cf9c":[function(){return Promise.all([n.e(8592),n.e(3442)]).then(n.bind(n,2456))},"@site/docs/guides/install/windows.mdx",2456],"53ae8f6a":[function(){return Promise.all([n.e(8592),n.e(103)]).then(n.bind(n,3790))},"@site/versioned_docs/version-3.2.x/changelog.mdx",3790],"59f2bb84":[function(){return Promise.all([n.e(8592),n.e(7215)]).then(n.bind(n,7128))},"@site/versioned_docs/version-3.2.x/guides/examples/client.mdx",7128],"5b75a116":[function(){return n.e(679).then(n.t.bind(n,7085,19))},"/home/runner/work/FFmpeg-Encoder-Decoder-for-Python/FFmpeg-Encoder-Decoder-for-Python/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],"5db7c5c4":[function(){return n.e(1746).then(n.t.bind(n,5745,19))},"/home/runner/work/FFmpeg-Encoder-Decoder-for-Python/FFmpeg-Encoder-Decoder-for-Python/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"5e9f5e1a":[function(){return Promise.resolve().then(n.bind(n,9782))},"@generated/docusaurus.config",9782],"5f60fafc":[function(){return n.e(8767).then(n.t.bind(n,6391,19))},"~docs/default/version-3-1-0-metadata-prop-781.json",6391],"69cb1e83":[function(){return Promise.all([n.e(8592),n.e(8038)]).then(n.bind(n,440))},"@site/docs/guides/install/linux.mdx",440],"70bebb30":[function(){return Promise.all([n.e(8592),n.e(2935)]).then(n.bind(n,6924))},"@site/versioned_docs/version-3.2.x/guides/install/legacy.mdx",6924],"71c7941a":[function(){return Promise.all([n.e(8592),n.e(3814)]).then(n.bind(n,6143))},"@site/docs/guides/examples/client.mdx",6143],"724e1eb2":[function(){return Promise.all([n.e(8592),n.e(4798)]).then(n.bind(n,6150))},"@site/versioned_docs/version-3.1.0/apis/setGlobal.mdx",6150],"735d0569":[function(){return Promise.all([n.e(8592),n.e(7445)]).then(n.bind(n,997))},"@site/docs/changelog.mdx",997],"753ab2c1":[function(){return Promise.all([n.e(8592),n.e(6378)]).then(n.bind(n,6021))},"@site/versioned_docs/version-3.2.x/apis/readme.mdx",6021],"774473e5":[function(){return Promise.all([n.e(8592),n.e(5563)]).then(n.bind(n,7207))},"@site/docs/guides/examples/server.mdx",7207],"777dafb9":[function(){return n.e(9960).then(n.t.bind(n,9361,19))},"~docs/default/category-ffmpeg-encoder-decoder-for-pythondocs-docs-category-troubleshooting-018.json",9361],"8554faf7":[function(){return Promise.all([n.e(8592),n.e(6799)]).then(n.bind(n,9692))},"@site/versioned_docs/version-3.1.0/apis/MpegServer.mdx",9692],"85febae5":[function(){return Promise.all([n.e(8592),n.e(4371)]).then(n.bind(n,1692))},"@site/docs/troubleshooting/running.mdx",1692],"869549d8":[function(){return Promise.all([n.e(8592),n.e(7023)]).then(n.bind(n,3733))},"@site/versioned_docs/version-3.1.0/guides/examples/transcoding.mdx",3733],"8dd5433b":[function(){return Promise.all([n.e(8592),n.e(8126)]).then(n.bind(n,7791))},"@site/docs/apis/MpegClient.mdx",7791],"90480b91":[function(){return n.e(3241).then(n.t.bind(n,1824,19))},"~docs/default/category-ffmpeg-encoder-decoder-for-pythondocs-docs-category-examples-ac1.json",1824],"90e1dddb":[function(){return Promise.all([n.e(8592),n.e(4084)]).then(n.bind(n,8343))},"@site/docs/apis/MpegServer.mdx",8343],"935f2afb":[function(){return n.e(53).then(n.t.bind(n,1109,19))},"~docs/default/version-current-metadata-prop-751.json",1109],"972d9d57":[function(){return Promise.all([n.e(532),n.e(8592),n.e(937)]).then(n.bind(n,9880))},"@site/docs/introduction.mdx",9880],a3628979:[function(){return Promise.all([n.e(8592),n.e(8050)]).then(n.bind(n,8167))},"@site/docs/apis/MpegDecoder.mdx",8167],a4212ab6:[function(){return Promise.all([n.e(8592),n.e(6976)]).then(n.bind(n,2548))},"@site/versioned_docs/version-3.2.x/apis/MpegServer.mdx",2548],a57d836b:[function(){return Promise.all([n.e(8592),n.e(2715)]).then(n.bind(n,6586))},"@site/versioned_docs/version-3.1.0/troubleshooting/installation.mdx",6586],a9cb6f53:[function(){return Promise.all([n.e(8592),n.e(2750)]).then(n.bind(n,6713))},"@site/versioned_docs/version-3.1.0/guides/install/legacy.mdx",6713],ae84f62c:[function(){return n.e(8292).then(n.t.bind(n,3769,19))},"/home/runner/work/FFmpeg-Encoder-Decoder-for-Python/FFmpeg-Encoder-Decoder-for-Python/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],af961f94:[function(){return Promise.all([n.e(8592),n.e(2287)]).then(n.bind(n,1528))},"@site/docs/guides/install/legacy.mdx",1528],b0a4415c:[function(){return Promise.all([n.e(8592),n.e(9870)]).then(n.bind(n,1649))},"@site/versioned_docs/version-3.2.x/guides/install/windows.mdx",1649],b48ae99e:[function(){return n.e(6989).then(n.t.bind(n,8241,19))},"~docs/default/category-ffmpeg-encoder-decoder-for-pythondocsnext-docs-category-troubleshooting-9ff.json",8241],b585adac:[function(){return Promise.all([n.e(8592),n.e(8370)]).then(n.bind(n,3166))},"@site/versioned_docs/version-3.2.x/guides/examples/transcoding.mdx",3166],ba5e0563:[function(){return Promise.all([n.e(8592),n.e(2144)]).then(n.bind(n,1646))},"@site/versioned_docs/version-3.1.0/guides/install/linux.mdx",1646],bde96392:[function(){return Promise.all([n.e(8592),n.e(6354)]).then(n.bind(n,6960))},"@site/versioned_docs/version-3.2.x/apis/MpegDecoder.mdx",6960],c0502451:[function(){return Promise.all([n.e(8592),n.e(423)]).then(n.bind(n,7423))},"@site/docs/guides/examples/transcoding.mdx",7423],c0e69b09:[function(){return Promise.all([n.e(8592),n.e(8090)]).then(n.bind(n,5643))},"@site/docs/apis/setGlobal.mdx",5643],c4f5d8e4:[function(){return Promise.all([n.e(532),n.e(8592),n.e(4195)]).then(n.bind(n,8806))},"@site/src/pages/index.js",8806],cc9716ce:[function(){return n.e(1073).then(n.t.bind(n,8879,19))},"~docs/default/category-ffmpeg-encoder-decoder-for-pythondocsnext-docs-category-installation-705.json",8879],d2e57876:[function(){return Promise.all([n.e(8592),n.e(5363)]).then(n.bind(n,7351))},"@site/versioned_docs/version-3.2.x/apis/MpegClient.mdx",7351],d6b25b21:[function(){return Promise.all([n.e(8592),n.e(5988)]).then(n.bind(n,4222))},"@site/versioned_docs/version-3.2.x/troubleshooting/running.mdx",4222],d8b6944d:[function(){return Promise.all([n.e(8592),n.e(9156)]).then(n.bind(n,7881))},"@site/docs/troubleshooting/installation.mdx",7881],e21e09a4:[function(){return Promise.all([n.e(8592),n.e(7150)]).then(n.bind(n,4673))},"@site/versioned_docs/version-3.1.0/guides/examples/decoding.mdx",4673],e322ec81:[function(){return n.e(8008).then(n.t.bind(n,9987,19))},"~docs/default/category-ffmpeg-encoder-decoder-for-pythondocs-docs-category-installation-241.json",9987],e72c9c49:[function(){return Promise.all([n.e(8592),n.e(7759)]).then(n.bind(n,8402))},"@site/versioned_docs/version-3.1.0/guides/examples/server.mdx",8402],f52644b6:[function(){return Promise.all([n.e(8592),n.e(9247)]).then(n.bind(n,3984))},"@site/versioned_docs/version-3.1.0/apis/readme.mdx",3984],f74e2128:[function(){return Promise.all([n.e(8592),n.e(312)]).then(n.bind(n,3542))},"@site/docs/apis/readme.mdx",3542],f92bbe7d:[function(){return Promise.all([n.e(8592),n.e(4866)]).then(n.bind(n,1415))},"@site/docs/troubleshooting/qna.mdx",1415],fa2a2d76:[function(){return Promise.all([n.e(8592),n.e(9643)]).then(n.bind(n,7163))},"@site/docs/api-overview.mdx",7163]},u=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:l,loader:function(){return n.e(4608).then(n.bind(n,4608)).then((function(e){var t=e.default;return function(e){return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(t,e))}}))}});var a=s[e+"-"+t],f={},p=[],m=[],h=(0,u.Z)(a);return Object.entries(h).forEach((function(e){var t=e[0],n=e[1],r=c[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:l,loader:f,modules:p,webpack:function(){return m},render:function(t,n){var i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((function(t){var n=t[0],r=t[1],o=r.default;if(!o)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((function(e){return"default"!==e})).forEach((function(e){o[e]=r[e]}));var a=i,l=n.split(".");l.slice(0,-1).forEach((function(e){a=a[e]})),a[l[l.length-1]]=o}));var l=i.__comp;delete i.__comp;var s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}var p=[{path:"/FFmpeg-Encoder-Decoder-for-Python/markdown-page",component:f("/FFmpeg-Encoder-Decoder-for-Python/markdown-page","cee"),exact:!0},{path:"/FFmpeg-Encoder-Decoder-for-Python/search",component:f("/FFmpeg-Encoder-Decoder-for-Python/search","c8f"),exact:!0},{path:"/FFmpeg-Encoder-Decoder-for-Python/versions",component:f("/FFmpeg-Encoder-Decoder-for-Python/versions","f96"),exact:!0},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0","75b"),routes:[{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0","dee"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis","d5c"),exact:!0,sidebar:"version-3.1.0/apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegClient",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegClient","bda"),exact:!0,sidebar:"version-3.1.0/apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegDecoder",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegDecoder","643"),exact:!0,sidebar:"version-3.1.0/apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegEncoder",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegEncoder","6ca"),exact:!0,sidebar:"version-3.1.0/apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegServer",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/MpegServer","d56"),exact:!0,sidebar:"version-3.1.0/apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/readme",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/readme","e3c"),exact:!0,sidebar:"version-3.1.0/apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/setGlobal",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/apis/setGlobal","570"),exact:!0,sidebar:"version-3.1.0/apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/changelog",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/changelog","974"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/client",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/client","31f"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/decoding",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/decoding","3a0"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/server",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/server","8c6"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/transcoding",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/examples/transcoding","a38"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/legacy",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/legacy","2f3"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/linux",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/linux","eab"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/pypi",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/pypi","9bb"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/windows",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/installation/windows","53b"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/installation",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/installation","5f4"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/qna",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/qna","ef2"),exact:!0,sidebar:"version-3.1.0/docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/running",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/3.1.0/troubleshooting/running","187"),exact:!0,sidebar:"version-3.1.0/docs"}]},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next","a50"),routes:[{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next","bcb"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis","6b1"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegClient",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegClient","9bb"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegDecoder",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegDecoder","ea2"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegEncoder",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegEncoder","aab"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegServer",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/MpegServer","6ce"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/readme",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/readme","572"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/setGlobal",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/apis/setGlobal","d90"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/examples",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/examples","a4f"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/installation",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/installation","545"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/troubleshooting",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/category/troubleshooting","e92"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/changelog",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/changelog","f94"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/client",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/client","947"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/decoding",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/decoding","421"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/server",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/server","680"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/transcoding",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/examples/transcoding","fbb"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/legacy",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/legacy","6f2"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/linux",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/linux","702"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/pypi",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/pypi","3d4"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/windows",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/installation/windows","a4f"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/installation",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/installation","b33"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/qna",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/qna","69b"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/running",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/next/troubleshooting/running","758"),exact:!0,sidebar:"docs"}]},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs","c61"),routes:[{path:"/FFmpeg-Encoder-Decoder-for-Python/docs",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs","0c6"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/apis","f30"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegClient",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegClient","935"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegDecoder",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegDecoder","ebe"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegEncoder",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegEncoder","774"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegServer",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/apis/MpegServer","dbb"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/readme",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/apis/readme","181"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/apis/setGlobal",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/apis/setGlobal","28e"),exact:!0,sidebar:"apis"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/examples",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/category/examples","a2d"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/installation",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/category/installation","68e"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/category/troubleshooting",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/category/troubleshooting","56c"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/changelog",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/changelog","dc0"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/client",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/examples/client","cb0"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/decoding",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/examples/decoding","4d5"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/server",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/examples/server","d5e"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/examples/transcoding",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/examples/transcoding","459"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/legacy",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/installation/legacy","109"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/linux",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/installation/linux","603"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/pypi",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/installation/pypi","330"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/installation/windows",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/installation/windows","272"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/installation",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/installation","36f"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/qna",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/qna","fca"),exact:!0,sidebar:"docs"},{path:"/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/running",component:f("/FFmpeg-Encoder-Decoder-for-Python/docs/troubleshooting/running","635"),exact:!0,sidebar:"docs"}]},{path:"/FFmpeg-Encoder-Decoder-for-Python/",component:f("/FFmpeg-Encoder-Decoder-for-Python/","bbb"),exact:!0},{path:"*",component:f("*")}]},8934:function(e,t,n){"use strict";n.d(t,{_:function(){return o},t:function(){return a}});var r=n(7294),o=r.createContext(!1);function a(e){var t=e.children,n=(0,r.useState)(!1),a=n[0],i=n[1];return(0,r.useEffect)((function(){i(!0)}),[]),r.createElement(o.Provider,{value:a},t)}},8864:function(e,t,n){"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(412),s=[n(6657),n(2497),n(2448),n(6743),n(8320),n(3878)],c=n(723),u=n(6775),d=n(8790),f=new Map;function p(e){if(f.has(e.pathname))return Object.assign({},e,{pathname:f.get(e.pathname)});if((0,d.f)(c.Z,e.pathname).some((function(e){return!0===e.route.exact})))return f.set(e.pathname,e.pathname),e;var t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return f.set(e.pathname,t),Object.assign({},e,{pathname:t})}var m=n(8934),h=n(595),g=n(1073);function v(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'

\n

We suggest trying baseUrl =

\n\n'}(e)).replace(/0)&&(j.current.unobserve(e),j.current.disconnect(),null!=R&&window.docusaurus.prefetch(R))}))})),j.current.observe(e))},to:R},h&&{isActive:y,activeClassName:b}))}var h=a.forwardRef(m)},5999:function(e,t,n){"use strict";n.d(t,{Z:function(){return s},I:function(){return l}});var r=n(7294);function o(e,t){var n=e.split(/(\{\w+\})/).map((function(e,n){if(n%2==1){var r=null==t?void 0:t[e.slice(1,-1)];if(void 0!==r)return r}return e}));return n.some((function(e){return(0,r.isValidElement)(e)}))?n.map((function(e,t){return(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e})).filter((function(e){return""!==e})):n.join("")}var a=n(7529);function i(e){var t,n,r=e.id,o=e.message;if(void 0===r&&void 0===o)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(t=null!=(n=a[null!=r?r:o])?n:o)?t:r}function l(e,t){return o(i({message:e.message,id:e.id}),t)}function s(e){var t=e.children,n=e.id,a=e.values;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");var l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},9935:function(e,t,n){"use strict";n.d(t,{m:function(){return r}});var r="default"},3919:function(e,t,n){"use strict";function r(e){return!0===/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:function(){return o},b:function(){return r}})},8143:function(e,t,n){"use strict";n.r(t),n.d(t,{Redirect:function(){return r.l_},matchPath:function(){return r.LX},useHistory:function(){return r.k6},useLocation:function(){return r.TH}});var r=n(6775)},4996:function(e,t,n){"use strict";n.d(t,{C:function(){return a},Z:function(){return i}});var r=n(2263),o=n(3919);function a(){var e=(0,r.Z)().siteConfig,t=e.baseUrl,n=e.url;return{withBaseUrl:function(e,r){return function(e,t,n,r){var a=void 0===r?{}:r,i=a.forcePrependBaseUrl,l=void 0!==i&&i,s=a.absolute,c=void 0!==s&&s;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(l)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;var u=n.startsWith(t)?n:t+n.replace(/^\//,"");return c?e+u:u}(n,t,e,r)}}}function i(e,t){return void 0===t&&(t={}),(0,a().withBaseUrl)(e,t)}},2263:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(7294),o=n(595);function a(){return(0,r.useContext)(o._)}},8084:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return a},useAllPluginInstancesData:function(){return i},usePluginData:function(){return l}});var r=n(2263),o=n(9935);function a(){var e=(0,r.Z)().globalData;if(!e)throw new Error("Docusaurus global data not found.");return e}function i(e,t){void 0===t&&(t={});var n=a()[e];if(!n&&t.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin.');return n}function l(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});var r=i(e),a=null==r?void 0:r[t];if(!a&&n.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin with id "'+t+'".');return a}},2389:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},9670:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});function r(e){var t={};return function e(n,r){Object.entries(n).forEach((function(n){var o,a=n[0],i=n[1],l=r?r+"."+a:a;"object"==typeof(o=i)&&o&&Object.keys(o).length>0?e(i,l):t[l]=i}))}(e),t}},226:function(e,t,n){"use strict";n.d(t,{_:function(){return o},z:function(){return a}});var r=n(7294),o=r.createContext(null);function a(e){var t=e.children,n=e.value,a=r.useContext(o),i=(0,r.useMemo)((function(){return function(e){var t=e.parent,n=e.value;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}var r=Object.assign({},t.data,null==n?void 0:n.data);return{plugin:t.plugin,data:r}}({parent:a,value:n})}),[a,n]);return r.createElement(o.Provider,{value:i},t)}},4953:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r=n(7294),o=n(3746),a=n(780),i=n(5742);function l(e){var t=e.error,n=e.tryAgain;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){var t=e.error,n=e.tryAgain;return r.createElement(a.Z,{fallback:function(){return r.createElement(l,{error:t,tryAgain:n})}},r.createElement(i.Z,null,r.createElement("title",null,"Page Error")),r.createElement(o.Z,null,r.createElement(l,{error:t,tryAgain:n})))}},8408:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getDocVersionSuggestions=t.getActiveDocContext=t.getActiveVersion=t.getLatestVersion=t.getActivePlugin=void 0;var r=n(8143);t.getActivePlugin=function(e,t,n){void 0===n&&(n={});var o=Object.entries(e).sort((function(e,t){return t[1].path.localeCompare(e[1].path)})).find((function(e){var n=e[1];return!!(0,r.matchPath)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error("Can't find active docs plugin for \""+t+'" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: '+Object.values(e).map((function(e){return e.path})).join(", "));return a};function o(e,n){var o=(0,t.getLatestVersion)(e);return[].concat(e.versions.filter((function(e){return e!==o})),[o]).find((function(e){return!!(0,r.matchPath)(n,{path:e.path,exact:!1,strict:!1})}))}function a(e,t){var n,a,i=o(e,t),l=null==i?void 0:i.docs.find((function(e){return!!(0,r.matchPath)(t,{path:e.path,exact:!0,strict:!1})}));return{activeVersion:i,activeDoc:l,alternateDocVersions:l?(n=l.id,a={},e.versions.forEach((function(e){e.docs.forEach((function(t){t.id===n&&(a[e.name]=t)}))})),a):{}}}t.getLatestVersion=function(e){return e.versions.find((function(e){return e.isLast}))},t.getActiveVersion=o,t.getActiveDocContext=a,t.getDocVersionSuggestions=function(e,n){var r=(0,t.getLatestVersion)(e),o=a(e,n);return{latestDocSuggestion:null==o?void 0:o.alternateDocVersions[r.name],latestVersionSuggestion:r}}},5551:function(e,t,n){"use strict";t.Jo=t.Iw=t.yW=t.gB=t.WS=t.gA=t.zh=t._r=void 0;var r=n(8143),o=n(8084),a=n(8408),i={};t._r=function(){var e;return null!=(e=(0,o.useAllPluginInstancesData)("docusaurus-plugin-content-docs"))?e:i};function l(e){void 0===e&&(e={});var n=(0,t._r)(),o=(0,r.useLocation)().pathname;return(0,a.getActivePlugin)(n,o,e)}t.zh=function(e){return(0,o.usePluginData)("docusaurus-plugin-content-docs",e,{failfast:!0})},t.gA=l,t.WS=function(e){void 0===e&&(e={});var t=l(e),n=(0,r.useLocation)().pathname;if(t)return{activePlugin:t,activeVersion:(0,a.getActiveVersion)(t.pluginData,n)}},t.gB=function(e){return(0,t.zh)(e).versions},t.yW=function(e){var n=(0,t.zh)(e);return(0,a.getLatestVersion)(n)},t.Iw=function(e){var n=(0,t.zh)(e),o=(0,r.useLocation)().pathname;return(0,a.getActiveDocContext)(n,o)},t.Jo=function(e){var n=(0,t.zh)(e),o=(0,r.useLocation)().pathname;return(0,a.getDocVersionSuggestions)(n,o)}},6657:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(655).__importDefault(n(1115)).default["docusaurus-plugin-google-gtag"].default.trackingID,o={onRouteDidUpdate:function(e){var t=e.location,n=e.previousLocation;n&&t.pathname!==n.pathname&&(window.gtag("config",r,{page_path:t.pathname,page_title:document.title}),window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname}))}};t.default=o},541:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(7294),o="iconExternalLink_I5OW";function a(e){var t=e.width,n=void 0===t?13.5:t,a=e.height,i=void 0===a?13.5:a;return r.createElement("svg",{width:n,height:i,"aria-hidden":"true",viewBox:"0 0 24 24",className:o},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},3746:function(e,t,n){"use strict";n.d(t,{Z:function(){return jt}});var r=n(7294),o=n(6010),a=n(780),i=n(5999),l=n(6775),s=n(5936),c=n(5281);function u(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}var d="skipToContent_ZgBM";function f(){var e=function(){var e=(0,r.useRef)(null),t=(0,l.k6)().action,n=(0,r.useCallback)((function(e){e.preventDefault();var t=document.querySelector("main:first-of-type")||document.querySelector("."+c.k.wrapper.main);t&&u(t)}),[]);return(0,s.S)((function(n){var r=n.location;e.current&&!r.hash&&"PUSH"===t&&u(e.current)})),{containerRef:e,handleSkip:n}}(),t=e.containerRef,n=e.handleSkip;return r.createElement("div",{ref:t,role:"region"},r.createElement("a",{href:"#",className:d,onClick:n},r.createElement(i.Z,{id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"},"Skip to main content")))}var p=n(9689),m=n(6668),h=n(3117),g=n(102),v=["width","height","color","strokeWidth","className"];function b(e){var t=e.width,n=void 0===t?21:t,o=e.height,a=void 0===o?21:o,i=e.color,l=void 0===i?"currentColor":i,s=e.strokeWidth,c=void 0===s?1.2:s,u=(e.className,(0,g.Z)(e,v));return r.createElement("svg",(0,h.Z)({viewBox:"0 0 15 15",width:n,height:a},u),r.createElement("g",{stroke:l,strokeWidth:c},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}var y="announcementBar_IbjG",w="announcementBarPlaceholder_NC_W",E="announcementBarClose_FG1z",k="announcementBarContent_KsVm";function x(){var e=(0,p.nT)(),t=e.isActive,n=e.close,a=(0,m.L)().announcementBar;if(!t)return null;var l=a.content,s=a.backgroundColor,c=a.textColor,u=a.isCloseable;return r.createElement("div",{className:y,style:{backgroundColor:s,color:c},role:"banner"},u&&r.createElement("div",{className:w}),r.createElement("div",{className:k,dangerouslySetInnerHTML:{__html:l}}),u?r.createElement("button",{type:"button",className:(0,o.Z)("clean-btn close",E),onClick:n,"aria-label":(0,i.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},r.createElement(b,{width:14,height:14,strokeWidth:3.1})):null)}var S=n(4700),_=n(2961),P=n(3102),F=r.createContext(null);function C(e){var t,n,o,a,i,l,s,c=e.children,u=(t=(0,_.e)(),n=(0,P.HY)(),o=(0,r.useState)(!1),a=o[0],i=o[1],l=null!==n.component,s=(0,S.D9)(l),(0,r.useEffect)((function(){l&&!s&&i(!0)}),[l,s]),(0,r.useEffect)((function(){l?t.shown||i(!0):i(!1)}),[t.shown,l]),(0,r.useMemo)((function(){return[a,i]}),[a]));return r.createElement(F.Provider,{value:u},c)}function D(e){if(e.component){var t=e.component;return r.createElement(t,Object.assign({},e.props))}}function T(){var e=(0,r.useContext)(F);if(!e)throw new S.i6("NavbarSecondaryMenuDisplayProvider");var t=e[0],n=e[1],o=(0,r.useCallback)((function(){return n(!1)}),[n]),a=(0,P.HY)();return(0,r.useMemo)((function(){return{shown:t,hide:o,content:D(a)}}),[o,a,t])}function A(e){var t=e.header,n=e.primaryMenu,a=e.secondaryMenu,i=T().shown;return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var O=n(2949),L=n(2389);function R(e){return r.createElement("svg",(0,h.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function N(e){return r.createElement("svg",(0,h.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}var I={toggle:"toggle_S7eR",toggleButton:"toggleButton_rCf9",darkToggleIcon:"darkToggleIcon_nQuB",lightToggleIcon:"lightToggleIcon_v35p",toggleButtonDisabled:"toggleButtonDisabled_Pu9x"};function M(e){var t=e.className,n=e.value,a=e.onChange,l=(0,L.Z)(),s=(0,i.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,i.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,i.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(I.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",I.toggleButton,!l&&I.toggleButtonDisabled),type:"button",onClick:function(){return a("dark"===n?"light":"dark")},disabled:!l,title:s,"aria-label":s},r.createElement(R,{className:(0,o.Z)(I.toggleIcon,I.lightToggleIcon)}),r.createElement(N,{className:(0,o.Z)(I.toggleIcon,I.darkToggleIcon)})))}var j=r.memo(M);function B(e){var t=e.className,n=(0,m.L)().colorMode.disableSwitch,o=(0,O.I)(),a=o.colorMode,i=o.setColorMode;return n?null:r.createElement(j,{className:t,value:a,onChange:i})}var z=n(5537);function U(){return r.createElement(z.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function q(){var e=(0,_.e)();return r.createElement("button",{type:"button",className:"clean-btn navbar-sidebar__close",onClick:function(){return e.toggle()}},r.createElement(b,{color:"var(--ifm-color-emphasis-600)"}))}function G(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(U,null),r.createElement(B,{className:"margin-right--md"}),r.createElement(q,null))}var Z=n(9960),$=n(4996),H=n(541),V=n(3919),W=n(8022),K=["activeBasePath","activeBaseRegex","to","href","label","html","activeClassName","prependBaseUrlToHref"];function Y(e){var t,n=e.activeBasePath,o=e.activeBaseRegex,a=e.to,i=e.href,l=e.label,s=e.html,c=e.activeClassName,u=void 0===c?"":c,d=e.prependBaseUrlToHref,f=(0,g.Z)(e,K),p=(0,$.Z)(a),m=(0,$.Z)(n),v=(0,$.Z)(i,{forcePrependBaseUrl:!0}),b=l&&i&&!(0,V.Z)(i),y="dropdown__link--active"===u,w=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,l,b&&r.createElement(H.Z,y&&{width:12,height:12}))};return i?r.createElement(Z.Z,(0,h.Z)({href:d?v:i},f,w)):r.createElement(Z.Z,(0,h.Z)({to:p,isNavLink:!0,activeClassName:null!=(t=f.className)&&t.includes(u)?"":u},(n||o)&&{isActive:function(e,t){return o?(0,W.F)(o,t.pathname):t.pathname.startsWith(m)}},f,w))}var Q=function(e){return e?"menu__link--active":"navbar__link--active"},X=["className","isDropdownItem"],J=["className","isDropdownItem"],ee=["mobile","position"];function te(e){var t=e.className,n=e.isDropdownItem,a=void 0!==n&&n,i=(0,g.Z)(e,X),l=r.createElement(Y,(0,h.Z)({className:(0,o.Z)(a?"dropdown__link":"navbar__item navbar__link",t)},i));return a?r.createElement("li",null,l):l}function ne(e){var t=e.className,n=(e.isDropdownItem,(0,g.Z)(e,J));return r.createElement("li",{className:"menu__list-item"},r.createElement(Y,(0,h.Z)({className:(0,o.Z)("menu__link",t)},n)))}function re(e){var t,n=e.mobile,o=void 0!==n&&n,a=(e.position,(0,g.Z)(e,ee)),i=o?ne:te;return r.createElement(i,(0,h.Z)({},a,{activeClassName:null!=(t=a.activeClassName)?t:Q(o)}))}var oe=n(8596),ae=n(2263);var ie=n(6043),le=["items","position","className"],se=["items","className","position"],ce=["mobile"];function ue(e,t){return e.some((function(e){return function(e,t){return!!(0,oe.Mg)(e.to,t)||!!(0,W.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)}))}function de(e){var t,n=e.items,a=e.position,i=e.className,l=(0,g.Z)(e,le),s=(0,r.useRef)(null),c=(0,r.useState)(!1),u=c[0],d=c[1];return(0,r.useEffect)((function(){var e=function(e){s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[s]),r.createElement("div",{ref:s,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===a,"dropdown--show":u})},r.createElement(Y,(0,h.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,o.Z)("navbar__link",i)},l,{onClick:l.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),d(!u))}}),null!=(t=l.children)?t:l.label),r.createElement("ul",{className:"dropdown__menu"},n.map((function(e,t){return r.createElement(We,(0,h.Z)({isDropdownItem:!0,onKeyDown:function(e){if(t===n.length-1&&"Tab"===e.key){e.preventDefault(),d(!1);var r=s.current.nextElementSibling;if(r)(r instanceof HTMLAnchorElement?r:r.querySelector("a")).focus()}},activeClassName:"dropdown__link--active"},e,{key:t}))}))))}function fe(e){var t,n,a=e.items,i=e.className,s=(e.position,(0,g.Z)(e,se)),c=(n=(0,ae.Z)().siteConfig.baseUrl,(0,l.TH)().pathname.replace(n,"/")),u=ue(a,c),d=(0,ie.u)({initialState:function(){return!u}}),f=d.collapsed,p=d.toggleCollapsed,m=d.setCollapsed;return(0,r.useEffect)((function(){u&&m(!u)}),[c,u,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(Y,(0,h.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",i)},s,{onClick:function(e){e.preventDefault(),p()}}),null!=(t=s.children)?t:s.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},a.map((function(e,t){return r.createElement(We,(0,h.Z)({mobile:!0,isDropdownItem:!0,onClick:s.onClick,activeClassName:"menu__link--active"},e,{key:t}))}))))}function pe(e){var t=e.mobile,n=void 0!==t&&t,o=(0,g.Z)(e,ce),a=n?fe:de;return r.createElement(a,o)}var me=["width","height"];function he(e){var t=e.width,n=void 0===t?20:t,o=e.height,a=void 0===o?20:o,i=(0,g.Z)(e,me);return r.createElement("svg",(0,h.Z)({viewBox:"0 0 24 24",width:n,height:a,"aria-hidden":!0},i),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}var ge=n(4711),ve="iconLanguage_dNtB",be=["mobile","dropdownItemsBefore","dropdownItemsAfter"];var ye=n(3935),we=n(5742),Ee=n(6177);function ke(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var xe=n(830),Se=["translations"];function _e(){return _e=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Fe="Ctrl";var Ce=r.forwardRef((function(e,t){var n=e.translations,o=void 0===n?{}:n,a=Pe(e,Se),i=o.buttonText,l=void 0===i?"Search":i,s=o.buttonAriaLabel,c=void 0===s?"Search":s,u=(0,r.useMemo)((function(){return"undefined"!=typeof navigator?/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"\u2318":Fe:null}),[]);return r.createElement("button",_e({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},a,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(xe.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},l)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==u&&r.createElement(r.Fragment,null,r.createElement("span",{className:"DocSearch-Button-Key"},u===Fe?r.createElement(ke,null):u),r.createElement("span",{className:"DocSearch-Button-Key"},"K"))))})),De=n(3320);var Te=["contextualSearch","externalUrlRegex"],Ae=null;function Oe(e){var t=e.hit,n=e.children;return r.createElement(Z.Z,{to:t.url},n)}function Le(e){var t=e.state,n=e.onClose,o=(0,Ee.O)().generateSearchPageLink;return r.createElement(Z.Z,{to:o(t.query),onClick:n},r.createElement(i.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Re(e){var t,o,a,s,c,u=e.contextualSearch,d=e.externalUrlRegex,f=(0,g.Z)(e,Te),p=(0,ae.Z)().siteMetadata,m=["language:"+(a=(0,De._q)()).locale,a.tags.map((function(e){return"docusaurus_tag:"+e}))],v=null!=(t=null==(o=f.searchParameters)?void 0:o.facetFilters)?t:[],b=u?(s=v,[].concat((c=function(e){return"string"==typeof e?[e]:e})(m),c(s))):v,y=Object.assign({},f.searchParameters,{facetFilters:b}),w=(0,$.C)().withBaseUrl,E=(0,l.k6)(),k=(0,r.useRef)(null),x=(0,r.useRef)(null),S=(0,r.useState)(!1),_=S[0],P=S[1],F=(0,r.useState)(void 0),C=F[0],D=F[1],T=(0,r.useCallback)((function(){return Ae?Promise.resolve():Promise.all([n.e(6815).then(n.bind(n,6815)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,6945)),Promise.all([n.e(532),n.e(8894)]).then(n.bind(n,8894))]).then((function(e){var t=e[0].DocSearchModal;Ae=t}))}),[]),A=(0,r.useCallback)((function(){T().then((function(){k.current=document.createElement("div"),document.body.insertBefore(k.current,document.body.firstChild),P(!0)}))}),[T,P]),O=(0,r.useCallback)((function(){var e;P(!1),null==(e=k.current)||e.remove()}),[P]),L=(0,r.useCallback)((function(e){T().then((function(){P(!0),D(e.key)}))}),[T,P,D]),R=(0,r.useRef)({navigate:function(e){var t=e.itemUrl;(0,W.F)(d,t)?window.location.href=t:E.push(t)}}).current,N=(0,r.useRef)((function(e){return e.map((function(e){if((0,W.F)(d,e.url))return e;var t=new URL(e.url);return Object.assign({},e,{url:w(""+t.pathname+t.hash)})}))})).current,I=(0,r.useMemo)((function(){return function(e){return r.createElement(Le,(0,h.Z)({},e,{onClose:O}))}}),[O]),M=(0,r.useCallback)((function(e){return e.addAlgoliaAgent("docusaurus",p.docusaurusVersion),e}),[p.docusaurusVersion]);!function(e){var t=e.isOpen,n=e.onOpen,o=e.onClose,a=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?o():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&a&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&a(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,o,a,i])}({isOpen:_,onOpen:A,onClose:O,onInput:L,searchButtonRef:x});var j=(0,i.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"});return r.createElement(r.Fragment,null,r.createElement(we.Z,null,r.createElement("link",{rel:"preconnect",href:"https://"+f.appId+"-dsn.algolia.net",crossOrigin:"anonymous"})),r.createElement(Ce,{onTouchStart:T,onFocus:T,onMouseOver:T,onClick:A,ref:x,translations:{buttonText:j,buttonAriaLabel:j}}),_&&Ae&&k.current&&(0,ye.createPortal)(r.createElement(Ae,(0,h.Z)({onClose:O,initialScrollY:window.scrollY,initialQuery:C,navigator:R,transformItems:N,hitComponent:Oe,transformSearchClient:M},f.searchPagePath&&{resultsFooterComponent:I},f,{searchParameters:y})),k.current))}function Ne(){var e=(0,ae.Z)().siteConfig;return r.createElement(Re,e.themeConfig.algolia)}var Ie="searchBox_dLyj";function Me(e){var t=e.children;return r.createElement("div",{className:Ie},t)}var je=n(5551),Be=n(3651),ze=["docId","label","docsPluginId"];var Ue=["sidebarId","label","docsPluginId"];var qe=["label","to","docsPluginId"];var Ge=n(373),Ze=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],$e=function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))};var He={default:re,localeDropdown:function(e){var t=e.mobile,n=e.dropdownItemsBefore,o=e.dropdownItemsAfter,a=(0,g.Z)(e,be),l=(0,ae.Z)().i18n,s=l.currentLocale,c=l.locales,u=l.localeConfigs,d=(0,ge.l)(),f=c.map((function(e){var t="pathname://"+d.createUrl({locale:e,fullyQualified:!1});return{isNavLink:!0,label:u[e].label,to:t,target:"_self",autoAddBaseUrl:!1,className:e===s?"dropdown__link--active":""}})),p=[].concat(n,f,o),m=t?(0,i.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):u[s].label;return r.createElement(pe,(0,h.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(he,{className:ve}),m),items:p}))},search:function(e){return e.mobile?null:r.createElement(Me,null,r.createElement(Ne,null))},dropdown:pe,html:function(e){var t=e.value,n=e.className,a=e.mobile,i=void 0!==a&&a,l=e.isDropdownItem,s=void 0!==l&&l,c=s?"li":"div";return r.createElement(c,{className:(0,o.Z)({navbar__item:!i&&!s,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){var t,n=e.docId,a=e.label,i=e.docsPluginId,l=(0,g.Z)(e,ze),s=(0,je.Iw)(i).activeDoc,c=(0,Be.vY)(n,i);if(null===c)return null;var u=Q(l.mobile);return r.createElement(re,(0,h.Z)({exact:!0},l,{className:(0,o.Z)(l.className,(t={},t[u]=(null==s?void 0:s.sidebar)&&s.sidebar===c.sidebar,t)),activeClassName:u,label:null!=a?a:c.id,to:c.path}))},docSidebar:function(e){var t,n=e.sidebarId,a=e.label,i=e.docsPluginId,l=(0,g.Z)(e,Ue),s=(0,je.Iw)(i).activeDoc,c=(0,Be.oz)(n,i).link;if(!c)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+n+"\" doesn't have anything to be linked to.");var u=Q(l.mobile);return r.createElement(re,(0,h.Z)({exact:!0},l,{className:(0,o.Z)(l.className,(t={},t[u]=(null==s?void 0:s.sidebar)===n,t)),activeClassName:u,label:null!=a?a:c.label,to:c.path}))},docsVersion:function(e){var t=e.label,n=e.to,o=e.docsPluginId,a=(0,g.Z)(e,qe),i=(0,Be.lO)(o)[0],l=null!=t?t:i.label,s=null!=n?n:function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))}(i).path;return r.createElement(re,(0,h.Z)({},a,{label:l,to:s}))},docsVersionDropdown:function(e){var t=e.mobile,n=e.docsPluginId,o=e.dropdownActiveClassDisabled,a=e.dropdownItemsBefore,l=e.dropdownItemsAfter,s=(0,g.Z)(e,Ze),c=(0,je.Iw)(n),u=(0,je.gB)(n),d=(0,Ge.J)(n).savePreferredVersionName,f=u.map((function(e){var t,n=null!=(t=null==c?void 0:c.alternateDocVersions[e.name])?t:$e(e);return{isNavLink:!0,label:e.label,to:n.path,isActive:function(){return e===(null==c?void 0:c.activeVersion)},onClick:function(){return d(e.name)}}})),p=[].concat(a,f,l),m=(0,Be.lO)(n)[0],v=t&&p.length>1?(0,i.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,b=t&&p.length>1?void 0:$e(m).path;return p.length<=1?r.createElement(re,(0,h.Z)({},s,{mobile:t,label:v,to:b,isActive:o?function(){return!1}:void 0})):r.createElement(pe,(0,h.Z)({},s,{mobile:t,label:v,to:b,items:p,isActive:o?function(){return!1}:void 0}))}},Ve=["type"];function We(e){var t=e.type,n=(0,g.Z)(e,Ve),o=function(e,t){return e&&"default"!==e?e:t?"dropdown":"default"}(t,void 0!==n.items),a=function(e){var t=He[e];if(!t)throw new Error('No NavbarItem component found for type "'+e+'".');return t}(o);return r.createElement(a,n)}function Ke(){var e=(0,_.e)(),t=(0,m.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map((function(t,n){return r.createElement(We,(0,h.Z)({mobile:!0},t,{onClick:function(){return e.toggle()},key:n}))})))}function Ye(e){return r.createElement("button",(0,h.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(i.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Qe(){var e=0===(0,m.L)().navbar.items.length,t=T();return r.createElement(r.Fragment,null,!e&&r.createElement(Ye,{onClick:function(){return t.hide()}}),t.content)}function Xe(){var e,t=(0,_.e)();return void 0===(e=t.shown)&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e]),t.shouldRender?r.createElement(A,{header:r.createElement(G,null),primaryMenu:r.createElement(Ke,null),secondaryMenu:r.createElement(Qe,null)}):null}var Je=n(2466);var et="navbarHideable_ObN2",tt="navbarHidden_FtgE";function nt(e){return r.createElement("div",(0,h.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function rt(e){var t=e.children,n=(0,m.L)().navbar,a=n.hideOnScroll,i=n.style,l=(0,_.e)(),c=function(e){var t=(0,r.useState)(e),n=t[0],o=t[1],a=(0,r.useRef)(!1),i=(0,r.useRef)(0),l=(0,r.useCallback)((function(e){null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,Je.RF)((function(t,n){var r=t.scrollY;if(e)if(r=l?o(!1):r+c0&&r.createElement(Et,{links:n}),logo:o&&r.createElement(_t,{logo:o}),copyright:t&&r.createElement(Pt,{copyright:t})})}var Dt=r.memo(Ct),Tt=n(12),At="docusaurus.tab.",Ot=r.createContext(void 0);function Lt(e){var t=e.children,n=function(){var e=(0,r.useState)({}),t=e[0],n=e[1],o=(0,r.useCallback)((function(e,t){(0,Tt.W)("docusaurus.tab."+e).set(t)}),[]);(0,r.useEffect)((function(){try{var e={};(0,Tt._)().forEach((function(t){if(t.startsWith(At)){var n=t.substring(At.length);e[n]=(0,Tt.W)(t).get()}})),n(e)}catch(t){console.error(t)}}),[]);var a=(0,r.useCallback)((function(e,t){n((function(n){var r;return Object.assign({},n,((r={})[e]=t,r))})),o(e,t)}),[o]);return(0,r.useMemo)((function(){return{tabGroupChoices:t,setTabGroupChoices:a}}),[t,a])}();return r.createElement(Ot.Provider,{value:n},t)}var Rt=n(833);function Nt(e){var t=e.children;return r.createElement(O.S,null,r.createElement(p.pl,null,r.createElement(Lt,null,r.createElement(Je.OC,null,r.createElement(Ge.L5,null,r.createElement(Rt.VC,null,r.createElement(ot,null,t)))))))}var It=n(9727);function Mt(e){var t=e.error,n=e.tryAgain;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(i.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(i.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}function jt(e){var t=e.children,n=e.noFooter,i=e.wrapperClassName,l=e.title,s=e.description;return(0,It.t)(),r.createElement(Nt,null,r.createElement(Rt.d,{title:l,description:s}),r.createElement(f,null),r.createElement(x,null),r.createElement(ft,null),r.createElement("div",{className:(0,o.Z)(c.k.wrapper.main,i)},r.createElement(a.Z,{fallback:Mt},t)),!n&&r.createElement(Dt,null))}},5537:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var r=n(3117),o=n(102),a=n(7294),i=n(9960),l=n(9750),s=n(4996),c=n(2263),u=n(6668),d=["imageClassName","titleClassName"];function f(e){var t=(0,c.Z)().siteConfig.title,n=(0,u.L)().navbar,f=n.title,p=n.logo,m=void 0===p?{src:""}:p,h=e.imageClassName,g=e.titleClassName,v=(0,o.Z)(e,d),b=(0,s.Z)(m.href||"/"),y={light:(0,s.Z)(m.src),dark:(0,s.Z)(m.srcDark||m.src)},w=a.createElement(l.Z,{sources:y,height:m.height,width:m.width,alt:m.alt||f||t});return a.createElement(i.Z,(0,r.Z)({to:b},v,m.target&&{target:m.target}),m.src&&(h?a.createElement("div",{className:h},w):w),null!=f&&a.createElement("b",{className:g},f))}},4739:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(7294),o=n(5742);function a(e){var t=e.locale,n=e.version,a=e.tag,i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},9750:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(3117),o=n(102),a=n(7294),i=n(6010),l=n(2389),s=n(2949),c={themedImage:"themedImage_W2Cr","themedImage--light":"themedImage--light_TfLj","themedImage--dark":"themedImage--dark_oUvU"},u=["sources","className","alt"];function d(e){var t=(0,l.Z)(),n=(0,s.I)().colorMode,d=e.sources,f=e.className,p=e.alt,m=(0,o.Z)(e,u),h=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,h.map((function(e){return a.createElement("img",(0,r.Z)({key:e,src:d[e],alt:p,className:(0,i.Z)(c.themedImage,c["themedImage--"+e],f)},m))})))}},467:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return o}});var r=n(9782);function o(e){var t=r.default.themeConfig.prism.additionalLanguages;globalThis.Prism=e,t.forEach((function(e){n(6726)("./prism-"+e)})),delete globalThis.Prism}},8320:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(4865))&&r.__esModule?r:{default:r};n(9014),o.default.configure({showSpinner:!1});var a={onRouteUpdate:function(e){var t=e.location,n=e.previousLocation;if(n&&t.pathname!==n.pathname){var r=window.setTimeout((function(){o.default.start()}),200);return function(){return window.clearTimeout(r)}}},onRouteDidUpdate:function(){o.default.done()}};t.default=a},2448:function(e,t,n){"use strict";var r=o(n(7410));function o(e){return e&&e.__esModule?e:{default:e}}(0,o(n(467)).default)(r.default)},6043:function(e,t,n){"use strict";n.d(t,{u:function(){return s},z:function(){return g}});var r=n(102),o=n(412),a=n(7294),i=["collapsed"],l=["lazy"];function s(e){var t=e.initialState,n=(0,a.useState)(null!=t&&t),r=n[0],o=n[1],i=(0,a.useCallback)((function(){o((function(e){return!e}))}),[]);return{collapsed:r,setCollapsed:o,toggleCollapsed:i}}var c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){var n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){var t=e.collapsibleRef,n=e.collapsed,r=e.animation,o=(0,a.useRef)(!1);(0,a.useEffect)((function(){var e,a=t.current;function i(){var e,t,n=a.scrollHeight,o=null!=(e=null==r?void 0:r.duration)?e:function(e){var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}(n);return{transition:"height "+o+"ms "+(null!=(t=null==r?void 0:r.easing)?t:"ease-in-out"),height:n+"px"}}function l(){var e=i();a.style.transition=e.transition,a.style.height=e.height}if(!o.current)return d(a,n),void(o.current=!0);return a.style.willChange="height",e=requestAnimationFrame((function(){n?(l(),requestAnimationFrame((function(){a.style.height=c.height,a.style.overflow=c.overflow}))):(a.style.display="block",requestAnimationFrame((function(){l()})))})),function(){return cancelAnimationFrame(e)}}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?c:u}function m(e){var t=e.as,n=void 0===t?"div":t,r=e.collapsed,o=e.children,i=e.animation,l=e.onCollapseTransitionEnd,s=e.className,c=e.disableSSRStyle,u=(0,a.useRef)(null);return f({collapsibleRef:u,collapsed:r,animation:i}),a.createElement(n,{ref:u,style:c?void 0:p(r),onTransitionEnd:function(e){"height"===e.propertyName&&(d(u.current,r),null==l||l(r))},className:s},o)}function h(e){var t=e.collapsed,n=(0,r.Z)(e,i),o=(0,a.useState)(!t),l=o[0],s=o[1],c=(0,a.useState)(t),u=c[0],d=c[1];return(0,a.useLayoutEffect)((function(){t||s(!0)}),[t]),(0,a.useLayoutEffect)((function(){l&&d(t)}),[l,t]),l?a.createElement(m,Object.assign({},n,{collapsed:u})):null}function g(e){var t=e.lazy,n=(0,r.Z)(e,l),o=t?h:m;return a.createElement(o,Object.assign({},n))}},9689:function(e,t,n){"use strict";n.d(t,{nT:function(){return m},pl:function(){return p}});var r=n(7294),o=n(2389),a=n(12),i=n(4700),l=n(6668),s=(0,a.W)("docusaurus.announcement.dismiss"),c=(0,a.W)("docusaurus.announcement.id"),u=function(){return"true"===s.get()},d=function(e){return s.set(String(e))},f=r.createContext(null);function p(e){var t=e.children,n=function(){var e=(0,l.L)().announcementBar,t=(0,o.Z)(),n=(0,r.useState)((function(){return!!t&&u()})),a=n[0],i=n[1];(0,r.useEffect)((function(){i(u())}),[]);var s=(0,r.useCallback)((function(){d(!0),i(!0)}),[]);return(0,r.useEffect)((function(){if(e){var t=e.id,n=c.get();"annoucement-bar"===n&&(n="announcement-bar");var r=t!==n;c.set(t),r&&d(!1),!r&&u()||i(!1)}}),[e]),(0,r.useMemo)((function(){return{isActive:!!e&&!a,close:s}}),[e,a,s])}();return r.createElement(f.Provider,{value:n},t)}function m(){var e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:function(e,t,n){"use strict";n.d(t,{I:function(){return g},S:function(){return h}});var r=n(7294),o=n(4700),a=n(412),i=n(12),l=n(6668),s=r.createContext(void 0),c="theme",u=(0,i.W)(c),d="light",f="dark",p=function(e){return e===f?f:d};function m(){var e=(0,l.L)().colorMode,t=e.defaultMode,n=e.disableSwitch,o=e.respectPrefersColorScheme,i=(0,r.useState)(function(e){return a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e)}(t)),s=i[0],m=i[1];(0,r.useEffect)((function(){n&&u.del()}),[n]);var h=(0,r.useCallback)((function(e,n){void 0===n&&(n={});var r=n.persist,a=void 0===r||r;e?(m(e),a&&function(e){u.set(p(e))}(e)):(m(o?window.matchMedia("(prefers-color-scheme: dark)").matches?f:d:t),u.del())}),[o,t]);(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",p(s))}),[s]),(0,r.useEffect)((function(){if(!n){var e=function(e){if(e.key===c){var t=u.get();null!==t&&h(p(t))}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}}),[n,h]);var g=(0,r.useRef)(!1);return(0,r.useEffect)((function(){if(!n||o){var e=window.matchMedia("(prefers-color-scheme: dark)"),t=function(){window.matchMedia("print").matches||g.current?g.current=window.matchMedia("print").matches:h(null)};return e.addListener(t),function(){return e.removeListener(t)}}}),[h,n,o]),(0,r.useMemo)((function(){return{colorMode:s,setColorMode:h,get isDarkTheme(){return s===f},setLightTheme:function(){h(d)},setDarkTheme:function(){h(f)}}}),[s,h])}function h(e){var t=e.children,n=m();return r.createElement(s.Provider,{value:n},t)}function g(){var e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:function(e,t,n){"use strict";n.d(t,{J:function(){return y},L5:function(){return v},Oh:function(){return w}});var r=n(7294),o=n(6668),a=n(3651),i=n(4700),l=n(12),s=n(5551),c=n(9935),u=function(e){return"docs-preferred-version-"+e},d=function(e,t,n){(0,l.W)(u(e),{persistence:t}).set(n)},f=function(e,t){return(0,l.W)(u(e),{persistence:t}).get()},p=function(e,t){(0,l.W)(u(e),{persistence:t}).del()};var m=r.createContext(null);function h(){var e=(0,s._r)(),t=(0,o.L)().docs.versionPersistence,n=(0,r.useMemo)((function(){return Object.keys(e)}),[e]),a=(0,r.useState)((function(){return function(e){return Object.fromEntries(e.map((function(e){return[e,{preferredVersionName:null}]})))}(n)})),i=a[0],l=a[1];return(0,r.useEffect)((function(){l(function(e){var t=e.pluginIds,n=e.versionPersistence,r=e.allDocsData;return Object.fromEntries(t.map((function(e){return[e,(t=e,o=f(t,n),r[t].versions.some((function(e){return e.name===o}))?{preferredVersionName:o}:(p(t,n),{preferredVersionName:null}))];var t,o})))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]),[i,(0,r.useMemo)((function(){return{savePreferredVersion:function(e,n){d(e,t,n),l((function(t){var r;return Object.assign({},t,((r={})[e]={preferredVersionName:n},r))}))}}}),[t])]}function g(e){var t=e.children,n=h();return r.createElement(m.Provider,{value:n},t)}function v(e){var t=e.children;return a.cE?r.createElement(g,null,t):t}function b(){var e=(0,r.useContext)(m);if(!e)throw new i.i6("DocsPreferredVersionContextProvider");return e}function y(e){var t;void 0===e&&(e=c.m);var n=(0,s.zh)(e),o=b(),a=o[0],i=o[1],l=a[e].preferredVersionName;return{preferredVersion:null!=(t=n.versions.find((function(e){return e.name===l})))?t:null,savePreferredVersionName:(0,r.useCallback)((function(t){i.savePreferredVersion(e,t)}),[i,e])}}function w(){var e=(0,s._r)(),t=b()[0];var n=Object.keys(e);return Object.fromEntries(n.map((function(n){return[n,(r=n,a=e[r],i=t[r].preferredVersionName,null!=(o=a.versions.find((function(e){return e.name===i})))?o:null)];var r,o,a,i})))}},1116:function(e,t,n){"use strict";n.d(t,{V:function(){return s},b:function(){return l}});var r=n(7294),o=n(4700),a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){var t=e.children,n=e.name,o=e.items,a=(0,r.useMemo)((function(){return n&&o?{name:n,items:o}:null}),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){var e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},4477:function(e,t,n){"use strict";n.d(t,{E:function(){return l},q:function(){return i}});var r=n(7294),o=n(4700),a=r.createContext(null);function i(e){var t=e.children,n=e.version;return r.createElement(a.Provider,{value:n},t)}function l(){var e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocsVersionProvider");return e}},2961:function(e,t,n){"use strict";n.d(t,{M:function(){return f},e:function(){return p}});var r=n(7294),o=n(3102),a=n(7524),i=n(6775),l=n(4700);function s(e){!function(e){var t=(0,i.k6)().block,n=(0,l.ed)(e);(0,r.useEffect)((function(){return t((function(e,t){return n(e,t)}))}),[t,n])}((function(t,n){if("POP"===n)return e(t,n)}))}var c=n(6668),u=r.createContext(void 0);function d(){var e,t=(e=(0,o.HY)(),0===(0,c.L)().navbar.items.length&&!e.component),n=(0,a.i)(),i=!t&&"mobile"===n,l=(0,r.useState)(!1),u=l[0],d=l[1];s((function(){if(u)return d(!1),!1}));var f=(0,r.useCallback)((function(){d((function(e){return!e}))}),[]);return(0,r.useEffect)((function(){"desktop"===n&&d(!1)}),[n]),(0,r.useMemo)((function(){return{disabled:t,shouldRender:i,toggle:f,shown:u}}),[t,i,f,u])}function f(e){var t=e.children,n=d();return r.createElement(u.Provider,{value:n},t)}function p(){var e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:function(e,t,n){"use strict";n.d(t,{HY:function(){return l},Zo:function(){return s},n2:function(){return i}});var r=n(7294),o=n(4700),a=r.createContext(null);function i(e){var t=e.children,n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){var e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){var t=e.component,n=e.props,i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");var l,s=i[1],c=(l=n,(0,r.useMemo)((function(){return l}),[].concat(Object.keys(l),Object.values(l))));return(0,r.useEffect)((function(){s({component:t,props:c})}),[s,t,c]),(0,r.useEffect)((function(){return function(){return s({component:null,props:null})}}),[s]),null}},9727:function(e,t,n){"use strict";n.d(t,{h:function(){return o},t:function(){return a}});var r=n(7294),o="navigation-with-keyboard";function a(){(0,r.useEffect)((function(){function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),function(){document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},6177:function(e,t,n){"use strict";n.d(t,{O:function(){return l}});var r=n(6775),o=n(2263),a=n(7294),i="q";function l(){var e=(0,r.k6)(),t=(0,o.Z)().siteConfig.baseUrl,n=(0,a.useState)(""),l=n[0],s=n[1];return(0,a.useEffect)((function(){var e,t=null!=(e=new URLSearchParams(window.location.search).get(i))?e:"";s(t)}),[]),{searchQuery:l,setSearchQuery:(0,a.useCallback)((function(t){var n=new URLSearchParams(window.location.search);t?n.set(i,t):n.delete(i),e.replace({search:n.toString()}),s(t)}),[e]),generateSearchPageLink:(0,a.useCallback)((function(e){return t+"search?"+"q="+encodeURIComponent(e)}),[t])}}},7524:function(e,t,n){"use strict";n.d(t,{i:function(){return c}});var r=n(7294),o=n(412),a="desktop",i="mobile",l="ssr";function s(){return o.Z.canUseDOM?window.innerWidth>996?a:i:l}function c(){var e=(0,r.useState)((function(){return s()})),t=e[0],n=e[1];return(0,r.useEffect)((function(){function e(){n(s())}return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),t}},5281:function(e,t,n){"use strict";n.d(t,{k:function(){return r}});var r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block"},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:function(e){return"theme-doc-sidebar-item-category-level-"+e},docSidebarItemLinkLevel:function(e){return"theme-doc-sidebar-item-link-level-"+e}},blog:{}}},3651:function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}n.d(t,{Wl:function(){return v},_F:function(){return w},cE:function(){return m},jA:function(){return b},xz:function(){return h},hI:function(){return _},lO:function(){return k},vY:function(){return S},oz:function(){return x},s1:function(){return E}});var a=n(7294),i=n(5551),l=n(373),s=n(4477),c=n(1116);function u(e){return Array.from(new Set(e))}var d=n(8596),f=n(6775),p=n(8790),m=!!i._r;function h(e){var t=(0,s.E)();if(e){var n=t.docs[e];if(!n)throw new Error("no version doc found by id="+e);return n}}function g(e,t){for(var n,r=o(e);!(n=r()).done;){var a=n.value;if("category"===a.type){if(t(a))return a;var i=g(a.items,t);if(i)return i}}}function v(e){if(e.href)return e.href;for(var t,n=o(e.items);!(t=n()).done;){var r=t.value;if("link"===r.type)return r.href;if("category"===r.type){var a=v(r);if(a)return a}}}function b(){var e=(0,f.TH)().pathname,t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");var n=g(t.items,(function(t){return(0,d.Mg)(t.href,e)}));if(!n)throw new Error(e+" is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.");return n}var y=function(e,t){return void 0!==e&&(0,d.Mg)(e,t)};function w(e,t){return"link"===e.type?y(e.href,t):"category"===e.type&&(y(e.href,t)||function(e,t){return e.some((function(e){return w(e,t)}))}(e.items,t))}function E(){var e,t=(0,c.V)(),n=(0,f.TH)().pathname;if(!1===(null==(e=(0,i.gA)())?void 0:e.pluginData.breadcrumbs)||!t)return null;var r=[];return function e(t){for(var a,i=o(t);!(a=i()).done;){var l=a.value;if("category"===l.type&&((0,d.Mg)(l.href,n)||e(l.items))||"link"===l.type&&(0,d.Mg)(l.href,n))return r.push(l),!0}return!1}(t.items),r.reverse()}function k(e){var t=(0,i.Iw)(e).activeVersion,n=(0,l.J)(e).preferredVersion,r=(0,i.yW)(e);return(0,a.useMemo)((function(){return u([t,n,r].filter(Boolean))}),[t,n,r])}function x(e,t){var n=k(t);return(0,a.useMemo)((function(){var t=n.flatMap((function(e){return e.sidebars?Object.entries(e.sidebars):[]})),r=t.find((function(t){return t[0]===e}));if(!r)throw new Error("Can't find any sidebar with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((function(e){return e.name})).join(", ")+'".\n Available sidebar ids are:\n - '+Object.keys(t).join("\n- "));return r[1]}),[e,n])}function S(e,t){var n=k(t);return(0,a.useMemo)((function(){var t=n.flatMap((function(e){return e.docs})),r=t.find((function(t){return t.id===e}));if(!r){if(n.flatMap((function(e){return e.draftIds})).includes(e))return null;throw new Error("DocNavbarItem: couldn't find any doc with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((function(e){return e.name})).join(", ")+'".\nAvailable doc ids are:\n- '+u(t.map((function(e){return e.id}))).join("\n- "))}return r}),[e,n])}function _(e){var t=e.route,n=e.versionMetadata,r=(0,f.TH)(),o=t.routes,a=o.find((function(e){return(0,f.LX)(r.pathname,e)}));if(!a)return null;var i=a.sidebar,l=i?n.docsSidebars[i]:void 0;return{docElement:(0,p.H)(o,{versionMetadata:n}),sidebarName:i,sidebarItems:l}}},2128:function(e,t,n){"use strict";n.d(t,{p:function(){return o}});var r=n(2263);function o(e){var t=(0,r.Z)().siteConfig,n=t.title,o=t.titleDelimiter;return null!=e&&e.trim().length?e.trim()+" "+o+" "+n:n}},833:function(e,t,n){"use strict";n.d(t,{FG:function(){return f},d:function(){return u},VC:function(){return p}});var r=n(7294),o=n(5742),a=n(6010),i=n(226);function l(){var e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2128);function u(e){var t=e.title,n=e.description,a=e.keywords,i=e.image,l=e.children,u=(0,c.p)(t),d=(0,s.C)().withBaseUrl,f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}var d=r.createContext(void 0);function f(e){var t=e.className,n=e.children,i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){var t=e.children,n=l(),o="plugin-"+n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,""),i="plugin-id-"+n.plugin.id;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},4700:function(e,t,n){"use strict";n.d(t,{i6:function(){return m},ed:function(){return f},D9:function(){return p}});var r=n(8900),o=n(1073);function a(e){return a=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},a(e)}var i=n(9817);function l(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function s(e,t,n){return s=l()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&(0,i.Z)(o,n.prototype),o},s.apply(null,arguments)}function c(e){var t="function"==typeof Map?new Map:void 0;return c=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return s(e,arguments,a(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),(0,i.Z)(r,e)},c(e)}var u=n(7294),d=n(412).Z.canUseDOM?u.useLayoutEffect:u.useEffect;function f(e){var t=(0,u.useRef)(e);return d((function(){t.current=e}),[e]),(0,u.useCallback)((function(){return t.current.apply(t,arguments)}),[])}function p(e){var t=(0,u.useRef)();return d((function(){t.current=e})),t.current}var m=function(e){function t(t,n){var o,a,i,l;return(l=e.call(this)||this).name="ReactContextError",l.message="Hook "+(null==(o=l.stack)||null==(a=o.split("\n")[1])||null==(i=a.match((0,r.Z)(/at (?:\w+\.)?(\w+)/,{name:1})))?void 0:i.groups.name)+" is called outside the <"+t+">. "+(n||""),l}return(0,o.Z)(t,e),t}(c(Error))},8022:function(e,t,n){"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:function(){return r}})},8596:function(e,t,n){"use strict";n.d(t,{Mg:function(){return i},Ns:function(){return l}});var r=n(7294),o=n(723),a=n(2263);function i(e,t){var n=function(e){var t;return null==(t=!e||null!=e&&e.endsWith("/")?e:e+"/")?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){var e=(0,a.Z)().siteConfig.baseUrl;return(0,r.useMemo)((function(){return function(e){var t=e.baseUrl;function n(e){return e.path===t&&!0===e.exact}function r(e){return e.path===t&&!e.exact}return function e(t){if(0!==t.length)return t.find(n)||e(t.filter(r).flatMap((function(e){var t;return null!=(t=e.routes)?t:[]})))}(e.routes)}({routes:o.Z,baseUrl:e})}),[e])}},2466:function(e,t,n){"use strict";n.d(t,{Ct:function(){return f},OC:function(){return s},RF:function(){return d}});var r=n(7294),o=n(4700),a=n(412),i=n(2389);var l=r.createContext(void 0);function s(e){var t,n=e.children,o=(t=(0,r.useRef)(!0),(0,r.useMemo)((function(){return{scrollEventsEnabledRef:t,enableScrollEvents:function(){t.current=!0},disableScrollEvents:function(){t.current=!1}}}),[]));return r.createElement(l.Provider,{value:o},n)}function c(){var e=(0,r.useContext)(l);if(null==e)throw new o.i6("ScrollControllerProvider");return e}var u=function(){return a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null};function d(e,t){void 0===t&&(t=[]);var n=c().scrollEventsEnabledRef,a=(0,r.useRef)(u()),i=(0,o.ed)(e);(0,r.useEffect)((function(){var e=function(){if(n.current){var e=u();i&&i(e,a.current),a.current=e}},t={passive:!0};return e(),window.addEventListener("scroll",e,t),function(){return window.removeEventListener("scroll",e,t)}}),[i,n].concat(t))}function f(){var e=(0,r.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:function(n){e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),function(){}}(n):function(e){var t=null,n=document.documentElement.scrollTop>e;return function r(){var o=document.documentElement.scrollTop;(n&&o>e||!n&&o=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),o=l(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1},c=n(2177);function u(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function h(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=h(e,t,f(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:function(e){"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,a){for(var i,l,s=o(e),c=1;c=d.reach);x+=k.value.length,k=k.next){var S=k.value;if(t.length>e.length)return;if(!(S instanceof o)){var _,P=1;if(b){if(!(_=a(E,x,e,v))||_.index>=e.length)break;var F=_.index,C=_.index+_[0].length,D=x;for(D+=k.value.length;F>=D;)D+=(k=k.next).value.length;if(x=D-=k.value.length,k.value instanceof o)continue;for(var T=k;T!==t.tail&&(Dd.reach&&(d.reach=R);var N=k.prev;if(O&&(N=s(t,N,O),x+=O.length),c(t,N,P),k=s(t,N,new o(f,g?r.tokenize(A,g):A,y,A)),L&&s(t,k,L),P>1){var I={cause:f+","+m,reach:R};i(e,t,n,k.prev,x,I),d&&I.reach>d.reach&&(d.reach=I.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o"+a.content+""},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{*\.{3}(?:[^{}]|)*\})/.source;function a(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=c(u[o]),p=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n=a.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),v=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),v&&b.push.apply(b,i([v])),"string"==typeof c?l.splice.apply(l,[s,1].concat(b)):c.content=b}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),t.default=o},9901:function(e){e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:"shell",aliasTitles:{shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (Scss)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:function(e,t,n){const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:function(e,t,n){var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:function(e,t,n){var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:function(e){"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var f,p=r(s),m=u;o(m);){for(var h in f={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(f[e]=!0)}))}for(var v in d)if(!(v in u))for(var b in p(v))if(b in u){f[v]=!0;break}for(var y in m=f)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var f=i(u.map((function(e){var t=c(e);return delete s[e],t})));a?o=a(f,(function(){return r(e)})):r(e)}return l[e]=o}for(var u in n)c(u);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,u,t,n)}};return w}}();e.exports=t},2703:function(e,t,n){"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:function(e,t,n){e.exports=n(2703)()},414:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:function(e,t,n){"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n