diff --git a/GEMINI.md b/GEMINI.md index 7279f99e..1dbf2e5f 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -316,7 +316,7 @@ The bot must rotate between profiles to avoid detection: - **V1 Integrity Restored**: Recovered all V1 files in `docs/` to ensure original descriptive content and images are preserved. - **V2 Navigation Fixed**: Converted V2 top bar to a flat structure for better UX and link stability. - **Relative Asset Routing**: Updated all V2 image and configuration paths to point relatively to `../docs/` to avoid asset duplication. - - **Rendering & Path Resolution**: Implemented `
+ +❤️ the Performance Monitor in @ChromeDevTools. Gives you a real-time view of CPU use, JS heap size, JS event listeners, style recalcs & more: https://t.co/tc6CyTya3O pic.twitter.com/BWSi8klGkE
— Addy Osmani (@addyosmani) July 7, 2020
+ +8 Google extensions every developer must use
— Meet Jain🦅 (@meetjain74) September 5, 2021
A thread 🧵🧵
+ +💡 Web Development tip
— Csaba Kissi ⚡ (@csaba_kissi) November 7, 2021
You can restart Chrome from the address bar by typing: chrome://restart pic.twitter.com/0jbVoHwS1z
+ +Copy link to highlight is a new Chrome feature that allows you to create links to the exact part of a web page you want to share. https://t.co/IS0jijOjvP pic.twitter.com/L9q2abGQMd
— Kelsey Hightower (@kelseyhightower) November 20, 2021
Level Up Your Agents: Announcing Google’s Official Skills Repository - (Related to ai-agents-mcp topic)
+devlibrary.withgoogle.com 🌟 New open source content library from Google, a showcase of what developers like you have built with Google technologies.
+Terraform Provider for Google Cloud 7.0 is now GA - (Related to terraform topic)
+db-auth-gateway An authentication proxy for Google Cloud managed databases
++ +🎟 You want to get a ticket to @googlecloud networking, it's really cool!
— Priyanka Vergadia (@pvergadia) November 1, 2021
🤓 I take an example company and walk trough the different networking services, take look 👉 https://t.co/tTwLp7DXH4#cloudnetworking #cloudcomputing pic.twitter.com/yFVEUpLy1g
+ +Our new managed continuous service delivery, @googlecloud Deploy, just became generally available.
— Richard Seroter (@rseroter) January 21, 2022
I'm supposed to be working on something else, but I want to check it out. Let's procrastinate on real-work together, shall we?
Quick 🧵 as I deploy a #dotnet app to GKE. pic.twitter.com/Ve07Gnog7q
+ +Creating a GCP service account for each running k8s deployment is ugly. Thankfully, good folks working on Workload Identity @googlecloud have conjured up some dark magic that allows you to bind RBAC directly to Kubernetes service accounts!
— Nick Eberts (@nicholas_eberts) March 18, 2022
Checkout a short demo 🧵 showing how…
“Open Source is most successful when is played as a positive sum game” (Sarah Novotny)
+This web started in 2018, after finishing my first relevant project on cloud computing with a well known consulting firm. It was an international project coordinated from Munich with remote work from other european countries and regular flights. The client was a major multinational car manufacturer with a big investment in OpenShift and Cloudbees/Jenkins infrastructure. Our role was to help the client with their pretty large CI/CD ecosystem while also implementing a new self-service developer platform, involving areas of development and operations and within a DevOps model. Requirements and way of working included continuous improvement, standardization, boilerplates and automation with a GitOps pattern, a highly recommended approach specially in demanding projects like this with hundreds of real microservices, a large number of IaC & CI/CD pipelines, hundreds (thousands?) of developers and millions of end users.
+Since then I try to apply in my country what I learnt from the germans and other european colleagues.
+I’m not a freelancer and most of the time I work as a contractor, which in Spain means to be hired as an employee by an external company.
+Suggesting improvements and best practices or applying quality standards and automated solutions that work well and are easy to verify shouldn’t penalize a career, but it’s terribly common. I am concerned about working with some colleagues or managers who consider it a threat, generating absurd conflicts, blame games and acting in bad faith or stupidly distorting the purpose of the project.
+In a service driven IT sector (with calculated ambiguities and many hidden interests) the product is the hours billed by the consultant, being almost irrelevant the content of the job and the delivered quality. It is thus too common to find technical solutions under the policy of applying “the most difficult, non-standard, slowest and most obfuscated way possible” as a competitive element (the hard way and doing weird things). This does not scale. Being ambiguous in JDs (not to say dishonest) without clarifying the real content of the job is easy and very well paid.
+Ambiguities about DevOps term. Development of new ad-hoc devops tools and ad-hoc monitoring solutions should not be the role of devops specialists. DevOps professionals develop IaC and CI/CD pipelines with standard tools and code, ideally with a cattle service model, GitOps patterns & kubernetes among other responsabilities such as application monitoring. The development of devops tools for kubernetes with i.e. client-go should be clearly mentioned in a JD as “software development of devops tools for kubernetes with client-go” (suitable for a software engineer with client-go skills, a developer of devops/kubernetes/monitoring tools). In addition, a DevOps specialist should not be a fullstack developer who occasionally does QA + DevOps + Cloud Design/Ops. Moreover, avoid confusing terms to justify these different backgrounds by creating two roles like DevOps Software Developer and DevOps SysAdmin. Maybe DevOps should be renamed as OpsDev to avoid misunderstandings.
+A tech stack is not relevant compared to the way technology is managed. You could have the best tool and run into trouble by taking the risk of applying an unsupported or not recommended1 approach.
+DevOps principles: People, processes, technology
+GitOps principles: Correctness, doing DevOps correctly
+| Principle | +Focus | +Main Tool | +Other Tools | +Flexibility | +Correctness | +
|---|---|---|---|---|---|
| DevOps | +Automation and frequent deployments | +CI/CD pipeline | +Supply chain management, Cloud Configuration as Code, etc. | +Less strict and more open | +Less focus on correctness | +
| GitOps | +Correctness; doing DevOps correctly | +Git | +Kubernetes, Controller (e.g., Operator), separate CI/CD pipelines, Infrastructure as a Code, etc. | +Stricter and less open | +Designed with correctness | +
++The SRE Experience Is Changing with Cloud Native:
++
+- From Firefighting to Prevention for SREs.
+- Empower Developers with Self-Service.
+- Facilitate Developer Autonomy.
+- Adopting a New Code-Ship-Run Paradigm.
+
| Site Reliability Engineer (SRE) team | +Developers | +Operations team | +
|---|---|---|
| Provide and teach effective use of platform tooling to empower developers to be self-sufficient | +Treat SREs as application operation partners, not only as first responders to incidents | +Provide self-service platform deployment and observability, and enable visibility into ramifications of actions | +
| Document clear escalation paths for developers struggling in production | +Turn to ops teams for the “paved path” or centralized developer control plane | +Provide opinionated “paved path” platform or developer control plane (DCP), but allow developers to swap platform components if they also want to be accountable | +
Avoiding standardization, automation and improvements because rivals do not invest in them is shortsighted. It is worrying because there is considerable resistance to change along with employment discrimination to prevent new proposals from succeeding. The term DevOps first appeared in 2009.
+In this service driven IT sector, cloud certifications and technical assesment tests have much more weight in the selection processes that have little to do with real work. They are mostly a wall to justify the hiring of less experienced (younger and cheaper) employees. Fundamental in any profession to learn by doing while building a career and skills with decent opportunities and without too many difficulties and barriers.
+A consequence of these technical assessment tests is the willingness to learn how to pass them while only implementing and practicing this specific knowledge at work. If assessments are about low level concepts then there’s no interest in abstractions, frameworks and enterprise standards (real work). Similar scenario when evaluating kubernetes knowledge with manual tasks (CLI) instead of gitops pipelines (real work2).
+Inbreeding is not a good strategy in IT. Hiring people with different background and skills is a better bet. Cronyism, kiss up kick down and blame games hurt employee retention and economic growth. This is terrible common too. If an employee doesn’t trust their manager, the company suffers. Sure, ruling through fear works, but the employee will do the bare minimum amount of work needed to keep their job (manually and without automation).
+Culture of mutual trust is key to beating competition and increasing employee retention. When something isn’t right the employee should be able to bring it up without being afraid of being fired.
+We are in business to make money, perhaps not only creating value on financial markets with jargon like margin and cost effective, common in financially driven companies.
+Everyone sells the same thing: cloud, devops, big data, etc. Speaking is cheap. Throwing an SQL statement doesn’t make you an SQL expert. Likewise, you don’t need to be an SQL expert on every job. Actually most of the jobs require generalists rather than specialists, above all in countries where most companies are SMEs.
+There are very few unicorns and to a certain extent it depends a lot on the environment created.
+CKA is the top Kubernetes certification but only a few employers require one. Same logic applies to other certifications.
+It is surprising the numerous resources and the strategy of psychological exhaustion of recruitment companies that continuously bombard us with interviews. They also force us to transfer our data to third parties without any control of where our CV ends. It is also very common to gather information from detailed CVs and interviews to afterwards publish similar JDs that can be sold as services to potential clients. Again, only the service name is what matters, not how this is implemented and whether the client have the capacity to implement it in a proper manner.
+As professionals we are obliged to a high commitment to our clients, sometimes sacrificing our well-being in order to achieve the objectives. Everyone has limits, sometimes being a personal decision to abandon a project without this entailing a penalty in the next job (we have given our CV to third parties without any control). An unfair bad reference (blame games) and calculated ambiguities can ruin our careers. And I’m not talking about an isolated case.
+Losing employment and significantly penalizing employability and economic bargaining power for defending the value of automation, continuous improvement and standardization in computer engineering is a high price to pay. The alternatives often seem to be manual work with low salary expectations, lack of opportunities with new cloud jobs (better paid), promotion to a management position or emigration to countries with a different economic model (where technical jobs are better valued). This does not scale either. Freelancing worldwide is not for everyone either.
+++“One of the biggest problems in IT is that we keep reinventing the wheel. We are running the same circles, producing similar technologies to solve the same problems. Reinventing the wheel is a great way to learn how the wheel works, but not an efficient way to build software” (@dmokafa)
+“Tech industry thinks throwing more tools to the problem is the solution. More tools = more failure modes” (@rakyll)
+
Instead of reinventing the wheel by rewriting from scratch a new installer or ad-hoc devops tool to manage/monitor kubernetes, please pay attention to the links shared here and learn how to add value on the so called day 2. You will find solutions and knowledge in a practical and efficient way without being totally essential to obtain a certification to successfully complete the task. For example, if there’s money for reinventing the wheel on day 1, then there’s money for investing in these high value added solutions on day 2 where automation can significantly improve our lives and the quality of the delivered service. Automation is also a key element when evaluating the delivery of a service.
+Nubenetes shares relevant information that helps spread the new technological and cultural standards, in order to eliminate bottlenecks and silos and promote digital transformation.
+Does saying this publicly imply being blacklisted and losing professional opportunities? What kind of society do we live in?
+Tips: ask the hiring manager what experience they have with Cloud Automation, Cloud Managed Services and K8s in Production, if they deploy OpenShift via IPI1 or UPI, whether they are familiar with Gitops as the correct way of doing DevOps, if they work with modern, easy-to-use automation tools (terraform, ansible modules with YAML/Jinja templates, argocd, helm, an automation server3 to run pipelines, declarative code in Jenkins4 Pipelines or in DevOps Azure Pipelines, IaC boilerplates instead of k8s vanilla, etc) or they are not practical and prefer to develop their own ad-hoc tools with millions of lines of code that need maintenance (by who?). If any doubt, ask them to show you their pipelines and custom solutions, how long it takes them to deploy and setup their k8s infra on day 1 & day 2 (pets vs cattle service model), how long it takes them to deploy a single app and if the process is fully automated or not, what monitoring solutions they have, if security and Role-based Access Control (RBAC) are implemented in their k8s clusters, whether changes and PoCs are tested first in ephemeral and isolated K8s/Cloud infra test environments with IaC & CI/CD pipelines, if solutions can be discussed within the team, etc.
++ ++
++“I am a big fan of the scientific method. Engineers do not build bridges from a right or left perspective, the engineer builds bridges from an evidence-based perspective and over time bridge construction has improved. On the other hand, a politician does things from a right or left perspective, and over time politics has gotten worse. When I work with politicians and two of them are in a room together, one always thinks of the other, “will they get in my way? Will they damage my reputation? Is there a conflict of interest?” On the other hand, when two engineers meet, they say, “hello! I have a problem, can you help me?” Engineers rely on evidence. If you want to save the world, think like an engineer.” ref 1 (Youtube Clip in Spanish), ref 2 (English), ref 3 (Spanish), ref 4 (Spanish) - Mark Stevenson, writer and businessman.
+
+
+Let’s improve both the private & public IT sector and the opportunities in large, medium and small companies, and give us a star on GitHub if you like this blog!!
+“In the U.S. in 2016, 3.9 million jobs are associated with cloud computing, with 384,478 of them in IT. The median salary for IT professionals with cloud computing experience was $90,950. (Forbes)”
+ +From the above graph (credit: Forbes) we can see that the top three countries for Cloud Computing Jobs are:
+China (7.5 Million). +USA (4 Million). +India (2.2 Million).
+For example: OpenShift deployment using the UPI method instead of IPI because of lack of permissions as an excuse. ↩↩
+Manual operations with CLI are more appropriate for queries and troubleshooting (without modify permissions) when monitoring systems don’t provide enough information. GitOps pipelines should be controlled and triggered by an automation server. ↩
+Jenkins/CloudBees, Ansible Tower/AWX, Foreman, Rundeck, Azure DevOps, GitLab CI, etc. ↩
+Automation with Jenkins Configuration as Code replaces what was previously done via Jenkins CLI and jenkins remote REST API calls (requiring backend development with tools like swagger and API Testing tools like postman). Similar scenario applies to other technologies. ↩
+Resources, tools, and projects related to autonomous AI agents, Model Context Protocol (MCP) implementations, and LLM orchestration within Kubernetes environments.
+ +Cursor AI Fundamentals Course - (Related to ai topic)
+Machine Learning Crash Course 🌟 - A practical and accelerated introduction to Google’s machine learning, featuring a series of animated videos, interactive visualizations, and hands-on exercises. This course covers foundational concepts like regression and classification models, linear regression, loss, gradient descent, and hyperparameter tuning.
+github.com/microsoft/ML-For-Beginners: Machine Learning for Beginners - A Curriculum
+Automate Pull Request Descriptions in Azure DevOps with Azure OpenAI - (Related to cicd topic)
+github.com/tensorchord/Awesome-LLMOps: Awesome LLMOps An awesome & curated list of best LLMOps tools for developers
+Ignore Prior Instructions: AI Still Befuddled by Basic Reasoning - An article discussing the limitations of current AI models, particularly their struggles with understanding and acting upon explicit instructions and basic reasoning, even when the instructions are clear. It highlights how AI can still be ‘befuddled’ by simple logical tasks.
+Claude 101: Free Guides to Master Claude - A comprehensive collection of free guides for learning and mastering Anthropic’s Claude AI model, covering beginner to expert levels. The content includes guides on basic usage, prompting techniques, certification, team collaboration, design integration, skill creation, advanced techniques for avoiding AI limitations and biases, and using Claude for coding and computer interaction.
+github.com/openai/openai-cookbook: OpenAI Cookbook Examples and guides for using the OpenAI API
+Warp: The Agentic Development Environment - (Related to kubernetes-tools topic)
+k8sgpt.ai K8sGPT is a tool for scanning your kubernetes clusters, diagnosing and triaging issues in simple english. It has SRE experience codified into its analyzers and helps to pull out the most relevant information to enrich it with AI.
+AWS Well-Architected IaC Analyzer - (Related to aws-architecture topic)
+hashicorp.com: Accelerate your Terraform development with Amazon CodeWhisperer
+Google Launches Gemini Code Assist, Challenging GitHub Copilot with Generous Free Tier - Google has introduced Gemini Code Assist, an AI-powered programming assistant that aims to compete with GitHub Copilot. A key differentiator is its significantly larger free usage tier, offering 180,000 queries per month compared to GitHub Copilot’s 2,000, making it a more accessible option for developers to explore and adopt.
+Microsoft Dragon Copilot: Unified Voice AI Assistant for Healthcare - Microsoft announces Dragon Copilot, a voice AI assistant for the healthcare industry that combines Dragon Medical One and DAX Copilot. It aims to streamline clinical documentation, improve information retrieval, and automate tasks for clinicians, ultimately enhancing well-being, efficiency, and patient experiences.
+blog.redbrickai.com: F.A.S.T. ⚡️ Meta AI’s Segment Anything for Medical Imaging
+Awesome MCP Servers - (Related to ai-agents-mcp topic)
+github.com/jupyterlab/jupyter-ai A generative AI extension for JupyterLab
++ + + +
+Ansible for DevOps Examples 🌟 - A GitHub repository containing example Ansible playbooks and roles specifically tailored for DevOps practices. It covers various use cases, including infrastructure deployment, application configuration, and automation for common DevOps tools.
+github.com/k3s-io/k3s-ansible 🌟 Build a Kubernetes cluster using Ansible with k3s.
+daemon.json file, after years of people asking” (Jeff Geerling)The Beginner’s Guide to the Ansible Inventory 🌟 - This guide explains the core concept of Ansible Inventory, detailing its role in organizing and defining automation targets. It covers both static and dynamic inventory types, their respective formats (INI and YAML), and how to configure dynamic inventories using plugins with sources like NetBox. The article also touches upon inventory filtering for precise host automation.
++How to manage Windows hosts with Ansible!
— Rakesh Jain (@devops_tech) February 25, 2023
A Short Thread 👇 pic.twitter.com/NGRqym4c91
+Ansible vs Terraform
— Rakesh Jain (@devops_tech) June 24, 2023
Explaining the differences and the better choice for you!
A Thread 👇 pic.twitter.com/maKVIdHXki
+ + + +
+APIDog - APIDog is a platform that allows users to manage and test APIs. It provides features for API documentation, testing, and collaboration.
+OpenAPI Generator 🌟 Generate clients, servers, and documentation from OpenAPI 2.0/3.x documents
+Public APIs Directory - A curated directory of over 1000 free public REST APIs for developers to discover and integrate into their projects. It allows browsing by category, comparing alternatives, and accessing code examples.
+Cerebras AI - (Related to ai topic)
++ +People complain about tooling fatigue but web dev in 2021 is 10x simpler than in 2011. You just gotta pick the right tools.
— gunar.uk (@gunar) May 21, 2021
Infra: @PulumiCorp
Data: @PostgreSQL
API: @HasuraHQ
Frontend: @vercel's NextJS
And no proprietary bullshit—100% open source!
+ +/1 REST is the most common communication standard between computers over the internet. What is it? Why is it so popular? Let's take a look at this thread. pic.twitter.com/GBdBcC56aF
— Alex Xu (@alexxubyte) August 25, 2022
+ +Optimize API performance with these 5 tips.
— RapidAPI (@Rapid_API) October 21, 2022
Thread🧵👇
+ +API Testing. What is it?
— RapidAPI (@Rapid_API) October 24, 2022
Thread 🧵👇
+ +Authentication vs. Authorization – What's the difference?
— RapidAPI (@Rapid_API) October 27, 2022
A thread 🧵
+ +Let's discuss how we can handle CORS in Express.
— RapidAPI (@Rapid_API) October 27, 2022
Thread 🧵👇
+ +HTTP headers that developers should be aware of.
— RapidAPI (@Rapid_API) November 10, 2022
Thread🧵👇
+ +OAuth2, features, and advantages.
— RapidAPI (@Rapid_API) November 12, 2022
Thread 🧵👇
+ +How to increase API performance?
— RapidAPI (@Rapid_API) November 11, 2022
Thread 🧵👇
+ +Different Architectural Styles of APIs
— RapidAPI (@Rapid_API) November 25, 2022
Thread 🧵👇
+ +What is GraphQL? When should we use it?
— Bytebytego (@bytebytego) November 28, 2022
How is GraphQL the same as REST? How are they different? Let’s dive deeper.
Watch here: https://www.youtube.com/watch?v=yWzKJPw_VzM pic.twitter.com/EUgGe82rNu
+ +Local Storage. What is it?
— RapidAPI (@Rapid_API) November 28, 2022
Thread 🧵👇
+ +Best Practices for Securing API Keys
— RapidAPI (@Rapid_API) December 12, 2022
Thread 🧵👇
+ +API Authentication methods
— RapidAPI (@Rapid_API) December 26, 2022
Thread 🧵👇
+ +Here, we'll discuss the three most commonly used API authentication techniques:
— RapidAPI (@Rapid_API) December 26, 2022
- HTTP Authentication
- API Keys (Bearer token, JSON Web Token)
- OAuth
+ +HTTP Status codes worth knowing about
— RapidAPI (@Rapid_API) December 27, 2022
Thread 🧵👇
+ +What exactly is CORS, and how does it work?
— RapidAPI (@Rapid_API) December 27, 2022
Thread 🧵
+ +What is an API? pic.twitter.com/FBQfcGDsdh
— RapidAPI (@Rapid_API) December 28, 2022
+ +Difference between API Authentication and API Authorization.
— RapidAPI (@Rapid_API) December 28, 2022
Thread 🧵👇
+ +How does JSON web token (JWT) authentication work?
— RapidAPI (@Rapid_API) December 29, 2022
Thread 🧵👇🏻
+ +What is the difference between an API and a Microservice?
— RapidAPI (@Rapid_API) December 29, 2022
Thread 🧵👇
+ +API security best practices 👇
— RapidAPI (@Rapid_API) December 30, 2022
{ 1 / 6 } pic.twitter.com/0IjjK7zhWv
+ +What is a REST API?
— Rapid (@Rapid_API) January 30, 2023
Thread 🧵👇
+ +10 API related terms that every developer should be aware of
— Rapid (@Rapid_API) February 6, 2023
Thread 🧵👇
+ +What are CRUD operations?
— Rapid (@Rapid_API) February 6, 2023
Thread 🧵👇
+ +How do Webhooks work?👇 pic.twitter.com/9CQ76uhY4l
— Rapid (@Rapid_API) February 7, 2023
+ +How to use Axios to make API requests.
— Rapid (@Rapid_API) February 6, 2023
Thread 🧵👇
+ +Five GPT-3 based APIs for your next side project.
— Rapid (@Rapid_API) February 7, 2023
Thread 🧵👇
+ +API Design best practices
— Rapid (@Rapid_API) February 9, 2023
Thread 🧵👇
+ +HTTP 2xx Status Codes worth knowing about
— Rapid (@Rapid_API) February 9, 2023
Thread 🧵👇
+ +What's the difference between the HTTP methods PUT and PATCH?
— Rapid (@Rapid_API) February 10, 2023
A thread 👇
{ 1 / 5 } pic.twitter.com/lTCpIGU9l3
+ +What's the difference between API and microservice?
— Rapid (@Rapid_API) February 14, 2023
Thread 🧵👇
+ +Top location APIs that you can use in your next project
— Rapid (@Rapid_API) February 15, 2023
Thread 🧵👇
+ +Cloud and APIs. How does it work?
— Rapid (@Rapid_API) February 18, 2023
Thread 🧵👇
+ +8 APIs that you can use in your next side project
— Rapid (@Rapid_API) February 20, 2023
Thread 🧵👇
+ +How does JSON web token (JWT) authentication work?
— Rapid (@Rapid_API) February 22, 2023
Thread 🧵👇
+ +REST API development tips 👇
— Rapid (@Rapid_API) February 24, 2023
{ 1 / 6 } pic.twitter.com/9L2QKReuRp
+ +Benefits of API caching 👇🧵
— Rapid (@Rapid_API) February 24, 2023
+ +Difference between API and Webhook
— Rapid (@Rapid_API) February 27, 2023
Thread 🧵👇
+ +/1 What are the API architectural styles?
— Alex Xu (@alexxubyte) February 27, 2023
The diagram below shows the common API architectural styles in one picture:
1. REST
2. GraphQL
3. Web socket
4. Webhook
5. gRPC
6. SOAP pic.twitter.com/ojmpp12A09
+ +Introduction to GraphQL queries.
— Rapid (@Rapid_API) March 9, 2023
A thread 🧵👇
+ +Let’s talk about different API testing methods.
— Rapid (@Rapid_API) March 13, 2023
Thread 🧵👇
+ +API Integration. What is it?
— Rapid (@Rapid_API) March 14, 2023
Thread 🧵👇
+ +How to avoid API rate limits?
— Rapid (@Rapid_API) March 15, 2023
A thread 🧵👇
+ +Difference between JSON and XML
— Rapid (@Rapid_API) March 17, 2023
- Structure
- Performance
- Compatibility
- Usage
- Supported types
- Readability
- Flexibility
Thread 🧵👇
+ +Let's talk about APIs
— Rapid (@Rapid_API) March 22, 2023
- What is an API
- Usage of APIs
- Types of APIs
- Benefits of APIs
Thread 🧵👇
+ +Let’s learn about OAuth
— Rapid (@Rapid_API) March 28, 2023
Thread 🧵👇
+ +Different API Authentication Methods
— Rapid (@Rapid_API) April 6, 2023
1️⃣ Basic Auth
2️⃣ API Keys
3️⃣ OAuth 2.0
4️⃣ JSON Web Tokens
5️⃣ Header API Authentication
Thread 🧵👇
+ +API Design Principles and Best Practices.
— Rapid (@Rapid_API) April 12, 2023
❯ Focus on User Experience
❯ Embrace RESTful Principles
❯ Use Consistent Naming Conventions
❯ Versioning & Backward Compatibility
❯ Error Handling and Messaging
❯ Pagination and Filtering
❯ Security and Authentication
Thread🧵👇
+ +API documentation.
— Rapid (@Rapid_API) April 12, 2023
Tools, Techniques, and Importance:
Thread🧵👇
+ +GraphQL APIs: concepts, advantages, and use cases
— Rapid (@Rapid_API) April 13, 2023
Thread 🧵👇
+ +HTTP HEAD method. When is it used?
— Rapid (@Rapid_API) April 11, 2023
Thread 🧵👇
feat(ui): Add AppSet to Application Resource Tree in Argo CD 🌟 - This pull request introduces the ability to display the ApplicationSet resource as a parent in the Application Resource Tree within the Argo CD UI. This enhancement, now merged and part of Argo CD v3.5, allows users to see which ApplicationSet created or manages an application, providing a clearer understanding of application relationships.
+argoproj.github.io: Argo CD - Declarative GitOps for Kubernetes
+datree.io: ArgoCD Best Practices You Should Know you’ll explore some best practices for ArgoCD:
+kamsjec.medium.com: ArgoCD Setup on Kubernetes/OpenShift Cluster ArgoCD is a declarative GitOps tool built to deploy applications to Kubernetes/OpenShift clusters. ArgoCD is a Kubernetes/OpenShift controller, responsible for continuously monitoring all running applications and comparing their live state to the desired state specified in the Git repository.
+values.yaml, and how to configure ArgoCD to decrypt these secrets on the fly before installing a Helm releaseAWS EKS Argo CD Terraform Component - (Related to gitops topic)
+argoproj-labs/argocd-autopilot: Argo-CD Autopilot The Argo-CD Autopilot is a tool which offers an opinionated way of installing Argo-CD and managing GitOps epositories. New users to GitOps and Argo CD are not often sure how they should structure their repos, add applications, promote apps across environments, and manage the Argo CD installation itself using GitOps. Argo Autopilot is a project that solves that
+Migrating CI/CD from Jenkins to Argo Workflows - (Related to cicd topic)
+blog.argoproj.io: Practical Argo Workflows Hardening 🌟 you’ll cover:
+blog.argoproj.io: Architecting Workflows For Reliability Kubernetes is designed for stateless scalable web applications, apps where if one process dies, then another process can be dropped in its place. Kubernetes makes one promise — it will kill your pods. Kubernetes expects applications built on it to be tolerant of both any disruption— so apps must be designed with that in mind.
+```text +Dear user, +I will kill your pod:
+If I want the node for something more important. +If I’m draining the node, or scaling down a cluster. +If it runs out of memory (because you got the config wrong). +If I overcommitted. +Hardware failure (computer catches fire). +Kernel panic. +Absolutely any reason I feel like.
+I’m sorry — I am who I am.
+All the best,
+Kubernetes xx +```text
+medium.com/atlantbh: Implementing CI/CD pipeline using Argo Workflows and Argo Events 🌟
++ +
+b&&(b=h),k=v*v*C,T=Math.max(b/k,k/x),T>w){v-=h;break}w=T}s.push(u={value:v,dice:m Jn))l.moveTo(0,0);else if(v>lg-Jn)l.moveTo(m*ed(g),m*El(g)),l.arc(0,0,m,g,y,!x),p>Jn&&(l.moveTo(p*ed(y),p*El(y)),l.arc(0,0,p,y,g,x));else{var b=g,T=y,w=g,C=y,k=v,E=v,A=s.apply(this,arguments)/2,N=A>Jn&&(i?+i.apply(this,arguments):pp(p*p+m*m)),P=Tw(KL(m-p)/2,+r.apply(this,arguments)),I=P,D=P,_,R;if(N>Jn){var M=ZL(N/p*El(A)),L=ZL(N/m*El(A));(k-=M*2)>Jn?(M*=x?1:-1,w+=M,C-=M):(k=0,w=C=(g+y)/2),(E-=L*2)>Jn?(L*=x?1:-1,b+=L,T-=L):(E=0,b=T=(g+y)/2)}var B=m*ed(b),O=m*El(b),$=p*ed(C),G=p*El(C);if(P>Jn){var F=m*ed(T),V=m*El(T),H=p*ed(w),j=p*El(w),U;if(v Jn)||!(k>Jn)?l.lineTo($,G):I>Jn?(_=ww($,G,F,V,p,-I,x),R=ww(B,O,H,j,p,-I,x),l.lineTo(_.cx+_.x01,_.cy+_.y01),I {"use strict";bw();Cw();QL();o(Q$e,"arcInnerRadius");o(J$e,"arcOuterRadius");o(eze,"arcStartAngle");o(tze,"arcEndAngle");o(rze,"arcPadAngle");o(ize,"intersect");o(ww,"cornerTangents");o(Al,"default")});function ux(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}var uVt,JL=z(()=>{"use strict";uVt=Array.prototype.slice;o(ux,"default")});function LJ(e){this._context=e}function xc(e){return new LJ(e)}var eM=z(()=>{"use strict";o(LJ,"Linear");LJ.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}},"point")};o(xc,"default")});function MJ(e){return e[0]}function NJ(e){return e[1]}var IJ=z(()=>{"use strict";o(MJ,"x");o(NJ,"y")});function _l(e,t){var r=Fi(!0),i=null,n=xc,a=null,s=kw(l);e=typeof e=="function"?e:e===void 0?MJ:Fi(e),t=typeof t=="function"?t:t===void 0?NJ:Fi(t);function l(u){var h,d=(u=ux(u)).length,f,p=!1,m;for(i==null&&(a=n(m=s())),h=0;h<=d;++h)!(h "),e.result!==null&&g.kind!==e.kind&&ar(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+g.kind+'", not "'+e.kind+'"'),g.resolve(e.result,e.tag)?(e.result=g.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):ar(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||d}function RVe(e){var t=e.position,r,i,n,a=!1,s;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(s=e.input.charCodeAt(e.position))!==0&&(En(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||s!==37));){for(a=!0,s=e.input.charCodeAt(++e.position),r=e.position;s!==0&&!As(s);)s=e.input.charCodeAt(++e.position);for(i=e.input.slice(r,e.position),n=[],i.length<1&&ar(e,"directive name must not be less than one character in length");s!==0;){for(;kp(s);)s=e.input.charCodeAt(++e.position);if(s===35){do s=e.input.charCodeAt(++e.position);while(s!==0&&!Tc(s));break}if(Tc(s))break;for(r=e.position;s!==0&&!As(s);)s=e.input.charCodeAt(++e.position);n.push(e.input.slice(r,e.position))}s!==0&&qM(e),sd.call(mte,i)?mte[i](e,i,n):m4(e,'unknown document directive "'+i+'"')}if(En(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,En(e,!0,-1)):a&&ar(e,"directives end mark is expected"),bg(e,e.lineIndent-1,p4,!1,!0),En(e,!0,-1),e.checkLineBreaks&&pVe.test(e.input.slice(t,e.position))&&m4(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&v4(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,En(e,!0,-1));return}if(e.position ${this.parser.parseInline(e)} An error occurred: ${e.replace(/\\n|\n/g," ${n.tokens?.map(i).join("")}0;){if(h=Lv(s,l,r),h===u)return i[n]=s,i[a]=l,t(i);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return e},e}function kl(){var e=ix();return e.copy=function(){return cw(e,kl())},Zh.apply(e,arguments),wFe(e)}var WQ=z(()=>{"use strict";qh();_L();rx();VQ();o(wFe,"linearish");o(kl,"linear")});function RL(e,t){e=e.slice();var r=0,i=e.length-1,n=e[r],a=e[i],s;return a0))return u;let h;do u.push(h=new Date(+a)),t(a,l),e(a);while(hki(s=>{if(s>=s)for(;e(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;t(s,-1),!a(s););else for(;--l>=0;)for(;t(s,1),!a(s););}),r&&(n.count=(a,s)=>(LL.setTime(+a),ML.setTime(+s),e(LL),e(ML),Math.floor(r(LL,ML))),n.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?n.filter(i?s=>i(s)%a===0:s=>n.count(0,s)%a===0):n)),n}var LL,ML,Du=z(()=>{"use strict";LL=new Date,ML=new Date;o(ki,"timeInterval")});var gc,UQ,NL=z(()=>{"use strict";Du();gc=ki(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);gc.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?ki(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):gc);UQ=gc.range});var io,HQ,IL=z(()=>{"use strict";Du();io=ki(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*1e3)},(e,t)=>(t-e)/1e3,e=>e.getUTCSeconds()),HQ=io.range});var Ru,SFe,uw,EFe,OL=z(()=>{"use strict";Du();Ru=ki(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*1e3)},(e,t)=>{e.setTime(+e+t*6e4)},(e,t)=>(t-e)/6e4,e=>e.getMinutes()),SFe=Ru.range,uw=ki(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*6e4)},(e,t)=>(t-e)/6e4,e=>e.getUTCMinutes()),EFe=uw.range});var Lu,AFe,hw,_Fe,PL=z(()=>{"use strict";Du();Lu=ki(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*1e3-e.getMinutes()*6e4)},(e,t)=>{e.setTime(+e+t*36e5)},(e,t)=>(t-e)/36e5,e=>e.getHours()),AFe=Lu.range,hw=ki(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*36e5)},(e,t)=>(t-e)/36e5,e=>e.getUTCHours()),_Fe=hw.range});var Oo,DFe,ax,RFe,dw,LFe,BL=z(()=>{"use strict";Du();Oo=ki(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/864e5,e=>e.getDate()-1),DFe=Oo.range,ax=ki(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/864e5,e=>e.getUTCDate()-1),RFe=ax.range,dw=ki(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/864e5,e=>Math.floor(e/864e5)),LFe=dw.range});function up(e){return ki(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/6048e5)}function hp(e){return ki(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/6048e5)}var wl,Qh,fw,pw,vc,mw,gw,jQ,MFe,NFe,IFe,OFe,PFe,BFe,dp,ag,XQ,KQ,Jh,ZQ,QQ,JQ,FFe,$Fe,zFe,GFe,VFe,WFe,FL=z(()=>{"use strict";Du();o(up,"timeWeekday");wl=up(0),Qh=up(1),fw=up(2),pw=up(3),vc=up(4),mw=up(5),gw=up(6),jQ=wl.range,MFe=Qh.range,NFe=fw.range,IFe=pw.range,OFe=vc.range,PFe=mw.range,BFe=gw.range;o(hp,"utcWeekday");dp=hp(0),ag=hp(1),XQ=hp(2),KQ=hp(3),Jh=hp(4),ZQ=hp(5),QQ=hp(6),JQ=dp.range,FFe=ag.range,$Fe=XQ.range,zFe=KQ.range,GFe=Jh.range,VFe=ZQ.range,WFe=QQ.range});var Mu,qFe,yw,UFe,$L=z(()=>{"use strict";Du();Mu=ki(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth()),qFe=Mu.range,yw=ki(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth()),UFe=yw.range});var no,HFe,Sl,YFe,zL=z(()=>{"use strict";Du();no=ki(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());no.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:ki(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});HFe=no.range,Sl=ki(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Sl.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:ki(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});YFe=Sl.range});function tJ(e,t,r,i,n,a){let s=[[io,1,1e3],[io,5,5*1e3],[io,15,15*1e3],[io,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[n,1,36e5],[n,3,3*36e5],[n,6,6*36e5],[n,12,12*36e5],[i,1,864e5],[i,2,2*864e5],[r,1,6048e5],[t,1,2592e6],[t,3,3*2592e6],[e,1,31536e6]];function l(h,d,f){let p=d{"use strict";qh();NL();IL();OL();PL();BL();FL();$L();zL();o(tJ,"ticker");[XFe,KFe]=tJ(Sl,yw,dp,dw,hw,uw),[GL,VL]=tJ(no,Mu,wl,Oo,Lu,Ru)});var vw=z(()=>{"use strict";NL();IL();OL();PL();BL();FL();$L();zL();rJ()});function WL(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function qL(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function sx(e,t,r){return{y:e,m:t,d:r,H:0,M:0,S:0,L:0}}function UL(e){var t=e.dateTime,r=e.date,i=e.time,n=e.periods,a=e.days,s=e.shortDays,l=e.months,u=e.shortMonths,h=ox(n),d=lx(n),f=ox(a),p=lx(a),m=ox(s),g=lx(s),y=ox(l),v=lx(l),x=ox(u),b=lx(u),T={a:B,A:O,b:$,B:G,c:null,d:lJ,e:lJ,f:x$e,g:D$e,G:L$e,H:g$e,I:y$e,j:v$e,L:fJ,m:b$e,M:T$e,p:F,q:V,Q:hJ,s:dJ,S:C$e,u:k$e,U:w$e,V:S$e,w:E$e,W:A$e,x:null,X:null,y:_$e,Y:R$e,Z:M$e,"%":uJ},w={a:H,A:j,b:U,B:Q,c:null,d:cJ,e:cJ,f:P$e,g:H$e,G:j$e,H:N$e,I:I$e,j:O$e,L:mJ,m:B$e,M:F$e,p:Y,q:ae,Q:hJ,s:dJ,S:$$e,u:z$e,U:G$e,V:V$e,w:W$e,W:q$e,x:null,X:null,y:U$e,Y:Y$e,Z:X$e,"%":uJ},C={a:P,A:I,b:D,B:_,c:R,d:sJ,e:sJ,f:d$e,g:aJ,G:nJ,H:oJ,I:oJ,j:l$e,L:h$e,m:o$e,M:c$e,p:N,q:s$e,Q:p$e,s:m$e,S:u$e,u:t$e,U:r$e,V:i$e,w:e$e,W:n$e,x:M,X:L,y:aJ,Y:nJ,Z:a$e,"%":f$e};T.x=k(r,T),T.X=k(i,T),T.c=k(t,T),w.x=k(r,w),w.X=k(i,w),w.c=k(t,w);function k(J,te){return function(re){var ee=[],Te=-1,ue=0,De=J.length,Ie,Ee,we;for(re instanceof Date||(re=new Date(+re));++Te
"},r),vt.lineBreakRegex.test(e)))return e;let i=e.split(" ").filter(Boolean),n=[],a="";return i.forEach((s,l)=>{let u=ta(`${s} `,r),h=ta(a,r);if(u>t){let{hyphenatedStrings:p,remainingWord:m}=Bze(s,t,"-",r);n.push(a,...p),a=m}else h+u>=t?(n.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===i.length&&n.push(a)}),n.filter(s=>s!=="").join(r.joinWith)},(e,t,r)=>`${e}${t}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),Bze=bp((e,t,r="-",i)=>{i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},i);let n=[...e],a=[],s="";return n.forEach((l,u)=>{let h=`${s}${l}`;if(ta(h,i)>=t){let f=u+1,p=n.length===f,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(e,t,r="-",i)=>`${e}${t}${r}${i.fontSize}${i.fontWeight}${i.fontFamily}`);o(l4,"calculateTextHeight");o(ta,"calculateTextWidth");Px=bp((e,t)=>{let{fontSize:r=12,fontFamily:i="Arial",fontWeight:n=400}=t;if(!e)return{width:0,height:0};let[,a]=Za(r),s=["sans-serif",i],l=e.split(vt.lineBreakRegex),u=[],h=Je("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let d=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=Oze();v.text=y||SM;let x=Pze(d,v).style("font-size",a).style("font-weight",n).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}d.remove();let f=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[f]},(e,t)=>`${e}${t.fontSize}${t.fontWeight}${t.fontFamily}`),wM=class{constructor(t=!1,r){this.count=0;this.count=r?r.length:0,this.next=t?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},Fze=o(function(e){return o4=o4||document.createElement("div"),e=escape(e).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),o4.innerHTML=e,unescape(o4.textContent)},"entityDecode");o(LM,"isDetailedError");$ze=o((e,t,r,i)=>{if(!i)return;let n=e.node()?.getBBox();n&&e.append("text").text(i).attr("text-anchor","middle").attr("x",n.x+n.width/2).attr("y",-r).attr("class",t)},"insertTitle"),Za=o(e=>{if(typeof e=="number")return[e,e+"px"];let t=parseInt(e??"",10);return Number.isNaN(t)?[void 0,void 0]:e===String(t)?[t,e+"px"]:[t,e]},"parseFontSize");o(Gr,"cleanAndMerge");Zt={assignWithDepth:Ai,wrapLabel:Tp,calculateTextHeight:l4,calculateTextWidth:ta,calculateTextDimensions:Px,cleanAndMerge:Gr,detectInit:Eze,detectDirective:Kee,isSubstringInArray:Aze,interpolateToCurve:EM,calcLabelPosition:Lze,calcCardinalityPosition:Mze,calcTerminalLabelPosition:Nze,formatUrl:_ze,getStylesFromArray:_M,generateId:DM,random:RM,runFunc:Dze,entityDecode:Fze,insertTitle:$ze,isLabelCoordinateInPath:zze,parseFontSize:Za,InitIDGenerator:wM},Jee=o(function(e){let t=e;return t=t.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),t=t.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),t=t.replace(/#\w+;/g,function(r){let i=r.substring(1,r.length-1);return/^\+?\d+$/.test(i)?"\uFB02\xB0\xB0"+i+"\xB6\xDF":"\uFB02\xB0"+i+"\xB6\xDF"}),t},"encodeEntities"),Qa=o(function(e){return e.replace(/fl°°/g,"").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),bc=o((e,t,{counter:r=0,prefix:i,suffix:n},a)=>a||`${i?`${i}_`:""}${e}_${t}_${r}${n?`_${n}`:""}`,"getEdgeId");o(ii,"handleUndefinedAttr");o(zze,"isLabelCoordinateInPath")});function Ll(e,t,r,i,n){if(!t[e].width)if(r)t[e].text=Tp(t[e].text,n,i),t[e].textLines=t[e].text.split(vt.lineBreakRegex).length,t[e].width=n,t[e].height=l4(t[e].text,i);else{let a=t[e].text.split(vt.lineBreakRegex);t[e].textLines=a.length;let s=0;t[e].height=0,t[e].width=0;for(let l of a)t[e].width=Math.max(ta(l,i),t[e].width),s=l4(l,i),t[e].height=t[e].height+s}}function nte(e,t,r,i,n){let a=new d4(n);a.data.widthLimit=r.data.widthLimit/Math.min(MM,i.length);for(let[s,l]of i.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&er.wrap,d=c4(er);if(d.fontSize=d.fontSize+2,d.fontWeight="bold",Ll("label",l,h,d,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=c4(er);Ll("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=c4(er);g.fontSize=g.fontSize-2,Ll("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%MM===0){let g=r.data.startx+er.diagramMarginX,y=r.data.stopy+er.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+er.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let f=n.db.getC4ShapeArray(l.alias),p=n.db.getC4ShapeKeys(l.alias);p.length>0&&ite(a,e,f,p),t=l.alias;let m=n.db.getBoundaries(t);m.length>0&&nte(e,t,a,m,n),l.alias!=="global"&&rte(e,l,a),r.data.stopy=Math.max(a.data.stopy+er.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+er.c4ShapeMargin,r.data.stopx),u4=Math.max(u4,r.data.stopx),h4=Math.max(h4,r.data.stopy)}}var u4,h4,tte,MM,er,d4,NM,Bx,c4,Gze,rte,ite,Ss,ete,Vze,Wze,qze,IM,ate=z(()=>{"use strict";Rr();bee();St();ND();Ir();WD();Ut();Dm();Xt();Di();u4=0,h4=0,tte=4,MM=2;kv.yy=Rv;er={},d4=class{static{o(this,"Bounds")}constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,NM(t.db.getConfig())}setData(t,r,i,n){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=i,this.nextData.stopy=this.data.stopy=n}updateVal(t,r,i,n){t[r]===void 0?t[r]=i:t[r]=n(i,t[r])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+t.margin*2,i=r+t.width,n=this.nextData.starty+t.margin*2,a=n+t.height;(r>=this.data.widthLimit||i>=this.data.widthLimit||this.nextData.cnt>tte)&&(r=this.nextData.startx+t.margin+er.nextLinePaddingX,n=this.nextData.stopy+t.margin*2,this.nextData.stopx=i=r+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=n+t.height,this.nextData.cnt=1),t.x=r,t.y=n,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",n,Math.min),this.updateVal(this.data,"stopx",i,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",n,Math.min),this.updateVal(this.nextData,"stopx",i,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},NM(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}},NM=o(function(e){Ai(er,e),e.fontFamily&&(er.personFontFamily=er.systemFontFamily=er.messageFontFamily=e.fontFamily),e.fontSize&&(er.personFontSize=er.systemFontSize=er.messageFontSize=e.fontSize),e.fontWeight&&(er.personFontWeight=er.systemFontWeight=er.messageFontWeight=e.fontWeight)},"setConf"),Bx=o((e,t)=>({fontFamily:e[t+"FontFamily"],fontSize:e[t+"FontSize"],fontWeight:e[t+"FontWeight"]}),"c4ShapeFont"),c4=o(e=>({fontFamily:e.boundaryFontFamily,fontSize:e.boundaryFontSize,fontWeight:e.boundaryFontWeight}),"boundaryFont"),Gze=o(e=>({fontFamily:e.messageFontFamily,fontSize:e.messageFontSize,fontWeight:e.messageFontWeight}),"messageFont");o(Ll,"calcC4ShapeTextWH");rte=o(function(e,t,r){t.x=r.data.startx,t.y=r.data.starty,t.width=r.data.stopx-r.data.startx,t.height=r.data.stopy-r.data.starty,t.label.y=er.c4ShapeMargin-35;let i=t.wrap&&er.wrap,n=c4(er);n.fontSize=n.fontSize+2,n.fontWeight="bold";let a=ta(t.label.text,n);Ll("label",t,i,n,a),Rl.drawBoundary(e,t,er)},"drawBoundary"),ite=o(function(e,t,r,i){let n=0;for(let a of i){n=0;let s=r[a],l=Bx(er,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ta("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=er.c4ShapePadding,n=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=n,n=s.image.Y+s.image.height);let u=s.wrap&&er.wrap,h=er.width-er.c4ShapePadding*2,d=Bx(er,s.typeC4Shape.text);if(d.fontSize=d.fontSize+2,d.fontWeight="bold",Ll("label",s,u,d,h),s.label.Y=n+8,n=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=Bx(er,s.typeC4Shape.text);Ll("type",s,u,m,h),s.type.Y=n+5,n=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=Bx(er,s.techn.text);Ll("techn",s,u,m,h),s.techn.Y=n+5,n=s.techn.Y+s.techn.height}let f=n,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=Bx(er,s.typeC4Shape.text);Ll("descr",s,u,m,h),s.descr.Y=n+20,n=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),f=n-s.descr.textLines*5}p=p+er.c4ShapePadding,s.width=Math.max(s.width||er.width,p,er.width),s.height=Math.max(s.height||er.height,f,er.height),s.margin=s.margin||er.c4ShapeMargin,e.insert(s),Rl.drawC4Shape(t,s,er)}e.bumpLastMargin(er.c4ShapeMargin)},"drawC4ShapeArray"),Ss=class{static{o(this,"Point")}constructor(t,r){this.x=t,this.y=r}},ete=o(function(e,t){let r=e.x,i=e.y,n=t.x,a=t.y,s=r+e.width/2,l=i+e.height/2,u=Math.abs(r-n),h=Math.abs(i-a),d=h/u,f=e.height/e.width,p=null;return i==a&&r"u"&&Ou(e,t,null,!1,!1))&&(i!==""&&(i+=","+(e.condenseFlow?"":" ")),i+=e.dump);e.tag=n,e.dump="["+i+"]"}function wte(e,t,r,i){var n="",a=e.tag,s,l,u;for(s=0,l=r.length;s tag resolver accepts not "'+u+'" style');e.dump=i}return!0}return!1}function Ou(e,t,r,i,n,a,s){e.tag=null,e.dump=r,Ste(e,r,!1)||Ste(e,r,!0);var l=Vte.call(e.dump),u=i,h;i&&(i=e.flowLevel<0||e.flowLevel>t);var d=l==="[object Object]"||l==="[object Array]",f,p;if(d&&(f=e.duplicates.indexOf(r),p=f!==-1),(e.tag!==null&&e.tag!=="?"||p||e.indent!==2&&t>0)&&(n=!1),p&&e.usedDuplicates[f])e.dump="*ref_"+f;else{if(d&&p&&!e.usedDuplicates[f]&&(e.usedDuplicates[f]=!0),l==="[object Object]")i&&Object.keys(e.dump).length!==0?(dWe(e,t,e.dump,n),p&&(e.dump="&ref_"+f+e.dump)):(hWe(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if(l==="[object Array]")i&&e.dump.length!==0?(e.noArrayIndent&&!s&&t>0?wte(e,t-1,e.dump,n):wte(e,t,e.dump,n),p&&(e.dump="&ref_"+f+e.dump)):(uWe(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if(l==="[object String]")e.tag!=="?"&&oWe(e,e.dump,t,a,u);else{if(l==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new Es("unacceptable kind of an object to dump "+l)}e.tag!==null&&e.tag!=="?"&&(h=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",e.dump=h+" "+e.dump)}return!0}function fWe(e,t){var r=[],i=[],n,a;for(VM(e,r,i),n=0,a=i.length;n{"use strict";o(Ete,"isNothing");o(Kze,"isObject");o(Zze,"toArray");o(Qze,"extend");o(Jze,"repeat");o(eGe,"isNegativeZero");tGe=Ete,rGe=Kze,iGe=Zze,nGe=Jze,aGe=eGe,sGe=Qze,zn={isNothing:tGe,isObject:rGe,toArray:iGe,repeat:nGe,isNegativeZero:aGe,extend:sGe};o(Ate,"formatError");o($x,"YAMLException$1");$x.prototype=Object.create(Error.prototype);$x.prototype.constructor=$x;$x.prototype.toString=o(function(t){return this.name+": "+Ate(this,t)},"toString");Es=$x;o(OM,"getLine");o(PM,"padStart");o(oGe,"makeSnippet");lGe=oGe,cGe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],uGe=["scalar","sequence","mapping"];o(hGe,"compileStyleAliases");o(dGe,"Type$1");Ra=dGe;o(hte,"compileList");o(fGe,"compileMap");o(FM,"Schema$1");FM.prototype.extend=o(function(t){var r=[],i=[];if(t instanceof Ra)i.push(t);else if(Array.isArray(t))i=i.concat(t);else if(t&&(Array.isArray(t.implicit)||Array.isArray(t.explicit)))t.implicit&&(r=r.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit));else throw new Es("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof Ra))throw new Es("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Es("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Es("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),i.forEach(function(a){if(!(a instanceof Ra))throw new Es("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var n=Object.create(FM.prototype);return n.implicit=(this.implicit||[]).concat(r),n.explicit=(this.explicit||[]).concat(i),n.compiledImplicit=hte(n,"implicit"),n.compiledExplicit=hte(n,"explicit"),n.compiledTypeMap=fGe(n.compiledImplicit,n.compiledExplicit),n},"extend");pGe=FM,mGe=new Ra("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(e){return e!==null?e:""},"construct")}),gGe=new Ra("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(e){return e!==null?e:[]},"construct")}),yGe=new Ra("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(e){return e!==null?e:{}},"construct")}),vGe=new pGe({explicit:[mGe,gGe,yGe]});o(xGe,"resolveYamlNull");o(bGe,"constructYamlNull");o(TGe,"isNull");CGe=new Ra("tag:yaml.org,2002:null",{kind:"scalar",resolve:xGe,construct:bGe,predicate:TGe,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(kGe,"resolveYamlBoolean");o(wGe,"constructYamlBoolean");o(SGe,"isBoolean");EGe=new Ra("tag:yaml.org,2002:bool",{kind:"scalar",resolve:kGe,construct:wGe,predicate:SGe,represent:{lowercase:o(function(e){return e?"true":"false"},"lowercase"),uppercase:o(function(e){return e?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(e){return e?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(AGe,"isHexCode");o(_Ge,"isOctCode");o(DGe,"isDecCode");o(RGe,"resolveYamlInteger");o(LGe,"constructYamlInteger");o(MGe,"isInteger");NGe=new Ra("tag:yaml.org,2002:int",{kind:"scalar",resolve:RGe,construct:LGe,predicate:MGe,represent:{binary:o(function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},"binary"),octal:o(function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},"octal"),decimal:o(function(e){return e.toString(10)},"decimal"),hexadecimal:o(function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),IGe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(OGe,"resolveYamlFloat");o(PGe,"constructYamlFloat");BGe=/^[-+]?[0-9]+e/;o(FGe,"representYamlFloat");o($Ge,"isFloat");zGe=new Ra("tag:yaml.org,2002:float",{kind:"scalar",resolve:OGe,construct:PGe,predicate:$Ge,represent:FGe,defaultStyle:"lowercase"}),_te=vGe.extend({implicit:[CGe,EGe,NGe,zGe]}),GGe=_te,Dte=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Rte=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(VGe,"resolveYamlTimestamp");o(WGe,"constructYamlTimestamp");o(qGe,"representYamlTimestamp");UGe=new Ra("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:VGe,construct:WGe,instanceOf:Date,represent:qGe});o(HGe,"resolveYamlMerge");YGe=new Ra("tag:yaml.org,2002:merge",{kind:"scalar",resolve:HGe}),WM=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
+\r`;o(jGe,"resolveYamlBinary");o(XGe,"constructYamlBinary");o(KGe,"representYamlBinary");o(ZGe,"isBinary");QGe=new Ra("tag:yaml.org,2002:binary",{kind:"scalar",resolve:jGe,construct:XGe,predicate:ZGe,represent:KGe}),JGe=Object.prototype.hasOwnProperty,eVe=Object.prototype.toString;o(tVe,"resolveYamlOmap");o(rVe,"constructYamlOmap");iVe=new Ra("tag:yaml.org,2002:omap",{kind:"sequence",resolve:tVe,construct:rVe}),nVe=Object.prototype.toString;o(aVe,"resolveYamlPairs");o(sVe,"constructYamlPairs");oVe=new Ra("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:aVe,construct:sVe}),lVe=Object.prototype.hasOwnProperty;o(cVe,"resolveYamlSet");o(uVe,"constructYamlSet");hVe=new Ra("tag:yaml.org,2002:set",{kind:"mapping",resolve:cVe,construct:uVe}),Lte=GGe.extend({implicit:[UGe,YGe],explicit:[QGe,iVe,oVe,hVe]}),sd=Object.prototype.hasOwnProperty,f4=1,Mte=2,Nte=3,p4=4,BM=1,dVe=2,dte=3,fVe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,pVe=/[\x85\u2028\u2029]/,mVe=/[,\[\]\{\}]/,Ite=/^(?:!|!!|![a-z\-]+!)$/i,Ote=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(fte,"_class");o(Tc,"is_EOL");o(kp,"is_WHITE_SPACE");o(As,"is_WS_OR_EOL");o(vg,"is_FLOW_INDICATOR");o(gVe,"fromHexCode");o(yVe,"escapedHexLen");o(vVe,"fromDecimalCode");o(pte,"simpleEscapeSequence");o(xVe,"charFromCodepoint");o(Pte,"setProperty");Bte=new Array(256),Fte=new Array(256);for(Cp=0;Cp<256;Cp++)Bte[Cp]=pte(Cp)?1:0,Fte[Cp]=pte(Cp);o(bVe,"State$1");o($te,"generateError");o(ar,"throwError");o(m4,"throwWarning");mte={YAML:o(function(t,r,i){var n,a,s;t.version!==null&&ar(t,"duplication of %YAML directive"),i.length!==1&&ar(t,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&ar(t,"ill-formed argument of the YAML directive"),a=parseInt(n[1],10),s=parseInt(n[2],10),a!==1&&ar(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=s<2,s!==1&&s!==2&&m4(t,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(t,r,i){var n,a;i.length!==2&&ar(t,"TAG directive accepts exactly two arguments"),n=i[0],a=i[1],Ite.test(n)||ar(t,"ill-formed tag handle (first argument) of the TAG directive"),sd.call(t.tagMap,n)&&ar(t,'there is a previously declared suffix for "'+n+'" tag handle'),Ote.test(a)||ar(t,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{ar(t,"tag prefix is malformed: "+a)}t.tagMap[n]=a},"handleTagDirective")};o(ad,"captureSegment");o(gte,"mergeMappings");o(xg,"storeMappingPair");o(qM,"readLineBreak");o(En,"skipSeparationSpace");o(v4,"testDocumentSeparator");o(UM,"writeFoldedLines");o(TVe,"readPlainScalar");o(CVe,"readSingleQuotedScalar");o(kVe,"readDoubleQuotedScalar");o(wVe,"readFlowCollection");o(SVe,"readBlockScalar");o(yte,"readBlockSequence");o(EVe,"readBlockMapping");o(AVe,"readTagProperty");o(_Ve,"readAnchorProperty");o(DVe,"readAlias");o(bg,"composeNode");o(RVe,"readDocument");o(zte,"loadDocuments");o(LVe,"loadAll$1");o(MVe,"load$1");NVe=LVe,IVe=MVe,Gte={loadAll:NVe,load:IVe},Vte=Object.prototype.toString,Wte=Object.prototype.hasOwnProperty,HM=65279,OVe=9,zx=10,PVe=13,BVe=32,FVe=33,$Ve=34,$M=35,zVe=37,GVe=38,VVe=39,WVe=42,qte=44,qVe=45,g4=58,UVe=61,HVe=62,YVe=63,jVe=64,Ute=91,Hte=93,XVe=96,Yte=123,KVe=124,jte=125,La={};La[0]="\\0";La[7]="\\a";La[8]="\\b";La[9]="\\t";La[10]="\\n";La[11]="\\v";La[12]="\\f";La[13]="\\r";La[27]="\\e";La[34]='\\"';La[92]="\\\\";La[133]="\\N";La[160]="\\_";La[8232]="\\L";La[8233]="\\P";ZVe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],QVe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(JVe,"compileStyleMap");o(eWe,"encodeHex");tWe=1,Gx=2;o(rWe,"State");o(vte,"indentString");o(zM,"generateNextLine");o(iWe,"testImplicitResolving");o(y4,"isWhitespace");o(Vx,"isPrintable");o(xte,"isNsCharOrWhitespace");o(bte,"isPlainSafe");o(nWe,"isPlainSafeFirst");o(aWe,"isPlainSafeLast");o(Fx,"codePointAt");o(Xte,"needIndentIndicator");Kte=1,GM=2,Zte=3,Qte=4,yg=5;o(sWe,"chooseScalarStyle");o(oWe,"writeScalar");o(Tte,"blockHeader");o(Cte,"dropEndingNewline");o(lWe,"foldString");o(kte,"foldLine");o(cWe,"escapeString");o(uWe,"writeFlowSequence");o(wte,"writeBlockSequence");o(hWe,"writeFlowMapping");o(dWe,"writeBlockMapping");o(Ste,"detectType");o(Ou,"writeNode");o(fWe,"getDuplicateReferences");o(VM,"inspectNode");o(pWe,"dump$1");mWe=pWe,gWe={dump:mWe};o(YM,"renamed");od=_te,ld=Gte.load,yYt=Gte.loadAll,vYt=gWe.dump,xYt=YM("safeLoad","load"),bYt=YM("safeLoadAll","loadAll"),TYt=YM("safeDump","dump")});function ZM(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function nre(e){Sp=e}function li(e,t=""){let r=typeof e=="string"?e:e.source,i={replace:o((n,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(Ja.caret,"$1"),r=r.replace(n,s),i},"replace"),getRegex:o(()=>new RegExp(r,t),"getRegex")};return i}function Cc(e,t){if(t){if(Ja.escapeTest.test(e))return e.replace(Ja.escapeReplace,ere)}else if(Ja.escapeTestNoEncode.test(e))return e.replace(Ja.escapeReplaceNoEncode,ere);return e}function tre(e){try{e=encodeURI(e).replace(Ja.percentDecode,"%")}catch{return null}return e}function rre(e,t){let r=e.replace(Ja.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),i=r.split(Ja.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),t)if(i.length>t)i.splice(t);else for(;i.length
+`:"'+(r?n:Cc(n,!0))+`
+`}blockquote({tokens:e}){return`"+(r?n:Cc(n,!0))+`
+${this.parser.parse(e)}
+`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`
+`}list(e){let t=e.ordered,r=e.start,i="";for(let s=0;s
+
+`+t+`
+`+i+`
+`}tablerow({text:e}){return`
+${e}
+`}tablecell(e){let t=this.parser.parseInline(e.tokens),r=e.header?"th":"td";return(e.align?`<${r} align="${e.align}">`:`<${r}>`)+t+`${r}>
+`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${Cc(e,!0)}`}br(e){return"
"}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:r}){let i=this.parser.parseInline(r),n=tre(e);if(n===null)return i;e=n;let a='"+i+"",a}image({href:e,title:t,text:r,tokens:i}){i&&(r=this.parser.parseInline(i,this.parser.textRenderer));let n=tre(e);if(n===null)return Cc(r);e=n;let a=`",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:Cc(e.text)}},aN=class{static{o(this,"$")}strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}},Bu=class KM{static{o(this,"l")}options;renderer;textRenderer;constructor(t){this.options=t||Sp,this.options.renderer=this.options.renderer||new k4,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new aN}static parse(t,r){return new KM(r).parse(t)}static parseInline(t,r){return new KM(r).parseInline(t)}parse(t,r=!0){let i="";for(let n=0;n
"+Cc(r.message+"",!0)+"
";return t?Promise.resolve(i):i}if(t)return Promise.reject(r);throw r}}},wp=new QWe;o(ni,"d");ni.options=ni.setOptions=function(e){return wp.setOptions(e),ni.defaults=wp.defaults,nre(ni.defaults),ni};ni.getDefaults=ZM;ni.defaults=Sp;ni.use=function(...e){return wp.use(...e),ni.defaults=wp.defaults,nre(ni.defaults),ni};ni.walkTokens=function(e,t){return wp.walkTokens(e,t)};ni.parseInline=wp.parseInline;ni.Parser=Bu;ni.parser=Bu.parse;ni.Renderer=k4;ni.TextRenderer=aN;ni.Lexer=Pu;ni.lexer=Pu.lex;ni.Tokenizer=C4;ni.Hooks=Hx;ni.parse=ni;kYt=ni.options,wYt=ni.setOptions,SYt=ni.use,EYt=ni.walkTokens,AYt=ni.parseInline,_Yt=Bu.parse,DYt=Pu.lex});function JWe(e,{markdownAutoWrap:t}){let i=e.replace(/
/g,`
+`).replace(/\n{2,}/g,`
+`);return fk(i)}function gre(e){return e.split(/\\n|\n|
/gi).map(t=>t.trim().match(/<[^>]+>|[^\s<>]+/g)?.map(r=>({content:r,type:"normal"}))??[])}function yre(e,t={}){let r=JWe(e,t),i=ni.lexer(r),n=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(`
+`).forEach((d,f)=>{f!==0&&(a++,n.push([])),d.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&n[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&n[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),i.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"?n[a].push({content:l.text,type:"normal"}):n[a].push({content:l.raw,type:"normal"})}),n}function vre(e){return e?`
")}
").replace(/ /g," "):n.text.replace(/\n */g,"
"):n.type==="strong"?`${n.tokens?.map(i).join("")}`:n.type==="em"?`${n.tokens?.map(i).join("")}`:n.type==="paragraph"?`
/g,"
")),p=s?yre(f.replace("
","
"),d):gre(f),m=nqe(u,e,p,t?h:!1,!l);if(l){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Je(m).attr("style",g)}else{let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Je(m).select("rect").attr("style",g.replace(/background:/g,"fill:"));let y=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Je(m).select("text").attr("style",y)}return i?Je(m).selectAll("tspan.text-outer-tspan").classed("title-row",!0):Je(m).selectAll("tspan.text-outer-tspan").classed("row",!0),m}},"createText")});async function E4(e,t){let r=e.getElementsByTagName("img");if(!r||r.length===0)return;let i=t.replace(/]*>/g,"").trim()==="";await Promise.all([...r].map(n=>new Promise(a=>{function s(){if(n.style.display="flex",n.style.flexDirection="column",i){let l=ge().fontSize?ge().fontSize:window.getComputedStyle(document.body).fontSize,u=5,[h=or.fontSize]=Za(l),d=h*u+"px";n.style.minWidth=d,n.style.maxWidth=d}else n.style.width="100%";a(n)}o(s,"setupImage"),setTimeout(()=>{n.complete&&s()}),n.addEventListener("error",s),n.addEventListener("load",s)})))}var cN=z(()=>{"use strict";Ut();Bn();Xt();o(E4,"configureLabelImages")});function tr(e){let t=e.map((r,i)=>`${i===0?"M":"L"}${r.x},${r.y}`);return t.push("Z"),t.join(" ")}function Bo(e,t,r,i,n,a){let s=[],u=r-e,h=i-t,d=u/a,f=2*Math.PI/d,p=t+h/2;for(let m=0;m<=50;m++){let g=m/50,y=e+g*u,v=p+n*Math.sin(f*(y-e));s.push({x:y,y:v})}return s}function Ep(e,t,r,i,n,a){let s=[],l=n*Math.PI/180,d=(a*Math.PI/180-l)/(i-1);for(let f=0;fu.tagName==="path"),r=document.createElementNS("http://www.w3.org/2000/svg","path"),i=t.map(u=>u.getAttribute("d")).filter(u=>u!==null).join(" ");r.setAttribute("d",i);let n=t.find(u=>u.getAttribute("fill")!=="none"),a=t.find(u=>u.getAttribute("stroke")!=="none"),s=o((u,h)=>u?.getAttribute(h)??void 0,"getAttr");if(n){let u={fill:s(n,"fill"),"fill-opacity":s(n,"fill-opacity")??"1"};Object.entries(u).forEach(([h,d])=>{d&&r.setAttribute(h,d)})}if(a){let u={stroke:s(a,"stroke"),"stroke-width":s(a,"stroke-width")??"1","stroke-opacity":s(a,"stroke-opacity")??"1"};Object.entries(u).forEach(([h,d])=>{d&&r.setAttribute(h,d)})}let l=document.createElementNS("http://www.w3.org/2000/svg","g");return l.appendChild(r),l}var At,A4,ft,Ct,Wt=z(()=>{"use strict";_s();Ut();br();Rr();Ir();Xt();cN();At=o(async(e,t,r)=>{let i,n=t.useHtmlLabels||Aa(ge()?.htmlLabels);r?i=r:i="node default";let a=e.insert("g").attr("class",i).attr("id",t.domId||t.id),s=a.insert("g").attr("class","label").attr("style",ii(t.labelStyle)),l;t.label===void 0?l="":l=typeof t.label=="string"?t.label:t.label[0];let u=!!t.icon||!!t.img,h=t.labelType==="markdown",d=await wi(s,fr(Qa(l),ge()),{useHtmlLabels:n,width:t.width||ge().flowchart?.wrappingWidth,classes:h?"markdown-node-label":"",style:t.labelStyle,addSvgBackground:u,markdown:h},ge()),f=d.getBBox(),p=(t?.padding??0)/2;if(n){let m=d.children[0],g=Je(d);await E4(m,l),f=m.getBoundingClientRect(),g.attr("width",f.width),g.attr("height",f.height)}return n?s.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):s.attr("transform","translate(0, "+-f.height/2+")"),t.centerLabel&&s.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:f,halfPadding:p,label:s}},"labelHelper"),A4=o(async(e,t,r)=>{let i=r.useHtmlLabels??Mr(ge()),n=e.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await wi(n,fr(Qa(t),ge()),{useHtmlLabels:i,width:r.width||ge()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(Mr(ge())){let u=a.children[0],h=Je(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return i?n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):n.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&n.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:e,bbox:s,halfPadding:l,label:n}},"insertLabel"),ft=o((e,t)=>{let r=t.node().getBBox();e.width=r.width,e.height=r.height},"updateNodeBounds"),Ct=o((e,t)=>(e.look==="handDrawn"?"rough-node":"node")+" "+e.cssClasses+" "+(t||""),"getNodeClasses");o(tr,"createPathFromPoints");o(Bo,"generateFullSineWavePoints");o(Ep,"generateCirclePoints");o(uN,"mergePaths")});function sqe(e,t){return e.intersect(t)}var _re,Dre=z(()=>{"use strict";o(sqe,"intersectNode");_re=sqe});function oqe(e,t,r,i){var n=e.x,a=e.y,s=n-i.x,l=a-i.y,u=Math.sqrt(t*t*l*l+r*r*s*s),h=Math.abs(t*r*s/u);i.x
"):p,t.labelStyle,!0,!0),y=g.children[0],v=Je(g);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height);let x=(t.padding||0)/2;Je(g).attr("transform","translate( "+(f.width>m.width?0:(m.width-f.width)/2)+", "+(m.height+x+5)+")"),Je(d).attr("transform","translate( "+(f.width
").length,f.innerHTML.includes("")&&(d+=f.innerHTML.split("]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,w=parseInt(b,10)*5+"px";y.style.minWidth=w,y.style.maxWidth=w}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=f.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{i.includes("font-weight: bolder")&&Je(u).selectAll("tspan").attr("font-weight",""),d=u.children.length;let f=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(f.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(f.textContent=f.textContent[0]+" "+f.textContent.substring(1))),f.textContent==="undefined"&&(f.textContent=""),h=u.getBBox()}return n.attr("transform","translate(0,"+(-h.height/(2*d)+r)+")"),h.height}var gae=z(()=>{"use strict";Rr();br();Wt();Xt();Ut();_s();Ir();o(mae,"textHelper");o(G4,"addText")});async function yae(e,t){let r=ge(),{themeVariables:i}=r,{useGradient:n}=i,a=r.class.padding??12,s=a,l=t.useHtmlLabels??Aa(r.htmlLabels)??!0,u=t;u.annotations=u.annotations??[],u.members=u.members??[],u.methods=u.methods??[];let{shapeSvg:h,bbox:d}=await mae(e,t,r,l,s),{labelStyles:f,nodeStyles:p}=ct(t);t.labelStyle=f,t.cssStyles=u.styles||"";let m=u.styles?.join(";")||p||"";t.cssStyles||(t.cssStyles=m.replaceAll("!important","").split(";"));let g=u.members.length===0&&u.methods.length===0&&!r.class?.hideEmptyMembersBox,y=ut.svg(h),v=mt(t,{});t.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=Math.max(t.width??0,d.width),b=Math.max(t.height??0,d.height),T=(t.height??0)>d.height;u.members.length===0&&u.methods.length===0?b+=s:u.members.length>0&&u.methods.length===0&&(b+=s*2);let w=-x/2,C=-b/2,k=g?a*2:u.members.length===0&&u.methods.length===0?-a:0;T&&(k=a*2);let E=y.rectangle(w-a,C-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0),x+2*a,b+2*a+k,v),A=h.insert(()=>E,":first-child");A.attr("class","basic label-container outer-path");let N=A.node().getBBox(),P=h.select(".annotation-group").node().getBBox().height-(g?a/2:0)||0,I=h.select(".label-group").node().getBBox().height-(g?a/2:0)||0,D=h.select(".members-group").node().getBBox().height-(g?a/2:0)||0,_=(P+I+C+a-(C-a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0)))/2;if(h.selectAll(".text").each((R,M,L)=>{let B=Je(L[M]),O=B.attr("transform"),$=0;if(O){let H=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(O);H&&($=parseFloat(H[2]))}let G=$+C+a-(g?a:u.members.length===0&&u.methods.length===0?-a/2:0);if(B.attr("class").includes("methods-group")){let V=Math.max(D,s/2);T?G=Math.max(_,P+I+V+C+s*2+a)+s*2:G=P+I+V+C+s*4+a}u.members.length===0&&u.methods.length===0&&r.class?.hideEmptyMembersBox&&(u.annotations.length>0?G=$-s:G=$),l||(G-=4);let F=w;(B.attr("class").includes("label-group")||B.attr("class").includes("annotation-group"))&&(F=-B.node()?.getBBox().width/2||0,h.selectAll("text").each(function(V,H,j){window.getComputedStyle(j[H]).textAnchor==="middle"&&(F=0)})),B.attr("transform",`translate(${F}, ${G})`)}),u.members.length>0||u.methods.length>0||g){let R=P+I+C+a,M=y.line(N.x,R,N.x+N.width,R+.001,v);h.insert(()=>M).attr("class",`divider${t.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(g||u.members.length>0||u.methods.length>0){let R=P+I+D+C+s*2+a,M=y.line(N.x,T?Math.max(_,R):R,N.x+N.width,(T?Math.max(_,R):R)+.001,v);h.insert(()=>M).attr("class",`divider${t.look==="neo"&&!n?" neo-line":""}`).attr("style",m)}if(u.look!=="handDrawn"&&h.selectAll("path").attr("style",m),A.select(":nth-child(2)").attr("style",m),h.selectAll(".divider").select("path").attr("style",m),t.labelStyle?h.selectAll("span").attr("style",t.labelStyle):h.selectAll("span").attr("style",m),!l){let R=RegExp(/color\s*:\s*([^;]*)/),M=R.exec(m);if(M){let L=M[0].replace("color","fill");h.selectAll("tspan").attr("style",L)}else if(f){let L=R.exec(f);if(L){let B=L[0].replace("color","fill");h.selectAll("tspan").attr("style",B)}}}return ft(t,A),t.intersect=function(R){return lt.rect(t,R)},h}var vae=z(()=>{"use strict";Wt();Ut();Rr();jt();Ht();Kt();gae();Ir();o(yae,"classBox")});async function xae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let n=t,a=t,s=20,l=20,u="verifyMethod"in t,h=Ct(t),{themeVariables:d}=ge(),{borderColorArray:f,requirementEdgeLabelBackground:p}=d,m=e.insert("g").attr("class",h).attr("id",t.domId??t.id),g;u?g=await $u(m,`<<${n.type}>>`,0,t.labelStyle):g=await $u(m,"<<Element>>",0,t.labelStyle);let y=g,v=await $u(m,n.name,y,t.labelStyle+"; font-weight: bold;");if(y+=v+l,u){let N=await $u(m,`${n.requirementId?`ID: ${n.requirementId}`:""}`,y,t.labelStyle);y+=N;let P=await $u(m,`${n.text?`Text: ${n.text}`:""}`,y,t.labelStyle);y+=P;let I=await $u(m,`${n.risk?`Risk: ${n.risk}`:""}`,y,t.labelStyle);y+=I,await $u(m,`${n.verifyMethod?`Verification: ${n.verifyMethod}`:""}`,y,t.labelStyle)}else{let N=await $u(m,`${a.type?`Type: ${a.type}`:""}`,y,t.labelStyle);y+=N,await $u(m,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,y,t.labelStyle)}let x=(m.node()?.getBBox().width??200)+s,b=(m.node()?.getBBox().height??200)+s,T=-x/2,w=-b/2,C=ut.svg(m),k=mt(t,{});t.look!=="handDrawn"&&(k.roughness=0,k.fillStyle="solid");let E=C.rectangle(T,w,x,b,k),A=m.insert(()=>E,":first-child");if(A.attr("class","basic label-container outer-path").attr("style",i),f?.length){let N=t.colorIndex??0;m.attr("data-color-id",`color-${N%f.length}`)}if(m.selectAll(".label").each((N,P,I)=>{let D=Je(I[P]),_=D.attr("transform"),R=0,M=0;if(_){let $=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(_);$&&(R=parseFloat($[1]),M=parseFloat($[2]))}let L=M-b/2,B=T+s/2;(P===0||P===1)&&(B=R),D.attr("transform",`translate(${B}, ${L+s})`)}),y>g+v+l){let N=w+g+v+l,P;if(t.look==="neo"){let _=[[T,N],[T+x,N],[T+x,N+.001],[T,N+.001]];P=C.polygon(_,k)}else P=C.line(T,N,T+x,N,k);m.insert(()=>P).attr("class","divider")}return ft(t,A),t.intersect=function(N){return lt.rect(t,N)},i&&t.look!=="handDrawn"&&(p||f?.length)&&m.selectAll("path").attr("style",i),m}async function $u(e,t,r,i=""){if(t==="")return 0;let n=e.insert("g").attr("class","label").attr("style",i),a=ge(),s=a.htmlLabels??!0,l=await wi(n,Ev(Qa(t)),{width:ta(t,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:i},a),u;if(s){let h=l.children[0],d=Je(l);u=h.getBoundingClientRect(),d.attr("width",u.width),d.attr("height",u.height)}else{let h=l.children[0];for(let d of h.children)i&&d.setAttribute("style",i);u=l.getBBox(),u.height+=6}return n.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var bae=z(()=>{"use strict";Wt();Kt();Ht();jt();Xt();Ut();_s();Rr();o(xae,"requirementBox");o($u,"addText")});async function Tae(e,t,{config:r}){let{labelStyles:i,nodeStyles:n}=ct(t);t.labelStyle=i||"";let a=10,s=t.width;t.width=(t.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await At(e,t,Ct(t)),d=t.padding||10,f="",p;"ticket"in t&&t.ticket&&r?.kanban?.ticketBaseUrl&&(f=r?.kanban?.ticketBaseUrl.replace("#TICKET#",t.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",f).attr("target","_blank"));let m={useHtmlLabels:t.useHtmlLabels,labelStyle:t.labelStyle||"",width:t.width,img:t.img,padding:t.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await A4(p,"ticket"in t&&t.ticket||"",m):{label:g,bbox:y}=await A4(l,"ticket"in t&&t.ticket||"",m);let{label:v,bbox:x}=await A4(l,"assigned"in t&&t.assigned||"",m);t.width=s;let b=10,T=t?.width||0,w=Math.max(y.height,x.height)/2,C=Math.max(u.height+b*2,t?.height||0)+w,k=-T/2,E=-C/2;h.attr("transform","translate("+(d-T/2)+", "+(-w-u.height/2)+")"),g.attr("transform","translate("+(d-T/2)+", "+(-w+u.height/2)+")"),v.attr("transform","translate("+(d+T/2-x.width-2*a)+", "+(-w+u.height/2)+")");let A,{rx:N,ry:P}=t,{cssStyles:I}=t;if(t.look==="handDrawn"){let D=ut.svg(l),_=mt(t,{}),R=N||P?D.path(Rs(k,E,T,C,N||0),_):D.rectangle(k,E,T,C,_);A=l.insert(()=>R,":first-child"),A.attr("class","basic label-container").attr("style",I||null)}else{A=l.insert("rect",":first-child"),A.attr("class","basic label-container __APA__").attr("style",n).attr("rx",N??5).attr("ry",P??5).attr("x",k).attr("y",E).attr("width",T).attr("height",C);let D="priority"in t&&t.priority;if(D){let _=l.append("line"),R=k+2,M=E+Math.floor((N??0)/2),L=E+C-Math.floor((N??0)/2);_.attr("x1",R).attr("y1",M).attr("x2",R).attr("y2",L).attr("stroke-width","4").attr("stroke",Bqe(D))}}return ft(t,A),t.height=C,t.intersect=function(D){return lt.rect(t,D)},l}var Bqe,Cae=z(()=>{"use strict";Wt();Kt();_p();Ht();jt();Bqe=o(e=>{switch(e){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(Tae,"kanbanItem")});async function kae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await At(e,t,Ct(t)),u=a.width+10*s,h=a.height+8*s,d=.15*u,{cssStyles:f}=t,p=a.width+20,m=a.height+20,g=Math.max(u,p),y=Math.max(h,m);l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`);let v,x=`M0 0
+ a${d},${d} 1 0,0 ${g*.25},${-1*y*.1}
+ a${d},${d} 1 0,0 ${g*.25},0
+ a${d},${d} 1 0,0 ${g*.25},0
+ a${d},${d} 1 0,0 ${g*.25},${y*.1}
+
+ a${d},${d} 1 0,0 ${g*.15},${y*.33}
+ a${d*.8},${d*.8} 1 0,0 0,${y*.34}
+ a${d},${d} 1 0,0 ${-1*g*.15},${y*.33}
+
+ a${d},${d} 1 0,0 ${-1*g*.25},${y*.15}
+ a${d},${d} 1 0,0 ${-1*g*.25},0
+ a${d},${d} 1 0,0 ${-1*g*.25},0
+ a${d},${d} 1 0,0 ${-1*g*.25},${-1*y*.15}
+
+ a${d},${d} 1 0,0 ${-1*g*.1},${-1*y*.33}
+ a${d*.8},${d*.8} 1 0,0 0,${-1*y*.34}
+ a${d},${d} 1 0,0 ${g*.1},${-1*y*.33}
+ H0 V0 Z`;if(t.look==="handDrawn"){let b=ut.svg(n),T=mt(t,{}),w=b.path(x,T);v=n.insert(()=>w,":first-child"),v.attr("class","basic label-container").attr("style",ii(f))}else v=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",x);return v.attr("transform",`translate(${-g/2}, ${-y/2})`),ft(t,v),t.calcIntersect=function(b,T){return lt.rect(b,T)},t.intersect=function(b){return Z.info("Bang intersect",t,b),lt.rect(t,b)},n}var wae=z(()=>{"use strict";St();Wt();Kt();Ht();jt();Xt();o(kae,"bang")});async function Sae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await At(e,t,Ct(t)),u=a.width+2*s,h=a.height+2*s,d=.15*u,f=.25*u,p=.35*u,m=.2*u,{cssStyles:g}=t,y,v=`M0 0
+ a${d},${d} 0 0,1 ${u*.25},${-1*u*.1}
+ a${p},${p} 1 0,1 ${u*.4},${-1*u*.1}
+ a${f},${f} 1 0,1 ${u*.35},${u*.2}
+
+ a${d},${d} 1 0,1 ${u*.15},${h*.35}
+ a${m},${m} 1 0,1 ${-1*u*.15},${h*.65}
+
+ a${f},${d} 1 0,1 ${-1*u*.25},${u*.15}
+ a${p},${p} 1 0,1 ${-1*u*.5},0
+ a${d},${d} 1 0,1 ${-1*u*.25},${-1*u*.15}
+
+ a${d},${d} 1 0,1 ${-1*u*.1},${-1*h*.35}
+ a${m},${m} 1 0,1 ${u*.1},${-1*h*.65}
+ H0 V0 Z`;if(t.look==="handDrawn"){let x=ut.svg(n),b=mt(t,{}),T=x.path(v,b);y=n.insert(()=>T,":first-child"),y.attr("class","basic label-container").attr("style",ii(g))}else y=n.insert("path",":first-child").attr("class","basic label-container").attr("style",i).attr("d",v);return l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),y.attr("transform",`translate(${-u/2}, ${-h/2})`),ft(t,y),t.calcIntersect=function(x,b){return lt.rect(x,b)},t.intersect=function(x){return Z.info("Cloud intersect",t,x),lt.rect(t,x)},n}var Eae=z(()=>{"use strict";jt();St();Xt();Kt();Ht();Wt();o(Sae,"cloud")});async function Aae(e,t){let{labelStyles:r,nodeStyles:i}=ct(t);t.labelStyle=r;let{shapeSvg:n,bbox:a,halfPadding:s,label:l}=await At(e,t,Ct(t)),u=a.width+8*s,h=a.height+2*s,d=5,f=t.look==="neo"?`
+ M${-u/2} ${h/2-d}
+ v${-h+2*d}
+ q0,-${d} ${d},-${d}
+ h${u-2*d}
+ q${d},0 ${d},${d}
+ v${h-d}
+ H${-u/2}
+ Z
+ `:`
+ M${-u/2} ${h/2-d}
+ v${-h+2*d}
+ q0,-${d} ${d},-${d}
+ h${u-2*d}
+ q${d},0 ${d},${d}
+ v${h-2*d}
+ q0,${d} ${-d},${d}
+ h${-(u-2*d)}
+ q${-d},0 ${-d},${-d}
+ Z
+ `;if(!t.domId)throw new Error(`defaultMindmapNode: node "${t.id}" is missing a domId \u2014 was render.ts domId prefixing skipped?`);let p=n.append("path").attr("id",t.domId).attr("class","node-bkg node-"+t.type).attr("style",i).attr("d",f);return n.append("line").attr("class","node-line-").attr("x1",-u/2).attr("y1",h/2).attr("x2",u/2).attr("y2",h/2),l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),n.append(()=>l.node()),ft(t,p),t.calcIntersect=function(m,g){return lt.rect(m,g)},t.intersect=function(m){return lt.rect(t,m)},n}var _ae=z(()=>{"use strict";Kt();Ht();Wt();o(Aae,"defaultMindmapNode")});async function Dae(e,t){let r={padding:t.padding??0};return $4(e,t,r)}var Rae=z(()=>{"use strict";RN();o(Dae,"mindmapCircle")});function Lae(e){return e in NN}var Fqe,$qe,NN,IN=z(()=>{"use strict";Jre();rie();nie();sie();RN();lie();uie();die();pie();gie();bie();Cie();wie();Eie();_ie();Mie();Iie();Pie();Fie();zie();Vie();qie();Hie();jie();Kie();Qie();ene();rne();nne();sne();une();dne();pne();gne();vne();bne();Cne();wne();Ene();_ne();Rne();Mne();Ine();Pne();Fne();zne();Vne();qne();Hne();jne();Qne();eae();rae();sae();lae();uae();dae();pae();vae();bae();Cae();wae();Eae();_ae();Rae();Fqe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:Lne},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:Sne},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:Nne},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:Gne},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:xie},{semanticName:"Data Store",name:"Data Store",shortName:"datastore",description:"Data flow diagram data store",aliases:["data-store"],handler:Tie},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:$4},{semanticName:"Bang",name:"Bang",shortName:"bang",description:"Bang",aliases:["bang"],handler:kae},{semanticName:"Cloud",name:"Cloud",shortName:"cloud",description:"cloud",aliases:["cloud"],handler:Sae},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:xne},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:Bie},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:ine},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:tne},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:Jne},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:Zie},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:Sie},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:Yne},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:iie},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:Ane},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:$ne},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:Bne},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:Nie},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:$ie},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:cie},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:hie},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:fie},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:ane},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:oae},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:Oie},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:Zne},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:cne},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:mie},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:kie},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:aae},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:hae},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:Aie},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:tae},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:Lie},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:Dne},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:mne},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:fne},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:tie},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:oie},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:Une},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:Wne},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:cae},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:Tne},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:hne}],$qe=o(()=>{let t=[...Object.entries({state:One,choice:aie,note:yne,rectWithTitle:kne,labelRect:Jie,iconSquare:Yie,iconCircle:Wie,icon:Gie,iconRounded:Uie,imageSquare:Xie,anchor:Qre,kanbanItem:Tae,mindmapCircle:Dae,defaultMindmapNode:Aae,classBox:yae,erBox:MN,requirementBox:xae}),...Fqe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(n=>[n,r.handler]))];return Object.fromEntries(t)},"generateShapeMap"),NN=$qe();o(Lae,"isValidShape")});var zqe,V4,Mae=z(()=>{"use strict";Rr();Wx();Ut();St();IN();Xt();Ir();Ci();gp();uv();zqe="flowchart-",V4=class{constructor(){this.vertexCounter=0;this.config=ge();this.diagramId="";this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Cr;this.setAccDescription=wr;this.setDiagramTitle=Ar;this.getAccTitle=kr;this.getAccDescription=Sr;this.getDiagramTitle=Er;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(t){return vt.sanitizeText(t,this.config)}sanitizeNodeLabelType(t){switch(t){case"markdown":case"string":case"text":return t;default:return"markdown"}}setDiagramId(t){this.diagramId=t}lookUpDomId(t){for(let r of this.vertices.values())if(r.id===t)return this.diagramId?`${this.diagramId}-${r.domId}`:r.domId;return this.diagramId?`${this.diagramId}-${t}`:t}addVertex(t,r,i,n,a,s,l={},u){if(!t||t.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(`
+`)?m=u+`
+`:m=`{
+`+u+`
+}`,h=ld(m,{schema:od})}let d=this.edges.find(m=>m.id===t);if(d){let m=h;m?.animate!==void 0&&(d.animate=m.animate),m?.animation!==void 0&&(d.animation=m.animation),m?.curve!==void 0&&(d.interpolate=m.curve);return}let f,p=this.vertices.get(t);if(p===void 0&&(r===void 0&&i===void 0&&n!==void 0&&n!==null&&Z.warn(`Style applied to unknown node "${t}". This may indicate a typo. The node will be created automatically.`),p={id:t,labelType:"text",domId:zqe+t+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(t,p)),this.vertexCounter++,r!==void 0?(this.config=ge(),f=this.sanitizeText(r.text.trim()),p.labelType=r.type,f.startsWith('"')&&f.endsWith('"')&&(f=f.substring(1,f.length-1)),p.text=f):p.text===void 0&&(p.text=t),i!==void 0&&(p.type=i),n?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!Lae(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label,p.labelType=this.sanitizeNodeLabelType(h?.labelType)),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===t&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===t&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(t,r,i,n){let l={start:t,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Z.info("abc78 Got edge...",l);let u=i.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=this.sanitizeNodeLabelType(u.type)),i!==void 0&&(l.type=i.type,l.stroke=i.stroke,l.length=i.length>10?10:i.length),n&&!this.edges.some(h=>h.id===n))l.id=n,l.isUserDefinedId=!0;else{let h=this.edges.filter(d=>d.start===l.start&&d.end===l.end);h.length===0?l.id=bc(l.start,l.end,{counter:0,prefix:"L"}):l.id=bc(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Z.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.
+
+Initialize mermaid with maxEdges set to a higher number to allow more edges.
+You cannot set this config via configuration inside the diagram as it is a secure config.
+You have to call mermaid.initialize.`)}isLinkData(t){return t!==null&&typeof t=="object"&&"id"in t&&typeof t.id=="string"}addLink(t,r,i){let n=this.isLinkData(i)?i.id.replace("@",""):void 0;Z.info("addLink",t,r,n);for(let a of t)for(let s of r){let l=a===t[t.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,i,n):this.addSingleLink(a,s,i,void 0)}}updateLinkInterpolate(t,r){t.forEach(i=>{i==="default"?this.edges.defaultInterpolate=r:this.edges[i].interpolate=r})}updateLink(t,r){t.forEach(i=>{if(typeof i=="number"&&i>=this.edges.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?this.edges.defaultStyle=r:(this.edges[i].style=r,(this.edges[i]?.style?.length??0)>0&&!this.edges[i]?.style?.some(n=>n?.startsWith("fill"))&&this.edges[i]?.style?.push("fill:none"))})}addClass(t,r){let i=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");t.split(",").forEach(n=>{let a=this.classes.get(n);a===void 0&&(a={id:n,styles:[],textStyles:[]},this.classes.set(n,a)),i?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(t){this.direction=t.trim(),/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(t,r){for(let i of t.split(",")){let n=this.vertices.get(i);n&&n.classes.push(r);let a=this.edges.find(l=>l.id===i);a&&a.classes.push(r);let s=this.subGraphLookup.get(i);s&&s.classes.push(r)}}setTooltip(t,r){if(r!==void 0){r=this.sanitizeText(r);for(let i of t.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(i):i,r)}}setClickFun(t,r,i){if(ge().securityLevel!=="loose"||r===void 0)return;let n=[];if(typeof i=="string"){n=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s